typekro 0.7.0 → 0.9.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 (532) 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/compositions/typekro-runtime/typekro-runtime.d.ts +1 -1
  21. package/dist/compositions/typekro-runtime/typekro-runtime.d.ts.map +1 -1
  22. package/dist/compositions/typekro-runtime/typekro-runtime.js +39 -7
  23. package/dist/compositions/typekro-runtime/typekro-runtime.js.map +1 -1
  24. package/dist/core/composition/context.d.ts +58 -2
  25. package/dist/core/composition/context.d.ts.map +1 -1
  26. package/dist/core/composition/context.js +4 -0
  27. package/dist/core/composition/context.js.map +1 -1
  28. package/dist/core/composition/imperative.d.ts +9 -0
  29. package/dist/core/composition/imperative.d.ts.map +1 -1
  30. package/dist/core/composition/imperative.js +538 -54
  31. package/dist/core/composition/imperative.js.map +1 -1
  32. package/dist/core/composition/nested-status-cel.d.ts +34 -1
  33. package/dist/core/composition/nested-status-cel.d.ts.map +1 -1
  34. package/dist/core/composition/nested-status-cel.js +379 -41
  35. package/dist/core/composition/nested-status-cel.js.map +1 -1
  36. package/dist/core/composition-debugger.d.ts +1 -1
  37. package/dist/core/composition-debugger.d.ts.map +1 -1
  38. package/dist/core/composition-debugger.js.map +1 -1
  39. package/dist/core/constants/brands.d.ts +1 -1
  40. package/dist/core/constants/brands.d.ts.map +1 -1
  41. package/dist/core/constants/brands.js +1 -1
  42. package/dist/core/constants/brands.js.map +1 -1
  43. package/dist/core/containers/build.d.ts +4 -4
  44. package/dist/core/containers/build.d.ts.map +1 -1
  45. package/dist/core/containers/build.js +44 -16
  46. package/dist/core/containers/build.js.map +1 -1
  47. package/dist/core/containers/registries/types.d.ts +1 -1
  48. package/dist/core/containers/registries/types.d.ts.map +1 -1
  49. package/dist/core/dependencies/resolver.d.ts +19 -0
  50. package/dist/core/dependencies/resolver.d.ts.map +1 -1
  51. package/dist/core/dependencies/resolver.js +261 -1
  52. package/dist/core/dependencies/resolver.js.map +1 -1
  53. package/dist/core/deployment/client-provider-manager.d.ts +9 -3
  54. package/dist/core/deployment/client-provider-manager.d.ts.map +1 -1
  55. package/dist/core/deployment/client-provider-manager.js +12 -0
  56. package/dist/core/deployment/client-provider-manager.js.map +1 -1
  57. package/dist/core/deployment/crd-manager.d.ts +24 -0
  58. package/dist/core/deployment/crd-manager.d.ts.map +1 -1
  59. package/dist/core/deployment/crd-manager.js +79 -1
  60. package/dist/core/deployment/crd-manager.js.map +1 -1
  61. package/dist/core/deployment/deployment-state-discovery.d.ts +116 -0
  62. package/dist/core/deployment/deployment-state-discovery.d.ts.map +1 -0
  63. package/dist/core/deployment/deployment-state-discovery.js +400 -0
  64. package/dist/core/deployment/deployment-state-discovery.js.map +1 -0
  65. package/dist/core/deployment/direct-factory.d.ts +65 -6
  66. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  67. package/dist/core/deployment/direct-factory.js +551 -56
  68. package/dist/core/deployment/direct-factory.js.map +1 -1
  69. package/dist/core/deployment/engine.d.ts +64 -3
  70. package/dist/core/deployment/engine.d.ts.map +1 -1
  71. package/dist/core/deployment/engine.js +194 -27
  72. package/dist/core/deployment/engine.js.map +1 -1
  73. package/dist/core/deployment/event-filter.js +1 -1
  74. package/dist/core/deployment/event-filter.js.map +1 -1
  75. package/dist/core/deployment/event-monitor.d.ts +11 -0
  76. package/dist/core/deployment/event-monitor.d.ts.map +1 -1
  77. package/dist/core/deployment/event-monitor.js +14 -0
  78. package/dist/core/deployment/event-monitor.js.map +1 -1
  79. package/dist/core/deployment/handle-tracing.d.ts +14 -0
  80. package/dist/core/deployment/handle-tracing.d.ts.map +1 -0
  81. package/dist/core/deployment/handle-tracing.js +38 -0
  82. package/dist/core/deployment/handle-tracing.js.map +1 -0
  83. package/dist/core/deployment/kro-factory.d.ts +136 -3
  84. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  85. package/dist/core/deployment/kro-factory.js +945 -268
  86. package/dist/core/deployment/kro-factory.js.map +1 -1
  87. package/dist/core/deployment/kro-readiness.d.ts.map +1 -1
  88. package/dist/core/deployment/kro-readiness.js +21 -12
  89. package/dist/core/deployment/kro-readiness.js.map +1 -1
  90. package/dist/core/deployment/nested-composition-status.d.ts +1 -1
  91. package/dist/core/deployment/nested-composition-status.d.ts.map +1 -1
  92. package/dist/core/deployment/nested-composition-status.js +96 -53
  93. package/dist/core/deployment/nested-composition-status.js.map +1 -1
  94. package/dist/core/deployment/resource-applier.d.ts +15 -2
  95. package/dist/core/deployment/resource-applier.d.ts.map +1 -1
  96. package/dist/core/deployment/resource-applier.js +75 -25
  97. package/dist/core/deployment/resource-applier.js.map +1 -1
  98. package/dist/core/deployment/resource-tagging.d.ts +220 -0
  99. package/dist/core/deployment/resource-tagging.d.ts.map +1 -0
  100. package/dist/core/deployment/resource-tagging.js +292 -0
  101. package/dist/core/deployment/resource-tagging.js.map +1 -0
  102. package/dist/core/deployment/rollback-manager.d.ts +25 -4
  103. package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
  104. package/dist/core/deployment/rollback-manager.js +70 -57
  105. package/dist/core/deployment/rollback-manager.js.map +1 -1
  106. package/dist/core/deployment/shared-utilities.d.ts +6 -0
  107. package/dist/core/deployment/shared-utilities.d.ts.map +1 -1
  108. package/dist/core/deployment/shared-utilities.js +32 -2
  109. package/dist/core/deployment/shared-utilities.js.map +1 -1
  110. package/dist/core/deployment/singleton-owner-drift.d.ts +16 -0
  111. package/dist/core/deployment/singleton-owner-drift.d.ts.map +1 -0
  112. package/dist/core/deployment/singleton-owner-drift.js +54 -0
  113. package/dist/core/deployment/singleton-owner-drift.js.map +1 -0
  114. package/dist/core/deployment/strategies/alchemy-strategy.d.ts +3 -1
  115. package/dist/core/deployment/strategies/alchemy-strategy.d.ts.map +1 -1
  116. package/dist/core/deployment/strategies/alchemy-strategy.js +121 -18
  117. package/dist/core/deployment/strategies/alchemy-strategy.js.map +1 -1
  118. package/dist/core/deployment/strategies/base-strategy.d.ts +9 -3
  119. package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -1
  120. package/dist/core/deployment/strategies/base-strategy.js +32 -4
  121. package/dist/core/deployment/strategies/base-strategy.js.map +1 -1
  122. package/dist/core/deployment/strategies/direct-strategy.d.ts +12 -4
  123. package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
  124. package/dist/core/deployment/strategies/direct-strategy.js +112 -8
  125. package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
  126. package/dist/core/errors.d.ts +2 -2
  127. package/dist/core/errors.d.ts.map +1 -1
  128. package/dist/core/errors.js.map +1 -1
  129. package/dist/core/expressions/analysis/cache.d.ts +2 -2
  130. package/dist/core/expressions/analysis/cache.d.ts.map +1 -1
  131. package/dist/core/expressions/analysis/cache.js +4 -0
  132. package/dist/core/expressions/analysis/cache.js.map +1 -1
  133. package/dist/core/expressions/analysis/fn-toString-self-test.d.ts.map +1 -1
  134. package/dist/core/expressions/analysis/fn-toString-self-test.js +0 -1
  135. package/dist/core/expressions/analysis/fn-toString-self-test.js.map +1 -1
  136. package/dist/core/expressions/analysis/shared-types.d.ts +2 -2
  137. package/dist/core/expressions/analysis/shared-types.d.ts.map +1 -1
  138. package/dist/core/expressions/analysis/source-map.d.ts.map +1 -1
  139. package/dist/core/expressions/analysis/source-map.js +1 -0
  140. package/dist/core/expressions/analysis/source-map.js.map +1 -1
  141. package/dist/core/expressions/analysis/types.d.ts +7 -7
  142. package/dist/core/expressions/analysis/types.d.ts.map +1 -1
  143. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts +37 -3
  144. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts.map +1 -1
  145. package/dist/core/expressions/composition/composition-analyzer-helpers.js +370 -7
  146. package/dist/core/expressions/composition/composition-analyzer-helpers.js.map +1 -1
  147. package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts +2 -2
  148. package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts.map +1 -1
  149. package/dist/core/expressions/composition/composition-analyzer-ternary.js +264 -29
  150. package/dist/core/expressions/composition/composition-analyzer-ternary.js.map +1 -1
  151. package/dist/core/expressions/composition/composition-analyzer-traversal.d.ts.map +1 -1
  152. package/dist/core/expressions/composition/composition-analyzer-traversal.js +78 -6
  153. package/dist/core/expressions/composition/composition-analyzer-traversal.js.map +1 -1
  154. package/dist/core/expressions/composition/composition-analyzer-types.d.ts +60 -0
  155. package/dist/core/expressions/composition/composition-analyzer-types.d.ts.map +1 -1
  156. package/dist/core/expressions/composition/composition-analyzer.d.ts +1 -1
  157. package/dist/core/expressions/composition/composition-analyzer.d.ts.map +1 -1
  158. package/dist/core/expressions/composition/composition-analyzer.js +158 -8
  159. package/dist/core/expressions/composition/composition-analyzer.js.map +1 -1
  160. package/dist/core/expressions/composition/expression-analyzer.d.ts.map +1 -1
  161. package/dist/core/expressions/composition/expression-analyzer.js +21 -4
  162. package/dist/core/expressions/composition/expression-analyzer.js.map +1 -1
  163. package/dist/core/expressions/composition/imperative-analyzer.d.ts +1 -1
  164. package/dist/core/expressions/composition/imperative-analyzer.d.ts.map +1 -1
  165. package/dist/core/expressions/composition/imperative-analyzer.js +31 -7
  166. package/dist/core/expressions/composition/imperative-analyzer.js.map +1 -1
  167. package/dist/core/expressions/composition/scope-manager.d.ts +2 -2
  168. package/dist/core/expressions/composition/scope-manager.d.ts.map +1 -1
  169. package/dist/core/expressions/composition/scope-manager.js.map +1 -1
  170. package/dist/core/expressions/conditional/conditional-expression-processor.d.ts +3 -3
  171. package/dist/core/expressions/conditional/conditional-expression-processor.d.ts.map +1 -1
  172. package/dist/core/expressions/conditional/conditional-expression-processor.js.map +1 -1
  173. package/dist/core/expressions/conditional/conditional-integration.d.ts.map +1 -1
  174. package/dist/core/expressions/conditional/conditional-integration.js.map +1 -1
  175. package/dist/core/expressions/context/context-aware-generator.d.ts +5 -5
  176. package/dist/core/expressions/context/context-aware-generator.d.ts.map +1 -1
  177. package/dist/core/expressions/context/context-aware-generator.js.map +1 -1
  178. package/dist/core/expressions/context/context-detector.d.ts +3 -3
  179. package/dist/core/expressions/context/context-detector.d.ts.map +1 -1
  180. package/dist/core/expressions/context/context-detector.js.map +1 -1
  181. package/dist/core/expressions/context/context-validator.d.ts +6 -6
  182. package/dist/core/expressions/context/context-validator.d.ts.map +1 -1
  183. package/dist/core/expressions/context/context-validator.js +2 -2
  184. package/dist/core/expressions/context/context-validator.js.map +1 -1
  185. package/dist/core/expressions/factory/cel-conversion-engine.d.ts +4 -4
  186. package/dist/core/expressions/factory/cel-conversion-engine.d.ts.map +1 -1
  187. package/dist/core/expressions/factory/cel-conversion-engine.js.map +1 -1
  188. package/dist/core/expressions/factory/dependency-tracker.d.ts +2 -2
  189. package/dist/core/expressions/factory/dependency-tracker.d.ts.map +1 -1
  190. package/dist/core/expressions/factory/dependency-tracker.js +21 -5
  191. package/dist/core/expressions/factory/dependency-tracker.js.map +1 -1
  192. package/dist/core/expressions/factory/factory-integration.d.ts +2 -4
  193. package/dist/core/expressions/factory/factory-integration.d.ts.map +1 -1
  194. package/dist/core/expressions/factory/factory-integration.js +0 -6
  195. package/dist/core/expressions/factory/factory-integration.js.map +1 -1
  196. package/dist/core/expressions/factory/factory-pattern-handler.d.ts +3 -3
  197. package/dist/core/expressions/factory/factory-pattern-handler.d.ts.map +1 -1
  198. package/dist/core/expressions/factory/factory-pattern-handler.js +1 -0
  199. package/dist/core/expressions/factory/factory-pattern-handler.js.map +1 -1
  200. package/dist/core/expressions/factory/migration-helpers.js.map +1 -1
  201. package/dist/core/expressions/factory/resource-analyzer.d.ts +4 -4
  202. package/dist/core/expressions/factory/resource-analyzer.d.ts.map +1 -1
  203. package/dist/core/expressions/factory/resource-analyzer.js.map +1 -1
  204. package/dist/core/expressions/factory/resource-type-validator.d.ts +5 -5
  205. package/dist/core/expressions/factory/resource-type-validator.d.ts.map +1 -1
  206. package/dist/core/expressions/factory/resource-type-validator.js.map +1 -1
  207. package/dist/core/expressions/factory/status-builder-analyzer.d.ts +6 -7
  208. package/dist/core/expressions/factory/status-builder-analyzer.d.ts.map +1 -1
  209. package/dist/core/expressions/factory/status-builder-analyzer.js +0 -3
  210. package/dist/core/expressions/factory/status-builder-analyzer.js.map +1 -1
  211. package/dist/core/expressions/factory/status-builder-types.d.ts +1 -1
  212. package/dist/core/expressions/factory/status-builder-types.d.ts.map +1 -1
  213. package/dist/core/expressions/factory/status-cel-generation.d.ts +1 -1
  214. package/dist/core/expressions/factory/status-cel-generation.d.ts.map +1 -1
  215. package/dist/core/expressions/factory/status-cel-generation.js +1 -1
  216. package/dist/core/expressions/factory/status-cel-generation.js.map +1 -1
  217. package/dist/core/expressions/factory/status-field-analysis.d.ts +3 -3
  218. package/dist/core/expressions/factory/status-field-analysis.d.ts.map +1 -1
  219. package/dist/core/expressions/factory/status-field-analysis.js.map +1 -1
  220. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.d.ts +5 -5
  221. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.d.ts.map +1 -1
  222. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.js +1 -1
  223. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.js.map +1 -1
  224. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.d.ts +10 -10
  225. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.d.ts.map +1 -1
  226. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.js +5 -1
  227. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.js.map +1 -1
  228. package/dist/core/expressions/magic-proxy/magic-proxy-ast.d.ts +2 -2
  229. package/dist/core/expressions/magic-proxy/magic-proxy-ast.d.ts.map +1 -1
  230. package/dist/core/expressions/magic-proxy/magic-proxy-ast.js.map +1 -1
  231. package/dist/core/expressions/magic-proxy/magic-proxy-detector.d.ts +5 -5
  232. package/dist/core/expressions/magic-proxy/magic-proxy-detector.d.ts.map +1 -1
  233. package/dist/core/expressions/magic-proxy/magic-proxy-detector.js.map +1 -1
  234. package/dist/core/expressions/magic-proxy/magic-proxy-types.d.ts +2 -2
  235. package/dist/core/expressions/magic-proxy/magic-proxy-types.d.ts.map +1 -1
  236. package/dist/core/expressions/magic-proxy/optionality-handler.d.ts +1 -2
  237. package/dist/core/expressions/magic-proxy/optionality-handler.d.ts.map +1 -1
  238. package/dist/core/expressions/magic-proxy/optionality-handler.js +2 -15
  239. package/dist/core/expressions/magic-proxy/optionality-handler.js.map +1 -1
  240. package/dist/core/expressions/validation/compile-time-checker.d.ts +1 -1
  241. package/dist/core/expressions/validation/compile-time-checker.d.ts.map +1 -1
  242. package/dist/core/expressions/validation/compile-time-checker.js.map +1 -1
  243. package/dist/core/expressions/validation/compile-time-types.d.ts +2 -2
  244. package/dist/core/expressions/validation/compile-time-types.d.ts.map +1 -1
  245. package/dist/core/expressions/validation/kubernetes-field-types.d.ts +4 -4
  246. package/dist/core/expressions/validation/kubernetes-field-types.d.ts.map +1 -1
  247. package/dist/core/expressions/validation/kubernetes-field-types.js.map +1 -1
  248. package/dist/core/expressions/validation/resource-field-utils.d.ts +10 -10
  249. package/dist/core/expressions/validation/resource-field-utils.d.ts.map +1 -1
  250. package/dist/core/expressions/validation/resource-field-utils.js.map +1 -1
  251. package/dist/core/expressions/validation/resource-validation.d.ts +3 -3
  252. package/dist/core/expressions/validation/resource-validation.d.ts.map +1 -1
  253. package/dist/core/expressions/validation/resource-validation.js.map +1 -1
  254. package/dist/core/expressions/validation/type-inference-types.d.ts +2 -2
  255. package/dist/core/expressions/validation/type-inference-types.d.ts.map +1 -1
  256. package/dist/core/expressions/validation/type-safety.d.ts +2 -2
  257. package/dist/core/expressions/validation/type-safety.d.ts.map +1 -1
  258. package/dist/core/expressions/validation/type-safety.js +1 -0
  259. package/dist/core/expressions/validation/type-safety.js.map +1 -1
  260. package/dist/core/kubernetes/bun-api-client.js.map +1 -1
  261. package/dist/core/kubernetes/bun-http-library.d.ts.map +1 -1
  262. package/dist/core/kubernetes/bun-http-library.js +29 -3
  263. package/dist/core/kubernetes/bun-http-library.js.map +1 -1
  264. package/dist/core/kubernetes/client-provider.d.ts +12 -0
  265. package/dist/core/kubernetes/client-provider.d.ts.map +1 -1
  266. package/dist/core/kubernetes/client-provider.js +35 -0
  267. package/dist/core/kubernetes/client-provider.js.map +1 -1
  268. package/dist/core/metadata/resource-metadata.d.ts +46 -1
  269. package/dist/core/metadata/resource-metadata.d.ts.map +1 -1
  270. package/dist/core/metadata/resource-metadata.js.map +1 -1
  271. package/dist/core/proxy/create-resource.d.ts +15 -0
  272. package/dist/core/proxy/create-resource.d.ts.map +1 -1
  273. package/dist/core/proxy/create-resource.js +56 -2
  274. package/dist/core/proxy/create-resource.js.map +1 -1
  275. package/dist/core/readiness/registry.js +2 -2
  276. package/dist/core/readiness/registry.js.map +1 -1
  277. package/dist/core/references/cel-evaluator.d.ts +1 -4
  278. package/dist/core/references/cel-evaluator.d.ts.map +1 -1
  279. package/dist/core/references/cel-evaluator.js +3 -7
  280. package/dist/core/references/cel-evaluator.js.map +1 -1
  281. package/dist/core/references/cel.d.ts +70 -0
  282. package/dist/core/references/cel.d.ts.map +1 -1
  283. package/dist/core/references/cel.js +188 -8
  284. package/dist/core/references/cel.js.map +1 -1
  285. package/dist/core/references/external-refs.d.ts.map +1 -1
  286. package/dist/core/references/external-refs.js +3 -0
  287. package/dist/core/references/external-refs.js.map +1 -1
  288. package/dist/core/references/resolver.d.ts.map +1 -1
  289. package/dist/core/references/resolver.js +28 -17
  290. package/dist/core/references/resolver.js.map +1 -1
  291. package/dist/core/references/schema-proxy.d.ts +18 -10
  292. package/dist/core/references/schema-proxy.d.ts.map +1 -1
  293. package/dist/core/references/schema-proxy.js +174 -23
  294. package/dist/core/references/schema-proxy.js.map +1 -1
  295. package/dist/core/runtime-patches/crd-schema-fix.d.ts.map +1 -1
  296. package/dist/core/runtime-patches/crd-schema-fix.js +4 -1
  297. package/dist/core/runtime-patches/crd-schema-fix.js.map +1 -1
  298. package/dist/core/serialization/cel-optimizer.d.ts.map +1 -1
  299. package/dist/core/serialization/cel-optimizer.js +2 -0
  300. package/dist/core/serialization/cel-optimizer.js.map +1 -1
  301. package/dist/core/serialization/cel-references.d.ts +75 -1
  302. package/dist/core/serialization/cel-references.d.ts.map +1 -1
  303. package/dist/core/serialization/cel-references.js +723 -145
  304. package/dist/core/serialization/cel-references.js.map +1 -1
  305. package/dist/core/serialization/core.d.ts +13 -8
  306. package/dist/core/serialization/core.d.ts.map +1 -1
  307. package/dist/core/serialization/core.js +973 -12
  308. package/dist/core/serialization/core.js.map +1 -1
  309. package/dist/core/serialization/kro-post-processing.d.ts +46 -0
  310. package/dist/core/serialization/kro-post-processing.d.ts.map +1 -0
  311. package/dist/core/serialization/kro-post-processing.js +150 -0
  312. package/dist/core/serialization/kro-post-processing.js.map +1 -0
  313. package/dist/core/serialization/schema.d.ts +62 -3
  314. package/dist/core/serialization/schema.d.ts.map +1 -1
  315. package/dist/core/serialization/schema.js +819 -6
  316. package/dist/core/serialization/schema.js.map +1 -1
  317. package/dist/core/serialization/status-analysis-pipeline.d.ts +1 -1
  318. package/dist/core/serialization/status-analysis-pipeline.d.ts.map +1 -1
  319. package/dist/core/serialization/status-analysis-pipeline.js.map +1 -1
  320. package/dist/core/serialization/yaml.d.ts +3 -2
  321. package/dist/core/serialization/yaml.d.ts.map +1 -1
  322. package/dist/core/serialization/yaml.js +404 -56
  323. package/dist/core/serialization/yaml.js.map +1 -1
  324. package/dist/core/singleton/singleton.d.ts +16 -0
  325. package/dist/core/singleton/singleton.d.ts.map +1 -0
  326. package/dist/core/singleton/singleton.js +135 -0
  327. package/dist/core/singleton/singleton.js.map +1 -0
  328. package/dist/core/types/common.d.ts +2 -2
  329. package/dist/core/types/common.d.ts.map +1 -1
  330. package/dist/core/types/composable.d.ts +1 -1
  331. package/dist/core/types/composable.d.ts.map +1 -1
  332. package/dist/core/types/deployment.d.ts +126 -6
  333. package/dist/core/types/deployment.d.ts.map +1 -1
  334. package/dist/core/types/deployment.js +1 -1
  335. package/dist/core/types/deployment.js.map +1 -1
  336. package/dist/core/types/kubernetes.d.ts +25 -17
  337. package/dist/core/types/kubernetes.d.ts.map +1 -1
  338. package/dist/core/types/references.d.ts +1 -1
  339. package/dist/core/types/references.d.ts.map +1 -1
  340. package/dist/core/types/references.js.map +1 -1
  341. package/dist/core/types/resource-graph.d.ts +1 -1
  342. package/dist/core/types/resource-graph.d.ts.map +1 -1
  343. package/dist/core/types/schema.d.ts +1 -1
  344. package/dist/core/types/schema.d.ts.map +1 -1
  345. package/dist/core/types/serialization.d.ts +62 -6
  346. package/dist/core/types/serialization.d.ts.map +1 -1
  347. package/dist/core/validation/cel-validator.d.ts +15 -2
  348. package/dist/core/validation/cel-validator.d.ts.map +1 -1
  349. package/dist/core/validation/cel-validator.js +144 -63
  350. package/dist/core/validation/cel-validator.js.map +1 -1
  351. package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts +2 -41
  352. package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts.map +1 -1
  353. package/dist/factories/apisix/compositions/apisix-bootstrap.js +262 -217
  354. package/dist/factories/apisix/compositions/apisix-bootstrap.js.map +1 -1
  355. package/dist/factories/apisix/index.d.ts +2 -2
  356. package/dist/factories/apisix/index.js +2 -2
  357. package/dist/factories/apisix/resources/helm.d.ts +2 -2
  358. package/dist/factories/apisix/resources/helm.d.ts.map +1 -1
  359. package/dist/factories/apisix/resources/helm.js.map +1 -1
  360. package/dist/factories/apisix/types.d.ts +21 -11
  361. package/dist/factories/apisix/types.d.ts.map +1 -1
  362. package/dist/factories/apisix/types.js +106 -4
  363. package/dist/factories/apisix/types.js.map +1 -1
  364. package/dist/factories/apisix/utils/admin-credentials.d.ts +5 -3
  365. package/dist/factories/apisix/utils/admin-credentials.d.ts.map +1 -1
  366. package/dist/factories/apisix/utils/admin-credentials.js +14 -10
  367. package/dist/factories/apisix/utils/admin-credentials.js.map +1 -1
  368. package/dist/factories/apisix/utils/helm-values-mapper.d.ts.map +1 -1
  369. package/dist/factories/apisix/utils/helm-values-mapper.js +4 -2
  370. package/dist/factories/apisix/utils/helm-values-mapper.js.map +1 -1
  371. package/dist/factories/cert-manager/resources/challenges.js.map +1 -1
  372. package/dist/factories/cert-manager/types.d.ts +3 -3
  373. package/dist/factories/cert-manager/types.d.ts.map +1 -1
  374. package/dist/factories/cilium/compositions/cilium-bootstrap.d.ts +4 -4
  375. package/dist/factories/cilium/types.d.ts +3 -3
  376. package/dist/factories/cilium/types.d.ts.map +1 -1
  377. package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts +1 -0
  378. package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts.map +1 -1
  379. package/dist/factories/cnpg/compositions/cnpg-bootstrap.js +48 -0
  380. package/dist/factories/cnpg/compositions/cnpg-bootstrap.js.map +1 -1
  381. package/dist/factories/cnpg/resources/cluster.js +1 -1
  382. package/dist/factories/cnpg/resources/cluster.js.map +1 -1
  383. package/dist/factories/cnpg/resources/helm.d.ts.map +1 -1
  384. package/dist/factories/cnpg/resources/helm.js +1 -0
  385. package/dist/factories/cnpg/resources/helm.js.map +1 -1
  386. package/dist/factories/cnpg/resources/pooler.js +1 -1
  387. package/dist/factories/cnpg/resources/pooler.js.map +1 -1
  388. package/dist/factories/cnpg/types.d.ts +9 -8
  389. package/dist/factories/cnpg/types.d.ts.map +1 -1
  390. package/dist/factories/cnpg/types.js +11 -0
  391. package/dist/factories/cnpg/types.js.map +1 -1
  392. package/dist/factories/external-dns/compositions/external-dns-bootstrap.d.ts.map +1 -1
  393. package/dist/factories/external-dns/compositions/external-dns-bootstrap.js +153 -41
  394. package/dist/factories/external-dns/compositions/external-dns-bootstrap.js.map +1 -1
  395. package/dist/factories/external-dns/resources/dns-endpoint.js +1 -1
  396. package/dist/factories/external-dns/resources/dns-endpoint.js.map +1 -1
  397. package/dist/factories/external-dns/resources/helm.d.ts +1 -1
  398. package/dist/factories/external-dns/resources/helm.d.ts.map +1 -1
  399. package/dist/factories/external-dns/resources/helm.js +17 -10
  400. package/dist/factories/external-dns/resources/helm.js.map +1 -1
  401. package/dist/factories/external-dns/types.d.ts +5 -2
  402. package/dist/factories/external-dns/types.d.ts.map +1 -1
  403. package/dist/factories/external-dns/types.js.map +1 -1
  404. package/dist/factories/flux/git-repository.d.ts.map +1 -1
  405. package/dist/factories/flux/git-repository.js +1 -1
  406. package/dist/factories/flux/git-repository.js.map +1 -1
  407. package/dist/factories/flux/kustomize/kustomization.d.ts +2 -2
  408. package/dist/factories/flux/kustomize/kustomization.d.ts.map +1 -1
  409. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts +1 -1
  410. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts.map +1 -1
  411. package/dist/factories/flux/kustomize/readiness-evaluators.js +1 -1
  412. package/dist/factories/flux/kustomize/readiness-evaluators.js.map +1 -1
  413. package/dist/factories/helm/helm-release.d.ts +3 -2
  414. package/dist/factories/helm/helm-release.d.ts.map +1 -1
  415. package/dist/factories/helm/helm-release.js +1 -0
  416. package/dist/factories/helm/helm-release.js.map +1 -1
  417. package/dist/factories/helm/helm-repository.d.ts +1 -1
  418. package/dist/factories/helm/helm-repository.d.ts.map +1 -1
  419. package/dist/factories/helm/helm-repository.js +6 -4
  420. package/dist/factories/helm/helm-repository.js.map +1 -1
  421. package/dist/factories/helm/readiness-evaluators.d.ts +6 -6
  422. package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
  423. package/dist/factories/helm/readiness-evaluators.js +15 -9
  424. package/dist/factories/helm/readiness-evaluators.js.map +1 -1
  425. package/dist/factories/helm/types.d.ts +5 -1
  426. package/dist/factories/helm/types.d.ts.map +1 -1
  427. package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts +1 -0
  428. package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts.map +1 -1
  429. package/dist/factories/inngest/compositions/inngest-bootstrap.js +4 -3
  430. package/dist/factories/inngest/compositions/inngest-bootstrap.js.map +1 -1
  431. package/dist/factories/inngest/resources/helm.js +1 -1
  432. package/dist/factories/inngest/resources/helm.js.map +1 -1
  433. package/dist/factories/inngest/types.d.ts +5 -4
  434. package/dist/factories/inngest/types.d.ts.map +1 -1
  435. package/dist/factories/inngest/types.js +2 -0
  436. package/dist/factories/inngest/types.js.map +1 -1
  437. package/dist/factories/kro/kro-custom-resource.js +1 -1
  438. package/dist/factories/kro/kro-custom-resource.js.map +1 -1
  439. package/dist/factories/kubernetes/config/config-map.d.ts +2 -2
  440. package/dist/factories/kubernetes/config/config-map.d.ts.map +1 -1
  441. package/dist/factories/kubernetes/config/secret.d.ts +2 -2
  442. package/dist/factories/kubernetes/config/secret.d.ts.map +1 -1
  443. package/dist/factories/kubernetes/config/secret.js +11 -1
  444. package/dist/factories/kubernetes/config/secret.js.map +1 -1
  445. package/dist/factories/kubernetes/networking/service.js +1 -1
  446. package/dist/factories/kubernetes/networking/service.js.map +1 -1
  447. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -1
  448. package/dist/factories/kubernetes/yaml/yaml-directory.js +9 -0
  449. package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -1
  450. package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -1
  451. package/dist/factories/kubernetes/yaml/yaml-file.js +9 -0
  452. package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -1
  453. package/dist/factories/pebble/resources/helm.js.map +1 -1
  454. package/dist/factories/pebble/types.d.ts +2 -2
  455. package/dist/factories/searxng/compositions/index.d.ts +2 -0
  456. package/dist/factories/searxng/compositions/index.d.ts.map +1 -0
  457. package/dist/factories/searxng/compositions/index.js +2 -0
  458. package/dist/factories/searxng/compositions/index.js.map +1 -0
  459. package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts +66 -0
  460. package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts.map +1 -0
  461. package/dist/factories/searxng/compositions/searxng-bootstrap.js +275 -0
  462. package/dist/factories/searxng/compositions/searxng-bootstrap.js.map +1 -0
  463. package/dist/factories/searxng/index.d.ts +29 -0
  464. package/dist/factories/searxng/index.d.ts.map +1 -0
  465. package/dist/factories/searxng/index.js +27 -0
  466. package/dist/factories/searxng/index.js.map +1 -0
  467. package/dist/factories/searxng/resources/index.d.ts +2 -0
  468. package/dist/factories/searxng/resources/index.d.ts.map +1 -0
  469. package/dist/factories/searxng/resources/index.js +2 -0
  470. package/dist/factories/searxng/resources/index.js.map +1 -0
  471. package/dist/factories/searxng/resources/searxng.d.ts +65 -0
  472. package/dist/factories/searxng/resources/searxng.d.ts.map +1 -0
  473. package/dist/factories/searxng/resources/searxng.js +188 -0
  474. package/dist/factories/searxng/resources/searxng.js.map +1 -0
  475. package/dist/factories/searxng/types.d.ts +127 -0
  476. package/dist/factories/searxng/types.d.ts.map +1 -0
  477. package/dist/factories/searxng/types.js +177 -0
  478. package/dist/factories/searxng/types.js.map +1 -0
  479. package/dist/factories/searxng/utils/settings-builder.d.ts +47 -0
  480. package/dist/factories/searxng/utils/settings-builder.d.ts.map +1 -0
  481. package/dist/factories/searxng/utils/settings-builder.js +53 -0
  482. package/dist/factories/searxng/utils/settings-builder.js.map +1 -0
  483. package/dist/factories/simple/config/config-map.d.ts +2 -2
  484. package/dist/factories/simple/config/config-map.d.ts.map +1 -1
  485. package/dist/factories/simple/config/secret.d.ts +2 -2
  486. package/dist/factories/simple/config/secret.d.ts.map +1 -1
  487. package/dist/factories/simple/config/secret.js +28 -0
  488. package/dist/factories/simple/config/secret.js.map +1 -1
  489. package/dist/factories/simple/helm/index.d.ts +1 -1
  490. package/dist/factories/simple/helm/index.d.ts.map +1 -1
  491. package/dist/factories/simple/helm/index.js.map +1 -1
  492. package/dist/factories/simple/storage/persistent-volume.js.map +1 -1
  493. package/dist/factories/simple/types.d.ts +11 -1
  494. package/dist/factories/simple/types.d.ts.map +1 -1
  495. package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
  496. package/dist/factories/simple/workloads/deployment.js +3 -0
  497. package/dist/factories/simple/workloads/deployment.js.map +1 -1
  498. package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts +1 -0
  499. package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts.map +1 -1
  500. package/dist/factories/valkey/compositions/valkey-bootstrap.js +116 -0
  501. package/dist/factories/valkey/compositions/valkey-bootstrap.js.map +1 -1
  502. package/dist/factories/valkey/resources/valkey.js +1 -1
  503. package/dist/factories/valkey/resources/valkey.js.map +1 -1
  504. package/dist/factories/valkey/types.d.ts +6 -5
  505. package/dist/factories/valkey/types.d.ts.map +1 -1
  506. package/dist/factories/valkey/types.js +10 -0
  507. package/dist/factories/valkey/types.js.map +1 -1
  508. package/dist/factories/webapp/compositions/web-app-with-processing.d.ts +95 -12
  509. package/dist/factories/webapp/compositions/web-app-with-processing.d.ts.map +1 -1
  510. package/dist/factories/webapp/compositions/web-app-with-processing.js +185 -26
  511. package/dist/factories/webapp/compositions/web-app-with-processing.js.map +1 -1
  512. package/dist/factories/webapp/index.d.ts +3 -4
  513. package/dist/factories/webapp/index.d.ts.map +1 -1
  514. package/dist/factories/webapp/index.js +3 -4
  515. package/dist/factories/webapp/index.js.map +1 -1
  516. package/dist/factories/webapp/types.d.ts +60 -2
  517. package/dist/factories/webapp/types.d.ts.map +1 -1
  518. package/dist/factories/webapp/types.js +80 -3
  519. package/dist/factories/webapp/types.js.map +1 -1
  520. package/dist/index.d.ts +2 -0
  521. package/dist/index.d.ts.map +1 -1
  522. package/dist/index.js +1 -0
  523. package/dist/index.js.map +1 -1
  524. package/dist/shared/brands.d.ts +18 -8
  525. package/dist/shared/brands.d.ts.map +1 -1
  526. package/dist/shared/brands.js +19 -9
  527. package/dist/shared/brands.js.map +1 -1
  528. package/dist/utils/cel-escape.d.ts +12 -0
  529. package/dist/utils/cel-escape.d.ts.map +1 -0
  530. package/dist/utils/cel-escape.js +19 -0
  531. package/dist/utils/cel-escape.js.map +1 -0
  532. 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.
@@ -63,24 +65,31 @@ function readTemplateOverrides(resource) {
63
65
  * Convert a single includeWhen value to a CEL expression string.
64
66
  *
65
67
  * Accepted input types:
66
- * - KubernetesRef proxy → `${schema.spec.field}`
67
- * - CelExpression object `${expression}`
68
+ * - KubernetesRef proxy → `${schema.spec.field}` — the field's value is
69
+ * used as the boolean condition. This is the semantics of the explicit
70
+ * `.withIncludeWhen(spec.boolField)` API: the caller is being deliberate
71
+ * about the field they want as the test. Callers who need a presence
72
+ * check on an optional field should use `Cel.has(ref)` explicitly, or
73
+ * write `if (spec.optional)` in the composition body (which the AST
74
+ * analyzer rewrites to `has(...)` automatically based on the schema).
75
+ * - CelExpression object → `${expression}` — use Cel.has / Cel.not /
76
+ * Cel.expr to build explicit conditions.
68
77
  * - string (already CEL) → pass-through
69
78
  * - string with __KUBERNETES_REF__ markers → convert markers to CEL
70
79
  */
71
- function convertIncludeWhenValueToCel(value) {
80
+ function convertIncludeWhenValueToCel(value, context) {
72
81
  if (typeof value === 'string') {
73
82
  if (value.includes('__KUBERNETES_REF_')) {
74
- return convertRefMarkersInString(value);
83
+ return `\${${convertRefMarkersInString(value, context)}}`;
75
84
  }
76
85
  return value;
77
86
  }
78
87
  if (isKubernetesRef(value)) {
79
- const celPath = getInnerCelPath(value);
88
+ const celPath = normalizeRefMarkersToCelPaths(getInnerCelPath(value), context);
80
89
  return `\${${celPath}}`;
81
90
  }
82
91
  if (isCelExpression(value)) {
83
- return `\${${value.expression}}`;
92
+ return `\${${normalizeRefMarkersToCelPaths(value.expression, context)}}`;
84
93
  }
85
94
  // Fallback — coerce to string
86
95
  if (value !== undefined && value !== null) {
@@ -96,13 +105,13 @@ function convertIncludeWhenValueToCel(value) {
96
105
  * - An array of the above
97
106
  * - undefined (no condition)
98
107
  */
99
- function resolveIncludeWhen(raw) {
108
+ function resolveIncludeWhen(raw, context) {
100
109
  if (raw === undefined || raw === null)
101
110
  return undefined;
102
111
  const items = Array.isArray(raw) ? raw : [raw];
103
112
  const celStrings = [];
104
113
  for (const item of items) {
105
- const cel = convertIncludeWhenValueToCel(item);
114
+ const cel = convertIncludeWhenValueToCel(item, context);
106
115
  if (cel)
107
116
  celStrings.push(cel);
108
117
  }
@@ -111,6 +120,109 @@ function resolveIncludeWhen(raw) {
111
120
  // ---------------------------------------------------------------------------
112
121
  // readyWhen → CEL conversion
113
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
+ }
114
226
  /**
115
227
  * Convert a readyWhen callback function to a CEL expression string by parsing its source.
116
228
  *
@@ -163,17 +275,10 @@ function convertReadyWhenCallbackToCel(fn, resourceId) {
163
275
  // JS → CEL operator conversions (must happen before inner callback processing)
164
276
  celExpr = celExpr.replace(/===/g, '==');
165
277
  celExpr = celExpr.replace(/!==/g, '!=');
166
- // Convert JS arrow function callbacks inside .exists(), .filter(), .all(), .map()
167
- // Pattern: .exists((c) => c.type === 'Ready' && c.status === 'True')
168
- // .exists(c, c.type == "Ready" && c.status == "True")
169
- 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) => {
170
- let cleanBody = innerBody.trim();
171
- // Fix operators in inner body too
172
- cleanBody = cleanBody.replace(/===/g, '==').replace(/!==/g, '!=');
173
- // Convert single quotes to double quotes for string literals
174
- cleanBody = cleanBody.replace(/'([^']+)'/g, '"$1"');
175
- return `.${method}(${innerParam}, ${cleanBody})`;
176
- });
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);
177
282
  // Convert remaining single-quoted strings to double-quoted for CEL
178
283
  celExpr = celExpr.replace(/'([^']+)'/g, '"$1"');
179
284
  return celExpr;
@@ -187,7 +292,7 @@ function convertReadyWhenCallbackToCel(fn, resourceId) {
187
292
  * - CelExpression object → `${expression}`
188
293
  * - string (already CEL) → pass-through
189
294
  */
190
- function convertReadyWhenValueToCel(value, resourceId, hasForEach) {
295
+ function convertReadyWhenValueToCel(value, resourceId, hasForEach, context) {
191
296
  // Callback function — parse source to extract CEL expression
192
297
  if (typeof value === 'function') {
193
298
  const baseId = hasForEach ? 'each' : resourceId;
@@ -195,15 +300,16 @@ function convertReadyWhenValueToCel(value, resourceId, hasForEach) {
195
300
  return `\${${celExpr}}`;
196
301
  }
197
302
  if (isKubernetesRef(value)) {
198
- const celPath = getInnerCelPath(value);
303
+ const celPath = normalizeRefMarkersToCelPaths(getInnerCelPath(value), context);
199
304
  return `\${${celPath}}`;
200
305
  }
201
306
  if (isCelExpression(value)) {
202
- return `\${${value.expression}}`;
307
+ return `\${${normalizeRefMarkersToCelPaths(value.expression, context)}}`;
203
308
  }
204
309
  if (typeof value === 'string') {
205
310
  if (value.includes('__KUBERNETES_REF_')) {
206
- return `\${${convertRefMarkersInString(value)}}`;
311
+ const converted = convertRefMarkersInString(value, context);
312
+ return converted.includes('${') ? converted : `\${${converted}}`;
207
313
  }
208
314
  return value;
209
315
  }
@@ -215,13 +321,13 @@ function convertReadyWhenValueToCel(value, resourceId, hasForEach) {
215
321
  /**
216
322
  * Resolve the readyWhen property from an Enhanced resource to an array of CEL strings.
217
323
  */
218
- function resolveReadyWhen(raw, resourceId, hasForEach) {
324
+ function resolveReadyWhen(raw, resourceId, hasForEach, context) {
219
325
  if (raw === undefined || raw === null)
220
326
  return undefined;
221
327
  const items = Array.isArray(raw) ? raw : [raw];
222
328
  const celStrings = [];
223
329
  for (const item of items) {
224
- const cel = convertReadyWhenValueToCel(item, resourceId, hasForEach);
330
+ const cel = convertReadyWhenValueToCel(item, resourceId, hasForEach, context);
225
331
  if (cel)
226
332
  celStrings.push(cel);
227
333
  }
@@ -236,16 +342,8 @@ function resolveReadyWhen(raw, resourceId, hasForEach) {
236
342
  * Input: "__KUBERNETES_REF_web_status.readyReplicas__ > 0"
237
343
  * Output: "web.status.readyReplicas > 0"
238
344
  */
239
- function convertRefMarkersInString(str) {
240
- // Pattern: __KUBERNETES_REF_{resourceId}_{fieldPath}__
241
- // For schema: __KUBERNETES_REF___schema___{fieldPath}__
242
- const refPattern = /__KUBERNETES_REF_(__schema__|[^_]+)_([a-zA-Z0-9.$]+)__/g;
243
- return str.replace(refPattern, (_match, resourceId, fieldPath) => {
244
- if (resourceId === '__schema__') {
245
- return `schema.${fieldPath}`;
246
- }
247
- return `${resourceId}.${fieldPath}`;
248
- });
345
+ function convertRefMarkersInString(str, context) {
346
+ return normalizeRefMarkersToCelPaths(str, context);
249
347
  }
250
348
  // ---------------------------------------------------------------------------
251
349
  // forEach $item sentinel substitution
@@ -295,6 +393,130 @@ function substituteForEachSentinels(template, basePath, varName) {
295
393
  // Primitives (number, boolean, null, undefined) pass through unchanged
296
394
  return template;
297
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
+ }
298
520
  // ---------------------------------------------------------------------------
299
521
  // Template override application
300
522
  // ---------------------------------------------------------------------------
@@ -309,32 +531,89 @@ function substituteForEachSentinels(template, basePath, varName) {
309
531
  * @param template - The processed template object (after processResourceReferences)
310
532
  * @param overrides - Array of {propertyPath, celExpression} overrides
311
533
  */
312
- function applyTemplateOverrides(template, overrides) {
534
+ function applyTemplateOverrides(template, overrides, context) {
313
535
  for (const { propertyPath, celExpression } of overrides) {
314
536
  const parts = propertyPath.split('.');
315
537
  let target = template;
316
- // 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.
317
541
  for (let i = 0; i < parts.length - 1; i++) {
318
542
  const part = parts[i];
319
543
  if (!part)
320
544
  continue;
321
- const next = target[part];
322
- 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') {
323
551
  target = next;
324
552
  }
325
553
  else {
326
- // Path doesn't exist in the template — skip this override
327
- target = undefined;
328
- 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;
329
567
  }
330
568
  }
331
569
  if (!target)
332
570
  continue;
333
571
  const lastKey = parts[parts.length - 1];
334
- if (lastKey && lastKey in target) {
335
- 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
+ }
580
+ }
581
+ }
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));
336
600
  }
337
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;
338
617
  }
339
618
  // ---------------------------------------------------------------------------
340
619
  // Resource entry builder
@@ -350,6 +629,10 @@ function applyTemplateOverrides(template, overrides) {
350
629
  function buildResourceEntry(id, resource, context) {
351
630
  const isExternalRef = readNonEnumerable(resource, '__externalRef');
352
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
+ }
353
636
  // externalRef resources: emit externalRef metadata, NOT template.
354
637
  // Use Object.getOwnPropertyDescriptor to bypass the Enhanced proxy's get trap
355
638
  // and read the actual underlying values. Going through the proxy would cause
@@ -362,20 +645,24 @@ function buildResourceEntry(id, resource, context) {
362
645
  // Process marker strings in metadata values to convert them to CEL expressions.
363
646
  // externalRef metadata.name may contain __KUBERNETES_REF__ markers from template
364
647
  // literals (e.g., `${spec.name}-db-${dbOwner}`).
365
- const rawName = typeof rawMeta?.name === 'string' ? rawMeta.name : '';
366
- 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);
367
652
  const extRef = {
368
653
  apiVersion: String(apiVersionDesc?.value ?? ''),
369
654
  kind: String(kindDesc?.value ?? ''),
370
655
  metadata: {
371
- name: String(processResourceReferences(rawName)),
372
- ...(rawNamespace && { namespace: String(processResourceReferences(rawNamespace)) }),
656
+ name: String(processedName ?? ''),
657
+ ...(rawNamespace !== undefined && processedNamespace !== undefined && {
658
+ namespace: String(processedNamespace),
659
+ }),
373
660
  },
374
661
  };
375
662
  const entry = { id, externalRef: extRef };
376
663
  // externalRef can still have includeWhen (but NOT forEach — mutually exclusive)
377
664
  const rawIncludeWhen = readIncludeWhen(resource);
378
- const includeWhen = resolveIncludeWhen(rawIncludeWhen);
665
+ const includeWhen = resolveIncludeWhen(rawIncludeWhen, context);
379
666
  if (includeWhen) {
380
667
  entry.includeWhen = includeWhen;
381
668
  }
@@ -412,24 +699,59 @@ function buildResourceEntry(id, resource, context) {
412
699
  }
413
700
  }
414
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
+ }
415
711
  // Template overrides — ternary expressions in factory args that evaluated to
416
712
  // literals at runtime but should be CEL conditionals in the output.
417
713
  const templateOverrides = readTemplateOverrides(resource);
418
714
  if (templateOverrides && templateOverrides.length > 0 && entry.template) {
419
- applyTemplateOverrides(entry.template, templateOverrides);
715
+ applyTemplateOverrides(entry.template, templateOverrides, context);
420
716
  }
421
717
  // includeWhen — conditional resource creation (convert raw values to CEL)
422
718
  const rawIncludeWhen = readIncludeWhen(resource);
423
- const includeWhen = resolveIncludeWhen(rawIncludeWhen);
719
+ const includeWhen = resolveIncludeWhen(rawIncludeWhen, context);
424
720
  if (includeWhen) {
425
721
  entry.includeWhen = includeWhen;
426
722
  }
427
723
  // readyWhen — resource readiness conditions (convert callbacks/refs to CEL)
428
724
  const rawReadyWhen = readReadyWhen(resource);
429
- const readyWhen = resolveReadyWhen(rawReadyWhen, id, hasForEach);
725
+ const readyWhen = resolveReadyWhen(rawReadyWhen, id, hasForEach, context);
430
726
  if (readyWhen) {
431
727
  entry.readyWhen = readyWhen;
432
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
+ }
433
755
  return entry;
434
756
  }
435
757
  // ---------------------------------------------------------------------------
@@ -438,7 +760,7 @@ function buildResourceEntry(id, resource, context) {
438
760
  /**
439
761
  * Serializes resources to Kro YAML (ResourceGraphDefinition).
440
762
  *
441
- * Supports Kro v0.8.x features:
763
+ * Supports Kro 0.9.1+ features:
442
764
  * - externalRef: Resources marked with __externalRef emit `externalRef` instead of `template`
443
765
  * - includeWhen: Non-enumerable includeWhen arrays are emitted per resource
444
766
  * - readyWhen: Non-enumerable readyWhen arrays are emitted per resource
@@ -447,21 +769,45 @@ function buildResourceEntry(id, resource, context) {
447
769
  * - allowBreakingChanges: Emits annotation on RGD metadata
448
770
  */
449
771
  export function serializeResourceGraphToYaml(name, resources, options, customSchema) {
772
+ // Extract optional-field omit list from schema metadata (if present).
773
+ // These fields get `has() ? ... : omit()` wrapping applied inline during
774
+ // ref-to-CEL conversion — no post-hoc YAML-string rewriting needed.
775
+ const schemaWithMeta = customSchema;
776
+ const omitFieldsList = schemaWithMeta?.__omitFields;
777
+ const omitFields = omitFieldsList && omitFieldsList.length > 0
778
+ ? new Set(omitFieldsList)
779
+ : undefined;
450
780
  // Create serialization context
781
+ const nestedStatusCel = schemaWithMeta?.__nestedStatusCel;
451
782
  const context = {
452
783
  celPrefix: 'resources', // Default Kro prefix, but now configurable
453
784
  ...(options?.namespace && { namespace: options.namespace }),
454
785
  resourceIdStrategy: 'deterministic',
786
+ ...(omitFields && { omitFields }),
787
+ ...(nestedStatusCel && { nestedStatusCel }),
455
788
  };
456
789
  // 1. Use embedded resource IDs and build dependency graph
457
790
  const resourceMap = new Map();
458
791
  const dependencies = [];
792
+ const resourceAliases = new Map();
459
793
  // 2. Process each resource and extract references
460
794
  for (const [resourceName, resource] of Object.entries(resources)) {
461
795
  // Use the embedded resource ID if available, otherwise generate deterministic one
462
796
  const resourceId = getResourceId(resource) ||
463
797
  generateDeterministicResourceId(resource.kind || 'Resource', resource.metadata?.name || resourceName, resource.metadata?.namespace || options?.namespace);
464
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
+ }
465
811
  // Extract all ResourceReference objects from the resource
466
812
  const refs = extractResourceReferences(resource);
467
813
  for (const ref of refs) {
@@ -473,10 +819,12 @@ export function serializeResourceGraphToYaml(name, resources, options, customSch
473
819
  });
474
820
  }
475
821
  }
822
+ const knownResourceIds = new Set(Array.from(resourceMap.values(), ({ id }) => id));
823
+ context.resourceIds = knownResourceIds;
824
+ context.resourceAliases = resourceAliases;
476
825
  // 3. Build metadata with optional annotations
477
826
  const metadata = {
478
827
  name,
479
- namespace: options?.namespace || 'default',
480
828
  };
481
829
  if (options?.allowBreakingChanges) {
482
830
  metadata.annotations = {