typekro 0.5.0 → 0.8.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 (345) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/compositions/typekro-runtime/typekro-runtime.d.ts +1 -1
  3. package/dist/compositions/typekro-runtime/typekro-runtime.d.ts.map +1 -1
  4. package/dist/compositions/typekro-runtime/typekro-runtime.js +16 -2
  5. package/dist/compositions/typekro-runtime/typekro-runtime.js.map +1 -1
  6. package/dist/core/composition/context.d.ts +14 -0
  7. package/dist/core/composition/context.d.ts.map +1 -1
  8. package/dist/core/composition/context.js.map +1 -1
  9. package/dist/core/composition/imperative.d.ts.map +1 -1
  10. package/dist/core/composition/imperative.js +59 -30
  11. package/dist/core/composition/imperative.js.map +1 -1
  12. package/dist/core/composition/nested-status-cel.d.ts +50 -0
  13. package/dist/core/composition/nested-status-cel.d.ts.map +1 -0
  14. package/dist/core/composition/nested-status-cel.js +169 -0
  15. package/dist/core/composition/nested-status-cel.js.map +1 -0
  16. package/dist/core/constants/brands.d.ts +1 -1
  17. package/dist/core/constants/brands.d.ts.map +1 -1
  18. package/dist/core/constants/brands.js +1 -1
  19. package/dist/core/constants/brands.js.map +1 -1
  20. package/dist/core/containers/build.d.ts +50 -0
  21. package/dist/core/containers/build.d.ts.map +1 -0
  22. package/dist/core/containers/build.js +146 -0
  23. package/dist/core/containers/build.js.map +1 -0
  24. package/dist/core/containers/errors.d.ts +14 -0
  25. package/dist/core/containers/errors.d.ts.map +1 -0
  26. package/dist/core/containers/errors.js +48 -0
  27. package/dist/core/containers/errors.js.map +1 -0
  28. package/dist/core/containers/exec.d.ts +36 -0
  29. package/dist/core/containers/exec.d.ts.map +1 -0
  30. package/dist/core/containers/exec.js +110 -0
  31. package/dist/core/containers/exec.js.map +1 -0
  32. package/dist/core/containers/index.d.ts +21 -0
  33. package/dist/core/containers/index.d.ts.map +1 -0
  34. package/dist/core/containers/index.js +20 -0
  35. package/dist/core/containers/index.js.map +1 -0
  36. package/dist/core/containers/registries/ecr.d.ts +22 -0
  37. package/dist/core/containers/registries/ecr.d.ts.map +1 -0
  38. package/dist/core/containers/registries/ecr.js +118 -0
  39. package/dist/core/containers/registries/ecr.js.map +1 -0
  40. package/dist/core/containers/registries/index.d.ts +9 -0
  41. package/dist/core/containers/registries/index.d.ts.map +1 -0
  42. package/dist/core/containers/registries/index.js +23 -0
  43. package/dist/core/containers/registries/index.js.map +1 -0
  44. package/dist/core/containers/registries/orbstack.d.ts +14 -0
  45. package/dist/core/containers/registries/orbstack.d.ts.map +1 -0
  46. package/dist/core/containers/registries/orbstack.js +24 -0
  47. package/dist/core/containers/registries/orbstack.js.map +1 -0
  48. package/dist/core/containers/registries/types.d.ts +94 -0
  49. package/dist/core/containers/registries/types.d.ts.map +1 -0
  50. package/dist/core/containers/registries/types.js +11 -0
  51. package/dist/core/containers/registries/types.js.map +1 -0
  52. package/dist/core/dependencies/graph.d.ts +4 -0
  53. package/dist/core/dependencies/graph.d.ts.map +1 -1
  54. package/dist/core/dependencies/graph.js +6 -0
  55. package/dist/core/dependencies/graph.js.map +1 -1
  56. package/dist/core/dependencies/resolver.d.ts +28 -0
  57. package/dist/core/dependencies/resolver.d.ts.map +1 -1
  58. package/dist/core/dependencies/resolver.js +138 -5
  59. package/dist/core/dependencies/resolver.js.map +1 -1
  60. package/dist/core/deployment/direct-factory.d.ts +13 -0
  61. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  62. package/dist/core/deployment/direct-factory.js +99 -0
  63. package/dist/core/deployment/direct-factory.js.map +1 -1
  64. package/dist/core/deployment/engine.d.ts.map +1 -1
  65. package/dist/core/deployment/engine.js +45 -2
  66. package/dist/core/deployment/engine.js.map +1 -1
  67. package/dist/core/deployment/kro-factory.d.ts +28 -0
  68. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  69. package/dist/core/deployment/kro-factory.js +243 -13
  70. package/dist/core/deployment/kro-factory.js.map +1 -1
  71. package/dist/core/deployment/kro-readiness.d.ts.map +1 -1
  72. package/dist/core/deployment/kro-readiness.js +10 -1
  73. package/dist/core/deployment/kro-readiness.js.map +1 -1
  74. package/dist/core/deployment/nested-composition-status.d.ts +33 -0
  75. package/dist/core/deployment/nested-composition-status.d.ts.map +1 -0
  76. package/dist/core/deployment/nested-composition-status.js +101 -0
  77. package/dist/core/deployment/nested-composition-status.js.map +1 -0
  78. package/dist/core/deployment/readiness-waiter.d.ts.map +1 -1
  79. package/dist/core/deployment/readiness-waiter.js +23 -6
  80. package/dist/core/deployment/readiness-waiter.js.map +1 -1
  81. package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
  82. package/dist/core/deployment/rollback-manager.js +19 -0
  83. package/dist/core/deployment/rollback-manager.js.map +1 -1
  84. package/dist/core/deployment/strategies/direct-strategy.d.ts +6 -0
  85. package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
  86. package/dist/core/deployment/strategies/direct-strategy.js +133 -35
  87. package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
  88. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts +8 -2
  89. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts.map +1 -1
  90. package/dist/core/expressions/composition/composition-analyzer-helpers.js +34 -2
  91. package/dist/core/expressions/composition/composition-analyzer-helpers.js.map +1 -1
  92. package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts.map +1 -1
  93. package/dist/core/expressions/composition/composition-analyzer-ternary.js +52 -28
  94. package/dist/core/expressions/composition/composition-analyzer-ternary.js.map +1 -1
  95. package/dist/core/expressions/composition/composition-analyzer-traversal.d.ts.map +1 -1
  96. package/dist/core/expressions/composition/composition-analyzer-traversal.js +11 -4
  97. package/dist/core/expressions/composition/composition-analyzer-traversal.js.map +1 -1
  98. package/dist/core/expressions/composition/composition-analyzer-types.d.ts +8 -0
  99. package/dist/core/expressions/composition/composition-analyzer-types.d.ts.map +1 -1
  100. package/dist/core/expressions/composition/composition-analyzer.d.ts +1 -1
  101. package/dist/core/expressions/composition/composition-analyzer.d.ts.map +1 -1
  102. package/dist/core/expressions/composition/composition-analyzer.js +8 -2
  103. package/dist/core/expressions/composition/composition-analyzer.js.map +1 -1
  104. package/dist/core/expressions/composition/imperative-analyzer.d.ts +8 -0
  105. package/dist/core/expressions/composition/imperative-analyzer.d.ts.map +1 -1
  106. package/dist/core/expressions/composition/imperative-analyzer.js +111 -16
  107. package/dist/core/expressions/composition/imperative-analyzer.js.map +1 -1
  108. package/dist/core/metadata/resource-metadata.d.ts +4 -0
  109. package/dist/core/metadata/resource-metadata.d.ts.map +1 -1
  110. package/dist/core/metadata/resource-metadata.js.map +1 -1
  111. package/dist/core/proxy/create-resource.d.ts.map +1 -1
  112. package/dist/core/proxy/create-resource.js +63 -21
  113. package/dist/core/proxy/create-resource.js.map +1 -1
  114. package/dist/core/references/cel.d.ts +48 -0
  115. package/dist/core/references/cel.d.ts.map +1 -1
  116. package/dist/core/references/cel.js +82 -0
  117. package/dist/core/references/cel.js.map +1 -1
  118. package/dist/core/references/external-refs.d.ts +2 -0
  119. package/dist/core/references/external-refs.d.ts.map +1 -1
  120. package/dist/core/references/external-refs.js +3 -0
  121. package/dist/core/references/external-refs.js.map +1 -1
  122. package/dist/core/references/resolver.d.ts +12 -4
  123. package/dist/core/references/resolver.d.ts.map +1 -1
  124. package/dist/core/references/resolver.js +152 -69
  125. package/dist/core/references/resolver.js.map +1 -1
  126. package/dist/core/references/schema-proxy.d.ts.map +1 -1
  127. package/dist/core/references/schema-proxy.js +5 -4
  128. package/dist/core/references/schema-proxy.js.map +1 -1
  129. package/dist/core/serialization/cel-references.d.ts +1 -1
  130. package/dist/core/serialization/cel-references.d.ts.map +1 -1
  131. package/dist/core/serialization/cel-references.js +191 -24
  132. package/dist/core/serialization/cel-references.js.map +1 -1
  133. package/dist/core/serialization/core.d.ts +8 -1
  134. package/dist/core/serialization/core.d.ts.map +1 -1
  135. package/dist/core/serialization/core.js +434 -7
  136. package/dist/core/serialization/core.js.map +1 -1
  137. package/dist/core/serialization/kro-post-processing.d.ts +46 -0
  138. package/dist/core/serialization/kro-post-processing.d.ts.map +1 -0
  139. package/dist/core/serialization/kro-post-processing.js +103 -0
  140. package/dist/core/serialization/kro-post-processing.js.map +1 -0
  141. package/dist/core/serialization/schema.d.ts +61 -3
  142. package/dist/core/serialization/schema.d.ts.map +1 -1
  143. package/dist/core/serialization/schema.js +520 -18
  144. package/dist/core/serialization/schema.js.map +1 -1
  145. package/dist/core/serialization/status-analysis-pipeline.d.ts +4 -0
  146. package/dist/core/serialization/status-analysis-pipeline.d.ts.map +1 -1
  147. package/dist/core/serialization/status-analysis-pipeline.js +127 -10
  148. package/dist/core/serialization/status-analysis-pipeline.js.map +1 -1
  149. package/dist/core/serialization/yaml.d.ts.map +1 -1
  150. package/dist/core/serialization/yaml.js +27 -4
  151. package/dist/core/serialization/yaml.js.map +1 -1
  152. package/dist/core/types/composable.d.ts +62 -0
  153. package/dist/core/types/composable.d.ts.map +1 -0
  154. package/dist/core/types/composable.js +51 -0
  155. package/dist/core/types/composable.js.map +1 -0
  156. package/dist/core/types/deployment.d.ts +2 -1
  157. package/dist/core/types/deployment.d.ts.map +1 -1
  158. package/dist/core/types/index.d.ts +1 -0
  159. package/dist/core/types/index.d.ts.map +1 -1
  160. package/dist/core/types/index.js +1 -0
  161. package/dist/core/types/index.js.map +1 -1
  162. package/dist/core/types/serialization.d.ts +40 -1
  163. package/dist/core/types/serialization.d.ts.map +1 -1
  164. package/dist/core/validation/cel-validator.d.ts.map +1 -1
  165. package/dist/core/validation/cel-validator.js +55 -31
  166. package/dist/core/validation/cel-validator.js.map +1 -1
  167. package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts +55 -0
  168. package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts.map +1 -0
  169. package/dist/factories/cnpg/compositions/cnpg-bootstrap.js +92 -0
  170. package/dist/factories/cnpg/compositions/cnpg-bootstrap.js.map +1 -0
  171. package/dist/factories/cnpg/compositions/index.d.ts +2 -0
  172. package/dist/factories/cnpg/compositions/index.d.ts.map +1 -0
  173. package/dist/factories/cnpg/compositions/index.js +2 -0
  174. package/dist/factories/cnpg/compositions/index.js.map +1 -0
  175. package/dist/factories/cnpg/index.d.ts +42 -0
  176. package/dist/factories/cnpg/index.d.ts.map +1 -0
  177. package/dist/factories/cnpg/index.js +42 -0
  178. package/dist/factories/cnpg/index.js.map +1 -0
  179. package/dist/factories/cnpg/resources/backup.d.ts +34 -0
  180. package/dist/factories/cnpg/resources/backup.d.ts.map +1 -0
  181. package/dist/factories/cnpg/resources/backup.js +87 -0
  182. package/dist/factories/cnpg/resources/backup.js.map +1 -0
  183. package/dist/factories/cnpg/resources/cluster.d.ts +55 -0
  184. package/dist/factories/cnpg/resources/cluster.d.ts.map +1 -0
  185. package/dist/factories/cnpg/resources/cluster.js +123 -0
  186. package/dist/factories/cnpg/resources/cluster.js.map +1 -0
  187. package/dist/factories/cnpg/resources/helm.d.ts +45 -0
  188. package/dist/factories/cnpg/resources/helm.d.ts.map +1 -0
  189. package/dist/factories/cnpg/resources/helm.js +78 -0
  190. package/dist/factories/cnpg/resources/helm.js.map +1 -0
  191. package/dist/factories/cnpg/resources/index.d.ts +6 -0
  192. package/dist/factories/cnpg/resources/index.d.ts.map +1 -0
  193. package/dist/factories/cnpg/resources/index.js +6 -0
  194. package/dist/factories/cnpg/resources/index.js.map +1 -0
  195. package/dist/factories/cnpg/resources/pooler.d.ts +38 -0
  196. package/dist/factories/cnpg/resources/pooler.d.ts.map +1 -0
  197. package/dist/factories/cnpg/resources/pooler.js +97 -0
  198. package/dist/factories/cnpg/resources/pooler.js.map +1 -0
  199. package/dist/factories/cnpg/resources/scheduled-backup.d.ts +35 -0
  200. package/dist/factories/cnpg/resources/scheduled-backup.d.ts.map +1 -0
  201. package/dist/factories/cnpg/resources/scheduled-backup.js +68 -0
  202. package/dist/factories/cnpg/resources/scheduled-backup.js.map +1 -0
  203. package/dist/factories/cnpg/types.d.ts +507 -0
  204. package/dist/factories/cnpg/types.d.ts.map +1 -0
  205. package/dist/factories/cnpg/types.js +398 -0
  206. package/dist/factories/cnpg/types.js.map +1 -0
  207. package/dist/factories/cnpg/utils/helm-values-mapper.d.ts +70 -0
  208. package/dist/factories/cnpg/utils/helm-values-mapper.d.ts.map +1 -0
  209. package/dist/factories/cnpg/utils/helm-values-mapper.js +79 -0
  210. package/dist/factories/cnpg/utils/helm-values-mapper.js.map +1 -0
  211. package/dist/factories/cnpg/utils/index.d.ts +2 -0
  212. package/dist/factories/cnpg/utils/index.d.ts.map +1 -0
  213. package/dist/factories/cnpg/utils/index.js +2 -0
  214. package/dist/factories/cnpg/utils/index.js.map +1 -0
  215. package/dist/factories/helm/helm-release.d.ts.map +1 -1
  216. package/dist/factories/helm/helm-release.js +4 -0
  217. package/dist/factories/helm/helm-release.js.map +1 -1
  218. package/dist/factories/helm/types.d.ts +2 -0
  219. package/dist/factories/helm/types.d.ts.map +1 -1
  220. package/dist/factories/inngest/compositions/index.d.ts +2 -0
  221. package/dist/factories/inngest/compositions/index.d.ts.map +1 -0
  222. package/dist/factories/inngest/compositions/index.js +2 -0
  223. package/dist/factories/inngest/compositions/index.js.map +1 -0
  224. package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts +150 -0
  225. package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts.map +1 -0
  226. package/dist/factories/inngest/compositions/inngest-bootstrap.js +90 -0
  227. package/dist/factories/inngest/compositions/inngest-bootstrap.js.map +1 -0
  228. package/dist/factories/inngest/index.d.ts +45 -0
  229. package/dist/factories/inngest/index.d.ts.map +1 -0
  230. package/dist/factories/inngest/index.js +45 -0
  231. package/dist/factories/inngest/index.js.map +1 -0
  232. package/dist/factories/inngest/resources/helm.d.ts +53 -0
  233. package/dist/factories/inngest/resources/helm.d.ts.map +1 -0
  234. package/dist/factories/inngest/resources/helm.js +88 -0
  235. package/dist/factories/inngest/resources/helm.js.map +1 -0
  236. package/dist/factories/inngest/resources/index.d.ts +2 -0
  237. package/dist/factories/inngest/resources/index.d.ts.map +1 -0
  238. package/dist/factories/inngest/resources/index.js +2 -0
  239. package/dist/factories/inngest/resources/index.js.map +1 -0
  240. package/dist/factories/inngest/types.d.ts +177 -0
  241. package/dist/factories/inngest/types.d.ts.map +1 -0
  242. package/dist/factories/inngest/types.js +189 -0
  243. package/dist/factories/inngest/types.js.map +1 -0
  244. package/dist/factories/inngest/utils/helm-values-mapper.d.ts +127 -0
  245. package/dist/factories/inngest/utils/helm-values-mapper.d.ts.map +1 -0
  246. package/dist/factories/inngest/utils/helm-values-mapper.js +116 -0
  247. package/dist/factories/inngest/utils/helm-values-mapper.js.map +1 -0
  248. package/dist/factories/inngest/utils/index.d.ts +2 -0
  249. package/dist/factories/inngest/utils/index.d.ts.map +1 -0
  250. package/dist/factories/inngest/utils/index.js +2 -0
  251. package/dist/factories/inngest/utils/index.js.map +1 -0
  252. package/dist/factories/kubernetes/config/secret.d.ts.map +1 -1
  253. package/dist/factories/kubernetes/config/secret.js +11 -1
  254. package/dist/factories/kubernetes/config/secret.js.map +1 -1
  255. package/dist/factories/kubernetes/core/namespace.d.ts.map +1 -1
  256. package/dist/factories/kubernetes/core/namespace.js +1 -1
  257. package/dist/factories/kubernetes/core/namespace.js.map +1 -1
  258. package/dist/factories/searxng/compositions/index.d.ts +2 -0
  259. package/dist/factories/searxng/compositions/index.d.ts.map +1 -0
  260. package/dist/factories/searxng/compositions/index.js +2 -0
  261. package/dist/factories/searxng/compositions/index.js.map +1 -0
  262. package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts +65 -0
  263. package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts.map +1 -0
  264. package/dist/factories/searxng/compositions/searxng-bootstrap.js +237 -0
  265. package/dist/factories/searxng/compositions/searxng-bootstrap.js.map +1 -0
  266. package/dist/factories/searxng/index.d.ts +29 -0
  267. package/dist/factories/searxng/index.d.ts.map +1 -0
  268. package/dist/factories/searxng/index.js +27 -0
  269. package/dist/factories/searxng/index.js.map +1 -0
  270. package/dist/factories/searxng/resources/index.d.ts +2 -0
  271. package/dist/factories/searxng/resources/index.d.ts.map +1 -0
  272. package/dist/factories/searxng/resources/index.js +2 -0
  273. package/dist/factories/searxng/resources/index.js.map +1 -0
  274. package/dist/factories/searxng/resources/searxng.d.ts +65 -0
  275. package/dist/factories/searxng/resources/searxng.d.ts.map +1 -0
  276. package/dist/factories/searxng/resources/searxng.js +188 -0
  277. package/dist/factories/searxng/resources/searxng.js.map +1 -0
  278. package/dist/factories/searxng/types.d.ts +126 -0
  279. package/dist/factories/searxng/types.d.ts.map +1 -0
  280. package/dist/factories/searxng/types.js +176 -0
  281. package/dist/factories/searxng/types.js.map +1 -0
  282. package/dist/factories/searxng/utils/settings-builder.d.ts +46 -0
  283. package/dist/factories/searxng/utils/settings-builder.d.ts.map +1 -0
  284. package/dist/factories/searxng/utils/settings-builder.js +52 -0
  285. package/dist/factories/searxng/utils/settings-builder.js.map +1 -0
  286. package/dist/factories/simple/config/secret.d.ts.map +1 -1
  287. package/dist/factories/simple/config/secret.js +28 -0
  288. package/dist/factories/simple/config/secret.js.map +1 -1
  289. package/dist/factories/valkey/compositions/index.d.ts +2 -0
  290. package/dist/factories/valkey/compositions/index.d.ts.map +1 -0
  291. package/dist/factories/valkey/compositions/index.js +2 -0
  292. package/dist/factories/valkey/compositions/index.js.map +1 -0
  293. package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts +41 -0
  294. package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts.map +1 -0
  295. package/dist/factories/valkey/compositions/valkey-bootstrap.js +105 -0
  296. package/dist/factories/valkey/compositions/valkey-bootstrap.js.map +1 -0
  297. package/dist/factories/valkey/index.d.ts +50 -0
  298. package/dist/factories/valkey/index.d.ts.map +1 -0
  299. package/dist/factories/valkey/index.js +50 -0
  300. package/dist/factories/valkey/index.js.map +1 -0
  301. package/dist/factories/valkey/resources/helm.d.ts +53 -0
  302. package/dist/factories/valkey/resources/helm.d.ts.map +1 -0
  303. package/dist/factories/valkey/resources/helm.js +82 -0
  304. package/dist/factories/valkey/resources/helm.js.map +1 -0
  305. package/dist/factories/valkey/resources/index.d.ts +3 -0
  306. package/dist/factories/valkey/resources/index.d.ts.map +1 -0
  307. package/dist/factories/valkey/resources/index.js +3 -0
  308. package/dist/factories/valkey/resources/index.js.map +1 -0
  309. package/dist/factories/valkey/resources/valkey.d.ts +46 -0
  310. package/dist/factories/valkey/resources/valkey.d.ts.map +1 -0
  311. package/dist/factories/valkey/resources/valkey.js +123 -0
  312. package/dist/factories/valkey/resources/valkey.js.map +1 -0
  313. package/dist/factories/valkey/types.d.ts +185 -0
  314. package/dist/factories/valkey/types.d.ts.map +1 -0
  315. package/dist/factories/valkey/types.js +204 -0
  316. package/dist/factories/valkey/types.js.map +1 -0
  317. package/dist/factories/valkey/utils/helm-values-mapper.d.ts +32 -0
  318. package/dist/factories/valkey/utils/helm-values-mapper.d.ts.map +1 -0
  319. package/dist/factories/valkey/utils/helm-values-mapper.js +58 -0
  320. package/dist/factories/valkey/utils/helm-values-mapper.js.map +1 -0
  321. package/dist/factories/valkey/utils/index.d.ts +2 -0
  322. package/dist/factories/valkey/utils/index.d.ts.map +1 -0
  323. package/dist/factories/valkey/utils/index.js +2 -0
  324. package/dist/factories/valkey/utils/index.js.map +1 -0
  325. package/dist/factories/webapp/compositions/index.d.ts +2 -0
  326. package/dist/factories/webapp/compositions/index.d.ts.map +1 -0
  327. package/dist/factories/webapp/compositions/index.js +2 -0
  328. package/dist/factories/webapp/compositions/index.js.map +1 -0
  329. package/dist/factories/webapp/compositions/web-app-with-processing.d.ts +97 -0
  330. package/dist/factories/webapp/compositions/web-app-with-processing.d.ts.map +1 -0
  331. package/dist/factories/webapp/compositions/web-app-with-processing.js +220 -0
  332. package/dist/factories/webapp/compositions/web-app-with-processing.js.map +1 -0
  333. package/dist/factories/webapp/index.d.ts +53 -0
  334. package/dist/factories/webapp/index.d.ts.map +1 -0
  335. package/dist/factories/webapp/index.js +53 -0
  336. package/dist/factories/webapp/index.js.map +1 -0
  337. package/dist/factories/webapp/types.d.ts +69 -0
  338. package/dist/factories/webapp/types.d.ts.map +1 -0
  339. package/dist/factories/webapp/types.js +92 -0
  340. package/dist/factories/webapp/types.js.map +1 -0
  341. package/dist/shared/brands.d.ts +16 -0
  342. package/dist/shared/brands.d.ts.map +1 -1
  343. package/dist/shared/brands.js +16 -0
  344. package/dist/shared/brands.js.map +1 -1
  345. package/package.json +29 -1
@@ -5,9 +5,12 @@
5
5
  * simple schemas, and provides utility functions for generating schemas
6
6
  * from resource maps.
7
7
  */
8
+ import { createCompositionContext, runWithCompositionContext } from '../composition/context.js';
9
+ import { getComponentLogger } from '../logging/index.js';
8
10
  import { pascalCase } from '../../utils/string.js';
9
11
  import { separateStatusFields } from '../validation/cel-validator.js';
10
12
  import { serializeStatusMappingsToCel } from './cel-references.js';
13
+ const logger = getComponentLogger('schema-defaults');
11
14
  // ---------------------------------------------------------------------------
12
15
  // Arktype JSON AST → Kro type helpers (private)
13
16
  // ---------------------------------------------------------------------------
@@ -61,10 +64,15 @@ function getKroTypeFromJson(node) {
61
64
  return 'string';
62
65
  }
63
66
  /**
64
- * Recursively flatten an Arktype JSON AST into a flat `Record<camelCaseKey, kroType>`.
67
+ * Recursively convert an Arktype JSON AST into a nested KRO SimpleSchema object.
68
+ *
69
+ * KRO v0.8+ supports nested objects in SimpleSchema — child fields are defined
70
+ * by indentation under a parent key. CEL expressions use dot notation to access
71
+ * them (e.g., `schema.spec.cache.shards`). This preserves the nesting so the
72
+ * schema matches the CEL paths generated by the schema proxy.
65
73
  */
66
- function arktypeJsonToKroFields(node, prefix = '') {
67
- let fields = {};
74
+ function arktypeJsonToKroFields(node) {
75
+ const fields = {};
68
76
  if (!node || typeof node !== 'object') {
69
77
  return fields;
70
78
  }
@@ -76,23 +84,452 @@ function arktypeJsonToKroFields(node, prefix = '') {
76
84
  const optional = Array.isArray(nodeObj.optional) ? nodeObj.optional : [];
77
85
  const props = [...required, ...optional];
78
86
  for (const prop of props) {
79
- const newKey = prefix
80
- ? `${prefix}${prop.key.charAt(0).toUpperCase() + prop.key.slice(1)}`
81
- : prop.key;
82
87
  const childNode = prop.value;
83
88
  if (typeof childNode === 'object' &&
84
89
  childNode !== null &&
85
90
  (childNode.required || childNode.optional)) {
86
- const nestedFields = arktypeJsonToKroFields(childNode, newKey);
87
- fields = { ...fields, ...nestedFields };
91
+ fields[prop.key] = arktypeJsonToKroFields(childNode);
88
92
  }
89
93
  else {
90
- fields[newKey] = getKroTypeFromJson(childNode);
94
+ fields[prop.key] = getKroTypeFromJson(childNode);
91
95
  }
92
96
  }
93
97
  return fields;
94
98
  }
95
99
  // ---------------------------------------------------------------------------
100
+ // Nullish coalescing default extraction
101
+ // ---------------------------------------------------------------------------
102
+ /**
103
+ * Extract literal default values from `spec.field ?? literalValue` patterns
104
+ * in a composition function's source code.
105
+ *
106
+ * **FAST PATH — NOT AUTHORITATIVE.** This regex-based extraction runs first
107
+ * to catch the common case where a composition uses `spec.X ?? 'literal'`
108
+ * with a literal right-hand side. It is intentionally conservative:
109
+ *
110
+ * - Both `??` and the literal must be on the same source line.
111
+ * - The literal must be a string, number, boolean, or minified !0/!1 form.
112
+ * - The right-hand side cannot be a constant, variable, template literal,
113
+ * function call, or expression involving other spec fields.
114
+ *
115
+ * Anything this regex misses is caught by {@link resolveDefaultsByReExecution}
116
+ * (Phase 2), which actually executes the composition function with optional
117
+ * fields set to `undefined` and observes the concrete resolved values. Phase 2
118
+ * is the authoritative source; this function only exists to short-circuit
119
+ * the common case so the heavy re-execution doesn't need to compare every
120
+ * field for every composition.
121
+ *
122
+ * In KRO mode, `??` doesn't trigger for proxy objects (they're truthy).
123
+ * Instead, we detect these patterns via fn.toString() and add
124
+ * `| default=<value>` annotations to the KRO SimpleSchema so that KRO
125
+ * uses the intended default when the field isn't provided in the CR.
126
+ *
127
+ * NOTE: `.orValue()` is NOT supported in KRO resource templates (only in
128
+ * status CEL). Schema `| default=` is the correct mechanism for resource
129
+ * template defaults.
130
+ *
131
+ * Handles:
132
+ * - `spec.field ?? 'string'` or `spec.field ?? "string"`
133
+ * - `spec.field ?? 123` (numbers)
134
+ * - `spec.field ?? true/false` (booleans, including minified !0/!1)
135
+ * - `spec.parent?.child ?? value` (optional chaining)
136
+ */
137
+ export function extractNullishDefaults(fnSource) {
138
+ const defaults = {};
139
+ const pattern = /spec\.([\w]+(?:\??\.\w+)*)\s*\?\?\s*(?:(['"])([^'"]*)\2|(-?\d+(?:\.\d+)?)|true|false|!0|!1)(?=\s*[;,)}\n])/g;
140
+ let match = pattern.exec(fnSource);
141
+ while (match !== null) {
142
+ const fieldPath = match[1].replace(/\?\./g, '.');
143
+ const stringValue = match[3];
144
+ const numericValue = match[4];
145
+ if (stringValue !== undefined) {
146
+ defaults[fieldPath] = stringValue;
147
+ }
148
+ else if (numericValue !== undefined) {
149
+ defaults[fieldPath] = Number(numericValue);
150
+ }
151
+ else {
152
+ const fullMatch = match[0];
153
+ if (fullMatch.endsWith('true') || fullMatch.endsWith('!0'))
154
+ defaults[fieldPath] = true;
155
+ else if (fullMatch.endsWith('false') || fullMatch.endsWith('!1'))
156
+ defaults[fieldPath] = false;
157
+ }
158
+ match = pattern.exec(fnSource);
159
+ }
160
+ return defaults;
161
+ }
162
+ /**
163
+ * Placeholder value passed in place of required spec fields during the
164
+ * defaults-extraction re-execution. Any captured leaf value that IS this
165
+ * string, CONTAINS this string as a substring (from template-literal
166
+ * interpolation), or is NaN (from arithmetic coercion of the string) is
167
+ * filtered out by the sentinel-detection logic in `extractDefaultsByComparison`
168
+ * so it never gets recorded as a real schema default.
169
+ *
170
+ * The choice of a string (rather than a Symbol or object) is deliberate:
171
+ * - String concatenation preserves the token so template-literal usage
172
+ * produces a clearly-identifiable captured value (e.g. `"__typekro_default__-cfg"`).
173
+ * - Truthiness matches the real proxy behavior (proxies are truthy), so
174
+ * `if (spec.requiredField)` takes the same branch in both runs.
175
+ * - Numeric contexts coerce to NaN in both runs (proxies also coerce to
176
+ * NaN because functions have no numeric value), so arithmetic-derived
177
+ * NaN values are symmetric across runs and don't produce spurious defaults.
178
+ *
179
+ * If the propagation ever drifts out of this sentinel's shape (e.g. someone
180
+ * introduces a Symbol-based sentinel), update `isSentinelDerivedValue` below
181
+ * to match.
182
+ */
183
+ export const REQUIRED_FIELD_SENTINEL = '__typekro_default__';
184
+ /**
185
+ * Check whether a captured value is derived from the required-field sentinel
186
+ * and therefore should NOT be recorded as a real schema default. Handles:
187
+ * - Direct sentinel or substring (template-literal propagation)
188
+ * - NaN (numeric-coercion propagation — both runs produce NaN symmetrically,
189
+ * but the defaults run's NaN must be filtered out of the defaults map)
190
+ */
191
+ function isSentinelDerivedValue(v) {
192
+ if (typeof v === 'string')
193
+ return v.includes(REQUIRED_FIELD_SENTINEL);
194
+ if (typeof v === 'number')
195
+ return Number.isNaN(v);
196
+ return false;
197
+ }
198
+ /**
199
+ * Resolve ?? defaults by re-executing the composition function with undefined
200
+ * for optional spec fields. This triggers ?? fallbacks naturally, resolving
201
+ * imported constants from the closure (e.g., DEFAULT_SEARXNG_IMAGE).
202
+ *
203
+ * Also detects ternary conditional sections (spec.field ? section : '') by
204
+ * comparing resource strings between proxy-run and defaults-run.
205
+ *
206
+ * Runs in a temporary, isolated composition context. Resource registrations
207
+ * are contained within the temp context. However, composition functions with
208
+ * external side effects (API calls, logging, metrics) will fire during this
209
+ * re-execution. Composition functions should be side-effect-free beyond
210
+ * resource creation for this mechanism to work safely.
211
+ */
212
+ function resolveDefaultsByReExecution(compositionFn, specType, proxyResources) {
213
+ try {
214
+ const specJson = specType.json;
215
+ if (!specJson)
216
+ return undefined;
217
+ const defaultsSpec = {};
218
+ for (const p of specJson.required ?? [])
219
+ defaultsSpec[p.key] = REQUIRED_FIELD_SENTINEL;
220
+ for (const p of specJson.optional ?? [])
221
+ defaultsSpec[p.key] = undefined;
222
+ // Build the set of optional top-level field names. Only optional fields
223
+ // can be ternary-controlled (required fields always have a value).
224
+ const optionalFieldNames = new Set((specJson.optional ?? []).map(p => p.key));
225
+ const tempCtx = createCompositionContext('defaults-extraction');
226
+ runWithCompositionContext(tempCtx, () => {
227
+ compositionFn(defaultsSpec);
228
+ });
229
+ const defaults = {};
230
+ const ternaryConditionals = [];
231
+ // Match resources by RESOURCE ID rather than by insertion order. Compositions
232
+ // that use `if (!spec.optional) { createResource(...) }` produce different
233
+ // resource counts between runs — positional matching silently pairs
234
+ // unrelated resources (e.g., the defaults run's auto-Secret against the
235
+ // proxy run's Deployment) and corrupts both default extraction and
236
+ // ternary detection. Key-based matching is robust against conditional
237
+ // resource creation: resources present in only one run are simply skipped
238
+ // for comparison.
239
+ const proxyEntries = Object.entries(proxyResources);
240
+ const defaultsEntries = Object.entries(tempCtx.resources);
241
+ const defaultsMap = new Map(defaultsEntries);
242
+ if (proxyEntries.length !== defaultsEntries.length) {
243
+ // Different resource counts between runs are expected when the
244
+ // composition uses conditional `createResource` patterns — the
245
+ // defaults run takes different branches than the proxy run.
246
+ // Key-based matching handles this correctly, so downgrade to debug.
247
+ logger.debug('Re-execution produced a different number of resources than the proxy run — matching by resource ID', {
248
+ proxyResourceCount: proxyEntries.length,
249
+ defaultsResourceCount: defaultsEntries.length,
250
+ });
251
+ }
252
+ for (const [id, proxyRes] of proxyEntries) {
253
+ const defaultsRes = defaultsMap.get(id);
254
+ if (!defaultsRes)
255
+ continue; // resource only in proxy run — skip
256
+ extractDefaultsByComparison(proxyRes, defaultsRes, defaults);
257
+ extractTernaryConditionals(proxyRes, defaultsRes, ternaryConditionals, optionalFieldNames);
258
+ }
259
+ const hasResults = Object.keys(defaults).length > 0 || ternaryConditionals.length > 0;
260
+ return hasResults ? { defaults, ternaryConditionals } : undefined;
261
+ }
262
+ catch (err) {
263
+ // Best-effort: composition functions with undefined spec fields may throw
264
+ // (e.g., accessing spec.nested.field without optional chaining). Log at
265
+ // debug level for troubleshooting but don't fail schema generation.
266
+ logger.debug('Defaults re-execution failed', {
267
+ error: err instanceof Error ? err.message : String(err),
268
+ });
269
+ return undefined;
270
+ }
271
+ }
272
+ /**
273
+ * Recursively compare proxy-run resource values (with __KUBERNETES_REF__ markers)
274
+ * against defaults-run values (with resolved constants) to find field defaults.
275
+ *
276
+ * When a proxy value is `__KUBERNETES_REF___schema___spec.FIELD__` and the
277
+ * corresponding defaults value is a concrete scalar, we record FIELD → value.
278
+ */
279
+ function extractDefaultsByComparison(proxyVal, defaultsVal, result) {
280
+ // KubernetesRef proxies are functions whose toString() returns a marker string.
281
+ // Coerce to string to check for __KUBERNETES_REF__ markers.
282
+ const proxyStr = typeof proxyVal === 'function' || typeof proxyVal === 'string'
283
+ ? String(proxyVal) : null;
284
+ // Only match when the proxy value IS the marker (exact, single reference).
285
+ // If the marker is embedded inside a larger string (template literal), the
286
+ // value is a transformation, not a default — e.g., `\`has-${spec.extra}\``
287
+ // produces `"has-<marker>"` which is NOT a default for `extra`.
288
+ const exactMarkerMatch = proxyStr?.match(/^__KUBERNETES_REF___schema___spec\.(\w+(?:\.\w+)*)__$/);
289
+ if (exactMarkerMatch) {
290
+ if (typeof defaultsVal === 'string' ||
291
+ typeof defaultsVal === 'number' ||
292
+ typeof defaultsVal === 'boolean') {
293
+ // Skip values derived from the required-field sentinel — these aren't
294
+ // real defaults. Covers: string containing the sentinel token
295
+ // (template-literal propagation), NaN (arithmetic-coercion
296
+ // propagation), and the sentinel itself.
297
+ if (isSentinelDerivedValue(defaultsVal))
298
+ return;
299
+ result[exactMarkerMatch[1]] = defaultsVal;
300
+ }
301
+ return;
302
+ }
303
+ // If the proxy is a string but contains the marker as part of larger content,
304
+ // skip the defaults check (recursion into arrays/objects still applies below).
305
+ if (proxyStr?.includes('__KUBERNETES_REF___schema___')) {
306
+ return;
307
+ }
308
+ if (Array.isArray(proxyVal) && Array.isArray(defaultsVal)) {
309
+ for (let i = 0; i < Math.min(proxyVal.length, defaultsVal.length); i++) {
310
+ extractDefaultsByComparison(proxyVal[i], defaultsVal[i], result);
311
+ }
312
+ return;
313
+ }
314
+ if (proxyVal && typeof proxyVal === 'object' && defaultsVal && typeof defaultsVal === 'object') {
315
+ for (const key of Object.keys(proxyVal)) {
316
+ extractDefaultsByComparison(proxyVal[key], defaultsVal[key], result);
317
+ }
318
+ }
319
+ }
320
+ /**
321
+ * Detect ternary conditional sections by finding markers in the proxy-run
322
+ * string that are completely ABSENT from the defaults-run string.
323
+ *
324
+ * When `spec.redisUrl ? \`redis: ...\` : ''` is evaluated:
325
+ * - Proxy run (truthy): the redis section with markers is included
326
+ * - Defaults run (falsy): the redis section is empty — the marker is absent
327
+ *
328
+ * For each such "orphan" marker, we extract the surrounding section
329
+ * (from the previous newline-at-start-of-key to the marker's end) as a
330
+ * ternary-controlled conditional.
331
+ *
332
+ * KNOWN LIMITATION — tested field must equal referenced field
333
+ * ---------------------------------------------------------
334
+ * The emitted `conditionField` is taken from the `__KUBERNETES_REF__`
335
+ * marker inside the truthy branch — i.e., the field that the branch
336
+ * REFERENCES. Under the hood, this function has no direct access to the
337
+ * JavaScript ternary's TEST field because JS ternaries evaluate eagerly
338
+ * and neither branch leaves a runtime trace of "which field was
339
+ * tested". This works correctly for the overwhelmingly common case
340
+ * where the tested field and the referenced field are the same:
341
+ *
342
+ * spec.redisUrl ? `redis:\n url: ${spec.redisUrl}` : ''
343
+ *
344
+ * but produces semantically wrong CEL for patterns like:
345
+ *
346
+ * spec.enableRedis ? `redis:\n url: ${spec.connectionString}` : ''
347
+ *
348
+ * ...where we would emit `has(schema.spec.connectionString)` instead of
349
+ * `has(schema.spec.enableRedis)`. Compositions that need decoupled
350
+ * test/reference fields should use an explicit `Cel.expr()` with the
351
+ * correct `has()` expression until AST-based detection lands (tracked
352
+ * in https://github.com/yehudacohen/typekro/issues/57).
353
+ *
354
+ * FRAGILE: this walks line-by-line through the proxy string and backs
355
+ * through parent YAML keys by regex-matching `^\s*\w+:\s*$` and comparing
356
+ * against a set of lines from the defaults string. It assumes the
357
+ * composition constructs YAML-ish content directly (typically via template
358
+ * literal) with 2-space indentation, canonical key: value syntax, and no
359
+ * block scalars (`|`, `>`). Compositions that emit flow-style YAML, that
360
+ * use tab indentation, that quote keys, or that assemble the string
361
+ * through multiple splice operations will not match cleanly. The
362
+ * extracted `proxySection` is later consumed by
363
+ * `applyTernaryConditionalsToResources` via exact substring match — keep
364
+ * both functions' assumptions in sync when updating either side.
365
+ *
366
+ * Tracked for replacement with AST-based detection in
367
+ * https://github.com/yehudacohen/typekro/issues/57
368
+ */
369
+ function extractTernaryConditionals(proxyVal, defaultsVal, result, optionalFieldNames) {
370
+ const proxyStr = typeof proxyVal === 'string' ? proxyVal : null;
371
+ const defaultsStr = typeof defaultsVal === 'string' ? defaultsVal : null;
372
+ if (proxyStr && defaultsStr && proxyStr !== defaultsStr && proxyStr.length > defaultsStr.length) {
373
+ // Find all __KUBERNETES_REF__ markers in the proxy string
374
+ const markerPattern = /__KUBERNETES_REF___schema___spec\.(\w+(?:\.\w+)*)__/g;
375
+ let match = markerPattern.exec(proxyStr);
376
+ while (match !== null) {
377
+ const field = match[1];
378
+ const marker = match[0];
379
+ // Only optional fields can be ternary-controlled. Required fields always
380
+ // have a value (the sentinel in the defaults run), so their markers are
381
+ // always "absent" from the defaults string but they're substitutions,
382
+ // not conditionals.
383
+ const topLevelField = field.split('.')[0];
384
+ if (!optionalFieldNames.has(topLevelField)) {
385
+ match = markerPattern.exec(proxyStr);
386
+ continue;
387
+ }
388
+ // Check if this marker is a TERNARY conditional (section absent from defaults)
389
+ // vs a ?? fallback (same key exists with a different value in defaults).
390
+ // Find the YAML key before the marker (e.g., `url: ` before the redisUrl marker).
391
+ const lineStart = proxyStr.lastIndexOf('\n', match.index) + 1;
392
+ const line = proxyStr.slice(lineStart, match.index + marker.length);
393
+ const keyMatch = line.match(/(\w+):\s*$/)?.[1] || line.match(/^\s*(\w+):/)?.[1];
394
+ const keyExistsInDefaults = keyMatch
395
+ ? new RegExp(`\\b${keyMatch}\\s*:`).test(defaultsStr)
396
+ : false;
397
+ // If the key exists in defaults, this is a ?? fallback (handled elsewhere).
398
+ // If the key is absent, this is a ternary conditional (section not present).
399
+ if (!keyExistsInDefaults && !defaultsStr.includes(marker)) {
400
+ // Extract the section containing this marker.
401
+ // Walk backward from the marker to find the start of the conditional
402
+ // section. Include parent YAML keys at ALL nesting levels (not just one)
403
+ // so that `redis:\n connection:\n url: ${ref}` captures all three lines.
404
+ let sectionStart = match.index;
405
+ while (sectionStart > 0 && proxyStr[sectionStart - 1] !== '\n') {
406
+ sectionStart--;
407
+ }
408
+ // Walk back through preceding blank lines
409
+ while (sectionStart > 0 && proxyStr[sectionStart - 1] === '\n') {
410
+ sectionStart--;
411
+ }
412
+ // Walk back through parent YAML keys (lines with `key:` and no value).
413
+ // Keep walking as long as the previous line is a key-only line that
414
+ // doesn't exist as a complete line in the defaults. Set membership
415
+ // (not substring match) avoids false stops on coincidental substrings.
416
+ const defaultsLines = new Set(defaultsStr.split('\n'));
417
+ const allLines = proxyStr.slice(0, sectionStart).split('\n');
418
+ while (allLines.length > 0) {
419
+ const prevLine = allLines[allLines.length - 1];
420
+ const isKeyOnlyLine = /^\s*\w+:\s*$/.test(prevLine);
421
+ const lineExistsInDefaults = defaultsLines.has(prevLine);
422
+ if (isKeyOnlyLine && !lineExistsInDefaults) {
423
+ sectionStart -= prevLine.length + 1; // +1 for the \n
424
+ allLines.pop();
425
+ }
426
+ else {
427
+ break;
428
+ }
429
+ }
430
+ // Section ends after the marker
431
+ const sectionEnd = match.index + marker.length;
432
+ const proxySection = proxyStr.slice(sectionStart, sectionEnd);
433
+ // Verify the section, when removed from proxy string, makes it closer to defaults
434
+ if (proxySection.includes(marker)) {
435
+ result.push({
436
+ proxySection,
437
+ falsyValue: '',
438
+ conditionField: field,
439
+ });
440
+ }
441
+ }
442
+ match = markerPattern.exec(proxyStr);
443
+ }
444
+ return;
445
+ }
446
+ // Recurse into arrays and objects
447
+ if (Array.isArray(proxyVal) && Array.isArray(defaultsVal)) {
448
+ for (let i = 0; i < Math.min(proxyVal.length, defaultsVal.length); i++) {
449
+ extractTernaryConditionals(proxyVal[i], defaultsVal[i], result, optionalFieldNames);
450
+ }
451
+ return;
452
+ }
453
+ if (proxyVal && typeof proxyVal === 'object' && defaultsVal && typeof defaultsVal === 'object') {
454
+ for (const key of Object.keys(proxyVal)) {
455
+ extractTernaryConditionals(proxyVal[key], defaultsVal[key], result, optionalFieldNames);
456
+ }
457
+ }
458
+ }
459
+ /**
460
+ * Apply extracted nullish defaults to a KRO SimpleSchema spec fields object.
461
+ * Appends `| default=<value>` to the field's type string.
462
+ *
463
+ * The two-phase default extraction uses this function twice:
464
+ * - Phase 1 (regex, `extractNullishDefaults`) — fast but may misfire on
465
+ * edge cases (multi-line expressions, nested parens). Called with
466
+ * `overwrite: false` so it doesn't clobber existing annotations.
467
+ * - Phase 2 (re-execution, `resolveDefaultsByReExecution`) — slower but
468
+ * authoritative. Called with `overwrite: true` so it REPLACES any
469
+ * Phase 1 annotation for the same field, ensuring a wrong Phase 1
470
+ * result doesn't survive when Phase 2 produces a corrected value.
471
+ */
472
+ function applyNullishDefaults(specFields, defaults, overwrite = false) {
473
+ for (const [path, value] of Object.entries(defaults)) {
474
+ const parts = path.split('.');
475
+ let current = specFields;
476
+ for (let i = 0; i < parts.length - 1; i++) {
477
+ const part = parts[i];
478
+ if (current[part] && typeof current[part] === 'object') {
479
+ current = current[part];
480
+ }
481
+ else {
482
+ current = undefined;
483
+ break;
484
+ }
485
+ }
486
+ if (!current)
487
+ continue;
488
+ const fieldName = parts[parts.length - 1];
489
+ const existingType = current[fieldName];
490
+ if (typeof existingType !== 'string')
491
+ continue;
492
+ const defaultStr = typeof value === 'string' ? `"${value}"` : String(value);
493
+ const hasDefault = existingType.includes('default=');
494
+ if (!hasDefault) {
495
+ current[fieldName] = `${existingType} | default=${defaultStr}`;
496
+ }
497
+ else if (overwrite) {
498
+ // Strip any existing `| default=...` segment and replace with the
499
+ // authoritative Phase 2 value. The segment may appear as `| default="x"`,
500
+ // `| default=123`, or `| default=true` — match to the end of the value
501
+ // or to the next `|` (for additional annotations chained after it).
502
+ const withoutDefault = existingType.replace(/\s*\|\s*default=(?:"[^"]*"|[^|]*)/, '');
503
+ current[fieldName] = `${withoutDefault} | default=${defaultStr}`;
504
+ }
505
+ }
506
+ }
507
+ /**
508
+ * Collect optional spec fields that don't have | default= annotations.
509
+ * These fields need omit() wrapping in resource templates (KRO 0.9+)
510
+ * so they're removed from the K8s resource when not provided, rather
511
+ * than failing with an invalid zero value.
512
+ *
513
+ * Returns field paths (e.g., ['baseUrl', 'resources', 'env']).
514
+ */
515
+ function collectOmitFields(specFields, specType) {
516
+ const specJson = specType.json;
517
+ const optionalKeys = (specJson?.optional ?? []).map((p) => p.key);
518
+ const omitFields = [];
519
+ for (const fieldName of optionalKeys) {
520
+ const existingType = specFields[fieldName];
521
+ // Scalar without default → needs omit()
522
+ if (typeof existingType === 'string' && !existingType.includes('default=')) {
523
+ omitFields.push(fieldName);
524
+ }
525
+ // Object without defaults on children → needs omit()
526
+ if (typeof existingType === 'object' && existingType !== null) {
527
+ omitFields.push(fieldName);
528
+ }
529
+ }
530
+ return omitFields;
531
+ }
532
+ // ---------------------------------------------------------------------------
96
533
  // Public API
97
534
  // ---------------------------------------------------------------------------
98
535
  /**
@@ -104,22 +541,71 @@ function arktypeJsonToKroFields(node, prefix = '') {
104
541
  * Status fields use user-defined mappings from the StatusBuilder function
105
542
  * instead of auto-generated CEL expressions.
106
543
  */
107
- export function arktypeToKroSchema(name, schemaDefinition, _resources, statusMappings) {
544
+ export function arktypeToKroSchema(name, schemaDefinition, resources, statusMappings, nestedStatusCel) {
108
545
  const specFields = arktypeJsonToKroFields(schemaDefinition.spec.json);
109
546
  if (!specFields.name) {
110
547
  specFields.name = `string | default="${name}"`;
111
548
  }
112
- // Separate static and dynamic status fields
113
- const { dynamicFields } = statusMappings
114
- ? separateStatusFields(statusMappings)
115
- : { dynamicFields: {} };
549
+ // Extract ?? defaults and add | default= annotations to the schema.
550
+ // KRO uses these when a field isn't provided in the CR instance.
551
+ //
552
+ // Phase 1: fn.toString() regex — extracts literal ?? fallbacks quickly.
553
+ // Phase 2: Defaults resolution run — calls the composition function with
554
+ // undefined for optional fields, triggering ?? and resolving imported
555
+ // constants from the closure. Compares resolved resources with the
556
+ // proxy-run resources (markers) to extract field → default mappings.
557
+ const statusMeta = statusMappings;
558
+ const compositionFn = statusMeta?.__originalCompositionFn;
559
+ // Phase 1: regex extraction for literals
560
+ if (typeof compositionFn === 'function') {
561
+ const regexDefaults = extractNullishDefaults(compositionFn.toString());
562
+ applyNullishDefaults(specFields, regexDefaults);
563
+ }
564
+ // Phase 2: resolve imported constants + detect ternary conditionals.
565
+ // Phase 2 is AUTHORITATIVE — if it produces a value for a field that
566
+ // Phase 1 also annotated, Phase 2 wins. This corrects Phase 1 misfires
567
+ // on edge cases (multi-line expressions, nested parens) without breaking
568
+ // the common case where both phases agree.
569
+ let ternaryConditionals = [];
570
+ if (typeof compositionFn === 'function' && resources) {
571
+ const reExecutionResult = resolveDefaultsByReExecution(compositionFn, schemaDefinition.spec, resources);
572
+ if (reExecutionResult) {
573
+ applyNullishDefaults(specFields, reExecutionResult.defaults, true);
574
+ ternaryConditionals = reExecutionResult.ternaryConditionals;
575
+ }
576
+ }
577
+ // Collect optional fields that DON'T have | default= after ?? extraction
578
+ // AND aren't already handled by ternary conditionals.
579
+ // These need omit() wrapping in resource templates (KRO 0.9+).
580
+ const ternaryFieldNames = new Set(ternaryConditionals.map(t => t.conditionField));
581
+ const omitFields = collectOmitFields(specFields, schemaDefinition.spec)
582
+ .filter(f => !ternaryFieldNames.has(f));
583
+ // Filter internal fields (prefixed with __) before classification.
584
+ // These are TypeKro metadata (e.g., __nestedStatusCel, __originalCompositionFn)
585
+ // that should never appear in the KRO schema.
586
+ const userStatusMappings = {};
587
+ if (statusMappings) {
588
+ for (const [key, value] of Object.entries(statusMappings)) {
589
+ if (!key.startsWith('__')) {
590
+ userStatusMappings[key] = value;
591
+ }
592
+ }
593
+ }
594
+ // Separate static and dynamic status fields.
595
+ // Dynamic = references non-schema resource fields (status, metadata, spec) → KRO CEL
596
+ // Static = references only schema.spec.* or literal values → TypeKro runtime hydration
597
+ const { dynamicFields } = separateStatusFields(userStatusMappings);
116
598
  // Only serialize dynamic fields that need Kro resolution
117
- const statusCelExpressions = Object.keys(dynamicFields).length > 0 ? serializeStatusMappingsToCel(dynamicFields) : {};
599
+ // Build the set of known resource IDs for schema.spec → resource.spec mapping
600
+ const resourceIds = resources ? new Set(Object.keys(resources)) : undefined;
601
+ const statusCelExpressions = Object.keys(dynamicFields).length > 0
602
+ ? serializeStatusMappingsToCel(dynamicFields, nestedStatusCel, resourceIds)
603
+ : {};
118
604
  // Extract just the version part for the schema (Kro expects v1alpha1, not kro.run/v1alpha1)
119
605
  const schemaApiVersion = schemaDefinition.apiVersion.includes('/')
120
606
  ? schemaDefinition.apiVersion.split('/')[1] || schemaDefinition.apiVersion
121
607
  : schemaDefinition.apiVersion;
122
- return {
608
+ const schema = {
123
609
  apiVersion: schemaApiVersion,
124
610
  kind: schemaDefinition.kind,
125
611
  spec: specFields,
@@ -127,6 +613,22 @@ export function arktypeToKroSchema(name, schemaDefinition, _resources, statusMap
127
613
  ...statusCelExpressions,
128
614
  },
129
615
  };
616
+ // Attach metadata as non-enumerable properties — they're typed on
617
+ // KroSimpleSchemaWithMetadata so consumers can read them without casts,
618
+ // but non-enumerable so they don't appear in the schema YAML.
619
+ if (ternaryConditionals.length > 0) {
620
+ Object.defineProperty(schema, '__ternaryConditionals', {
621
+ value: ternaryConditionals,
622
+ enumerable: false,
623
+ });
624
+ }
625
+ if (omitFields.length > 0) {
626
+ Object.defineProperty(schema, '__omitFields', {
627
+ value: omitFields,
628
+ enumerable: false,
629
+ });
630
+ }
631
+ return schema;
130
632
  }
131
633
  /**
132
634
  * Generate a minimal Kro schema from a resource map (no Arktype).
@@ -157,7 +659,7 @@ export function generateKroSchema(name, _resources) {
157
659
  * @see {@link arktypeToKroSchema} for the low-level variant.
158
660
  * @see {@link generateKroSchema} for a simple variant without Arktype.
159
661
  */
160
- export function generateKroSchemaFromArktype(name, schemaDefinition, resources, statusMappings) {
161
- return arktypeToKroSchema(name, schemaDefinition, resources, statusMappings);
662
+ export function generateKroSchemaFromArktype(name, schemaDefinition, resources, statusMappings, nestedStatusCel) {
663
+ return arktypeToKroSchema(name, schemaDefinition, resources, statusMappings, nestedStatusCel);
162
664
  }
163
665
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/core/serialization/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/core/serialization/schema.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,10 @@ export interface StatusAnalysisPipelineResult {
50
50
  analyzedStatusMappings: Record<string, unknown>;
51
51
  mappingAnalysis: ReturnType<typeof analyzeStatusMappingTypes>;
52
52
  imperativeAnalysisSucceeded: boolean;
53
+ /** Raw Phase B fn.toString results (before merge filtering). Available when
54
+ * Phase B ran for an imperative composition. Used by nested composition
55
+ * status extraction to recover CEL from garbled fn.toString output. */
56
+ phaseBStatusMappings?: Record<string, unknown> | undefined;
53
57
  }
54
58
  /**
55
59
  * Run the full status analysis pipeline.