typekro 0.1.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 (620) hide show
  1. package/LICENSE +185 -0
  2. package/README.md +1137 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/alchemy/deployers.d.ts +39 -0
  5. package/dist/alchemy/deployers.d.ts.map +1 -0
  6. package/dist/alchemy/deployers.js +194 -0
  7. package/dist/alchemy/deployers.js.map +1 -0
  8. package/dist/alchemy/deployment.d.ts +12 -0
  9. package/dist/alchemy/deployment.d.ts.map +1 -0
  10. package/dist/alchemy/deployment.js +12 -0
  11. package/dist/alchemy/deployment.js.map +1 -0
  12. package/dist/alchemy/index.d.ts +17 -0
  13. package/dist/alchemy/index.d.ts.map +1 -0
  14. package/dist/alchemy/index.js +20 -0
  15. package/dist/alchemy/index.js.map +1 -0
  16. package/dist/alchemy/resolver.d.ts +127 -0
  17. package/dist/alchemy/resolver.d.ts.map +1 -0
  18. package/dist/alchemy/resolver.js +341 -0
  19. package/dist/alchemy/resolver.js.map +1 -0
  20. package/dist/alchemy/resource-registration.d.ts +22 -0
  21. package/dist/alchemy/resource-registration.d.ts.map +1 -0
  22. package/dist/alchemy/resource-registration.js +218 -0
  23. package/dist/alchemy/resource-registration.js.map +1 -0
  24. package/dist/alchemy/type-inference.d.ts +13 -0
  25. package/dist/alchemy/type-inference.d.ts.map +1 -0
  26. package/dist/alchemy/type-inference.js +67 -0
  27. package/dist/alchemy/type-inference.js.map +1 -0
  28. package/dist/alchemy/types.d.ts +92 -0
  29. package/dist/alchemy/types.d.ts.map +1 -0
  30. package/dist/alchemy/types.js +8 -0
  31. package/dist/alchemy/types.js.map +1 -0
  32. package/dist/alchemy/utilities.d.ts +12 -0
  33. package/dist/alchemy/utilities.d.ts.map +1 -0
  34. package/dist/alchemy/utilities.js +16 -0
  35. package/dist/alchemy/utilities.js.map +1 -0
  36. package/dist/alchemy/wrapper.d.ts +16 -0
  37. package/dist/alchemy/wrapper.d.ts.map +1 -0
  38. package/dist/alchemy/wrapper.js +23 -0
  39. package/dist/alchemy/wrapper.js.map +1 -0
  40. package/dist/core/composition/composition.d.ts +94 -0
  41. package/dist/core/composition/composition.d.ts.map +1 -0
  42. package/dist/core/composition/composition.js +230 -0
  43. package/dist/core/composition/composition.js.map +1 -0
  44. package/dist/core/composition/index.d.ts +12 -0
  45. package/dist/core/composition/index.d.ts.map +1 -0
  46. package/dist/core/composition/index.js +12 -0
  47. package/dist/core/composition/index.js.map +1 -0
  48. package/dist/core/composition/typekro-runtime/index.d.ts +3 -0
  49. package/dist/core/composition/typekro-runtime/index.d.ts.map +1 -0
  50. package/dist/core/composition/typekro-runtime/index.js +2 -0
  51. package/dist/core/composition/typekro-runtime/index.js.map +1 -0
  52. package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts +39 -0
  53. package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts.map +1 -0
  54. package/dist/core/composition/typekro-runtime/typekro-runtime.js +100 -0
  55. package/dist/core/composition/typekro-runtime/typekro-runtime.js.map +1 -0
  56. package/dist/core/composition/typekro-runtime/types.d.ts +16 -0
  57. package/dist/core/composition/typekro-runtime/types.d.ts.map +1 -0
  58. package/dist/core/composition/typekro-runtime/types.js +12 -0
  59. package/dist/core/composition/typekro-runtime/types.js.map +1 -0
  60. package/dist/core/composition/types.d.ts +264 -0
  61. package/dist/core/composition/types.d.ts.map +1 -0
  62. package/dist/core/composition/types.js +2 -0
  63. package/dist/core/composition/types.js.map +1 -0
  64. package/dist/core/constants/brands.d.ts +42 -0
  65. package/dist/core/constants/brands.d.ts.map +1 -0
  66. package/dist/core/constants/brands.js +51 -0
  67. package/dist/core/constants/brands.js.map +1 -0
  68. package/dist/core/dependencies/graph.d.ts +67 -0
  69. package/dist/core/dependencies/graph.d.ts.map +1 -0
  70. package/dist/core/dependencies/graph.js +220 -0
  71. package/dist/core/dependencies/graph.js.map +1 -0
  72. package/dist/core/dependencies/index.d.ts +7 -0
  73. package/dist/core/dependencies/index.d.ts.map +1 -0
  74. package/dist/core/dependencies/index.js +8 -0
  75. package/dist/core/dependencies/index.js.map +1 -0
  76. package/dist/core/dependencies/resolver.d.ts +53 -0
  77. package/dist/core/dependencies/resolver.d.ts.map +1 -0
  78. package/dist/core/dependencies/resolver.js +167 -0
  79. package/dist/core/dependencies/resolver.js.map +1 -0
  80. package/dist/core/dependencies/type-guards.d.ts +17 -0
  81. package/dist/core/dependencies/type-guards.d.ts.map +1 -0
  82. package/dist/core/dependencies/type-guards.js +35 -0
  83. package/dist/core/dependencies/type-guards.js.map +1 -0
  84. package/dist/core/deployment/deployment-strategies.d.ts +12 -0
  85. package/dist/core/deployment/deployment-strategies.d.ts.map +1 -0
  86. package/dist/core/deployment/deployment-strategies.js +11 -0
  87. package/dist/core/deployment/deployment-strategies.js.map +1 -0
  88. package/dist/core/deployment/direct-factory.d.ts +111 -0
  89. package/dist/core/deployment/direct-factory.d.ts.map +1 -0
  90. package/dist/core/deployment/direct-factory.js +627 -0
  91. package/dist/core/deployment/direct-factory.js.map +1 -0
  92. package/dist/core/deployment/engine.d.ts +128 -0
  93. package/dist/core/deployment/engine.d.ts.map +1 -0
  94. package/dist/core/deployment/engine.js +1408 -0
  95. package/dist/core/deployment/engine.js.map +1 -0
  96. package/dist/core/deployment/index.d.ts +14 -0
  97. package/dist/core/deployment/index.d.ts.map +1 -0
  98. package/dist/core/deployment/index.js +14 -0
  99. package/dist/core/deployment/index.js.map +1 -0
  100. package/dist/core/deployment/kro-factory.d.ts +143 -0
  101. package/dist/core/deployment/kro-factory.d.ts.map +1 -0
  102. package/dist/core/deployment/kro-factory.js +837 -0
  103. package/dist/core/deployment/kro-factory.js.map +1 -0
  104. package/dist/core/deployment/readiness.d.ts +54 -0
  105. package/dist/core/deployment/readiness.d.ts.map +1 -0
  106. package/dist/core/deployment/readiness.js +175 -0
  107. package/dist/core/deployment/readiness.js.map +1 -0
  108. package/dist/core/deployment/rollback-manager.d.ts +63 -0
  109. package/dist/core/deployment/rollback-manager.d.ts.map +1 -0
  110. package/dist/core/deployment/rollback-manager.js +225 -0
  111. package/dist/core/deployment/rollback-manager.js.map +1 -0
  112. package/dist/core/deployment/shared-utilities.d.ts +41 -0
  113. package/dist/core/deployment/shared-utilities.d.ts.map +1 -0
  114. package/dist/core/deployment/shared-utilities.js +100 -0
  115. package/dist/core/deployment/shared-utilities.js.map +1 -0
  116. package/dist/core/deployment/status-hydrator.d.ts +86 -0
  117. package/dist/core/deployment/status-hydrator.d.ts.map +1 -0
  118. package/dist/core/deployment/status-hydrator.js +262 -0
  119. package/dist/core/deployment/status-hydrator.js.map +1 -0
  120. package/dist/core/deployment/strategies/alchemy-strategy.d.ts +107 -0
  121. package/dist/core/deployment/strategies/alchemy-strategy.d.ts.map +1 -0
  122. package/dist/core/deployment/strategies/alchemy-strategy.js +446 -0
  123. package/dist/core/deployment/strategies/alchemy-strategy.js.map +1 -0
  124. package/dist/core/deployment/strategies/base-strategy.d.ts +50 -0
  125. package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -0
  126. package/dist/core/deployment/strategies/base-strategy.js +82 -0
  127. package/dist/core/deployment/strategies/base-strategy.js.map +1 -0
  128. package/dist/core/deployment/strategies/direct-strategy.d.ts +29 -0
  129. package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -0
  130. package/dist/core/deployment/strategies/direct-strategy.js +80 -0
  131. package/dist/core/deployment/strategies/direct-strategy.js.map +1 -0
  132. package/dist/core/deployment/strategies/index.d.ts +12 -0
  133. package/dist/core/deployment/strategies/index.d.ts.map +1 -0
  134. package/dist/core/deployment/strategies/index.js +12 -0
  135. package/dist/core/deployment/strategies/index.js.map +1 -0
  136. package/dist/core/deployment/strategies/kro-strategy.d.ts +41 -0
  137. package/dist/core/deployment/strategies/kro-strategy.d.ts.map +1 -0
  138. package/dist/core/deployment/strategies/kro-strategy.js +270 -0
  139. package/dist/core/deployment/strategies/kro-strategy.js.map +1 -0
  140. package/dist/core/direct-deployment.d.ts +8 -0
  141. package/dist/core/direct-deployment.d.ts.map +1 -0
  142. package/dist/core/direct-deployment.js +9 -0
  143. package/dist/core/direct-deployment.js.map +1 -0
  144. package/dist/core/errors.d.ts +73 -0
  145. package/dist/core/errors.d.ts.map +1 -0
  146. package/dist/core/errors.js +250 -0
  147. package/dist/core/errors.js.map +1 -0
  148. package/dist/core/evaluation/cel-optimizer.d.ts +48 -0
  149. package/dist/core/evaluation/cel-optimizer.d.ts.map +1 -0
  150. package/dist/core/evaluation/cel-optimizer.js +176 -0
  151. package/dist/core/evaluation/cel-optimizer.js.map +1 -0
  152. package/dist/core/factory.d.ts +12 -0
  153. package/dist/core/factory.d.ts.map +1 -0
  154. package/dist/core/factory.js +13 -0
  155. package/dist/core/factory.js.map +1 -0
  156. package/dist/core/kubernetes/api.d.ts +43 -0
  157. package/dist/core/kubernetes/api.d.ts.map +1 -0
  158. package/dist/core/kubernetes/api.js +209 -0
  159. package/dist/core/kubernetes/api.js.map +1 -0
  160. package/dist/core/kubernetes/client-provider.d.ts +204 -0
  161. package/dist/core/kubernetes/client-provider.d.ts.map +1 -0
  162. package/dist/core/kubernetes/client-provider.js +421 -0
  163. package/dist/core/kubernetes/client-provider.js.map +1 -0
  164. package/dist/core/logging/config.d.ts +14 -0
  165. package/dist/core/logging/config.d.ts.map +1 -0
  166. package/dist/core/logging/config.js +57 -0
  167. package/dist/core/logging/config.js.map +1 -0
  168. package/dist/core/logging/index.d.ts +4 -0
  169. package/dist/core/logging/index.d.ts.map +1 -0
  170. package/dist/core/logging/index.js +4 -0
  171. package/dist/core/logging/index.js.map +1 -0
  172. package/dist/core/logging/logger.d.ts +26 -0
  173. package/dist/core/logging/logger.d.ts.map +1 -0
  174. package/dist/core/logging/logger.js +114 -0
  175. package/dist/core/logging/logger.js.map +1 -0
  176. package/dist/core/logging/types.d.ts +93 -0
  177. package/dist/core/logging/types.d.ts.map +1 -0
  178. package/dist/core/logging/types.js +2 -0
  179. package/dist/core/logging/types.js.map +1 -0
  180. package/dist/core/readiness/cluster-state.d.ts +229 -0
  181. package/dist/core/readiness/cluster-state.d.ts.map +1 -0
  182. package/dist/core/readiness/cluster-state.js +360 -0
  183. package/dist/core/readiness/cluster-state.js.map +1 -0
  184. package/dist/core/readiness/index.d.ts +5 -0
  185. package/dist/core/readiness/index.d.ts.map +1 -0
  186. package/dist/core/readiness/index.js +5 -0
  187. package/dist/core/readiness/index.js.map +1 -0
  188. package/dist/core/readiness/registry.d.ts +45 -0
  189. package/dist/core/readiness/registry.d.ts.map +1 -0
  190. package/dist/core/readiness/registry.js +62 -0
  191. package/dist/core/readiness/registry.js.map +1 -0
  192. package/dist/core/references/cel-evaluator.d.ts +102 -0
  193. package/dist/core/references/cel-evaluator.d.ts.map +1 -0
  194. package/dist/core/references/cel-evaluator.js +288 -0
  195. package/dist/core/references/cel-evaluator.js.map +1 -0
  196. package/dist/core/references/cel.d.ts +75 -0
  197. package/dist/core/references/cel.d.ts.map +1 -0
  198. package/dist/core/references/cel.js +213 -0
  199. package/dist/core/references/cel.js.map +1 -0
  200. package/dist/core/references/external-refs.d.ts +37 -0
  201. package/dist/core/references/external-refs.d.ts.map +1 -0
  202. package/dist/core/references/external-refs.js +53 -0
  203. package/dist/core/references/external-refs.js.map +1 -0
  204. package/dist/core/references/index.d.ts +15 -0
  205. package/dist/core/references/index.d.ts.map +1 -0
  206. package/dist/core/references/index.js +19 -0
  207. package/dist/core/references/index.js.map +1 -0
  208. package/dist/core/references/resolver.d.ts +117 -0
  209. package/dist/core/references/resolver.d.ts.map +1 -0
  210. package/dist/core/references/resolver.js +554 -0
  211. package/dist/core/references/resolver.js.map +1 -0
  212. package/dist/core/references/schema-proxy.d.ts +38 -0
  213. package/dist/core/references/schema-proxy.d.ts.map +1 -0
  214. package/dist/core/references/schema-proxy.js +163 -0
  215. package/dist/core/references/schema-proxy.js.map +1 -0
  216. package/dist/core/serialization/core.d.ts +15 -0
  217. package/dist/core/serialization/core.d.ts.map +1 -0
  218. package/dist/core/serialization/core.js +169 -0
  219. package/dist/core/serialization/core.js.map +1 -0
  220. package/dist/core/serialization/index.d.ts +9 -0
  221. package/dist/core/serialization/index.d.ts.map +1 -0
  222. package/dist/core/serialization/index.js +12 -0
  223. package/dist/core/serialization/index.js.map +1 -0
  224. package/dist/core/serialization/schema.d.ts +14 -0
  225. package/dist/core/serialization/schema.d.ts.map +1 -0
  226. package/dist/core/serialization/schema.js +33 -0
  227. package/dist/core/serialization/schema.js.map +1 -0
  228. package/dist/core/serialization/validation.d.ts +18 -0
  229. package/dist/core/serialization/validation.d.ts.map +1 -0
  230. package/dist/core/serialization/validation.js +165 -0
  231. package/dist/core/serialization/validation.js.map +1 -0
  232. package/dist/core/serialization/yaml.d.ts +10 -0
  233. package/dist/core/serialization/yaml.d.ts.map +1 -0
  234. package/dist/core/serialization/yaml.js +63 -0
  235. package/dist/core/serialization/yaml.js.map +1 -0
  236. package/dist/core/types/common.d.ts +41 -0
  237. package/dist/core/types/common.d.ts.map +1 -0
  238. package/dist/core/types/common.js +9 -0
  239. package/dist/core/types/common.js.map +1 -0
  240. package/dist/core/types/dependencies.d.ts +14 -0
  241. package/dist/core/types/dependencies.d.ts.map +1 -0
  242. package/dist/core/types/dependencies.js +5 -0
  243. package/dist/core/types/dependencies.js.map +1 -0
  244. package/dist/core/types/deployment.d.ts +265 -0
  245. package/dist/core/types/deployment.d.ts.map +1 -0
  246. package/dist/core/types/deployment.js +20 -0
  247. package/dist/core/types/deployment.js.map +1 -0
  248. package/dist/core/types/index.d.ts +19 -0
  249. package/dist/core/types/index.d.ts.map +1 -0
  250. package/dist/core/types/index.js +15 -0
  251. package/dist/core/types/index.js.map +1 -0
  252. package/dist/core/types/kubernetes.d.ts +352 -0
  253. package/dist/core/types/kubernetes.d.ts.map +1 -0
  254. package/dist/core/types/kubernetes.js +5 -0
  255. package/dist/core/types/kubernetes.js.map +1 -0
  256. package/dist/core/types/references.d.ts +54 -0
  257. package/dist/core/types/references.d.ts.map +1 -0
  258. package/dist/core/types/references.js +14 -0
  259. package/dist/core/types/references.js.map +1 -0
  260. package/dist/core/types/resource-graph.d.ts +93 -0
  261. package/dist/core/types/resource-graph.d.ts.map +1 -0
  262. package/dist/core/types/resource-graph.js +8 -0
  263. package/dist/core/types/resource-graph.js.map +1 -0
  264. package/dist/core/types/serialization.d.ts +210 -0
  265. package/dist/core/types/serialization.d.ts.map +1 -0
  266. package/dist/core/types/serialization.js +5 -0
  267. package/dist/core/types/serialization.js.map +1 -0
  268. package/dist/core/types/yaml.d.ts +92 -0
  269. package/dist/core/types/yaml.d.ts.map +1 -0
  270. package/dist/core/types/yaml.js +2 -0
  271. package/dist/core/types/yaml.js.map +1 -0
  272. package/dist/core/types.d.ts +8 -0
  273. package/dist/core/types.d.ts.map +1 -0
  274. package/dist/core/types.js +9 -0
  275. package/dist/core/types.js.map +1 -0
  276. package/dist/core/validation/cel-validator.d.ts +47 -0
  277. package/dist/core/validation/cel-validator.d.ts.map +1 -0
  278. package/dist/core/validation/cel-validator.js +200 -0
  279. package/dist/core/validation/cel-validator.js.map +1 -0
  280. package/dist/core/yaml/index.d.ts +5 -0
  281. package/dist/core/yaml/index.d.ts.map +1 -0
  282. package/dist/core/yaml/index.js +5 -0
  283. package/dist/core/yaml/index.js.map +1 -0
  284. package/dist/core/yaml/path-resolver.d.ts +122 -0
  285. package/dist/core/yaml/path-resolver.d.ts.map +1 -0
  286. package/dist/core/yaml/path-resolver.js +556 -0
  287. package/dist/core/yaml/path-resolver.js.map +1 -0
  288. package/dist/core.d.ts +30 -0
  289. package/dist/core.d.ts.map +1 -0
  290. package/dist/core.js +59 -0
  291. package/dist/core.js.map +1 -0
  292. package/dist/factories/flux/git-repository.d.ts +62 -0
  293. package/dist/factories/flux/git-repository.d.ts.map +1 -0
  294. package/dist/factories/flux/git-repository.js +34 -0
  295. package/dist/factories/flux/git-repository.js.map +1 -0
  296. package/dist/factories/flux/index.d.ts +10 -0
  297. package/dist/factories/flux/index.d.ts.map +1 -0
  298. package/dist/factories/flux/index.js +11 -0
  299. package/dist/factories/flux/index.js.map +1 -0
  300. package/dist/factories/flux/kustomize/index.d.ts +4 -0
  301. package/dist/factories/flux/kustomize/index.d.ts.map +1 -0
  302. package/dist/factories/flux/kustomize/index.js +3 -0
  303. package/dist/factories/flux/kustomize/index.js.map +1 -0
  304. package/dist/factories/flux/kustomize/kustomization.d.ts +178 -0
  305. package/dist/factories/flux/kustomize/kustomization.d.ts.map +1 -0
  306. package/dist/factories/flux/kustomize/kustomization.js +108 -0
  307. package/dist/factories/flux/kustomize/kustomization.js.map +1 -0
  308. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts +9 -0
  309. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts.map +1 -0
  310. package/dist/factories/flux/kustomize/readiness-evaluators.js +71 -0
  311. package/dist/factories/flux/kustomize/readiness-evaluators.js.map +1 -0
  312. package/dist/factories/flux/kustomize/types.d.ts +2 -0
  313. package/dist/factories/flux/kustomize/types.d.ts.map +1 -0
  314. package/dist/factories/flux/kustomize/types.js +2 -0
  315. package/dist/factories/flux/kustomize/types.js.map +1 -0
  316. package/dist/factories/helm/helm-release.d.ts +139 -0
  317. package/dist/factories/helm/helm-release.d.ts.map +1 -0
  318. package/dist/factories/helm/helm-release.js +180 -0
  319. package/dist/factories/helm/helm-release.js.map +1 -0
  320. package/dist/factories/helm/helm-repository.d.ts +24 -0
  321. package/dist/factories/helm/helm-repository.d.ts.map +1 -0
  322. package/dist/factories/helm/helm-repository.js +57 -0
  323. package/dist/factories/helm/helm-repository.js.map +1 -0
  324. package/dist/factories/helm/index.d.ts +8 -0
  325. package/dist/factories/helm/index.d.ts.map +1 -0
  326. package/dist/factories/helm/index.js +8 -0
  327. package/dist/factories/helm/index.js.map +1 -0
  328. package/dist/factories/helm/readiness-evaluators.d.ts +55 -0
  329. package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -0
  330. package/dist/factories/helm/readiness-evaluators.js +295 -0
  331. package/dist/factories/helm/readiness-evaluators.js.map +1 -0
  332. package/dist/factories/helm/types.d.ts +21 -0
  333. package/dist/factories/helm/types.d.ts.map +1 -0
  334. package/dist/factories/helm/types.js +2 -0
  335. package/dist/factories/helm/types.js.map +1 -0
  336. package/dist/factories/index.d.ts +12 -0
  337. package/dist/factories/index.d.ts.map +1 -0
  338. package/dist/factories/index.js +31 -0
  339. package/dist/factories/index.js.map +1 -0
  340. package/dist/factories/kro/index.d.ts +11 -0
  341. package/dist/factories/kro/index.d.ts.map +1 -0
  342. package/dist/factories/kro/index.js +10 -0
  343. package/dist/factories/kro/index.js.map +1 -0
  344. package/dist/factories/kro/kro-crd.d.ts +14 -0
  345. package/dist/factories/kro/kro-crd.d.ts.map +1 -0
  346. package/dist/factories/kro/kro-crd.js +51 -0
  347. package/dist/factories/kro/kro-crd.js.map +1 -0
  348. package/dist/factories/kro/kro-custom-resource.d.ts +23 -0
  349. package/dist/factories/kro/kro-custom-resource.d.ts.map +1 -0
  350. package/dist/factories/kro/kro-custom-resource.js +153 -0
  351. package/dist/factories/kro/kro-custom-resource.js.map +1 -0
  352. package/dist/factories/kro/resource-graph-definition.d.ts +12 -0
  353. package/dist/factories/kro/resource-graph-definition.d.ts.map +1 -0
  354. package/dist/factories/kro/resource-graph-definition.js +94 -0
  355. package/dist/factories/kro/resource-graph-definition.js.map +1 -0
  356. package/dist/factories/kubernetes/admission/index.d.ts +9 -0
  357. package/dist/factories/kubernetes/admission/index.d.ts.map +1 -0
  358. package/dist/factories/kubernetes/admission/index.js +9 -0
  359. package/dist/factories/kubernetes/admission/index.js.map +1 -0
  360. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.d.ts +5 -0
  361. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.d.ts.map +1 -0
  362. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.js +10 -0
  363. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.js.map +1 -0
  364. package/dist/factories/kubernetes/admission/validating-webhook-configuration.d.ts +5 -0
  365. package/dist/factories/kubernetes/admission/validating-webhook-configuration.d.ts.map +1 -0
  366. package/dist/factories/kubernetes/admission/validating-webhook-configuration.js +10 -0
  367. package/dist/factories/kubernetes/admission/validating-webhook-configuration.js.map +1 -0
  368. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.d.ts +6 -0
  369. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.d.ts.map +1 -0
  370. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.js +35 -0
  371. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.js.map +1 -0
  372. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.d.ts +6 -0
  373. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.d.ts.map +1 -0
  374. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js +31 -0
  375. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js.map +1 -0
  376. package/dist/factories/kubernetes/autoscaling/index.d.ts +9 -0
  377. package/dist/factories/kubernetes/autoscaling/index.d.ts.map +1 -0
  378. package/dist/factories/kubernetes/autoscaling/index.js +9 -0
  379. package/dist/factories/kubernetes/autoscaling/index.js.map +1 -0
  380. package/dist/factories/kubernetes/certificates/certificate-signing-request.d.ts +6 -0
  381. package/dist/factories/kubernetes/certificates/certificate-signing-request.d.ts.map +1 -0
  382. package/dist/factories/kubernetes/certificates/certificate-signing-request.js +48 -0
  383. package/dist/factories/kubernetes/certificates/certificate-signing-request.js.map +1 -0
  384. package/dist/factories/kubernetes/certificates/index.d.ts +8 -0
  385. package/dist/factories/kubernetes/certificates/index.d.ts.map +1 -0
  386. package/dist/factories/kubernetes/certificates/index.js +8 -0
  387. package/dist/factories/kubernetes/certificates/index.js.map +1 -0
  388. package/dist/factories/kubernetes/config/config-map.d.ts +5 -0
  389. package/dist/factories/kubernetes/config/config-map.d.ts.map +1 -0
  390. package/dist/factories/kubernetes/config/config-map.js +16 -0
  391. package/dist/factories/kubernetes/config/config-map.js.map +1 -0
  392. package/dist/factories/kubernetes/config/index.d.ts +9 -0
  393. package/dist/factories/kubernetes/config/index.d.ts.map +1 -0
  394. package/dist/factories/kubernetes/config/index.js +9 -0
  395. package/dist/factories/kubernetes/config/index.js.map +1 -0
  396. package/dist/factories/kubernetes/config/secret.d.ts +5 -0
  397. package/dist/factories/kubernetes/config/secret.d.ts.map +1 -0
  398. package/dist/factories/kubernetes/config/secret.js +16 -0
  399. package/dist/factories/kubernetes/config/secret.js.map +1 -0
  400. package/dist/factories/kubernetes/coordination/index.d.ts +8 -0
  401. package/dist/factories/kubernetes/coordination/index.d.ts.map +1 -0
  402. package/dist/factories/kubernetes/coordination/index.js +8 -0
  403. package/dist/factories/kubernetes/coordination/index.js.map +1 -0
  404. package/dist/factories/kubernetes/coordination/lease.d.ts +5 -0
  405. package/dist/factories/kubernetes/coordination/lease.d.ts.map +1 -0
  406. package/dist/factories/kubernetes/coordination/lease.js +10 -0
  407. package/dist/factories/kubernetes/coordination/lease.js.map +1 -0
  408. package/dist/factories/kubernetes/core/component-status.d.ts +4 -0
  409. package/dist/factories/kubernetes/core/component-status.d.ts.map +1 -0
  410. package/dist/factories/kubernetes/core/component-status.js +25 -0
  411. package/dist/factories/kubernetes/core/component-status.js.map +1 -0
  412. package/dist/factories/kubernetes/core/index.d.ts +11 -0
  413. package/dist/factories/kubernetes/core/index.d.ts.map +1 -0
  414. package/dist/factories/kubernetes/core/index.js +11 -0
  415. package/dist/factories/kubernetes/core/index.js.map +1 -0
  416. package/dist/factories/kubernetes/core/namespace.d.ts +9 -0
  417. package/dist/factories/kubernetes/core/namespace.d.ts.map +1 -0
  418. package/dist/factories/kubernetes/core/namespace.js +48 -0
  419. package/dist/factories/kubernetes/core/namespace.js.map +1 -0
  420. package/dist/factories/kubernetes/core/node.d.ts +6 -0
  421. package/dist/factories/kubernetes/core/node.d.ts.map +1 -0
  422. package/dist/factories/kubernetes/core/node.js +34 -0
  423. package/dist/factories/kubernetes/core/node.js.map +1 -0
  424. package/dist/factories/kubernetes/core/pod.d.ts +6 -0
  425. package/dist/factories/kubernetes/core/pod.d.ts.map +1 -0
  426. package/dist/factories/kubernetes/core/pod.js +44 -0
  427. package/dist/factories/kubernetes/core/pod.js.map +1 -0
  428. package/dist/factories/kubernetes/extensions/custom-resource-definition.d.ts +6 -0
  429. package/dist/factories/kubernetes/extensions/custom-resource-definition.d.ts.map +1 -0
  430. package/dist/factories/kubernetes/extensions/custom-resource-definition.js +45 -0
  431. package/dist/factories/kubernetes/extensions/custom-resource-definition.js.map +1 -0
  432. package/dist/factories/kubernetes/extensions/custom-resource.d.ts +12 -0
  433. package/dist/factories/kubernetes/extensions/custom-resource.d.ts.map +1 -0
  434. package/dist/factories/kubernetes/extensions/custom-resource.js +17 -0
  435. package/dist/factories/kubernetes/extensions/custom-resource.js.map +1 -0
  436. package/dist/factories/kubernetes/extensions/index.d.ts +9 -0
  437. package/dist/factories/kubernetes/extensions/index.d.ts.map +1 -0
  438. package/dist/factories/kubernetes/extensions/index.js +9 -0
  439. package/dist/factories/kubernetes/extensions/index.js.map +1 -0
  440. package/dist/factories/kubernetes/index.d.ts +24 -0
  441. package/dist/factories/kubernetes/index.d.ts.map +1 -0
  442. package/dist/factories/kubernetes/index.js +75 -0
  443. package/dist/factories/kubernetes/index.js.map +1 -0
  444. package/dist/factories/kubernetes/networking/endpoint-slice.d.ts +4 -0
  445. package/dist/factories/kubernetes/networking/endpoint-slice.d.ts.map +1 -0
  446. package/dist/factories/kubernetes/networking/endpoint-slice.js +10 -0
  447. package/dist/factories/kubernetes/networking/endpoint-slice.js.map +1 -0
  448. package/dist/factories/kubernetes/networking/endpoints.d.ts +4 -0
  449. package/dist/factories/kubernetes/networking/endpoints.d.ts.map +1 -0
  450. package/dist/factories/kubernetes/networking/endpoints.js +39 -0
  451. package/dist/factories/kubernetes/networking/endpoints.js.map +1 -0
  452. package/dist/factories/kubernetes/networking/index.d.ts +13 -0
  453. package/dist/factories/kubernetes/networking/index.d.ts.map +1 -0
  454. package/dist/factories/kubernetes/networking/index.js +13 -0
  455. package/dist/factories/kubernetes/networking/index.js.map +1 -0
  456. package/dist/factories/kubernetes/networking/ingress-class.d.ts +5 -0
  457. package/dist/factories/kubernetes/networking/ingress-class.d.ts.map +1 -0
  458. package/dist/factories/kubernetes/networking/ingress-class.js +16 -0
  459. package/dist/factories/kubernetes/networking/ingress-class.js.map +1 -0
  460. package/dist/factories/kubernetes/networking/ingress.d.ts +5 -0
  461. package/dist/factories/kubernetes/networking/ingress.d.ts.map +1 -0
  462. package/dist/factories/kubernetes/networking/ingress.js +33 -0
  463. package/dist/factories/kubernetes/networking/ingress.js.map +1 -0
  464. package/dist/factories/kubernetes/networking/network-policy.d.ts +5 -0
  465. package/dist/factories/kubernetes/networking/network-policy.d.ts.map +1 -0
  466. package/dist/factories/kubernetes/networking/network-policy.js +17 -0
  467. package/dist/factories/kubernetes/networking/network-policy.js.map +1 -0
  468. package/dist/factories/kubernetes/networking/service.d.ts +5 -0
  469. package/dist/factories/kubernetes/networking/service.d.ts.map +1 -0
  470. package/dist/factories/kubernetes/networking/service.js +64 -0
  471. package/dist/factories/kubernetes/networking/service.js.map +1 -0
  472. package/dist/factories/kubernetes/policy/index.d.ts +10 -0
  473. package/dist/factories/kubernetes/policy/index.d.ts.map +1 -0
  474. package/dist/factories/kubernetes/policy/index.js +10 -0
  475. package/dist/factories/kubernetes/policy/index.js.map +1 -0
  476. package/dist/factories/kubernetes/policy/limit-range.d.ts +5 -0
  477. package/dist/factories/kubernetes/policy/limit-range.d.ts.map +1 -0
  478. package/dist/factories/kubernetes/policy/limit-range.js +17 -0
  479. package/dist/factories/kubernetes/policy/limit-range.js.map +1 -0
  480. package/dist/factories/kubernetes/policy/pod-disruption-budget.d.ts +6 -0
  481. package/dist/factories/kubernetes/policy/pod-disruption-budget.d.ts.map +1 -0
  482. package/dist/factories/kubernetes/policy/pod-disruption-budget.js +55 -0
  483. package/dist/factories/kubernetes/policy/pod-disruption-budget.js.map +1 -0
  484. package/dist/factories/kubernetes/policy/resource-quota.d.ts +6 -0
  485. package/dist/factories/kubernetes/policy/resource-quota.d.ts.map +1 -0
  486. package/dist/factories/kubernetes/policy/resource-quota.js +43 -0
  487. package/dist/factories/kubernetes/policy/resource-quota.js.map +1 -0
  488. package/dist/factories/kubernetes/rbac/cluster-role-binding.d.ts +4 -0
  489. package/dist/factories/kubernetes/rbac/cluster-role-binding.d.ts.map +1 -0
  490. package/dist/factories/kubernetes/rbac/cluster-role-binding.js +17 -0
  491. package/dist/factories/kubernetes/rbac/cluster-role-binding.js.map +1 -0
  492. package/dist/factories/kubernetes/rbac/cluster-role.d.ts +4 -0
  493. package/dist/factories/kubernetes/rbac/cluster-role.d.ts.map +1 -0
  494. package/dist/factories/kubernetes/rbac/cluster-role.js +17 -0
  495. package/dist/factories/kubernetes/rbac/cluster-role.js.map +1 -0
  496. package/dist/factories/kubernetes/rbac/index.d.ts +12 -0
  497. package/dist/factories/kubernetes/rbac/index.d.ts.map +1 -0
  498. package/dist/factories/kubernetes/rbac/index.js +12 -0
  499. package/dist/factories/kubernetes/rbac/index.js.map +1 -0
  500. package/dist/factories/kubernetes/rbac/role-binding.d.ts +4 -0
  501. package/dist/factories/kubernetes/rbac/role-binding.d.ts.map +1 -0
  502. package/dist/factories/kubernetes/rbac/role-binding.js +17 -0
  503. package/dist/factories/kubernetes/rbac/role-binding.js.map +1 -0
  504. package/dist/factories/kubernetes/rbac/role.d.ts +4 -0
  505. package/dist/factories/kubernetes/rbac/role.d.ts.map +1 -0
  506. package/dist/factories/kubernetes/rbac/role.js +17 -0
  507. package/dist/factories/kubernetes/rbac/role.js.map +1 -0
  508. package/dist/factories/kubernetes/rbac/service-account.d.ts +4 -0
  509. package/dist/factories/kubernetes/rbac/service-account.d.ts.map +1 -0
  510. package/dist/factories/kubernetes/rbac/service-account.js +17 -0
  511. package/dist/factories/kubernetes/rbac/service-account.js.map +1 -0
  512. package/dist/factories/kubernetes/scheduling/index.d.ts +9 -0
  513. package/dist/factories/kubernetes/scheduling/index.d.ts.map +1 -0
  514. package/dist/factories/kubernetes/scheduling/index.js +9 -0
  515. package/dist/factories/kubernetes/scheduling/index.js.map +1 -0
  516. package/dist/factories/kubernetes/scheduling/priority-class.d.ts +4 -0
  517. package/dist/factories/kubernetes/scheduling/priority-class.d.ts.map +1 -0
  518. package/dist/factories/kubernetes/scheduling/priority-class.js +16 -0
  519. package/dist/factories/kubernetes/scheduling/priority-class.js.map +1 -0
  520. package/dist/factories/kubernetes/scheduling/runtime-class.d.ts +5 -0
  521. package/dist/factories/kubernetes/scheduling/runtime-class.d.ts.map +1 -0
  522. package/dist/factories/kubernetes/scheduling/runtime-class.js +10 -0
  523. package/dist/factories/kubernetes/scheduling/runtime-class.js.map +1 -0
  524. package/dist/factories/kubernetes/storage/csi-driver.d.ts +5 -0
  525. package/dist/factories/kubernetes/storage/csi-driver.d.ts.map +1 -0
  526. package/dist/factories/kubernetes/storage/csi-driver.js +16 -0
  527. package/dist/factories/kubernetes/storage/csi-driver.js.map +1 -0
  528. package/dist/factories/kubernetes/storage/csi-node.d.ts +5 -0
  529. package/dist/factories/kubernetes/storage/csi-node.d.ts.map +1 -0
  530. package/dist/factories/kubernetes/storage/csi-node.js +10 -0
  531. package/dist/factories/kubernetes/storage/csi-node.js.map +1 -0
  532. package/dist/factories/kubernetes/storage/index.d.ts +13 -0
  533. package/dist/factories/kubernetes/storage/index.d.ts.map +1 -0
  534. package/dist/factories/kubernetes/storage/index.js +13 -0
  535. package/dist/factories/kubernetes/storage/index.js.map +1 -0
  536. package/dist/factories/kubernetes/storage/persistent-volume-claim.d.ts +6 -0
  537. package/dist/factories/kubernetes/storage/persistent-volume-claim.d.ts.map +1 -0
  538. package/dist/factories/kubernetes/storage/persistent-volume-claim.js +30 -0
  539. package/dist/factories/kubernetes/storage/persistent-volume-claim.js.map +1 -0
  540. package/dist/factories/kubernetes/storage/persistent-volume.d.ts +6 -0
  541. package/dist/factories/kubernetes/storage/persistent-volume.d.ts.map +1 -0
  542. package/dist/factories/kubernetes/storage/persistent-volume.js +47 -0
  543. package/dist/factories/kubernetes/storage/persistent-volume.js.map +1 -0
  544. package/dist/factories/kubernetes/storage/storage-class.d.ts +4 -0
  545. package/dist/factories/kubernetes/storage/storage-class.d.ts.map +1 -0
  546. package/dist/factories/kubernetes/storage/storage-class.js +17 -0
  547. package/dist/factories/kubernetes/storage/storage-class.js.map +1 -0
  548. package/dist/factories/kubernetes/storage/volume-attachment.d.ts +6 -0
  549. package/dist/factories/kubernetes/storage/volume-attachment.d.ts.map +1 -0
  550. package/dist/factories/kubernetes/storage/volume-attachment.js +10 -0
  551. package/dist/factories/kubernetes/storage/volume-attachment.js.map +1 -0
  552. package/dist/factories/kubernetes/types.d.ts +8 -0
  553. package/dist/factories/kubernetes/types.d.ts.map +1 -0
  554. package/dist/factories/kubernetes/types.js +8 -0
  555. package/dist/factories/kubernetes/types.js.map +1 -0
  556. package/dist/factories/kubernetes/workloads/cron-job.d.ts +6 -0
  557. package/dist/factories/kubernetes/workloads/cron-job.d.ts.map +1 -0
  558. package/dist/factories/kubernetes/workloads/cron-job.js +53 -0
  559. package/dist/factories/kubernetes/workloads/cron-job.js.map +1 -0
  560. package/dist/factories/kubernetes/workloads/daemon-set.d.ts +6 -0
  561. package/dist/factories/kubernetes/workloads/daemon-set.d.ts.map +1 -0
  562. package/dist/factories/kubernetes/workloads/daemon-set.js +32 -0
  563. package/dist/factories/kubernetes/workloads/daemon-set.js.map +1 -0
  564. package/dist/factories/kubernetes/workloads/deployment.d.ts +5 -0
  565. package/dist/factories/kubernetes/workloads/deployment.d.ts.map +1 -0
  566. package/dist/factories/kubernetes/workloads/deployment.js +59 -0
  567. package/dist/factories/kubernetes/workloads/deployment.js.map +1 -0
  568. package/dist/factories/kubernetes/workloads/index.d.ts +14 -0
  569. package/dist/factories/kubernetes/workloads/index.d.ts.map +1 -0
  570. package/dist/factories/kubernetes/workloads/index.js +14 -0
  571. package/dist/factories/kubernetes/workloads/index.js.map +1 -0
  572. package/dist/factories/kubernetes/workloads/job.d.ts +6 -0
  573. package/dist/factories/kubernetes/workloads/job.d.ts.map +1 -0
  574. package/dist/factories/kubernetes/workloads/job.js +105 -0
  575. package/dist/factories/kubernetes/workloads/job.js.map +1 -0
  576. package/dist/factories/kubernetes/workloads/replica-set.d.ts +6 -0
  577. package/dist/factories/kubernetes/workloads/replica-set.d.ts.map +1 -0
  578. package/dist/factories/kubernetes/workloads/replica-set.js +33 -0
  579. package/dist/factories/kubernetes/workloads/replica-set.js.map +1 -0
  580. package/dist/factories/kubernetes/workloads/replication-controller.d.ts +6 -0
  581. package/dist/factories/kubernetes/workloads/replication-controller.d.ts.map +1 -0
  582. package/dist/factories/kubernetes/workloads/replication-controller.js +56 -0
  583. package/dist/factories/kubernetes/workloads/replication-controller.js.map +1 -0
  584. package/dist/factories/kubernetes/workloads/stateful-set.d.ts +6 -0
  585. package/dist/factories/kubernetes/workloads/stateful-set.d.ts.map +1 -0
  586. package/dist/factories/kubernetes/workloads/stateful-set.js +81 -0
  587. package/dist/factories/kubernetes/workloads/stateful-set.js.map +1 -0
  588. package/dist/factories/kubernetes/yaml/index.d.ts +6 -0
  589. package/dist/factories/kubernetes/yaml/index.d.ts.map +1 -0
  590. package/dist/factories/kubernetes/yaml/index.js +6 -0
  591. package/dist/factories/kubernetes/yaml/index.js.map +1 -0
  592. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts +54 -0
  593. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -0
  594. package/dist/factories/kubernetes/yaml/yaml-directory.js +178 -0
  595. package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -0
  596. package/dist/factories/kubernetes/yaml/yaml-file.d.ts +54 -0
  597. package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -0
  598. package/dist/factories/kubernetes/yaml/yaml-file.js +181 -0
  599. package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -0
  600. package/dist/factories/shared.d.ts +11 -0
  601. package/dist/factories/shared.d.ts.map +1 -0
  602. package/dist/factories/shared.js +364 -0
  603. package/dist/factories/shared.js.map +1 -0
  604. package/dist/index.d.ts +9 -0
  605. package/dist/index.d.ts.map +1 -0
  606. package/dist/index.js +49 -0
  607. package/dist/index.js.map +1 -0
  608. package/dist/utils/helpers.d.ts +69 -0
  609. package/dist/utils/helpers.d.ts.map +1 -0
  610. package/dist/utils/helpers.js +405 -0
  611. package/dist/utils/helpers.js.map +1 -0
  612. package/dist/utils/index.d.ts +9 -0
  613. package/dist/utils/index.d.ts.map +1 -0
  614. package/dist/utils/index.js +11 -0
  615. package/dist/utils/index.js.map +1 -0
  616. package/dist/utils/type-guards.d.ts +34 -0
  617. package/dist/utils/type-guards.d.ts.map +1 -0
  618. package/dist/utils/type-guards.js +66 -0
  619. package/dist/utils/type-guards.js.map +1 -0
  620. package/package.json +109 -0
package/README.md ADDED
@@ -0,0 +1,1137 @@
1
+ # typekro
2
+
3
+ <div align="center">
4
+   <img src="docs/public/typekro-logo.svg" alt="TypeKro Logo" width="200" />
5
+ </div>
6
+
7
+ [![NPM Version](https://img.shields.io/npm/v/typekro.svg)](https://www.npmjs.com/package/typekro)
8
+ [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
9
+
10
+ > **Kubernetes infrastructure with TypeScript instead of YAML**
11
+
12
+ TypeKro combines the type safety of TypeScript, the GitOps-friendly output of declarative YAML, and the runtime intelligence of **Kubernetes Resource Orchestrator (KRO)** - an open-source project that enables advanced resource orchestration with runtime dependencies and CEL expressions. Write infrastructure in pure TypeScript with full IDE support, then deploy directly to clusters or generate deterministic YAML for GitOps workflows.
13
+
14
+ > **What is KRO?** [Kubernetes Resource Orchestrator](https://kro.run/) is an open-source project by AWS Labs that enables resources to reference each other's runtime state using CEL expressions. TypeKro works in Direct Mode (no KRO required) for simple deployments, or KRO Mode for advanced orchestration.
15
+
16
+ ## Table of Contents
17
+
18
+ - [Quick Start](#quick-start) - See TypeKro in action with a 30-line web app example
19
+ - [Deployment Flexibility](#deployment-flexibility) - Write once, deploy everywhere (YAML/Direct/Kro modes)
20
+ - [Core Architecture](#core-architecture) - Magic proxy system, enhanced types, and CRD intelligence
21
+ - [Comparison Grid](#comparison-grid) - How TypeKro compares to Pulumi, CDK8s, Helm, etc.
22
+ - [GitOps Workflows](#gitops-workflows) - Deterministic YAML generation and Flux HelmRelease integration
23
+ - [Complete Factory Reference](#complete-factory-reference) - All 50+ available resource factories
24
+ - [Which Pattern Should I Use?](#which-pattern-should-i-use) - Decision guide based on your team and workflow
25
+ - [Enhanced Type System](#enhanced-type-system) - Deep dive into schema references and type safety
26
+ - [Multi-Cloud Integration with Alchemy](#multi-cloud-integration-with-alchemy) - Unified cloud + Kubernetes management
27
+ - [Contributing](#contributing) - How to contribute to TypeKro development
28
+
29
+ ---
30
+
31
+ ## Quick Start
32
+
33
+ Here's a complete web application with database in ~30 lines of TypeScript:
34
+
35
+ ```typescript
36
+ import { type } from 'arktype';  // Runtime-safe TypeScript schemas with concise syntax
37
+ import { toResourceGraph, simpleDeployment, simpleService, Cel } from 'typekro';
38
+
39
+ // Define your app's interface
40
+ const WebAppSpec = type({ 
41
+   name: 'string', 
42
+   image: 'string', 
43
+   replicas: 'number' 
44
+ });
45
+
46
+ const WebAppStatus = type({ 
47
+   ready: 'boolean', 
48
+   url: 'string' 
49
+ });
50
+
51
+ // Create your infrastructure
52
+ const webapp = toResourceGraph(
53
+   {
54
+     name: 'my-webapp',
55
+     apiVersion: 'example.com/v1',
56
+     kind: 'WebApp',
57
+     spec: WebAppSpec,
58
+     status: WebAppStatus
59
+   },
60
+   (schema) => ({
61
+     // Database
62
+     database: simpleDeployment({
63
+       name: 'postgres', 
64
+       image: 'postgres:15',
65
+       env: { POSTGRES_DB: 'app', POSTGRES_USER: 'user', POSTGRES_PASSWORD: 'secret' }
66
+     }),
67
+     
68
+     // Service (defined first to show cross-references work in any order)
69
+     service: simpleService({
70
+       name: schema.spec.name,  // Type-safe schema reference
71
+       selector: { app: schema.spec.name },
72
+       ports: [{ port: 80, targetPort: 80 }]
73
+     }),
74
+     
75
+     // Web app that references schema fields
76
+     app: simpleDeployment({
77
+       name: schema.spec.name,    // Type-safe schema reference
78
+       image: schema.spec.image,  // Full IDE autocomplete
79
+       replicas: schema.spec.replicas,
80
+       env: { DATABASE_HOST: 'postgres' }
81
+     })
82
+   }),
83
+   (schema, resources) => ({
84
+     ready: Cel.expr(resources.app.status.readyReplicas, ' > 0'),  // Runtime logic
85
+     url: Cel.template('http://%s', schema.spec.name)  // String templating with schema reference
86
+   })
87
+ );
88
+
89
+ // Deploy it directly to your cluster
90
+ const factory = await webapp.factory('direct', { namespace: 'default' });
91
+ await factory.deploy({ name: 'my-app', image: 'nginx', replicas: 3 });
92
+ ```
93
+
94
+ **Key Features Demonstrated:**
95
+ - **Schema References**: `schema.spec.name` becomes runtime CEL expressions
96
+ - **Type Safety**: Full TypeScript validation and autocomplete  
97
+ - **CEL Expressions**: `Cel.template()` for dynamic resource configuration
98
+ - **Direct Deployment**: Resources are created immediately in your cluster
99
+
100
+ *Note: You can also generate GitOps-ready YAML with `factory.toYaml()` instead of deploying directly.*
101
+
102
+ **Need advanced features?** Bootstrap a complete runtime environment with Flux CD and KRO:
103
+ ```typescript
104
+ import { typeKroRuntimeBootstrap } from 'typekro';
105
+ const bootstrap = typeKroRuntimeBootstrap({ fluxVersion: 'v2.4.0', kroVersion: '0.3.0' });
106
+ await bootstrap.factory('direct').deploy({ namespace: 'flux-system' });
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Deployment Flexibility
112
+
113
+ ### Write Once, Deploy Everywhere
114
+
115
+ TypeKro's core strength is **deployment flexibility**. The same TypeScript code can be deployed in multiple ways without modification:
116
+
117
+ ```typescript
118
+ // Define your infrastructure once  
119
+ const webappGraph = toResourceGraph(
120
+   {
121
+     name: 'my-webapp',
122
+     apiVersion: 'example.com/v1',
123
+     kind: 'WebApp', 
124
+     spec: WebAppSpec,
125
+     status: WebAppStatus
126
+   },
127
+   (schema) => ({
128
+     // ... your resources
129
+   }),
130
+   (schema, resources) => ({
131
+     // ... status builder
132
+   })
133
+ );
134
+
135
+ const spec = { name: 'my-app', image: 'nginx:1.21', replicas: 3 };
136
+
137
+ // Deploy the SAME code in different ways:
138
+
139
+ // 1. Generate YAML for GitOps (no cluster interaction)
140
+ const kroFactory = await webappGraph.factory('kro', { namespace: 'dev' });
141
+ const yaml = kroFactory.toYaml();
142
+ writeFileSync('k8s/webapp.yaml', yaml);
143
+
144
+ // 2. Deploy directly to cluster (immediate)
145
+ const directFactory = await webappGraph.factory('direct', { namespace: 'dev' });
146
+ const directInstance = await directFactory.deploy(spec);
147
+
148
+ // 3. Integrate with Alchemy for multi-cloud coordination
149
+ await alchemyScope.run(async () => {
150
+ const factory = await webappGraph.factory('direct', {
151
+ namespace: 'dev',
152
+ alchemyScope: alchemyScope
153
+ });
154
+ await factory.deploy(spec);
155
+ });
156
+ ```
157
+
158
+ This flexibility eliminates the need to rewrite infrastructure code when changing deployment strategies or environments.
159
+
160
+ ### Core Deployment Strategies
161
+
162
+ #### 1. YAML Generation (GitOps)
163
+
164
+ Generate deterministic Kubernetes YAML that integrates with any GitOps workflow:
165
+
166
+ ```typescript
167
+ // Generate ResourceGraphDefinition YAML
168
+ const kroFactory = await webappGraph.factory('kro', { namespace: 'default' });
169
+ const yaml = kroFactory.toYaml();
170
+
171
+ // Save for GitOps deployment
172
+ writeFileSync('manifests/webapp.yaml', yaml);
173
+
174
+ // Or pipe directly to kubectl
175
+ console.log(yaml); // bun run generate.ts | kubectl apply -f -
176
+ ```
177
+
178
+ **When to use:**
179
+ - GitOps workflows (ArgoCD, Flux)
180
+ - Audit requirements
181
+ - Multi-environment promotion
182
+ - CI/CD integration
183
+
184
+ **Benefits:**
185
+ - No cluster access needed during build
186
+ - Git-friendly deterministic output
187
+ - Works with existing GitOps tools
188
+ - Version control for infrastructure changes
189
+
190
+ #### 2. Direct Deployment (Imperative)
191
+
192
+ Deploy directly to your cluster for rapid iteration:
193
+
194
+ ```typescript
195
+ // Create factory and deploy immediately
196
+ const factory = await webappGraph.factory('direct', { namespace: 'development' });
197
+
198
+ // Deploy with specific configuration
199
+ const instance = await factory.deploy({
200
+   name: 'webapp-dev',
201
+   image: 'nginx:latest',
202
+   replicas: 1
203
+ });
204
+
205
+ // Get the generated ResourceGraphDefinition
206
+ console.log('Generated RGD:', factory.toYaml());
207
+ ```
208
+
209
+ **When to use:**
210
+ - Local development
211
+ - Testing and experimentation
212
+ - Rapid prototyping
213
+ - Direct cluster management
214
+
215
+ **Benefits:**
216
+ - Immediate feedback
217
+ - No Git workflow overhead
218
+ - Live iteration on infrastructure
219
+ - Integrated with development workflow
220
+
221
+ #### 3. Kro Deployment (Recommended for Production)
222
+
223
+ Leverage Kubernetes Resource Orchestrator for advanced runtime capabilities:
224
+
225
+ ```typescript
226
+ // Deploy as ResourceGraphDefinition with runtime resolution
227
+ const kroFactory = await webappGraph.factory('kro', { namespace: 'production' });
228
+
229
+ // Apply the ResourceGraphDefinition to cluster
230
+ await kroFactory.deploy({ 
231
+   name: 'webapp-prod',
232
+   image: 'nginx:1.21', 
233
+   replicas: 3 
234
+ });
235
+
236
+ // Kro handles:
237
+ // - Runtime CEL expression evaluation
238
+ // - Cross-resource dependency resolution  
239
+ // - Automatic reconciliation and drift correction
240
+ // - Status propagation and health monitoring
241
+ ```
242
+
243
+ **When to use:**
244
+ - Production environments
245
+ - Complex resource dependencies
246
+ - Self-healing infrastructure requirements
247
+ - Advanced orchestration needs
248
+
249
+ **Benefits:**
250
+ - Runtime dependency resolution
251
+ - Automatic reconciliation
252
+ - Built-in health monitoring
253
+ - Kubernetes-native operation
254
+
255
+ ### Advanced Deployment Patterns
256
+
257
+ #### Environment-Specific Deployments
258
+
259
+ Deploy the same graph to different environments with environment-specific configurations:
260
+
261
+ ```typescript
262
+ // Development: Direct deployment for fast iteration
263
+ const devFactory = await webappGraph.factory('direct', { namespace: 'dev' });
264
+ await devFactory.deploy({
265
+   name: 'webapp-dev',
266
+   image: 'nginx:latest',
267
+   replicas: 1
268
+ });
269
+
270
+ // Staging: Kro deployment for testing runtime dependencies  
271
+ const stagingFactory = await webappGraph.factory('kro', { namespace: 'staging' });
272
+ await stagingFactory.deploy({
273
+   name: 'webapp-staging',
274
+   image: 'nginx:1.21-rc',
275
+   replicas: 2,
276
+ });
277
+
278
+ // Production: GitOps deployment
279
+ const prodFactory = await webappGraph.factory('kro', { namespace: 'production' });
280
+ const prodYaml = prodFactory.toYaml();
281
+ writeFileSync('k8s/production/webapp.yaml', prodYaml);
282
+ // Deployed via ArgoCD/Flux
283
+ ```
284
+
285
+
286
+ ### Deployment Strategy Decision Matrix
287
+
288
+ | **Scenario** | **Recommended Strategy** | **Why** |
289
+ |--------------|-------------------------|---------|
290
+ | Local development | Direct Deployment | Fast feedback, no GitOps overhead |
291
+ | CI/CD pipeline testing | Direct Deployment | Immediate validation, isolated environments |
292
+ | Production deployment | Kro + GitOps | Runtime intelligence + audit trail |
293
+ | Multi-environment promotion | YAML Generation | Consistent artifacts across environments |
294
+ | Complex runtime dependencies | Kro Deployment | Advanced orchestration capabilities |
295
+ | Multi-cloud infrastructure | [Alchemy Integration](#multi-cloud-integration-with-alchemy) | Unified cloud + Kubernetes management |
296
+ | Rapid prototyping | Direct Deployment | Minimal setup, immediate results |
297
+ | Regulated environments | YAML Generation + GitOps | Audit trail, approval workflows |
298
+
299
+ ---
300
+
301
+ ## Core Architecture
302
+
303
+ TypeKro's architecture enables compile-time type safety with runtime intelligence through three key systems:
304
+
305
+ ```mermaid
306
+ graph TD
307
+ A[TypeScript Code] --> B[Magic Proxy System]
308
+ B --> C[Schema References]
309
+ B --> D[Static Values]
310
+ C --> E[CEL Expressions]
311
+ D --> F[Direct Values]
312
+ E --> G[Runtime Resolution]
313
+ F --> G
314
+ G --> H{Deployment Strategy}
315
+
316
+ H --> I[YAML Generation]
317
+ H --> J[Direct Deployment]
318
+ H --> K[KRO Deployment]
319
+
320
+ I --> L[GitOps Tools<br/>ArgoCD, Flux, kubectl]
321
+ J --> M[Kubernetes API<br/>Immediate Deployment]
322
+ K --> N[KRO Controller<br/>Runtime Dependencies]
323
+
324
+ L --> O[Kubernetes Cluster]
325
+ M --> O
326
+ N --> O
327
+
328
+ subgraph "Compile Time"
329
+ A
330
+ B
331
+ C
332
+ D
333
+ P[IDE Support<br/>Autocomplete<br/>Type Safety]
334
+ end
335
+
336
+ subgraph "Runtime"
337
+ E
338
+ G
339
+ Q[CEL Evaluation<br/>Cross-Resource Refs<br/>Status Propagation]
340
+ end
341
+
342
+ A -.-> P
343
+ N -.-> Q
344
+
345
+ style A fill:#e1f5fe
346
+ style B fill:#f3e5f5
347
+ style O fill:#e8f5e8
348
+ style P fill:#fff3e0
349
+ style Q fill:#fff3e0
350
+ ```
351
+
352
+ ### Magic Proxy System
353
+
354
+ TypeKro's "magic" comes from its **proxy system** that creates different behaviors for execution-time vs runtime values:
355
+
356
+ #### Static Values (Known at Execution Time)
357
+ ```typescript
358
+ const deployment = simpleDeployment({
359
+   name: 'my-app',        // Static string
360
+   replicas: 3,           // Static number
361
+ });
362
+
363
+ // Accessing static values returns the actual value
364
+ console.log(deployment.spec.replicas); // Returns: 3
365
+ ```
366
+
367
+ #### Dynamic References (Unknown at Execution Time)
368
+ ```typescript
369
+ const deployment = simpleDeployment({
370
+   name: schema.spec.name,  // Schema reference - unknown until runtime
371
+ });
372
+
373
+ // Accessing schema or status fields creates KubernetesRef objects
374
+ const nameRef = schema.spec.name;        // Creates: KubernetesRef<string>
375
+ const statusRef = deployment.status.readyReplicas; // Creates: KubernetesRef<number>
376
+ ```
377
+
378
+ #### The `$` Prefix for Explicit References
379
+ ```typescript
380
+ const configMap = simpleConfigMap({
381
+   name: 'config',
382
+   data: { key: 'value' }  // Static value
383
+ });
384
+
385
+ const deployment = simpleDeployment({
386
+   name: 'app',
387
+   env: {
388
+     // Static behavior: Uses the known value "value" at execution time
389
+     STATIC_VALUE: configMap.data.key,
390
+     
391
+     // Dynamic behavior: Creates reference resolved by Kro at runtime
392
+     DYNAMIC_VALUE: configMap.data.$key,
393
+   }
394
+ });
395
+ ```
396
+
397
+ **Key Rule**: Schema references (`schema.spec.*`) and status references (`resource.status.*`) are automatically converted to CEL expressions. For explicit runtime references to other resource properties, use the `$` prefix.
398
+
399
+ ### Enhanced Types (RefOrValue Pattern)
400
+
401
+ Every factory function accepts `RefOrValue<T>`, which means any parameter can be:
402
+
403
+ ```typescript
404
+ // 1. Direct value
405
+ name: "my-app"
406
+
407
+ // 2. Schema reference (becomes CEL)
408
+ name: schema.spec.name
409
+
410
+ // 3. CEL expression 
411
+ name: Cel.template("%s-service", schema.spec.name)
412
+
413
+ // 4. Reference to another resource
414
+ env: {
415
+   DB_HOST: database.service.spec.clusterIP  // Runtime resolution
416
+ }
417
+ ```
418
+
419
+ This pattern provides **compile-time type safety** while enabling **runtime flexibility**.
420
+
421
+ ### CRD Installation Intelligence
422
+
423
+ TypeKro's direct deployer automatically handles Custom Resource Definition timing:
424
+
425
+ ```typescript
426
+ // TypeKro automatically detects CRD dependencies
427
+ const kroResources = [
428
+   kroDefinition,           // CRD must be installed first
429
+   kroInstance             // Instance depends on CRD
430
+ ];
431
+
432
+ const factory = await graph.factory('direct', { namespace: 'default' });
433
+ await factory.deploy(spec);  // ✅ Automatically waits for CRD readiness
434
+ ```
435
+
436
+ **Benefits:**
437
+ - **No "CRD not found" errors** - Automatic timing coordination
438
+ - **Zero manual ordering** - Intelligent dependency detection  
439
+ - **Production reliability** - Handles CRD establishment properly
440
+
441
+ ### Runtime vs Compile-time Behavior
442
+
443
+ | **Aspect** | **Compile-time** | **Runtime** |
444
+ |------------|------------------|-------------|
445
+ | **Type checking** | Full TypeScript validation | N/A |
446
+ | **IDE support** | Autocomplete, refactoring | N/A |
447
+ | **Schema references** | Appear as typed properties | Resolve to CEL expressions |
448
+ | **Resource references** | Type-safe property access | Runtime cluster state lookup |
449
+ | **Validation** | TypeScript + arktype schemas | Kubernetes validation + CEL |
450
+
451
+ ---
452
+
453
+ ## Comparison Grid
454
+
455
+ | Feature | TypeKro | Pulumi | CDK8s | Helm | Kustomize | Crossplane |
456
+ |---------|---------|---------|--------|------|-----------|------------|
457
+ | **Type Safety** | ✅ Full TypeScript | ✅ Multi-language | ✅ TypeScript | ❌ Templates | ❌ YAML | ❌ YAML |
458
+ | **GitOps Ready** | ✅ Deterministic YAML | ❌ State backend | ✅ YAML output | ✅ Charts | ✅ YAML | ✅ YAML |
459
+ | **Runtime Dependencies** | ✅ KRO + CEL expressions | ❌ Deploy-time only | ❌ Static | ❌ Templates | ❌ Static | ✅ Compositions |
460
+ | **IDE Support** | ✅ Full autocomplete | ✅ Language support | ✅ TypeScript | ❌ Limited | ❌ Limited | ❌ Limited |
461
+ | **Learning Curve** | 🟢 Just TypeScript | 🔴 New concepts | 🟡 TypeScript + K8s | 🔴 Templates | 🔴 YAML hell | 🔴 Complex |
462
+ | **Kubernetes Native** | ✅ Pure K8s resources | ❌ Abstraction layer | ✅ Pure K8s | ✅ K8s resources | ✅ K8s resources | ✅ K8s + CRDs |
463
+ | **Cross-Resource Refs** | ✅ Runtime resolution | ❌ Deploy-time | ❌ Manual | ❌ Manual | ❌ Manual | ✅ Built-in |
464
+ | **Multi-Cloud** | 🟡 Via Alchemy | ✅ Native | ❌ K8s only | ❌ K8s only | ❌ K8s only | ✅ Native |
465
+ | **State Management** | ✅ Stateless | ❌ State backend | ✅ Stateless | ✅ Stateless | ✅ Stateless | ✅ Controller |
466
+ | **CRD Timing** | ✅ Automatic | ❌ Manual | ❌ Manual | ❌ Manual | ❌ Manual | ✅ Built-in |
467
+
468
+ ---
469
+
470
+ ## GitOps Workflows
471
+
472
+ ### Deterministic YAML Generation
473
+
474
+ TypeKro generates stable, deterministic YAML output perfect for GitOps workflows:
475
+
476
+ ```typescript
477
+ // generate-manifests.ts
478
+ import { writeFileSync } from 'fs';
479
+
480
+ const graph = toResourceGraph(/* ... */);
481
+
482
+ // Same input always generates identical YAML
483
+ const factory = await graph.factory('kro', { namespace: 'default' });
484
+ const yaml = factory.toYaml();
485
+
486
+ // Write to file for GitOps
487
+ writeFileSync('k8s/my-app.yaml', yaml);
488
+ console.log('Generated k8s/my-app.yaml for GitOps deployment');
489
+ ```
490
+
491
+ **Multi-Environment GitOps Workflow:**
492
+
493
+ ```typescript
494
+ // scripts/generate-all-environments.ts
495
+ const environments = ['development', 'staging', 'production'];
496
+
497
+ for (const env of environments) {
498
+   // Generate ResourceGraphDefinition YAML for this environment
499
+   const factory = await webappGraph.factory('kro', { namespace: env });
500
+   const rgdYaml = factory.toYaml();
501
+   writeFileSync(`k8s/${env}/webapp-rgd.yaml`, rgdYaml);
502
+   
503
+   // Generate instance YAML with environment-specific spec
504
+   const instanceSpec = {
505
+     name: `webapp-${env}`,
506
+     image: env === 'production' ? 'nginx:1.21' : 'nginx:latest',
507
+     replicas: env === 'production' ? 3 : 1,
508
+   };
509
+   
510
+   const instanceYaml = factory.toYaml(instanceSpec);
511
+   writeFileSync(`k8s/${env}/webapp-instance.yaml`, instanceYaml);
512
+ }
513
+ ```
514
+
515
+ **Benefits for GitOps:**
516
+ - **Deterministic Output** - Same input always generates identical YAML
517
+ - **Git-Friendly** - Clean, readable YAML that diffs well  
518
+ - **Stable Resource IDs** - Consistent resource identifiers across deployments
519
+ - **No External State** - Pure functions, no external dependencies
520
+
521
+ ### Flux HelmRelease Integration
522
+
523
+ Deploy Helm charts with full TypeScript type safety and schema references:
524
+
525
+ ```typescript
526
+ import { helmRelease, helmRepository } from 'typekro';
527
+
528
+ const InfraSpec = type({
529
+   name: 'string',
530
+   replicas: 'number', 
531
+   loadBalancerIP: 'string',
532
+   environment: 'string'
533
+ });
534
+
535
+ const infraGraph = toResourceGraph(
536
+   {
537
+     name: 'ingress-infrastructure',
538
+     apiVersion: 'infrastructure.example.com/v1',
539
+     kind: 'IngressInfra',
540
+     spec: InfraSpec,
541
+     status: type({ ready: 'boolean' })
542
+   },
543
+   (schema) => ({
544
+     // Helm repository source
545
+     repository: helmRepository({
546
+       name: 'nginx-repo',
547
+       url: 'https://kubernetes.github.io/ingress-nginx'
548
+     }),
549
+     
550
+     // Type-safe Helm release with schema references
551
+     controller: helmRelease({
552
+       name: Cel.template('%s-ingress', schema.spec.name),
553
+       chart: {
554
+         spec: {
555
+           chart: 'ingress-nginx',
556
+           sourceRef: {
557
+             kind: 'HelmRepository',
558
+             name: 'nginx-repo'
559
+           },
560
+           version: '4.8.0'
561
+         }
562
+       },
563
+       values: {
564
+         controller: {
565
+           replicaCount: schema.spec.replicas,                    // Schema reference
566
+           service: {
567
+             loadBalancerIP: schema.spec.loadBalancerIP           // Schema reference
568
+           },
569
+           config: {
570
+             'custom-config': Cel.template('env-%s', schema.spec.environment)  // CEL expression
571
+           }
572
+         }
573
+       }
574
+     })
575
+   }),
576
+   (schema, resources) => ({
577
+     ready: Cel.expr(resources.controller.status.conditions, '[?@.type=="Ready"].status == "True"')
578
+   })
579
+ );
580
+
581
+ // Deploy via Flux
582
+ const factory = await infraGraph.factory('kro', { namespace: 'flux-system' });
583
+ const yaml = factory.toYaml();
584
+ writeFileSync('k8s/ingress-controller.yaml', yaml);
585
+ ```
586
+
587
+ **Key Benefits:**
588
+ - **Type-safe Helm values** - Full TypeScript validation for chart values
589
+ - **Schema references in values** - Connect Helm charts to your resource graph schema
590
+ - **Runtime value resolution** - CEL expressions evaluate at deployment time
591
+ - **Full integration with Flux CD HelmRelease**
592
+
593
+ ### External YAML Integration
594
+
595
+ Integrate existing YAML manifests and Kustomizations into TypeKro resource graphs:
596
+
597
+ ```typescript
598
+ import { yamlFile, yamlDirectory } from 'typekro';
599
+
600
+ const AppSpec = type({
601
+   name: 'string',
602
+   image: 'string'
603
+ });
604
+
605
+ const hybridGraph = toResourceGraph(
606
+   {
607
+     name: 'hybrid-app',
608
+     apiVersion: 'apps.example.com/v1',
609
+     kind: 'HybridApp',
610
+     spec: AppSpec,
611
+     status: type({ ready: 'boolean' })
612
+   },
613
+   (schema) => ({
614
+     // Include external YAML files
615
+     monitoring: yamlFile({
616
+       path: './k8s/prometheus-operator.yaml',
617
+       namespace: schema.metadata.namespace  // Schema reference for namespace
618
+     }),
619
+     
620
+     // Include entire directories with Kustomization
621
+     monitoringStack: yamlDirectory({
622
+       path: './k8s/monitoring/',
623
+       recursive: true,
624
+       kustomization: {
625
+         namePrefix: Cel.template('%s-', schema.spec.name),     // Dynamic prefix
626
+         namespace: schema.metadata.namespace,
627
+         commonLabels: {
628
+           'app.kubernetes.io/instance': schema.spec.name        // Schema reference
629
+         }
630
+       }
631
+     }),
632
+     
633
+     // Include from Git repositories
634
+     kubePrometheus: yamlDirectory({
635
+       path: 'https://github.com/prometheus-operator/kube-prometheus.git//manifests',
636
+       ref: 'v0.12.0',
637
+       namespace: 'monitoring'
638
+     }),
639
+     
640
+     // TypeKro resources that reference external resources
641
+     app: simpleDeployment({
642
+       name: schema.spec.name,
643
+       image: schema.spec.image,
644
+       env: {
645
+         PROMETHEUS_URL: 'http://prometheus-operated.monitoring.svc.cluster.local:9090'
646
+       }
647
+     })
648
+   }),
649
+   (schema, resources) => ({
650
+     ready: Cel.expr(resources.app.status.readyReplicas, ' > 0')
651
+   })
652
+ );
653
+ ```
654
+
655
+ **Integration Capabilities:**
656
+ - **File and directory inclusion** - Bring existing YAML into resource graphs
657
+ - **Kustomization support** - Apply transformations with schema references  
658
+ - **Git repository sources** - Include manifests directly from Git
659
+ - **Mixed TypeKro + YAML** - Combine hand-written YAML with TypeKro resources
660
+
661
+ ---
662
+
663
+ ## Complete Factory Reference
664
+
665
+ TypeKro provides 50+ factory functions for all major Kubernetes resources:
666
+
667
+ **Core Resources:** `simpleDeployment()`, `simpleService()`, `simpleConfigMap()`, `simpleSecret()`, `simplePvc()`
668
+
669
+ **Advanced:** `helmRelease()`, `yamlFile()`, `customResource()`, `networkPolicy()`, `serviceAccount()`, plus comprehensive RBAC, storage, networking, and workload resources.
670
+
671
+ All resources support full type safety, cross-resource references, IDE autocomplete, and CEL expression integration.
672
+
673
+ **[📖 View Complete Factory Reference →](docs/api/factories.md)**
674
+
675
+ ---
676
+
677
+ ## Which Pattern Should I Use?
678
+
679
+ ### 🆕 "I'm new to Kubernetes"
680
+ **→ Use: Direct Deployment**
681
+ ```typescript
682
+ const factory = await graph.factory('direct', { namespace: 'default' });
683
+ await factory.deploy(spec);
684
+ ```
685
+ - Immediate feedback loop
686
+ - No external dependencies  
687
+ - Built-in CRD timing intelligence
688
+ - Great for learning
689
+
690
+ ### 🔄 "I have existing YAML and want to migrate gradually"  
691
+ **→ Use: yamlFile() + gradual adoption**
692
+ ```typescript
693
+ const hybridGraph = toResourceGraph(
694
+   {
695
+     name: 'legacy-app',
696
+     apiVersion: 'apps.example.com/v1',
697
+     kind: 'LegacyApp',
698
+     spec: type({ name: 'string' }),
699
+     status: type({ ready: 'boolean' })
700
+   },
701
+   (schema) => ({
702
+     existing: yamlFile({ path: './existing/app.yaml' }),        // Keep existing
703
+     newService: simpleService({                                 // Add TypeKro gradually
704
+       name: schema.spec.name,
705
+       selector: { app: schema.spec.name }
706
+     })
707
+   }),
708
+   (schema, resources) => ({
709
+     ready: Cel.expr(resources.newService.status.ready, ' == true')
710
+   })
711
+ );
712
+ ```
713
+ - Preserve existing workflows
714
+ - Migrate incrementally
715
+ - Zero disruption migration path
716
+
717
+ ### 🚀 "I want GitOps workflows"
718
+ **→ Use: YAML Generation + Flux HelmRelease**
719
+ ```typescript
720
+ const factory = await graph.factory('kro', { namespace: 'production' });
721
+ const yaml = factory.toYaml();
722
+ writeFileSync('k8s/app.yaml', yaml);
723
+ ```
724
+ - Deterministic YAML output
725
+ - Git-based workflows  
726
+ - Works with ArgoCD, Flux, kubectl
727
+
728
+ ### ☁️ "I need multi-cloud infrastructure"
729
+ **→ Use: [Alchemy Integration](#multi-cloud-integration-with-alchemy)**
730
+ ```typescript
731
+ await alchemyScope.run(async () => {
732
+ const factory = await graph.factory('direct', {
733
+ namespace: 'default',
734
+ alchemyScope: alchemyScope
735
+ });
736
+ await factory.deploy(spec);
737
+ });
738
+ ```
739
+ - Unified TypeScript across cloud + K8s
740
+ - Individual resource registration
741
+ - Type-safe cloud resources
742
+
743
+ ### 📦 "I want to deploy Helm charts with type safety"
744
+ **→ Use: helmRelease() patterns**
745
+ ```typescript
746
+ helmRelease({
747
+   name: 'nginx',
748
+   chart: { /* ... */ },
749
+   values: {
750
+     replicaCount: schema.spec.replicas,  // Type-safe values
751
+     service: {
752
+       loadBalancerIP: schema.spec.ip     // Schema references
753
+     }
754
+   }
755
+ })
756
+ ```
757
+ - Type-safe Helm values
758
+ - Schema references in chart values
759
+ - Flux CD integration
760
+
761
+ ### 🔗 "I have complex runtime dependencies"
762
+ **→ Use: Kro Deployment + CEL expressions**
763
+ ```typescript
764
+ simpleDeployment({
765
+   env: {
766
+     DB_HOST: database.service.spec.clusterIP,           // Runtime resolution
767
+     API_URL: Cel.template('http://%s:8080', 
768
+       webService.status.loadBalancer.ingress[0].ip)     // Status references
769
+   }
770
+ })
771
+ ```
772
+ - Runtime resource resolution
773
+ - Advanced orchestration
774
+ - Self-healing infrastructure
775
+ - Production-ready patterns
776
+
777
+ ### 🎯 "I need to make the right choice for my team"
778
+
779
+ | **Team Size** | **K8s Experience** | **Deployment Model** | **Recommended Pattern** |
780
+ |---------------|-------------------|---------------------|------------------------|
781
+ | Small (1-3) | Beginner | Any | Direct Deployment |
782
+ | Small (1-3) | Expert | GitOps | YAML Generation |
783
+ | Medium (4-10) | Mixed | GitOps | Kro + GitOps |
784
+ | Large (10+) | Expert | Enterprise GitOps | Kro + GitOps + Alchemy |
785
+ | Any | Any | Multi-cloud | [Alchemy Integration](#multi-cloud-integration-with-alchemy) |
786
+ | Any | Any | Helm-heavy | HelmRelease patterns |
787
+
788
+ Choose based on your team's needs, not just technical capabilities. You can always evolve your approach as requirements change.
789
+
790
+ ---
791
+
792
+ ## Enhanced Type System
793
+
794
+ TypeKro provides **enhanced types** through its magic proxy system, eliminating the need for optional chaining (`?.`) when working with schema and resource references.
795
+
796
+ ### Schema References - Always Present
797
+
798
+ When you access schema fields in the resource builder, TypeScript treats them as always present:
799
+
800
+ ```typescript
801
+ const graph = toResourceGraph(
802
+   {
803
+     name: 'my-app',
804
+     spec: type({
805
+       name: 'string',
806
+       image: 'string',
807
+       replicas: 'number',
808
+       environment: 'string',
809
+     }),
810
+     status: type({
811
+       ready: 'boolean',
812
+       url: 'string',
813
+     }),
814
+   },
815
+   (schema) => ({
816
+     deployment: simpleDeployment({
817
+       // ✅ No optional chaining needed - TypeScript knows these exist
818
+       name: schema.spec.name,           // Type: string (not string | undefined)
819
+       image: schema.spec.image,         // Type: string (not string | undefined)
820
+       replicas: schema.spec.replicas,   // Type: number (not number | undefined)
821
+       
822
+       env: {
823
+         NODE_ENV: schema.spec.environment,  // Type: string
824
+       },
825
+     }),
826
+   }),
827
+   (schema, resources) => ({
828
+     // ✅ Status fields are also enhanced - no optional chaining needed
829
+     ready: Cel.expr(resources.deployment.status.readyReplicas, ' > 0'),
830
+     url: Cel.template('https://%s.example.com', schema.spec.name),
831
+   })
832
+ );
833
+ ```
834
+
835
+ ### Resource Status References - Enhanced Types
836
+
837
+ Resource status fields are enhanced to be non-optional within the builders:
838
+
839
+ ```typescript
840
+ // Without TypeKro (regular Kubernetes types)
841
+ const regularK8s = {
842
+   // These would require optional chaining
843
+   replicas: deployment.status?.readyReplicas,        // number | undefined
844
+   conditions: deployment.status?.conditions?.[0],   // Condition | undefined
845
+ };
846
+
847
+ // With TypeKro (enhanced types)
848
+ const graph = toResourceGraph(
849
+   // ... schema definition
850
+   (schema, resources) => ({
851
+     // ✅ No optional chaining needed - enhanced types guarantee presence
852
+     replicas: resources.deployment.status.readyReplicas,     // Type: number
853
+     phase: resources.deployment.status.phase,                // Type: string
854
+     conditions: resources.deployment.status.conditions[0],   // Type: Condition
855
+     
856
+     // Complex expressions work naturally
857
+     healthy: Cel.expr(
858
+       resources.deployment.status.readyReplicas, ' == ',
859
+       resources.deployment.spec.replicas
860
+     ),
861
+   })
862
+ );
863
+ ```
864
+
865
+ ### How Enhanced Types Work
866
+
867
+ The magic proxy system provides type enhancement while respecting the static/dynamic value distinction:
868
+
869
+ 1. **Enhanced Type Safety**: Schema and resource references appear as non-optional TypeScript types
870
+ 2. **Dynamic Reference Creation**: Schema and status field access creates `KubernetesRef<T>` objects
871
+ 3. **Static Value Preservation**: Known values at execution time remain as actual values
872
+
873
+ ```typescript
874
+ // Schema references (always dynamic - unknown until runtime)
875
+ const nameRef = schema.spec.name;                    // Creates: KubernetesRef<string>
876
+ const imageRef = schema.spec.image;                  // Creates: KubernetesRef<string>
877
+
878
+ // Resource status references (always dynamic - runtime cluster state)
879
+ const replicasRef = resources.deployment.status.readyReplicas;  // Creates: KubernetesRef<number>
880
+
881
+ // Static values (known at execution time)
882
+ const staticName = 'my-app';                         // Remains: string
883
+ const staticReplicas = 3;                            // Remains: number
884
+
885
+ // Mixed usage in factory functions
886
+ const deployment = simpleDeployment({
887
+   name: schema.spec.name,        // Dynamic: KubernetesRef<string> → CEL expression
888
+   replicas: 3,                   // Static: number → direct value
889
+   image: 'nginx:latest'          // Static: string → direct value
890
+ });
891
+ ```
892
+
893
+ ### Benefits of Enhanced Types
894
+
895
+ - **No Optional Chaining**: Write cleaner code without `?.` operators
896
+ - **Better IntelliSense**: Full autocomplete for all schema and status fields
897
+ - **Execution-Time Safety**: Catch typos and missing fields when building resources
898
+ - **Runtime Flexibility**: References are resolved dynamically by Kro
899
+ - **Natural Syntax**: Write code that looks like direct property access
900
+
901
+ This enhanced type system makes TypeKro feel natural to use while maintaining the powerful reference resolution capabilities needed for complex Kubernetes deployments.
902
+
903
+ ---
904
+
905
+ ## Multi-Cloud Integration with Alchemy
906
+
907
+ TypeKro integrates seamlessly with [Alchemy](https://alchemy.run) to enable unified cloud + Kubernetes infrastructure management. Alchemy is infrastructure-as-TypeScript that lets you deploy to Cloudflare, AWS, and more with pure TypeScript.
908
+
909
+ ### Why Use TypeKro + Alchemy?
910
+
911
+ - **Unified TypeScript Experience**: Write both cloud resources and Kubernetes resources in the same language
912
+ - **Cross-Platform References**: Cloud resources can reference Kubernetes resources and vice versa
913
+ - **Type-Safe Integration**: Full TypeScript validation across your entire infrastructure stack
914
+ - **Flexible Deployment**: Use any TypeKro deployment strategy (Direct, YAML, KRO) with Alchemy
915
+
916
+ ### Individual Resource Registration Pattern
917
+
918
+ Register specific TypeKro resources with Alchemy for hybrid cloud-native applications:
919
+
920
+ ```typescript
921
+ import alchemy from 'alchemy';
922
+ import { Bucket } from 'alchemy/aws';
923
+
924
+ // 1. Create Alchemy scope
925
+ const app = await alchemy('webapp-infrastructure');
926
+
927
+ // 2. Create cloud resources with Alchemy
928
+ const bucket = await Bucket('webapp-uploads');
929
+
930
+ // 3. Create Kubernetes resources that reference cloud resources
931
+ const webappGraph = toResourceGraph(
932
+   {
933
+     name: 'webapp-with-cloud',
934
+     apiVersion: 'example.com/v1',
935
+     kind: 'CloudWebApp',
936
+     spec: type({ name: 'string', image: 'string', replicas: 'number' }),
937
+     status: type({ ready: 'boolean' })
938
+   },
939
+   (schema) => ({
940
+     app: simpleDeployment({
941
+       name: schema.spec.name,
942
+       image: schema.spec.image,
943
+       env: {
944
+         BUCKET_NAME: bucket.name,  // Reference to Alchemy resource
945
+         API_URL: Cel.template('http://%s-service', schema.spec.name)
946
+       }
947
+     })
948
+   }),
949
+   (schema, resources) => ({
950
+     ready: Cel.expr(resources.app.status.readyReplicas, ' > 0')
951
+   })
952
+ );
953
+
954
+ // Deploy TypeKro resources with Alchemy integration
955
+ await app.run(async () => {
956
+ const factory = await webappGraph.factory('direct', {
957
+ namespace: 'default',
958
+ alchemyScope: app
959
+ });
960
+ await factory.deploy({
961
+ name: 'webapp',
962
+ image: 'nginx:1.21',
963
+ replicas: 3
964
+ });
965
+ });
966
+ ```
967
+
968
+ ### Real-World Cloud-Native Application
969
+
970
+ Here's a complete example showing TypeKro + Alchemy for a production cloud-native application:
971
+
972
+ ```typescript
973
+ import alchemy from 'alchemy';
974
+ import { Bucket, Function as LambdaFunction } from 'alchemy/aws';
975
+ import { toResourceGraph, simpleDeployment, type } from 'typekro';
976
+
977
+ // 1. Create Alchemy scope
978
+ const app = await alchemy('cloud-native-app');
979
+
980
+ // 2. Cloud resources with Alchemy
981
+ const api = await LambdaFunction('database-function', {
982
+   code: './functions/database.js',
983
+   environment: {
984
+     DATABASE_URL: 'postgresql://...'
985
+   }
986
+ });
987
+
988
+ const bucket = await Bucket('app-uploads');
989
+
990
+ // 3. Kubernetes resources with TypeKro that reference cloud resources
991
+ const AppSpec = type({
992
+   name: 'string',
993
+   image: 'string',
994
+   replicas: 'number'
995
+ });
996
+
997
+ const appGraph = toResourceGraph(
998
+   {
999
+     name: 'cloud-native-app',
1000
+     apiVersion: 'example.com/v1',
1001
+     kind: 'CloudNativeApp',
1002
+     spec: AppSpec,
1003
+     status: type({ ready: 'boolean' })
1004
+   },
1005
+   (schema) => ({
1006
+     app: simpleDeployment({
1007
+       name: schema.spec.name,
1008
+       image: schema.spec.image,
1009
+       env: {
1010
+         // Reference cloud resources
1011
+         API_URL: api.url,
1012
+         UPLOAD_BUCKET: bucket.name,
1013
+         // Reference other Kubernetes resources  
1014
+         REDIS_HOST: Cel.template('%s-redis', schema.spec.name)
1015
+       }
1016
+     }),
1017
+     
1018
+     redis: simpleDeployment({
1019
+       name: Cel.template('%s-redis', schema.spec.name),
1020
+       image: 'redis:7'
1021
+     })
1022
+   }),
1023
+   (schema, resources) => ({
1024
+     ready: Cel.expr(resources.app.status.readyReplicas, ' > 0')
1025
+   })
1026
+ );
1027
+
1028
+ // 4. Deploy as unified infrastructure
1029
+ await app.run(async () => {
1030
+ const factory = await appGraph.factory('direct', {
1031
+ namespace: 'production',
1032
+ alchemyScope: app
1033
+ });
1034
+ await factory.deploy({
1035
+ name: 'myapp',
1036
+ image: 'myapp:v1.2.3',
1037
+ replicas: 5
1038
+ });
1039
+ });
1040
+ ```
1041
+
1042
+ ### Integration Patterns
1043
+
1044
+ TypeKro works with all Alchemy deployment patterns:
1045
+
1046
+ #### Pattern 1: Cloud-First with Kubernetes Extensions
1047
+ ```typescript
1048
+ // Start with cloud infrastructure
1049
+ const app = await alchemy('my-platform');
1050
+ const database = await RDS('main-db');
1051
+ const cache = await ElastiCache('redis-cluster');
1052
+
1053
+ // Add Kubernetes workloads that use cloud resources
1054
+ const k8sWorkloads = await webappGraph.factory('kro', { namespace: 'apps' });
1055
+ await app.run(async () => {
1056
+ const factory = await k8sWorkloads.factory('kro', {
1057
+ namespace: 'apps',
1058
+ alchemyScope: app
1059
+ });
1060
+ await factory.deploy({
1061
+ databaseUrl: database.endpoint,
1062
+ redisUrl: cache.endpoint
1063
+ });
1064
+ });
1065
+ ```
1066
+
1067
+ #### Pattern 2: Kubernetes-First with Cloud Services
1068
+ ```typescript
1069
+ // Start with Kubernetes infrastructure
1070
+ const webappFactory = await webappGraph.factory('direct', { namespace: 'default' });
1071
+
1072
+ // Add cloud resources that support the Kubernetes workloads
1073
+ const app = await alchemy('support-services');
1074
+ const monitoring = await CloudWatch('webapp-metrics');
1075
+ const storage = await S3('webapp-data');
1076
+
1077
+ await app.run(async () => {
1078
+ const factory = await webappGraph.factory('direct', {
1079
+ namespace: 'default',
1080
+ alchemyScope: app
1081
+ });
1082
+ await factory.deploy({ /* config */ });
1083
+ });
1084
+ ```
1085
+
1086
+ ### Benefits of TypeKro + Alchemy Integration
1087
+
1088
+ - **Single Language**: TypeScript for everything - no YAML, HCL, or domain-specific languages
1089
+ - **Type Safety Across Platforms**: Catch configuration errors at compile time, not runtime
1090
+ - **Cross-Platform References**: Natural references between cloud and Kubernetes resources
1091
+ - **Deployment Flexibility**: Use any TypeKro deployment strategy with Alchemy
1092
+ - **IDE Support**: Full autocomplete and refactoring across your entire infrastructure
1093
+ - **GitOps Compatible**: Generate deterministic YAML while maintaining cloud resource management
1094
+
1095
+ ---
1096
+
1097
+ ## Contributing
1098
+
1099
+ We welcome contributions to TypeKro! Whether you're fixing bugs, adding features, or improving documentation, your help makes TypeKro better for everyone.
1100
+
1101
+ ### Quick Start for Contributors
1102
+
1103
+ ```bash
1104
+ # Fork and clone the repository
1105
+ git clone https://github.com/your-username/typekro.git
1106
+ cd typekro
1107
+
1108
+ # Install dependencies (we use Bun)
1109
+ bun install
1110
+
1111
+ # Run tests to ensure everything works
1112
+ bun run test
1113
+
1114
+ # Make your changes and run quality checks
1115
+ bun run quality
1116
+ ```
1117
+
1118
+ ### What Can You Contribute?
1119
+
1120
+ - 🐛 **Bug Fixes** - Help us squash bugs and improve reliability
1121
+ - ✨ **New Features** - Add factory functions for new Kubernetes resources
1122
+ - 📚 **Documentation** - Improve examples, guides, and API documentation
1123
+ - 🧪 **Tests** - Add test coverage for edge cases and new functionality
1124
+ - 🔧 **Tooling** - Improve development experience and CI/CD
1125
+
1126
+ **[📖 Read the Complete Contributing Guide →](CONTRIBUTING.md)**
1127
+
1128
+ The contributing guide includes:
1129
+ - Detailed setup instructions
1130
+ - Code structure and architectural principles
1131
+ - Testing guidelines and examples
1132
+ - PR submission process
1133
+ - Release workflow
1134
+
1135
+ ## License
1136
+
1137
+ Apache 2.0 - see [LICENSE](LICENSE) for details.