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
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Amazon ECR Registry Handler
3
+ *
4
+ * Uses the AWS SDK's credential provider chain for all authentication.
5
+ * Supports env vars, profiles, SSO sessions, instance roles, and role
6
+ * assumption — all through the SDK's standard mechanisms.
7
+ */
8
+ import { CreateRepositoryCommand, DescribeRepositoriesCommand, ECRClient, GetAuthorizationTokenCommand, } from '@aws-sdk/client-ecr';
9
+ import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts';
10
+ import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
11
+ import { getComponentLogger } from '../../logging/index.js';
12
+ import { ContainerBuildError } from '../errors.js';
13
+ import { execDocker } from '../exec.js';
14
+ const logger = getComponentLogger('container-registry-ecr');
15
+ export class EcrRegistryHandler {
16
+ config;
17
+ resolvedAccountId;
18
+ resolvedRegion;
19
+ credentialProvider;
20
+ ecrClient;
21
+ constructor(config) {
22
+ this.config = config;
23
+ this.resolvedRegion = config.region
24
+ ?? process.env.AWS_REGION
25
+ ?? process.env.AWS_DEFAULT_REGION
26
+ ?? 'us-east-1';
27
+ this.credentialProvider = fromNodeProviderChain(config.credentials ?? {});
28
+ this.ecrClient = new ECRClient({
29
+ region: this.resolvedRegion,
30
+ credentials: this.credentialProvider,
31
+ });
32
+ }
33
+ async resolveImageUri(imageName, tag) {
34
+ const accountId = await this.getAccountId();
35
+ return `${accountId}.dkr.ecr.${this.resolvedRegion}.amazonaws.com/${imageName}:${tag}`;
36
+ }
37
+ async authenticate() {
38
+ try {
39
+ const authResponse = await this.ecrClient.send(new GetAuthorizationTokenCommand({}));
40
+ const authData = authResponse.authorizationData?.[0];
41
+ if (!authData?.authorizationToken || !authData.proxyEndpoint) {
42
+ throw new Error('ECR returned empty authorization data');
43
+ }
44
+ const decoded = Buffer.from(authData.authorizationToken, 'base64').toString();
45
+ const colonIndex = decoded.indexOf(':');
46
+ if (colonIndex === -1)
47
+ throw new Error('Failed to decode ECR authorization token');
48
+ const password = decoded.slice(colonIndex + 1);
49
+ await execDocker(['login', '--username', 'AWS', '--password-stdin', authData.proxyEndpoint], {
50
+ stdin: password,
51
+ quiet: true,
52
+ });
53
+ logger.info('Authenticated with ECR', { endpoint: authData.proxyEndpoint });
54
+ if (!this.resolvedAccountId) {
55
+ const match = authData.proxyEndpoint.match(/https?:\/\/(\d+)\.dkr\.ecr/);
56
+ if (match?.[1])
57
+ this.resolvedAccountId = match[1];
58
+ }
59
+ }
60
+ catch (error) {
61
+ if (error instanceof ContainerBuildError)
62
+ throw error;
63
+ throw ContainerBuildError.ecrAuthFailed(error instanceof Error ? error : new Error(String(error)));
64
+ }
65
+ }
66
+ async push(imageUri, imageName) {
67
+ if (this.config.createRepository !== false) {
68
+ await this.ensureRepositoryExists(imageName);
69
+ }
70
+ try {
71
+ await execDocker(['push', imageUri]);
72
+ logger.info('Image pushed to ECR', { imageUri });
73
+ return true;
74
+ }
75
+ catch (error) {
76
+ throw ContainerBuildError.pushFailed(imageUri, error instanceof Error ? error : new Error(String(error)));
77
+ }
78
+ }
79
+ async getAccountId() {
80
+ if (this.config.accountId)
81
+ return this.config.accountId;
82
+ if (this.resolvedAccountId)
83
+ return this.resolvedAccountId;
84
+ try {
85
+ const sts = new STSClient({
86
+ region: this.resolvedRegion,
87
+ credentials: this.credentialProvider,
88
+ });
89
+ const identity = await sts.send(new GetCallerIdentityCommand({}));
90
+ if (!identity.Account)
91
+ throw new Error('STS returned no account ID');
92
+ this.resolvedAccountId = identity.Account;
93
+ return identity.Account;
94
+ }
95
+ catch (error) {
96
+ throw ContainerBuildError.ecrAuthFailed(new Error(`Cannot determine AWS account ID. Provide accountId explicitly or ensure valid AWS credentials.\n` +
97
+ `Cause: ${error instanceof Error ? error.message : String(error)}`));
98
+ }
99
+ }
100
+ async ensureRepositoryExists(repoName) {
101
+ try {
102
+ await this.ecrClient.send(new DescribeRepositoriesCommand({ repositoryNames: [repoName] }));
103
+ }
104
+ catch (error) {
105
+ if (error.name === 'RepositoryNotFoundException') {
106
+ logger.info('Creating ECR repository', { repoName });
107
+ await this.ecrClient.send(new CreateRepositoryCommand({ repositoryName: repoName }));
108
+ }
109
+ else {
110
+ throw new ContainerBuildError(`ECR repository check failed for "${repoName}": ${error instanceof Error ? error.message : String(error)}`, 'ECR_REPOSITORY_ERROR', [
111
+ `Check IAM permissions: ecr:DescribeRepositories and ecr:CreateRepository are required.`,
112
+ `Or set createRepository: false and create the repository manually.`,
113
+ ], error instanceof Error ? error : undefined);
114
+ }
115
+ }
116
+ }
117
+ }
118
+ //# sourceMappingURL=ecr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecr.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/ecr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Registry Resolver
3
+ *
4
+ * Maps a RegistryConfig to its handler implementation.
5
+ */
6
+ import type { RegistryConfig, RegistryHandler } from './types.js';
7
+ export declare function resolveRegistry(config: RegistryConfig): RegistryHandler;
8
+ export type { RegistryConfig, RegistryHandler } from './types.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CAavE;AAED,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Registry Resolver
3
+ *
4
+ * Maps a RegistryConfig to its handler implementation.
5
+ */
6
+ import { ContainerBuildError } from '../errors.js';
7
+ import { EcrRegistryHandler } from './ecr.js';
8
+ import { OrbstackRegistryHandler } from './orbstack.js';
9
+ export function resolveRegistry(config) {
10
+ switch (config.type) {
11
+ case 'orbstack':
12
+ return new OrbstackRegistryHandler();
13
+ case 'ecr':
14
+ return new EcrRegistryHandler(config);
15
+ case 'gcr':
16
+ throw ContainerBuildError.registryNotSupported('gcr');
17
+ case 'acr':
18
+ throw ContainerBuildError.registryNotSupported('acr');
19
+ default:
20
+ throw ContainerBuildError.registryNotSupported(String(config.type));
21
+ }
22
+ }
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACvC,KAAK,KAAK;YACR,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD,KAAK,KAAK;YACR,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxD;YACE,MAAM,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAE,MAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Orbstack Registry Handler
3
+ *
4
+ * Orbstack makes locally-built Docker images automatically available to its
5
+ * built-in Kubernetes cluster. No push step is needed — `docker build` is
6
+ * sufficient.
7
+ */
8
+ import type { RegistryHandler } from './types.js';
9
+ export declare class OrbstackRegistryHandler implements RegistryHandler {
10
+ resolveImageUri(imageName: string, tag: string): Promise<string>;
11
+ authenticate(): Promise<void>;
12
+ push(_imageUri: string, _imageName: string): Promise<boolean>;
13
+ }
14
+ //# sourceMappingURL=orbstack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orbstack.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,qBAAa,uBAAwB,YAAW,eAAe;IACvD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAKpE"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Orbstack Registry Handler
3
+ *
4
+ * Orbstack makes locally-built Docker images automatically available to its
5
+ * built-in Kubernetes cluster. No push step is needed — `docker build` is
6
+ * sufficient.
7
+ */
8
+ import { getComponentLogger } from '../../logging/index.js';
9
+ const logger = getComponentLogger('container-registry-orbstack');
10
+ export class OrbstackRegistryHandler {
11
+ async resolveImageUri(imageName, tag) {
12
+ return `${imageName}:${tag}`;
13
+ }
14
+ async authenticate() {
15
+ // No authentication needed — Orbstack uses the local Docker daemon.
16
+ logger.debug('Orbstack registry: no authentication needed');
17
+ }
18
+ async push(_imageUri, _imageName) {
19
+ // No push needed — images built locally are auto-available to Orbstack K8s.
20
+ logger.debug('Orbstack registry: skipping push (images auto-available to local K8s)');
21
+ return false;
22
+ }
23
+ }
24
+ //# sourceMappingURL=orbstack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orbstack.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/orbstack.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,MAAM,MAAM,GAAG,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;AAEjE,MAAM,OAAO,uBAAuB;IAClC,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,GAAW;QAClD,OAAO,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,oEAAoE;QACpE,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,UAAkB;QAC9C,4EAA4E;QAC5E,MAAM,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Container Registry Types
3
+ *
4
+ * Defines the registry configuration interface and the internal handler
5
+ * contract. New registries (GCR, ACR, etc.) are added by:
6
+ * 1. Adding a config variant to RegistryConfig
7
+ * 2. Implementing RegistryHandler
8
+ * 3. Registering in the resolver
9
+ */
10
+ export interface OrbstackRegistryConfig {
11
+ type: 'orbstack';
12
+ }
13
+ /**
14
+ * ECR registry configuration.
15
+ *
16
+ * Credential options are passed directly to the AWS SDK's
17
+ * `fromNodeProviderChain`, which handles env vars, profiles,
18
+ * SSO sessions, instance roles, web identity tokens, and role
19
+ * assumption. Any option accepted by the SDK's DefaultProviderInit
20
+ * can be passed via `credentials`.
21
+ */
22
+ export interface EcrRegistryConfig {
23
+ type: 'ecr';
24
+ /** AWS account ID. Auto-detected from STS if omitted. */
25
+ accountId?: string;
26
+ /** AWS region. Falls back to AWS_REGION / AWS_DEFAULT_REGION env vars. */
27
+ region?: string;
28
+ /** Create the ECR repository if it doesn't exist (default: true). */
29
+ createRepository?: boolean;
30
+ /**
31
+ * AWS credential options passed to `fromNodeProviderChain`.
32
+ * Common options: `profile`, `roleArn`, `roleSessionName`,
33
+ * `mfaCodeProvider`, `configFilepath`.
34
+ * Omit to use the default credential chain (env vars, profiles, SSO, etc.).
35
+ */
36
+ credentials?: import('@aws-sdk/credential-provider-node').DefaultProviderInit;
37
+ }
38
+ export interface GcrRegistryConfig {
39
+ type: 'gcr';
40
+ projectId: string;
41
+ }
42
+ export interface AcrRegistryConfig {
43
+ type: 'acr';
44
+ registryName: string;
45
+ }
46
+ /** Discriminated union of all supported container registries. */
47
+ export type RegistryConfig = OrbstackRegistryConfig | EcrRegistryConfig | GcrRegistryConfig | AcrRegistryConfig;
48
+ export interface ContainerBuildOptions {
49
+ /** Path to the build context directory (contains the Dockerfile). */
50
+ context: string;
51
+ /** Dockerfile path relative to context (default: 'Dockerfile'). */
52
+ dockerfile?: string;
53
+ /** Image name without registry prefix or tag (e.g., 'my-app'). */
54
+ imageName: string;
55
+ /** Tag: explicit string, 'content-hash' for SHA-based, or undefined for 'latest'. */
56
+ tag?: string;
57
+ /** Target platform (e.g., 'linux/amd64'). Omit for native platform. */
58
+ platform?: string;
59
+ /** Additional Docker build arguments. */
60
+ buildArgs?: Record<string, string>;
61
+ /** Docker build target for multi-stage builds. */
62
+ target?: string;
63
+ /** Suppress build output — only log on error. */
64
+ quiet?: boolean;
65
+ /** Build timeout in milliseconds (default: 300_000 = 5 minutes). */
66
+ timeout?: number;
67
+ /**
68
+ * Extra Docker CLI arguments appended to the build command.
69
+ * Escape hatch for --secret, --ssh, --cache-from, etc.
70
+ */
71
+ extraDockerArgs?: string[];
72
+ /** Registry to push the built image to. */
73
+ registry: RegistryConfig;
74
+ }
75
+ export interface ContainerBuildResult {
76
+ /** Full image URI (e.g., '123456.dkr.ecr.us-east-1.amazonaws.com/app:sha-abc123'). */
77
+ imageUri: string;
78
+ /** The tag that was applied. */
79
+ tag: string;
80
+ /** Build duration in milliseconds. */
81
+ duration: number;
82
+ /** Whether the image was pushed to a remote registry. */
83
+ pushed: boolean;
84
+ }
85
+ /** Internal interface that each registry implementation fulfills. */
86
+ export interface RegistryHandler {
87
+ /** Compute the full image URI (registry prefix + name + tag). */
88
+ resolveImageUri(imageName: string, tag: string): Promise<string>;
89
+ /** Authenticate with the registry. No-op for local registries. */
90
+ authenticate(): Promise<void>;
91
+ /** Push the image to the registry. Returns true if pushed, false for local registries. */
92
+ push(imageUri: string, imageName: string): Promise<boolean>;
93
+ }
94
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/containers/registries/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,mCAAmC,EAAE,mBAAmB,CAAC;CAC/E;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,iEAAiE;AACjE,MAAM,MAAM,cAAc,GACtB,sBAAsB,GACtB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,CAAC;AAMtB,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,sFAAsF;IACtF,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,MAAM,EAAE,OAAO,CAAC;CACjB;AAMD,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,kEAAkE;IAClE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,0FAA0F;IAC1F,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Container Registry Types
3
+ *
4
+ * Defines the registry configuration interface and the internal handler
5
+ * contract. New registries (GCR, ACR, etc.) are added by:
6
+ * 1. Adding a config variant to RegistryConfig
7
+ * 2. Implementing RegistryHandler
8
+ * 3. Registering in the resolver
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/containers/registries/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -8,6 +8,10 @@ import type { DependencyNode } from '../types/dependencies.js';
8
8
  import type { DeployableK8sResource, Enhanced } from '../types/kubernetes.js';
9
9
  export declare class DependencyGraph {
10
10
  private nodes;
11
+ /**
12
+ * Check if a node exists in the graph
13
+ */
14
+ hasNode(id: string): boolean;
11
15
  /**
12
16
  * Add a node to the dependency graph
13
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/core/dependencies/graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAE9E,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAqC;IAElD;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI;IAiBtF;;;;OAIG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAuBxD;;OAEG;IACH,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAIvC;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/C;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKrC;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKnC;;OAEG;IACH,SAAS,IAAI,OAAO;IASpB;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE,EAAE;IAyCxB;;;OAGG;IACH,mBAAmB,IAAI,MAAM,EAAE;IA4C/B;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAMxB;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAMxB;;OAEG;IACH,KAAK,IAAI,eAAe;IAkBxB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe;CA0BhD"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/core/dependencies/graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAE9E,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAqC;IAElD;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI;IAiBtF;;;;OAIG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAuBxD;;OAEG;IACH,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAIvC;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/C;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKrC;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKnC;;OAEG;IACH,SAAS,IAAI,OAAO;IASpB;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE,EAAE;IAyCxB;;;OAGG;IACH,mBAAmB,IAAI,MAAM,EAAE;IA4C/B;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAMxB;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAMxB;;OAEG;IACH,KAAK,IAAI,eAAe;IAkBxB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe;CA0BhD"}
@@ -7,6 +7,12 @@
7
7
  import { CircularDependencyError, TypeKroError } from '../errors.js';
8
8
  export class DependencyGraph {
9
9
  nodes = new Map();
10
+ /**
11
+ * Check if a node exists in the graph
12
+ */
13
+ hasNode(id) {
14
+ return this.nodes.has(id);
15
+ }
10
16
  /**
11
17
  * Add a node to the dependency graph
12
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/core/dependencies/graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/core/dependencies/graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIrE,MAAM,OAAO,eAAe;IAClB,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD;;OAEG;IACH,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,EAAU,EAAE,QAA2D;QAC7E,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,YAAY,CACpB,iBAAiB,EAAE,sCAAsC,EACzD,sBAAsB,EACtB,EAAE,MAAM,EAAE,EAAE,EAAE,CACf,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE;YACjB,EAAE;YACF,QAAQ;YACR,YAAY,EAAE,IAAI,GAAG,EAAE;YACvB,UAAU,EAAE,IAAI,GAAG,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,WAAmB,EAAE,YAAoB;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEhD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,YAAY,CACpB,mBAAmB,WAAW,sBAAsB,EACpD,sBAAsB,EACtB,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAC3C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,YAAY,CACpB,oBAAoB,YAAY,sBAAsB,EACtD,sBAAsB,EACtB,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,CAC7C,CAAC;QACJ,CAAC;QAED,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACzC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,EAAU;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,EAAU;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,CAAC;YACH,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,KAAK,YAAY,uBAAuB,CAAC;QAClD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,MAAM,MAAM,GAAe,EAAE,CAAC;QAE9B,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,IAAc,EAAQ,EAAE;YACnD,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/B,gBAAgB;gBAChB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YAED,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAElB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC7C,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,mBAAmB;QACjB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,6BAA6B;QAC7B,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM;gBAAE,MAAM;YACnB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1C,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAClD,IAAI,eAAe,KAAK,SAAS;oBAAE,SAAS;gBAC5C,MAAM,WAAW,GAAG,eAAe,GAAG,CAAC,CAAC;gBACxC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBAEvC,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;oBACtB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,uBAAuB,CAAC,iCAAiC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QACxF,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,CAAC;aACnD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC;aACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAErC,gBAAgB;QAChB,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,gBAAgB;QAChB,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC7C,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAiB;QAC3B,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAEnC,6CAA6C;QAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,IAAI,EAAE,CAAC;gBACT,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC7C,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;wBAChC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,4DAA4D"}
@@ -24,6 +24,19 @@ export declare class DependencyResolver {
24
24
  * Extract all references from a resource
25
25
  */
26
26
  private extractReferences;
27
+ /**
28
+ * Parse embedded KubernetesRef marker strings from serialized values.
29
+ *
30
+ * When a KubernetesRef proxy is used in a template literal (e.g.,
31
+ * `postgresql://${database.status.writeService}:5432/mydb`), the
32
+ * Symbol.toPrimitive handler produces a marker string:
33
+ * __KUBERNETES_REF_{resourceId}_{fieldPath}__
34
+ *
35
+ * This method extracts those markers so the dependency resolver can
36
+ * detect references to other resources embedded in string values.
37
+ * The same marker format is used by schema-proxy.ts.
38
+ */
39
+ private parseMarkerReferences;
27
40
  /**
28
41
  * Parse CEL expressions to extract resource references
29
42
  */
@@ -32,6 +45,21 @@ export declare class DependencyResolver {
32
45
  * Analyze deployment order and identify parallelizable resources
33
46
  */
34
47
  analyzeDeploymentOrder(graph: DependencyGraph): DeploymentPlan;
48
+ /**
49
+ * Analyze deletion order — reverse of deployment levels.
50
+ *
51
+ * Returns parallelizable levels where the LAST deployment level (leaf
52
+ * resources with the most dependencies) is deleted FIRST. This ensures
53
+ * dependents are removed before their dependencies (e.g., App before
54
+ * Database, Database before Namespace).
55
+ *
56
+ * Resources with `lifecycle: 'shared'` are excluded from the deletion plan.
57
+ */
58
+ analyzeDeletionOrder(graph: DependencyGraph, sharedResourceIds?: Set<string>): DeploymentPlan;
59
+ /**
60
+ * Build a subgraph excluding shared resources for deletion planning.
61
+ */
62
+ private buildDeletionSubgraph;
35
63
  /**
36
64
  * Get rollback order (reverse of deployment order)
37
65
  */
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/core/dependencies/resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAA6C;IAE3D;;OAEG;IACH,oBAAoB,CAClB,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,GAC7D,eAAe;IAgClB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAIrD;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAS9C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+BzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,cAAc;IA0C9D;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAKlD;;OAEG;IACH,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAI1D;;OAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;CAGxD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/core/dependencies/resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAA6C;IAE3D;;OAEG;IACH,oBAAoB,CAClB,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,GAC7D,eAAe;IAkFlB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAIrD;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAS9C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,cAAc;IA0C9D;;;;;;;;;OASG;IACH,oBAAoB,CAClB,KAAK,EAAE,eAAe,EACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,cAAc;IAejB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAKlD;;OAEG;IACH,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;IAI1D;;OAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE;CAGxD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -5,9 +5,10 @@
5
5
  * topological ordering for deployment.
6
6
  */
7
7
  import { isCelExpression, isKubernetesRef } from '../../utils/type-guards.js';
8
- import { KUBERNETES_REF_BRAND } from '../constants/brands.js';
8
+ import { KUBERNETES_REF_BRAND, KUBERNETES_REF_MARKER_PATTERN } from '../constants/brands.js';
9
9
  import { CircularDependencyError, TypeKroError } from '../errors.js';
10
10
  import { getComponentLogger } from '../logging/index.js';
11
+ import { getResourceId } from '../metadata/index.js';
11
12
  import { DependencyGraph } from './graph.js';
12
13
  export class DependencyResolver {
13
14
  logger = getComponentLogger('dependency-resolver');
@@ -16,9 +17,17 @@ export class DependencyResolver {
16
17
  */
17
18
  buildDependencyGraph(resources) {
18
19
  const graph = new DependencyGraph();
19
- // Add all resources as nodes first
20
+ // Add all resources as nodes and build a reverse map from original
21
+ // composition IDs (e.g., 'database') to graph IDs (e.g., 'testappResource0Database').
22
+ // Marker strings in template literals use the original composition ID, but
23
+ // the graph nodes use the prefixed deployment ID.
24
+ const originalIdToGraphId = new Map();
20
25
  for (const resource of resources) {
21
26
  graph.addNode(resource.id, resource);
27
+ const originalId = getResourceId(resource);
28
+ if (originalId && originalId !== resource.id) {
29
+ originalIdToGraphId.set(originalId, resource.id);
30
+ }
22
31
  }
23
32
  // Analyze each resource for references and add edges
24
33
  for (const resource of resources) {
@@ -26,10 +35,19 @@ export class DependencyResolver {
26
35
  for (const ref of references) {
27
36
  // Skip schema references (these are internal TypeKro references)
28
37
  if (ref.resourceId !== '__schema__') {
29
- try {
30
- graph.addEdge(resource.id, ref.resourceId);
38
+ // Resolve the reference ID: try graph ID first, then original ID mapping
39
+ const targetId = graph.hasNode(ref.resourceId)
40
+ ? ref.resourceId
41
+ : originalIdToGraphId.get(ref.resourceId);
42
+ if (targetId) {
43
+ try {
44
+ graph.addEdge(resource.id, targetId);
45
+ }
46
+ catch {
47
+ // Edge already exists — safe to ignore
48
+ }
31
49
  }
32
- catch {
50
+ else {
33
51
  // Log warning if referenced resource doesn't exist in the graph
34
52
  // This might be an external reference that will be resolved at runtime
35
53
  this.logger.warn('Reference to unknown resource', {
@@ -40,6 +58,37 @@ export class DependencyResolver {
40
58
  }
41
59
  }
42
60
  }
61
+ // Detect implicit namespace dependencies: if a resource has metadata.namespace
62
+ // matching the metadata.name of a Namespace resource in the graph, the resource
63
+ // depends on that Namespace being created first.
64
+ const namespaceResources = new Map(); // namespace name → resource graph ID
65
+ for (const resource of resources) {
66
+ if (resource.kind === 'Namespace' && resource.metadata?.name) {
67
+ namespaceResources.set(resource.metadata.name, resource.id);
68
+ }
69
+ }
70
+ if (namespaceResources.size > 0) {
71
+ for (const resource of resources) {
72
+ const ns = resource.metadata?.namespace;
73
+ if (ns && namespaceResources.has(ns)) {
74
+ const nsResourceId = namespaceResources.get(ns);
75
+ // Don't add self-dependency
76
+ if (nsResourceId !== resource.id) {
77
+ try {
78
+ graph.addEdge(resource.id, nsResourceId);
79
+ this.logger.debug('Added implicit namespace dependency', {
80
+ resource: resource.id,
81
+ namespace: ns,
82
+ namespaceResource: nsResourceId,
83
+ });
84
+ }
85
+ catch {
86
+ // Edge already exists or other issue — safe to ignore
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
43
92
  return graph;
44
93
  }
45
94
  /**
@@ -76,6 +125,12 @@ export class DependencyResolver {
76
125
  const celRefs = this.parseCelReferences(obj.expression);
77
126
  refs.push(...celRefs);
78
127
  }
128
+ else if (typeof obj === 'string') {
129
+ // Detect embedded KubernetesRef marker strings from template literals.
130
+ // Format: __KUBERNETES_REF_{resourceId}_{fieldPath}__
131
+ const markerRefs = this.parseMarkerReferences(obj);
132
+ refs.push(...markerRefs);
133
+ }
79
134
  else if (Array.isArray(obj)) {
80
135
  obj.forEach((item, index) => {
81
136
  traverse(item, `${path}[${index}]`);
@@ -90,6 +145,37 @@ export class DependencyResolver {
90
145
  traverse(resource);
91
146
  return refs;
92
147
  }
148
+ /**
149
+ * Parse embedded KubernetesRef marker strings from serialized values.
150
+ *
151
+ * When a KubernetesRef proxy is used in a template literal (e.g.,
152
+ * `postgresql://${database.status.writeService}:5432/mydb`), the
153
+ * Symbol.toPrimitive handler produces a marker string:
154
+ * __KUBERNETES_REF_{resourceId}_{fieldPath}__
155
+ *
156
+ * This method extracts those markers so the dependency resolver can
157
+ * detect references to other resources embedded in string values.
158
+ * The same marker format is used by schema-proxy.ts.
159
+ */
160
+ parseMarkerReferences(value) {
161
+ const refs = [];
162
+ // Match __KUBERNETES_REF_{resourceId}_{fieldPath}__
163
+ // resourceId: word chars, hyphens, digits (e.g., 'database', 'inngest-bootstrap1')
164
+ // fieldPath: word chars, dots, hyphens (e.g., 'status.writeService', 'metadata.name')
165
+ // Exclude __schema__ refs — those are schema proxy refs, not resource dependencies
166
+ const markerPattern = new RegExp(KUBERNETES_REF_MARKER_PATTERN.source, 'g');
167
+ let match = markerPattern.exec(value);
168
+ while (match !== null) {
169
+ const [, resourceId, fieldPath] = match;
170
+ refs.push({
171
+ [KUBERNETES_REF_BRAND]: true,
172
+ resourceId,
173
+ fieldPath,
174
+ });
175
+ match = markerPattern.exec(value);
176
+ }
177
+ return refs;
178
+ }
93
179
  /**
94
180
  * Parse CEL expressions to extract resource references
95
181
  */
@@ -143,6 +229,53 @@ export class DependencyResolver {
143
229
  maxParallelism: Math.max(...levels.map((level) => level.length)),
144
230
  };
145
231
  }
232
+ /**
233
+ * Analyze deletion order — reverse of deployment levels.
234
+ *
235
+ * Returns parallelizable levels where the LAST deployment level (leaf
236
+ * resources with the most dependencies) is deleted FIRST. This ensures
237
+ * dependents are removed before their dependencies (e.g., App before
238
+ * Database, Database before Namespace).
239
+ *
240
+ * Resources with `lifecycle: 'shared'` are excluded from the deletion plan.
241
+ */
242
+ analyzeDeletionOrder(graph, sharedResourceIds) {
243
+ // Build a subgraph excluding shared resources
244
+ const deletionGraph = sharedResourceIds
245
+ ? this.buildDeletionSubgraph(graph, sharedResourceIds)
246
+ : graph;
247
+ const deploymentPlan = this.analyzeDeploymentOrder(deletionGraph);
248
+ return {
249
+ levels: [...deploymentPlan.levels].reverse(),
250
+ totalResources: deploymentPlan.totalResources,
251
+ maxParallelism: deploymentPlan.maxParallelism,
252
+ };
253
+ }
254
+ /**
255
+ * Build a subgraph excluding shared resources for deletion planning.
256
+ */
257
+ buildDeletionSubgraph(graph, sharedResourceIds) {
258
+ const subgraph = new DependencyGraph();
259
+ for (const nodeId of graph.getTopologicalOrder()) {
260
+ if (sharedResourceIds.has(nodeId))
261
+ continue;
262
+ const node = graph.getNode(nodeId);
263
+ if (node)
264
+ subgraph.addNode(nodeId, node.resource);
265
+ }
266
+ for (const nodeId of graph.getTopologicalOrder()) {
267
+ if (sharedResourceIds.has(nodeId))
268
+ continue;
269
+ for (const dep of graph.getDependencies(nodeId)) {
270
+ if (sharedResourceIds.has(dep))
271
+ continue;
272
+ if (subgraph.hasNode(dep)) {
273
+ subgraph.addEdge(nodeId, dep);
274
+ }
275
+ }
276
+ }
277
+ return subgraph;
278
+ }
146
279
  /**
147
280
  * Get rollback order (reverse of deployment order)
148
281
  */