typekro 0.4.0 → 0.7.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 (1425) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/advanced/index.d.ts +52 -0
  3. package/dist/advanced/index.d.ts.map +1 -0
  4. package/dist/advanced/index.js +60 -0
  5. package/dist/advanced/index.js.map +1 -0
  6. package/dist/alchemy/deployers.d.ts.map +1 -1
  7. package/dist/alchemy/deployers.js +12 -28
  8. package/dist/alchemy/deployers.js.map +1 -1
  9. package/dist/alchemy/index.d.ts +8 -8
  10. package/dist/alchemy/index.d.ts.map +1 -1
  11. package/dist/alchemy/index.js +12 -11
  12. package/dist/alchemy/index.js.map +1 -1
  13. package/dist/alchemy/resolver.d.ts.map +1 -1
  14. package/dist/alchemy/resolver.js +6 -5
  15. package/dist/alchemy/resolver.js.map +1 -1
  16. package/dist/alchemy/resource-registration.d.ts.map +1 -1
  17. package/dist/alchemy/resource-registration.js +20 -8
  18. package/dist/alchemy/resource-registration.js.map +1 -1
  19. package/dist/alchemy/type-inference.d.ts.map +1 -1
  20. package/dist/alchemy/type-inference.js +6 -5
  21. package/dist/alchemy/type-inference.js.map +1 -1
  22. package/dist/alchemy/types.d.ts +1 -1
  23. package/dist/alchemy/types.d.ts.map +1 -1
  24. package/dist/alchemy/utilities.d.ts.map +1 -1
  25. package/dist/alchemy/utilities.js +1 -1
  26. package/dist/alchemy/utilities.js.map +1 -1
  27. package/dist/alchemy/wrapper.d.ts +4 -2
  28. package/dist/alchemy/wrapper.d.ts.map +1 -1
  29. package/dist/alchemy/wrapper.js +2 -1
  30. package/dist/alchemy/wrapper.js.map +1 -1
  31. package/dist/compositions/typekro-runtime/index.d.ts +3 -0
  32. package/dist/compositions/typekro-runtime/index.d.ts.map +1 -0
  33. package/dist/compositions/typekro-runtime/index.js.map +1 -0
  34. package/dist/{core/composition → compositions}/typekro-runtime/typekro-runtime.d.ts +7 -2
  35. package/dist/compositions/typekro-runtime/typekro-runtime.d.ts.map +1 -0
  36. package/dist/compositions/typekro-runtime/typekro-runtime.js +404 -0
  37. package/dist/compositions/typekro-runtime/typekro-runtime.js.map +1 -0
  38. package/dist/compositions/typekro-runtime/types.d.ts +45 -0
  39. package/dist/compositions/typekro-runtime/types.d.ts.map +1 -0
  40. package/dist/compositions/typekro-runtime/types.js.map +1 -0
  41. package/dist/core/composition/context.d.ts +105 -0
  42. package/dist/core/composition/context.d.ts.map +1 -0
  43. package/dist/core/composition/context.js +125 -0
  44. package/dist/core/composition/context.js.map +1 -0
  45. package/dist/core/composition/imperative.d.ts +36 -10
  46. package/dist/core/composition/imperative.d.ts.map +1 -1
  47. package/dist/core/composition/imperative.js +183 -142
  48. package/dist/core/composition/imperative.js.map +1 -1
  49. package/dist/core/composition/index.d.ts +2 -4
  50. package/dist/core/composition/index.d.ts.map +1 -1
  51. package/dist/core/composition/index.js +1 -4
  52. package/dist/core/composition/index.js.map +1 -1
  53. package/dist/core/composition/nested-status-cel.d.ts +50 -0
  54. package/dist/core/composition/nested-status-cel.d.ts.map +1 -0
  55. package/dist/core/composition/nested-status-cel.js +169 -0
  56. package/dist/core/composition/nested-status-cel.js.map +1 -0
  57. package/dist/core/composition-debugger.d.ts +78 -0
  58. package/dist/core/composition-debugger.d.ts.map +1 -0
  59. package/dist/core/composition-debugger.js +142 -0
  60. package/dist/core/composition-debugger.js.map +1 -0
  61. package/dist/core/config/defaults.d.ts +109 -0
  62. package/dist/core/config/defaults.d.ts.map +1 -0
  63. package/dist/core/config/defaults.js +150 -0
  64. package/dist/core/config/defaults.js.map +1 -0
  65. package/dist/core/config/env.d.ts +12 -0
  66. package/dist/core/config/env.d.ts.map +1 -0
  67. package/dist/core/config/env.js +16 -0
  68. package/dist/core/config/env.js.map +1 -0
  69. package/dist/core/config/index.d.ts +3 -0
  70. package/dist/core/config/index.d.ts.map +1 -0
  71. package/dist/core/config/index.js +3 -0
  72. package/dist/core/config/index.js.map +1 -0
  73. package/dist/core/constants/brands.d.ts +4 -57
  74. package/dist/core/constants/brands.d.ts.map +1 -1
  75. package/dist/core/constants/brands.js +4 -60
  76. package/dist/core/constants/brands.js.map +1 -1
  77. package/dist/core/containers/build.d.ts +50 -0
  78. package/dist/core/containers/build.d.ts.map +1 -0
  79. package/dist/core/containers/build.js +146 -0
  80. package/dist/core/containers/build.js.map +1 -0
  81. package/dist/core/containers/errors.d.ts +14 -0
  82. package/dist/core/containers/errors.d.ts.map +1 -0
  83. package/dist/core/containers/errors.js +48 -0
  84. package/dist/core/containers/errors.js.map +1 -0
  85. package/dist/core/containers/exec.d.ts +36 -0
  86. package/dist/core/containers/exec.d.ts.map +1 -0
  87. package/dist/core/containers/exec.js +110 -0
  88. package/dist/core/containers/exec.js.map +1 -0
  89. package/dist/core/containers/index.d.ts +21 -0
  90. package/dist/core/containers/index.d.ts.map +1 -0
  91. package/dist/core/containers/index.js +20 -0
  92. package/dist/core/containers/index.js.map +1 -0
  93. package/dist/core/containers/registries/ecr.d.ts +22 -0
  94. package/dist/core/containers/registries/ecr.d.ts.map +1 -0
  95. package/dist/core/containers/registries/ecr.js +118 -0
  96. package/dist/core/containers/registries/ecr.js.map +1 -0
  97. package/dist/core/containers/registries/index.d.ts +9 -0
  98. package/dist/core/containers/registries/index.d.ts.map +1 -0
  99. package/dist/core/containers/registries/index.js +23 -0
  100. package/dist/core/containers/registries/index.js.map +1 -0
  101. package/dist/core/containers/registries/orbstack.d.ts +14 -0
  102. package/dist/core/containers/registries/orbstack.d.ts.map +1 -0
  103. package/dist/core/containers/registries/orbstack.js +24 -0
  104. package/dist/core/containers/registries/orbstack.js.map +1 -0
  105. package/dist/core/containers/registries/types.d.ts +94 -0
  106. package/dist/core/containers/registries/types.d.ts.map +1 -0
  107. package/dist/core/containers/registries/types.js +11 -0
  108. package/dist/core/containers/registries/types.js.map +1 -0
  109. package/dist/core/dependencies/graph.d.ts +4 -0
  110. package/dist/core/dependencies/graph.d.ts.map +1 -1
  111. package/dist/core/dependencies/graph.js +10 -4
  112. package/dist/core/dependencies/graph.js.map +1 -1
  113. package/dist/core/dependencies/resolver.d.ts +28 -0
  114. package/dist/core/dependencies/resolver.d.ts.map +1 -1
  115. package/dist/core/dependencies/resolver.js +141 -8
  116. package/dist/core/dependencies/resolver.js.map +1 -1
  117. package/dist/core/deployment/client-provider-manager.d.ts +40 -0
  118. package/dist/core/deployment/client-provider-manager.d.ts.map +1 -0
  119. package/dist/core/deployment/client-provider-manager.js +63 -0
  120. package/dist/core/deployment/client-provider-manager.js.map +1 -0
  121. package/dist/core/deployment/closure-planner.d.ts +20 -0
  122. package/dist/core/deployment/closure-planner.d.ts.map +1 -0
  123. package/dist/core/deployment/closure-planner.js +96 -0
  124. package/dist/core/deployment/closure-planner.js.map +1 -0
  125. package/dist/core/deployment/crd-manager.d.ts +52 -0
  126. package/dist/core/deployment/crd-manager.d.ts.map +1 -0
  127. package/dist/core/deployment/crd-manager.js +227 -0
  128. package/dist/core/deployment/crd-manager.js.map +1 -0
  129. package/dist/core/deployment/debug-logger.d.ts +3 -14
  130. package/dist/core/deployment/debug-logger.d.ts.map +1 -1
  131. package/dist/core/deployment/debug-logger.js +41 -12
  132. package/dist/core/deployment/debug-logger.js.map +1 -1
  133. package/dist/core/deployment/direct-factory.d.ts +36 -8
  134. package/dist/core/deployment/direct-factory.d.ts.map +1 -1
  135. package/dist/core/deployment/direct-factory.js +355 -164
  136. package/dist/core/deployment/direct-factory.js.map +1 -1
  137. package/dist/core/deployment/engine.d.ts +85 -65
  138. package/dist/core/deployment/engine.d.ts.map +1 -1
  139. package/dist/core/deployment/engine.js +549 -1704
  140. package/dist/core/deployment/engine.js.map +1 -1
  141. package/dist/core/deployment/errors.d.ts +30 -0
  142. package/dist/core/deployment/errors.d.ts.map +1 -0
  143. package/dist/core/deployment/errors.js +84 -0
  144. package/dist/core/deployment/errors.js.map +1 -0
  145. package/dist/core/deployment/event-filter.d.ts.map +1 -1
  146. package/dist/core/deployment/event-filter.js +16 -12
  147. package/dist/core/deployment/event-filter.js.map +1 -1
  148. package/dist/core/deployment/event-monitor.d.ts +3 -3
  149. package/dist/core/deployment/event-monitor.d.ts.map +1 -1
  150. package/dist/core/deployment/event-monitor.js +127 -49
  151. package/dist/core/deployment/event-monitor.js.map +1 -1
  152. package/dist/core/deployment/index.d.ts +5 -2
  153. package/dist/core/deployment/index.d.ts.map +1 -1
  154. package/dist/core/deployment/index.js +5 -3
  155. package/dist/core/deployment/index.js.map +1 -1
  156. package/dist/core/deployment/k8s-helpers.d.ts +44 -0
  157. package/dist/core/deployment/k8s-helpers.d.ts.map +1 -0
  158. package/dist/core/deployment/k8s-helpers.js +109 -0
  159. package/dist/core/deployment/k8s-helpers.js.map +1 -0
  160. package/dist/core/deployment/kro-factory.d.ts +35 -22
  161. package/dist/core/deployment/kro-factory.d.ts.map +1 -1
  162. package/dist/core/deployment/kro-factory.js +450 -375
  163. package/dist/core/deployment/kro-factory.js.map +1 -1
  164. package/dist/core/deployment/kro-readiness.d.ts +54 -0
  165. package/dist/core/deployment/kro-readiness.d.ts.map +1 -0
  166. package/dist/core/deployment/kro-readiness.js +149 -0
  167. package/dist/core/deployment/kro-readiness.js.map +1 -0
  168. package/dist/core/deployment/nested-composition-status.d.ts +33 -0
  169. package/dist/core/deployment/nested-composition-status.d.ts.map +1 -0
  170. package/dist/core/deployment/nested-composition-status.js +101 -0
  171. package/dist/core/deployment/nested-composition-status.js.map +1 -0
  172. package/dist/core/deployment/readiness-waiter.d.ts +60 -0
  173. package/dist/core/deployment/readiness-waiter.d.ts.map +1 -0
  174. package/dist/core/deployment/readiness-waiter.js +262 -0
  175. package/dist/core/deployment/readiness-waiter.js.map +1 -0
  176. package/dist/core/deployment/readiness.d.ts +3 -9
  177. package/dist/core/deployment/readiness.d.ts.map +1 -1
  178. package/dist/core/deployment/readiness.js +12 -28
  179. package/dist/core/deployment/readiness.js.map +1 -1
  180. package/dist/core/deployment/resource-applier.d.ts +58 -0
  181. package/dist/core/deployment/resource-applier.d.ts.map +1 -0
  182. package/dist/core/deployment/resource-applier.js +385 -0
  183. package/dist/core/deployment/resource-applier.js.map +1 -0
  184. package/dist/core/deployment/rollback-manager.d.ts +19 -2
  185. package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
  186. package/dist/core/deployment/rollback-manager.js +146 -11
  187. package/dist/core/deployment/rollback-manager.js.map +1 -1
  188. package/dist/core/deployment/shared-utilities.d.ts +38 -9
  189. package/dist/core/deployment/shared-utilities.d.ts.map +1 -1
  190. package/dist/core/deployment/shared-utilities.js +92 -22
  191. package/dist/core/deployment/shared-utilities.js.map +1 -1
  192. package/dist/core/deployment/status-hydrator.d.ts.map +1 -1
  193. package/dist/core/deployment/status-hydrator.js +13 -10
  194. package/dist/core/deployment/status-hydrator.js.map +1 -1
  195. package/dist/core/deployment/strategies/alchemy-strategy.d.ts.map +1 -1
  196. package/dist/core/deployment/strategies/alchemy-strategy.js +16 -9
  197. package/dist/core/deployment/strategies/alchemy-strategy.js.map +1 -1
  198. package/dist/core/deployment/strategies/base-strategy.d.ts +14 -0
  199. package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -1
  200. package/dist/core/deployment/strategies/base-strategy.js +325 -244
  201. package/dist/core/deployment/strategies/base-strategy.js.map +1 -1
  202. package/dist/core/deployment/strategies/direct-strategy.d.ts +10 -4
  203. package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
  204. package/dist/core/deployment/strategies/direct-strategy.js +140 -33
  205. package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
  206. package/dist/core/deployment/strategies/kro-strategy.d.ts +13 -8
  207. package/dist/core/deployment/strategies/kro-strategy.d.ts.map +1 -1
  208. package/dist/core/deployment/strategies/kro-strategy.js +51 -148
  209. package/dist/core/deployment/strategies/kro-strategy.js.map +1 -1
  210. package/dist/core/errors.d.ts +134 -83
  211. package/dist/core/errors.d.ts.map +1 -1
  212. package/dist/core/errors.js +177 -300
  213. package/dist/core/errors.js.map +1 -1
  214. package/dist/core/expressions/analysis/analyzer.d.ts +155 -0
  215. package/dist/core/expressions/analysis/analyzer.d.ts.map +1 -0
  216. package/dist/core/expressions/analysis/analyzer.js +540 -0
  217. package/dist/core/expressions/analysis/analyzer.js.map +1 -0
  218. package/dist/core/expressions/analysis/array-method-converters.d.ts +19 -0
  219. package/dist/core/expressions/analysis/array-method-converters.d.ts.map +1 -0
  220. package/dist/core/expressions/analysis/array-method-converters.js +175 -0
  221. package/dist/core/expressions/analysis/array-method-converters.js.map +1 -0
  222. package/dist/core/expressions/analysis/ast-helpers.d.ts +49 -0
  223. package/dist/core/expressions/analysis/ast-helpers.d.ts.map +1 -0
  224. package/dist/core/expressions/analysis/ast-helpers.js +106 -0
  225. package/dist/core/expressions/analysis/ast-helpers.js.map +1 -0
  226. package/dist/core/expressions/analysis/ast-node-converters.d.ts +15 -0
  227. package/dist/core/expressions/analysis/ast-node-converters.d.ts.map +1 -0
  228. package/dist/core/expressions/analysis/ast-node-converters.js +123 -0
  229. package/dist/core/expressions/analysis/ast-node-converters.js.map +1 -0
  230. package/dist/core/expressions/analysis/ast-type-guards.d.ts +14 -0
  231. package/dist/core/expressions/analysis/ast-type-guards.d.ts.map +1 -0
  232. package/dist/core/expressions/analysis/ast-type-guards.js +15 -0
  233. package/dist/core/expressions/analysis/ast-type-guards.js.map +1 -0
  234. package/dist/core/expressions/{cache.d.ts → analysis/cache.d.ts} +1 -1
  235. package/dist/core/expressions/analysis/cache.d.ts.map +1 -0
  236. package/dist/core/expressions/{cache.js → analysis/cache.js} +13 -13
  237. package/dist/core/expressions/analysis/cache.js.map +1 -0
  238. package/dist/core/expressions/analysis/call-expression-converters.d.ts +18 -0
  239. package/dist/core/expressions/analysis/call-expression-converters.d.ts.map +1 -0
  240. package/dist/core/expressions/analysis/call-expression-converters.js +220 -0
  241. package/dist/core/expressions/analysis/call-expression-converters.js.map +1 -0
  242. package/dist/core/expressions/analysis/cel-emitter.d.ts +85 -0
  243. package/dist/core/expressions/analysis/cel-emitter.d.ts.map +1 -0
  244. package/dist/core/expressions/analysis/cel-emitter.js +455 -0
  245. package/dist/core/expressions/analysis/cel-emitter.js.map +1 -0
  246. package/dist/core/expressions/analysis/expression-classifier.d.ts +77 -0
  247. package/dist/core/expressions/analysis/expression-classifier.d.ts.map +1 -0
  248. package/dist/core/expressions/analysis/expression-classifier.js +487 -0
  249. package/dist/core/expressions/analysis/expression-classifier.js.map +1 -0
  250. package/dist/core/expressions/analysis/fn-toString-self-test.d.ts +146 -0
  251. package/dist/core/expressions/analysis/fn-toString-self-test.d.ts.map +1 -0
  252. package/dist/core/expressions/analysis/fn-toString-self-test.js +243 -0
  253. package/dist/core/expressions/analysis/fn-toString-self-test.js.map +1 -0
  254. package/dist/core/expressions/analysis/operator-utils.d.ts +35 -0
  255. package/dist/core/expressions/analysis/operator-utils.d.ts.map +1 -0
  256. package/dist/core/expressions/analysis/operator-utils.js +167 -0
  257. package/dist/core/expressions/analysis/operator-utils.js.map +1 -0
  258. package/dist/core/expressions/analysis/parse-core.d.ts +63 -0
  259. package/dist/core/expressions/analysis/parse-core.d.ts.map +1 -0
  260. package/dist/core/expressions/analysis/parse-core.js +115 -0
  261. package/dist/core/expressions/analysis/parse-core.js.map +1 -0
  262. package/dist/core/expressions/{parser.d.ts → analysis/parser.d.ts} +2 -38
  263. package/dist/core/expressions/analysis/parser.d.ts.map +1 -0
  264. package/dist/core/expressions/{parser.js → analysis/parser.js} +20 -80
  265. package/dist/core/expressions/analysis/parser.js.map +1 -0
  266. package/dist/core/expressions/analysis/scope-resolver.d.ts +57 -0
  267. package/dist/core/expressions/analysis/scope-resolver.d.ts.map +1 -0
  268. package/dist/core/expressions/analysis/scope-resolver.js +440 -0
  269. package/dist/core/expressions/analysis/scope-resolver.js.map +1 -0
  270. package/dist/core/expressions/analysis/shared-types.d.ts +132 -0
  271. package/dist/core/expressions/analysis/shared-types.d.ts.map +1 -0
  272. package/dist/core/expressions/analysis/shared-types.js +13 -0
  273. package/dist/core/expressions/analysis/shared-types.js.map +1 -0
  274. package/dist/core/expressions/analysis/source-map.d.ts.map +1 -0
  275. package/dist/core/expressions/{source-map.js → analysis/source-map.js} +16 -17
  276. package/dist/core/expressions/analysis/source-map.js.map +1 -0
  277. package/dist/core/expressions/analysis/string-method-converters.d.ts +27 -0
  278. package/dist/core/expressions/analysis/string-method-converters.d.ts.map +1 -0
  279. package/dist/core/expressions/analysis/string-method-converters.js +208 -0
  280. package/dist/core/expressions/analysis/string-method-converters.js.map +1 -0
  281. package/dist/core/expressions/{types.d.ts → analysis/types.d.ts} +5 -5
  282. package/dist/core/expressions/analysis/types.d.ts.map +1 -0
  283. package/dist/core/expressions/analysis/types.js.map +1 -0
  284. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts +92 -0
  285. package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts.map +1 -0
  286. package/dist/core/expressions/composition/composition-analyzer-helpers.js +301 -0
  287. package/dist/core/expressions/composition/composition-analyzer-helpers.js.map +1 -0
  288. package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts +77 -0
  289. package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts.map +1 -0
  290. package/dist/core/expressions/composition/composition-analyzer-ternary.js +364 -0
  291. package/dist/core/expressions/composition/composition-analyzer-ternary.js.map +1 -0
  292. package/dist/core/expressions/composition/composition-analyzer-traversal.d.ts +37 -0
  293. package/dist/core/expressions/composition/composition-analyzer-traversal.d.ts.map +1 -0
  294. package/dist/core/expressions/composition/composition-analyzer-traversal.js +375 -0
  295. package/dist/core/expressions/composition/composition-analyzer-traversal.js.map +1 -0
  296. package/dist/core/expressions/composition/composition-analyzer-types.d.ts +140 -0
  297. package/dist/core/expressions/composition/composition-analyzer-types.d.ts.map +1 -0
  298. package/dist/core/expressions/composition/composition-analyzer-types.js +8 -0
  299. package/dist/core/expressions/composition/composition-analyzer-types.js.map +1 -0
  300. package/dist/core/expressions/composition/composition-analyzer.d.ts +39 -0
  301. package/dist/core/expressions/composition/composition-analyzer.d.ts.map +1 -0
  302. package/dist/core/expressions/composition/composition-analyzer.js +144 -0
  303. package/dist/core/expressions/composition/composition-analyzer.js.map +1 -0
  304. package/dist/core/expressions/composition/context-tracker.d.ts +39 -0
  305. package/dist/core/expressions/composition/context-tracker.d.ts.map +1 -0
  306. package/dist/core/expressions/composition/context-tracker.js +64 -0
  307. package/dist/core/expressions/composition/context-tracker.js.map +1 -0
  308. package/dist/core/expressions/composition/expression-analyzer.d.ts +101 -0
  309. package/dist/core/expressions/composition/expression-analyzer.d.ts.map +1 -0
  310. package/dist/core/expressions/composition/expression-analyzer.js +425 -0
  311. package/dist/core/expressions/composition/expression-analyzer.js.map +1 -0
  312. package/dist/core/expressions/composition/imperative-analyzer.d.ts +29 -0
  313. package/dist/core/expressions/composition/imperative-analyzer.d.ts.map +1 -0
  314. package/dist/core/expressions/{imperative-analyzer.js → composition/imperative-analyzer.js} +126 -23
  315. package/dist/core/expressions/composition/imperative-analyzer.js.map +1 -0
  316. package/dist/core/expressions/composition/index.d.ts +17 -0
  317. package/dist/core/expressions/composition/index.d.ts.map +1 -0
  318. package/dist/core/expressions/composition/index.js +18 -0
  319. package/dist/core/expressions/composition/index.js.map +1 -0
  320. package/dist/core/expressions/composition/integration-hooks.d.ts +71 -0
  321. package/dist/core/expressions/composition/integration-hooks.d.ts.map +1 -0
  322. package/dist/core/expressions/composition/integration-hooks.js +248 -0
  323. package/dist/core/expressions/composition/integration-hooks.js.map +1 -0
  324. package/dist/core/expressions/composition/scope-manager.d.ts +93 -0
  325. package/dist/core/expressions/composition/scope-manager.d.ts.map +1 -0
  326. package/dist/core/expressions/composition/scope-manager.js +215 -0
  327. package/dist/core/expressions/composition/scope-manager.js.map +1 -0
  328. package/dist/core/expressions/composition/types.d.ts +41 -0
  329. package/dist/core/expressions/composition/types.d.ts.map +1 -0
  330. package/dist/core/expressions/composition/types.js +7 -0
  331. package/dist/core/expressions/composition/types.js.map +1 -0
  332. package/dist/core/expressions/{conditional-expression-processor.d.ts → conditional/conditional-expression-processor.d.ts} +3 -3
  333. package/dist/core/expressions/conditional/conditional-expression-processor.d.ts.map +1 -0
  334. package/dist/core/expressions/{conditional-expression-processor.js → conditional/conditional-expression-processor.js} +59 -50
  335. package/dist/core/expressions/conditional/conditional-expression-processor.js.map +1 -0
  336. package/dist/core/expressions/{conditional-integration.d.ts → conditional/conditional-integration.d.ts} +13 -35
  337. package/dist/core/expressions/conditional/conditional-integration.d.ts.map +1 -0
  338. package/dist/core/expressions/{conditional-integration.js → conditional/conditional-integration.js} +92 -86
  339. package/dist/core/expressions/conditional/conditional-integration.js.map +1 -0
  340. package/dist/core/expressions/{context-aware-generator.d.ts → context/context-aware-generator.d.ts} +4 -28
  341. package/dist/core/expressions/context/context-aware-generator.d.ts.map +1 -0
  342. package/dist/core/expressions/{context-aware-generator.js → context/context-aware-generator.js} +27 -121
  343. package/dist/core/expressions/context/context-aware-generator.js.map +1 -0
  344. package/dist/core/expressions/{context-detector.d.ts → context/context-detector.d.ts} +7 -13
  345. package/dist/core/expressions/context/context-detector.d.ts.map +1 -0
  346. package/dist/core/expressions/{context-detector.js → context/context-detector.js} +45 -63
  347. package/dist/core/expressions/context/context-detector.js.map +1 -0
  348. package/dist/core/expressions/{context-validator.d.ts → context/context-validator.d.ts} +5 -36
  349. package/dist/core/expressions/context/context-validator.d.ts.map +1 -0
  350. package/dist/core/expressions/{context-validator.js → context/context-validator.js} +55 -124
  351. package/dist/core/expressions/context/context-validator.js.map +1 -0
  352. package/dist/core/expressions/{cel-conversion-engine.d.ts → factory/cel-conversion-engine.d.ts} +3 -3
  353. package/dist/core/expressions/factory/cel-conversion-engine.d.ts.map +1 -0
  354. package/dist/core/expressions/{cel-conversion-engine.js → factory/cel-conversion-engine.js} +10 -9
  355. package/dist/core/expressions/factory/cel-conversion-engine.js.map +1 -0
  356. package/dist/core/expressions/factory/dependency-tracker.d.ts +222 -0
  357. package/dist/core/expressions/factory/dependency-tracker.d.ts.map +1 -0
  358. package/dist/core/expressions/factory/dependency-tracker.js +512 -0
  359. package/dist/core/expressions/factory/dependency-tracker.js.map +1 -0
  360. package/dist/core/expressions/{factory-integration.d.ts → factory/factory-integration.d.ts} +3 -18
  361. package/dist/core/expressions/factory/factory-integration.d.ts.map +1 -0
  362. package/dist/core/expressions/{factory-integration.js → factory/factory-integration.js} +28 -29
  363. package/dist/core/expressions/factory/factory-integration.js.map +1 -0
  364. package/dist/core/expressions/{factory-pattern-handler.d.ts → factory/factory-pattern-handler.d.ts} +8 -8
  365. package/dist/core/expressions/factory/factory-pattern-handler.d.ts.map +1 -0
  366. package/dist/core/expressions/{factory-pattern-handler.js → factory/factory-pattern-handler.js} +101 -73
  367. package/dist/core/expressions/factory/factory-pattern-handler.js.map +1 -0
  368. package/dist/core/expressions/{migration-helpers.d.ts → factory/migration-helpers.d.ts} +4 -4
  369. package/dist/core/expressions/factory/migration-helpers.d.ts.map +1 -0
  370. package/dist/core/expressions/{migration-helpers.js → factory/migration-helpers.js} +28 -26
  371. package/dist/core/expressions/factory/migration-helpers.js.map +1 -0
  372. package/dist/core/expressions/factory/resource-analyzer.d.ts +139 -0
  373. package/dist/core/expressions/factory/resource-analyzer.d.ts.map +1 -0
  374. package/dist/core/expressions/factory/resource-analyzer.js +286 -0
  375. package/dist/core/expressions/factory/resource-analyzer.js.map +1 -0
  376. package/dist/core/expressions/factory/resource-type-validator.d.ts +149 -0
  377. package/dist/core/expressions/factory/resource-type-validator.d.ts.map +1 -0
  378. package/dist/core/expressions/factory/resource-type-validator.js +318 -0
  379. package/dist/core/expressions/factory/resource-type-validator.js.map +1 -0
  380. package/dist/core/expressions/factory/status-ast-utils.d.ts +36 -0
  381. package/dist/core/expressions/factory/status-ast-utils.d.ts.map +1 -0
  382. package/dist/core/expressions/factory/status-ast-utils.js +320 -0
  383. package/dist/core/expressions/factory/status-ast-utils.js.map +1 -0
  384. package/dist/core/expressions/factory/status-builder-analyzer.d.ts +91 -0
  385. package/dist/core/expressions/factory/status-builder-analyzer.d.ts.map +1 -0
  386. package/dist/core/expressions/factory/status-builder-analyzer.js +374 -0
  387. package/dist/core/expressions/factory/status-builder-analyzer.js.map +1 -0
  388. package/dist/core/expressions/factory/status-builder-types.d.ts +166 -0
  389. package/dist/core/expressions/factory/status-builder-types.d.ts.map +1 -0
  390. package/dist/core/expressions/factory/status-builder-types.js +8 -0
  391. package/dist/core/expressions/factory/status-builder-types.js.map +1 -0
  392. package/dist/core/expressions/factory/status-cel-generation.d.ts +67 -0
  393. package/dist/core/expressions/factory/status-cel-generation.d.ts.map +1 -0
  394. package/dist/core/expressions/factory/status-cel-generation.js +330 -0
  395. package/dist/core/expressions/factory/status-cel-generation.js.map +1 -0
  396. package/dist/core/expressions/factory/status-field-analysis.d.ts +57 -0
  397. package/dist/core/expressions/factory/status-field-analysis.d.ts.map +1 -0
  398. package/dist/core/expressions/factory/status-field-analysis.js +475 -0
  399. package/dist/core/expressions/factory/status-field-analysis.js.map +1 -0
  400. package/dist/core/expressions/index.d.ts +39 -51
  401. package/dist/core/expressions/index.d.ts.map +1 -1
  402. package/dist/core/expressions/index.js +46 -47
  403. package/dist/core/expressions/index.js.map +1 -1
  404. package/dist/core/expressions/{magic-assignable-analyzer.d.ts → magic-proxy/magic-assignable-analyzer.d.ts} +5 -5
  405. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.d.ts.map +1 -0
  406. package/dist/core/expressions/{magic-assignable-analyzer.js → magic-proxy/magic-assignable-analyzer.js} +29 -24
  407. package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.js.map +1 -0
  408. package/dist/core/expressions/{magic-proxy-analyzer.d.ts → magic-proxy/magic-proxy-analyzer.d.ts} +15 -68
  409. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.d.ts.map +1 -0
  410. package/dist/core/expressions/{magic-proxy-analyzer.js → magic-proxy/magic-proxy-analyzer.js} +45 -196
  411. package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.js.map +1 -0
  412. package/dist/core/expressions/magic-proxy/magic-proxy-ast.d.ts +44 -0
  413. package/dist/core/expressions/magic-proxy/magic-proxy-ast.d.ts.map +1 -0
  414. package/dist/core/expressions/magic-proxy/magic-proxy-ast.js +175 -0
  415. package/dist/core/expressions/magic-proxy/magic-proxy-ast.js.map +1 -0
  416. package/dist/core/expressions/{magic-proxy-detector.d.ts → magic-proxy/magic-proxy-detector.d.ts} +7 -7
  417. package/dist/core/expressions/magic-proxy/magic-proxy-detector.d.ts.map +1 -0
  418. package/dist/core/expressions/{magic-proxy-detector.js → magic-proxy/magic-proxy-detector.js} +36 -28
  419. package/dist/core/expressions/magic-proxy/magic-proxy-detector.js.map +1 -0
  420. package/dist/core/expressions/magic-proxy/magic-proxy-types.d.ts +36 -0
  421. package/dist/core/expressions/magic-proxy/magic-proxy-types.d.ts.map +1 -0
  422. package/dist/core/expressions/magic-proxy/magic-proxy-types.js +8 -0
  423. package/dist/core/expressions/magic-proxy/magic-proxy-types.js.map +1 -0
  424. package/dist/core/expressions/magic-proxy/optionality-analysis.d.ts +54 -0
  425. package/dist/core/expressions/magic-proxy/optionality-analysis.d.ts.map +1 -0
  426. package/dist/core/expressions/magic-proxy/optionality-analysis.js +239 -0
  427. package/dist/core/expressions/magic-proxy/optionality-analysis.js.map +1 -0
  428. package/dist/core/expressions/magic-proxy/optionality-cel-generation.d.ts +51 -0
  429. package/dist/core/expressions/magic-proxy/optionality-cel-generation.d.ts.map +1 -0
  430. package/dist/core/expressions/magic-proxy/optionality-cel-generation.js +201 -0
  431. package/dist/core/expressions/magic-proxy/optionality-cel-generation.js.map +1 -0
  432. package/dist/core/expressions/magic-proxy/optionality-handler.d.ts +119 -0
  433. package/dist/core/expressions/magic-proxy/optionality-handler.d.ts.map +1 -0
  434. package/dist/core/expressions/magic-proxy/optionality-handler.js +321 -0
  435. package/dist/core/expressions/magic-proxy/optionality-handler.js.map +1 -0
  436. package/dist/core/expressions/magic-proxy/optionality-hydration.d.ts +84 -0
  437. package/dist/core/expressions/magic-proxy/optionality-hydration.d.ts.map +1 -0
  438. package/dist/core/expressions/magic-proxy/optionality-hydration.js +378 -0
  439. package/dist/core/expressions/magic-proxy/optionality-hydration.js.map +1 -0
  440. package/dist/core/expressions/magic-proxy/optionality-optional-chaining.d.ts +61 -0
  441. package/dist/core/expressions/magic-proxy/optionality-optional-chaining.d.ts.map +1 -0
  442. package/dist/core/expressions/magic-proxy/optionality-optional-chaining.js +218 -0
  443. package/dist/core/expressions/magic-proxy/optionality-optional-chaining.js.map +1 -0
  444. package/dist/core/expressions/magic-proxy/optionality-types.d.ts +206 -0
  445. package/dist/core/expressions/magic-proxy/optionality-types.d.ts.map +1 -0
  446. package/dist/core/expressions/magic-proxy/optionality-types.js +9 -0
  447. package/dist/core/expressions/magic-proxy/optionality-types.js.map +1 -0
  448. package/dist/core/expressions/validation/compile-time-checker.d.ts +74 -0
  449. package/dist/core/expressions/validation/compile-time-checker.d.ts.map +1 -0
  450. package/dist/core/expressions/{compile-time-validation.js → validation/compile-time-checker.js} +44 -91
  451. package/dist/core/expressions/validation/compile-time-checker.js.map +1 -0
  452. package/dist/core/expressions/validation/compile-time-errors.d.ts +70 -0
  453. package/dist/core/expressions/validation/compile-time-errors.d.ts.map +1 -0
  454. package/dist/core/expressions/validation/compile-time-errors.js +63 -0
  455. package/dist/core/expressions/validation/compile-time-errors.js.map +1 -0
  456. package/dist/core/expressions/validation/compile-time-types.d.ts +147 -0
  457. package/dist/core/expressions/validation/compile-time-types.d.ts.map +1 -0
  458. package/dist/core/expressions/validation/compile-time-types.js +8 -0
  459. package/dist/core/expressions/validation/compile-time-types.js.map +1 -0
  460. package/dist/core/expressions/validation/compile-time-validation.d.ts +13 -0
  461. package/dist/core/expressions/validation/compile-time-validation.d.ts.map +1 -0
  462. package/dist/core/expressions/validation/compile-time-validation.js +14 -0
  463. package/dist/core/expressions/validation/compile-time-validation.js.map +1 -0
  464. package/dist/core/expressions/validation/kubernetes-field-types.d.ts +35 -0
  465. package/dist/core/expressions/validation/kubernetes-field-types.d.ts.map +1 -0
  466. package/dist/core/expressions/validation/kubernetes-field-types.js +230 -0
  467. package/dist/core/expressions/validation/kubernetes-field-types.js.map +1 -0
  468. package/dist/core/expressions/validation/resource-field-utils.d.ts +69 -0
  469. package/dist/core/expressions/validation/resource-field-utils.d.ts.map +1 -0
  470. package/dist/core/expressions/validation/resource-field-utils.js +280 -0
  471. package/dist/core/expressions/validation/resource-field-utils.js.map +1 -0
  472. package/dist/core/expressions/{resource-validation.d.ts → validation/resource-validation-types.d.ts} +6 -63
  473. package/dist/core/expressions/validation/resource-validation-types.d.ts.map +1 -0
  474. package/dist/core/expressions/validation/resource-validation-types.js +69 -0
  475. package/dist/core/expressions/validation/resource-validation-types.js.map +1 -0
  476. package/dist/core/expressions/validation/resource-validation.d.ts +49 -0
  477. package/dist/core/expressions/validation/resource-validation.d.ts.map +1 -0
  478. package/dist/core/expressions/validation/resource-validation.js +288 -0
  479. package/dist/core/expressions/validation/resource-validation.js.map +1 -0
  480. package/dist/core/expressions/{type-inference.d.ts → validation/type-inference-types.d.ts} +34 -88
  481. package/dist/core/expressions/validation/type-inference-types.d.ts.map +1 -0
  482. package/dist/core/expressions/validation/type-inference-types.js +52 -0
  483. package/dist/core/expressions/validation/type-inference-types.js.map +1 -0
  484. package/dist/core/expressions/validation/type-inference.d.ts +86 -0
  485. package/dist/core/expressions/validation/type-inference.d.ts.map +1 -0
  486. package/dist/core/expressions/{type-inference.js → validation/type-inference.js} +66 -299
  487. package/dist/core/expressions/validation/type-inference.js.map +1 -0
  488. package/dist/core/expressions/{type-safety.d.ts → validation/type-safety.d.ts} +6 -5
  489. package/dist/core/expressions/validation/type-safety.d.ts.map +1 -0
  490. package/dist/core/expressions/{type-safety.js → validation/type-safety.js} +34 -19
  491. package/dist/core/expressions/validation/type-safety.js.map +1 -0
  492. package/dist/core/kubernetes/api.d.ts.map +1 -1
  493. package/dist/core/kubernetes/api.js +21 -12
  494. package/dist/core/kubernetes/api.js.map +1 -1
  495. package/dist/core/kubernetes/bun-api-client.d.ts +36 -14
  496. package/dist/core/kubernetes/bun-api-client.d.ts.map +1 -1
  497. package/dist/core/kubernetes/bun-api-client.js +47 -24
  498. package/dist/core/kubernetes/bun-api-client.js.map +1 -1
  499. package/dist/core/kubernetes/bun-http-library.d.ts +69 -3
  500. package/dist/core/kubernetes/bun-http-library.d.ts.map +1 -1
  501. package/dist/core/kubernetes/bun-http-library.js +118 -11
  502. package/dist/core/kubernetes/bun-http-library.js.map +1 -1
  503. package/dist/core/kubernetes/client-provider.d.ts +121 -35
  504. package/dist/core/kubernetes/client-provider.d.ts.map +1 -1
  505. package/dist/core/kubernetes/client-provider.js +181 -65
  506. package/dist/core/kubernetes/client-provider.js.map +1 -1
  507. package/dist/core/kubernetes/errors.d.ts +5 -5
  508. package/dist/core/kubernetes/errors.js +5 -5
  509. package/dist/core/kubernetes/index.d.ts +8 -7
  510. package/dist/core/kubernetes/index.d.ts.map +1 -1
  511. package/dist/core/kubernetes/index.js +8 -8
  512. package/dist/core/kubernetes/index.js.map +1 -1
  513. package/dist/core/kubernetes/type-guards.d.ts +1 -1
  514. package/dist/core/kubernetes/type-guards.js +1 -1
  515. package/dist/core/logging/config.d.ts.map +1 -1
  516. package/dist/core/logging/config.js +20 -4
  517. package/dist/core/logging/config.js.map +1 -1
  518. package/dist/core/logging/logger.d.ts +3 -3
  519. package/dist/core/logging/logger.d.ts.map +1 -1
  520. package/dist/core/logging/logger.js +18 -18
  521. package/dist/core/logging/logger.js.map +1 -1
  522. package/dist/core/logging/types.d.ts +13 -8
  523. package/dist/core/logging/types.d.ts.map +1 -1
  524. package/dist/core/metadata/index.d.ts +9 -0
  525. package/dist/core/metadata/index.d.ts.map +1 -0
  526. package/dist/core/metadata/index.js +9 -0
  527. package/dist/core/metadata/index.js.map +1 -0
  528. package/dist/core/metadata/resource-metadata.d.ts +120 -0
  529. package/dist/core/metadata/resource-metadata.d.ts.map +1 -0
  530. package/dist/core/metadata/resource-metadata.js +217 -0
  531. package/dist/core/metadata/resource-metadata.js.map +1 -0
  532. package/dist/core/proxy/create-resource.d.ts +50 -0
  533. package/dist/core/proxy/create-resource.d.ts.map +1 -0
  534. package/dist/core/proxy/create-resource.js +435 -0
  535. package/dist/core/proxy/create-resource.js.map +1 -0
  536. package/dist/core/proxy/index.d.ts +8 -0
  537. package/dist/core/proxy/index.d.ts.map +1 -0
  538. package/dist/core/proxy/index.js +7 -0
  539. package/dist/core/proxy/index.js.map +1 -0
  540. package/dist/core/proxy/known-status-fields.d.ts +27 -0
  541. package/dist/core/proxy/known-status-fields.d.ts.map +1 -0
  542. package/dist/core/proxy/known-status-fields.js +185 -0
  543. package/dist/core/proxy/known-status-fields.js.map +1 -0
  544. package/dist/core/readiness/evaluator-factories.d.ts +100 -0
  545. package/dist/core/readiness/evaluator-factories.d.ts.map +1 -0
  546. package/dist/core/readiness/evaluator-factories.js +168 -0
  547. package/dist/core/readiness/evaluator-factories.js.map +1 -0
  548. package/dist/core/readiness/evaluator.d.ts +21 -0
  549. package/dist/core/readiness/evaluator.d.ts.map +1 -0
  550. package/dist/core/readiness/evaluator.js +38 -0
  551. package/dist/core/readiness/evaluator.js.map +1 -0
  552. package/dist/core/readiness/index.d.ts +3 -0
  553. package/dist/core/readiness/index.d.ts.map +1 -1
  554. package/dist/core/readiness/index.js +2 -0
  555. package/dist/core/readiness/index.js.map +1 -1
  556. package/dist/core/readiness/registry.d.ts +3 -3
  557. package/dist/core/readiness/registry.d.ts.map +1 -1
  558. package/dist/core/readiness/registry.js +2 -0
  559. package/dist/core/readiness/registry.js.map +1 -1
  560. package/dist/core/references/cel-evaluator.d.ts +11 -0
  561. package/dist/core/references/cel-evaluator.d.ts.map +1 -1
  562. package/dist/core/references/cel-evaluator.js +65 -27
  563. package/dist/core/references/cel-evaluator.js.map +1 -1
  564. package/dist/core/references/cel.d.ts +66 -23
  565. package/dist/core/references/cel.d.ts.map +1 -1
  566. package/dist/core/references/cel.js +184 -117
  567. package/dist/core/references/cel.js.map +1 -1
  568. package/dist/core/references/external-refs.d.ts +41 -21
  569. package/dist/core/references/external-refs.d.ts.map +1 -1
  570. package/dist/core/references/external-refs.js +73 -30
  571. package/dist/core/references/external-refs.js.map +1 -1
  572. package/dist/core/references/index.d.ts +5 -4
  573. package/dist/core/references/index.d.ts.map +1 -1
  574. package/dist/core/references/index.js +6 -6
  575. package/dist/core/references/index.js.map +1 -1
  576. package/dist/core/references/resolver.d.ts +15 -11
  577. package/dist/core/references/resolver.d.ts.map +1 -1
  578. package/dist/core/references/resolver.js +203 -159
  579. package/dist/core/references/resolver.js.map +1 -1
  580. package/dist/core/references/schema-proxy.d.ts.map +1 -1
  581. package/dist/core/references/schema-proxy.js +97 -14
  582. package/dist/core/references/schema-proxy.js.map +1 -1
  583. package/dist/core/resources/factory-registry.d.ts +99 -0
  584. package/dist/core/resources/factory-registry.d.ts.map +1 -0
  585. package/dist/core/resources/factory-registry.js +166 -0
  586. package/dist/core/resources/factory-registry.js.map +1 -0
  587. package/dist/core/resources/id.d.ts +44 -0
  588. package/dist/core/resources/id.d.ts.map +1 -0
  589. package/dist/core/resources/id.js +78 -0
  590. package/dist/core/resources/id.js.map +1 -0
  591. package/dist/core/resources/index.d.ts +7 -0
  592. package/dist/core/resources/index.d.ts.map +1 -0
  593. package/dist/core/resources/index.js +6 -0
  594. package/dist/core/resources/index.js.map +1 -0
  595. package/dist/core/{utils → runtime-patches}/crd-patcher.d.ts +1 -1
  596. package/dist/core/runtime-patches/crd-patcher.d.ts.map +1 -0
  597. package/dist/core/runtime-patches/crd-patcher.js +124 -0
  598. package/dist/core/runtime-patches/crd-patcher.js.map +1 -0
  599. package/dist/core/{utils → runtime-patches}/crd-schema-fix.d.ts +39 -2
  600. package/dist/core/runtime-patches/crd-schema-fix.d.ts.map +1 -0
  601. package/dist/core/{utils → runtime-patches}/crd-schema-fix.js +130 -26
  602. package/dist/core/runtime-patches/crd-schema-fix.js.map +1 -0
  603. package/dist/core/runtime-patches/index.d.ts +8 -0
  604. package/dist/core/runtime-patches/index.d.ts.map +1 -0
  605. package/dist/core/runtime-patches/index.js +8 -0
  606. package/dist/core/runtime-patches/index.js.map +1 -0
  607. package/dist/core/{evaluation → serialization}/cel-optimizer.d.ts +2 -2
  608. package/dist/core/serialization/cel-optimizer.d.ts.map +1 -0
  609. package/dist/core/{evaluation → serialization}/cel-optimizer.js +11 -23
  610. package/dist/core/serialization/cel-optimizer.js.map +1 -0
  611. package/dist/core/serialization/cel-references.d.ts +36 -0
  612. package/dist/core/serialization/cel-references.d.ts.map +1 -0
  613. package/dist/core/serialization/cel-references.js +308 -0
  614. package/dist/core/serialization/cel-references.js.map +1 -0
  615. package/dist/core/serialization/core.d.ts +171 -4
  616. package/dist/core/serialization/core.d.ts.map +1 -1
  617. package/dist/core/serialization/core.js +401 -710
  618. package/dist/core/serialization/core.js.map +1 -1
  619. package/dist/core/serialization/index.d.ts +3 -1
  620. package/dist/core/serialization/index.d.ts.map +1 -1
  621. package/dist/core/serialization/index.js +5 -1
  622. package/dist/core/serialization/index.js.map +1 -1
  623. package/dist/core/serialization/schema.d.ts +34 -3
  624. package/dist/core/serialization/schema.d.ts.map +1 -1
  625. package/dist/core/serialization/schema.js +160 -13
  626. package/dist/core/serialization/schema.js.map +1 -1
  627. package/dist/core/serialization/status-analysis-helpers.d.ts +68 -0
  628. package/dist/core/serialization/status-analysis-helpers.d.ts.map +1 -0
  629. package/dist/core/serialization/status-analysis-helpers.js +284 -0
  630. package/dist/core/serialization/status-analysis-helpers.js.map +1 -0
  631. package/dist/core/serialization/status-analysis-pipeline.d.ts +67 -0
  632. package/dist/core/serialization/status-analysis-pipeline.d.ts.map +1 -0
  633. package/dist/core/serialization/status-analysis-pipeline.js +536 -0
  634. package/dist/core/serialization/status-analysis-pipeline.js.map +1 -0
  635. package/dist/core/serialization/validation.d.ts.map +1 -1
  636. package/dist/core/serialization/validation.js +5 -3
  637. package/dist/core/serialization/validation.js.map +1 -1
  638. package/dist/core/serialization/yaml.d.ts +14 -3
  639. package/dist/core/serialization/yaml.d.ts.map +1 -1
  640. package/dist/core/serialization/yaml.js +458 -13
  641. package/dist/core/serialization/yaml.js.map +1 -1
  642. package/dist/core/types/common.d.ts +43 -8
  643. package/dist/core/types/common.d.ts.map +1 -1
  644. package/dist/core/types/composable.d.ts +62 -0
  645. package/dist/core/types/composable.d.ts.map +1 -0
  646. package/dist/core/types/composable.js +51 -0
  647. package/dist/core/types/composable.js.map +1 -0
  648. package/dist/core/types/deployment.d.ts +237 -95
  649. package/dist/core/types/deployment.d.ts.map +1 -1
  650. package/dist/core/types/deployment.js +1 -40
  651. package/dist/core/types/deployment.js.map +1 -1
  652. package/dist/core/types/index.d.ts +7 -10
  653. package/dist/core/types/index.d.ts.map +1 -1
  654. package/dist/core/types/index.js +33 -4
  655. package/dist/core/types/index.js.map +1 -1
  656. package/dist/core/types/kubernetes.d.ts +226 -16
  657. package/dist/core/types/kubernetes.d.ts.map +1 -1
  658. package/dist/core/types/kubernetes.js +11 -1
  659. package/dist/core/types/kubernetes.js.map +1 -1
  660. package/dist/core/types/references.d.ts +27 -1
  661. package/dist/core/types/references.d.ts.map +1 -1
  662. package/dist/core/types/references.js +3 -2
  663. package/dist/core/types/references.js.map +1 -1
  664. package/dist/core/types/resource-graph.d.ts +9 -33
  665. package/dist/core/types/resource-graph.d.ts.map +1 -1
  666. package/dist/core/types/resource-graph.js +2 -2
  667. package/dist/core/types/schema.d.ts +51 -0
  668. package/dist/core/types/schema.d.ts.map +1 -0
  669. package/dist/core/types/schema.js +9 -0
  670. package/dist/core/types/schema.js.map +1 -0
  671. package/dist/core/types/serialization.d.ts +106 -46
  672. package/dist/core/types/serialization.d.ts.map +1 -1
  673. package/dist/core/types/yaml.d.ts +0 -24
  674. package/dist/core/types/yaml.d.ts.map +1 -1
  675. package/dist/core/validation/cel-validator.d.ts +5 -5
  676. package/dist/core/validation/cel-validator.d.ts.map +1 -1
  677. package/dist/core/validation/cel-validator.js +90 -42
  678. package/dist/core/validation/cel-validator.js.map +1 -1
  679. package/dist/core/yaml/path-resolver.d.ts +21 -6
  680. package/dist/core/yaml/path-resolver.d.ts.map +1 -1
  681. package/dist/core/yaml/path-resolver.js +404 -38
  682. package/dist/core/yaml/path-resolver.js.map +1 -1
  683. package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts +19 -15
  684. package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts.map +1 -1
  685. package/dist/factories/apisix/compositions/apisix-bootstrap.js +99 -112
  686. package/dist/factories/apisix/compositions/apisix-bootstrap.js.map +1 -1
  687. package/dist/factories/apisix/resources/helm.d.ts +8 -8
  688. package/dist/factories/apisix/resources/helm.d.ts.map +1 -1
  689. package/dist/factories/apisix/resources/helm.js +20 -47
  690. package/dist/factories/apisix/resources/helm.js.map +1 -1
  691. package/dist/factories/apisix/types.d.ts +35 -2
  692. package/dist/factories/apisix/types.d.ts.map +1 -1
  693. package/dist/factories/apisix/types.js.map +1 -1
  694. package/dist/factories/apisix/utils/admin-credentials.d.ts +43 -0
  695. package/dist/factories/apisix/utils/admin-credentials.d.ts.map +1 -0
  696. package/dist/factories/apisix/utils/admin-credentials.js +82 -0
  697. package/dist/factories/apisix/utils/admin-credentials.js.map +1 -0
  698. package/dist/factories/apisix/utils/helm-values-mapper.d.ts.map +1 -1
  699. package/dist/factories/apisix/utils/helm-values-mapper.js +33 -35
  700. package/dist/factories/apisix/utils/helm-values-mapper.js.map +1 -1
  701. package/dist/factories/apisix/utils/index.d.ts +1 -0
  702. package/dist/factories/apisix/utils/index.d.ts.map +1 -1
  703. package/dist/factories/apisix/utils/index.js +1 -0
  704. package/dist/factories/apisix/utils/index.js.map +1 -1
  705. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.d.ts +2 -2
  706. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.d.ts.map +1 -1
  707. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.js +49 -63
  708. package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.js.map +1 -1
  709. package/dist/factories/cert-manager/resources/certificates.d.ts.map +1 -1
  710. package/dist/factories/cert-manager/resources/certificates.js +12 -47
  711. package/dist/factories/cert-manager/resources/certificates.js.map +1 -1
  712. package/dist/factories/cert-manager/resources/helm.d.ts +2 -22
  713. package/dist/factories/cert-manager/resources/helm.d.ts.map +1 -1
  714. package/dist/factories/cert-manager/resources/helm.js +30 -167
  715. package/dist/factories/cert-manager/resources/helm.js.map +1 -1
  716. package/dist/factories/cert-manager/resources/issuers.d.ts.map +1 -1
  717. package/dist/factories/cert-manager/resources/issuers.js +9 -104
  718. package/dist/factories/cert-manager/resources/issuers.js.map +1 -1
  719. package/dist/factories/cert-manager/types.d.ts +5 -78
  720. package/dist/factories/cert-manager/types.d.ts.map +1 -1
  721. package/dist/factories/cert-manager/types.js +2 -22
  722. package/dist/factories/cert-manager/types.js.map +1 -1
  723. package/dist/factories/cert-manager/utils/helm-values-mapper.d.ts +8 -4
  724. package/dist/factories/cert-manager/utils/helm-values-mapper.d.ts.map +1 -1
  725. package/dist/factories/cert-manager/utils/helm-values-mapper.js +55 -56
  726. package/dist/factories/cert-manager/utils/helm-values-mapper.js.map +1 -1
  727. package/dist/factories/cert-manager/utils/index.d.ts +1 -1
  728. package/dist/factories/cert-manager/utils/index.d.ts.map +1 -1
  729. package/dist/factories/cert-manager/utils/index.js +1 -1
  730. package/dist/factories/cert-manager/utils/index.js.map +1 -1
  731. package/dist/factories/cilium/compositions/cilium-bootstrap.d.ts +3 -3
  732. package/dist/factories/cilium/compositions/cilium-bootstrap.d.ts.map +1 -1
  733. package/dist/factories/cilium/compositions/cilium-bootstrap.js +62 -34
  734. package/dist/factories/cilium/compositions/cilium-bootstrap.js.map +1 -1
  735. package/dist/factories/cilium/errors.d.ts +41 -0
  736. package/dist/factories/cilium/errors.d.ts.map +1 -0
  737. package/dist/factories/cilium/errors.js +75 -0
  738. package/dist/factories/cilium/errors.js.map +1 -0
  739. package/dist/factories/cilium/index.d.ts +1 -0
  740. package/dist/factories/cilium/index.d.ts.map +1 -1
  741. package/dist/factories/cilium/index.js +4 -0
  742. package/dist/factories/cilium/index.js.map +1 -1
  743. package/dist/factories/cilium/resources/gateway.d.ts.map +1 -1
  744. package/dist/factories/cilium/resources/gateway.js +3 -5
  745. package/dist/factories/cilium/resources/gateway.js.map +1 -1
  746. package/dist/factories/cilium/resources/helm.d.ts +2 -2
  747. package/dist/factories/cilium/resources/helm.d.ts.map +1 -1
  748. package/dist/factories/cilium/resources/helm.js +8 -16
  749. package/dist/factories/cilium/resources/helm.js.map +1 -1
  750. package/dist/factories/cilium/resources/index.d.ts +1 -5
  751. package/dist/factories/cilium/resources/index.d.ts.map +1 -1
  752. package/dist/factories/cilium/resources/index.js +4 -20
  753. package/dist/factories/cilium/resources/index.js.map +1 -1
  754. package/dist/factories/cilium/resources/networking.d.ts +9 -13
  755. package/dist/factories/cilium/resources/networking.d.ts.map +1 -1
  756. package/dist/factories/cilium/resources/networking.js +152 -251
  757. package/dist/factories/cilium/resources/networking.js.map +1 -1
  758. package/dist/factories/cilium/types.d.ts +3 -47
  759. package/dist/factories/cilium/types.d.ts.map +1 -1
  760. package/dist/factories/cilium/types.js +2 -71
  761. package/dist/factories/cilium/types.js.map +1 -1
  762. package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts +55 -0
  763. package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts.map +1 -0
  764. package/dist/factories/cnpg/compositions/cnpg-bootstrap.js +92 -0
  765. package/dist/factories/cnpg/compositions/cnpg-bootstrap.js.map +1 -0
  766. package/dist/factories/cnpg/compositions/index.d.ts +2 -0
  767. package/dist/factories/cnpg/compositions/index.d.ts.map +1 -0
  768. package/dist/factories/cnpg/compositions/index.js +2 -0
  769. package/dist/factories/cnpg/compositions/index.js.map +1 -0
  770. package/dist/factories/cnpg/index.d.ts +42 -0
  771. package/dist/factories/cnpg/index.d.ts.map +1 -0
  772. package/dist/factories/cnpg/index.js +42 -0
  773. package/dist/factories/cnpg/index.js.map +1 -0
  774. package/dist/factories/cnpg/resources/backup.d.ts +34 -0
  775. package/dist/factories/cnpg/resources/backup.d.ts.map +1 -0
  776. package/dist/factories/cnpg/resources/backup.js +87 -0
  777. package/dist/factories/cnpg/resources/backup.js.map +1 -0
  778. package/dist/factories/cnpg/resources/cluster.d.ts +55 -0
  779. package/dist/factories/cnpg/resources/cluster.d.ts.map +1 -0
  780. package/dist/factories/cnpg/resources/cluster.js +123 -0
  781. package/dist/factories/cnpg/resources/cluster.js.map +1 -0
  782. package/dist/factories/cnpg/resources/helm.d.ts +45 -0
  783. package/dist/factories/cnpg/resources/helm.d.ts.map +1 -0
  784. package/dist/factories/cnpg/resources/helm.js +78 -0
  785. package/dist/factories/cnpg/resources/helm.js.map +1 -0
  786. package/dist/factories/cnpg/resources/index.d.ts +6 -0
  787. package/dist/factories/cnpg/resources/index.d.ts.map +1 -0
  788. package/dist/factories/cnpg/resources/index.js +6 -0
  789. package/dist/factories/cnpg/resources/index.js.map +1 -0
  790. package/dist/factories/cnpg/resources/pooler.d.ts +38 -0
  791. package/dist/factories/cnpg/resources/pooler.d.ts.map +1 -0
  792. package/dist/factories/cnpg/resources/pooler.js +97 -0
  793. package/dist/factories/cnpg/resources/pooler.js.map +1 -0
  794. package/dist/factories/cnpg/resources/scheduled-backup.d.ts +35 -0
  795. package/dist/factories/cnpg/resources/scheduled-backup.d.ts.map +1 -0
  796. package/dist/factories/cnpg/resources/scheduled-backup.js +68 -0
  797. package/dist/factories/cnpg/resources/scheduled-backup.js.map +1 -0
  798. package/dist/factories/cnpg/types.d.ts +507 -0
  799. package/dist/factories/cnpg/types.d.ts.map +1 -0
  800. package/dist/factories/cnpg/types.js +398 -0
  801. package/dist/factories/cnpg/types.js.map +1 -0
  802. package/dist/factories/cnpg/utils/helm-values-mapper.d.ts +70 -0
  803. package/dist/factories/cnpg/utils/helm-values-mapper.d.ts.map +1 -0
  804. package/dist/factories/cnpg/utils/helm-values-mapper.js +79 -0
  805. package/dist/factories/cnpg/utils/helm-values-mapper.js.map +1 -0
  806. package/dist/factories/cnpg/utils/index.d.ts +2 -0
  807. package/dist/factories/cnpg/utils/index.d.ts.map +1 -0
  808. package/dist/factories/cnpg/utils/index.js +2 -0
  809. package/dist/factories/cnpg/utils/index.js.map +1 -0
  810. package/dist/factories/external-dns/compositions/external-dns-bootstrap.d.ts +1 -1
  811. package/dist/factories/external-dns/compositions/external-dns-bootstrap.d.ts.map +1 -1
  812. package/dist/factories/external-dns/compositions/external-dns-bootstrap.js +5 -11
  813. package/dist/factories/external-dns/compositions/external-dns-bootstrap.js.map +1 -1
  814. package/dist/factories/external-dns/resources/helm.d.ts +2 -2
  815. package/dist/factories/external-dns/resources/helm.d.ts.map +1 -1
  816. package/dist/factories/external-dns/resources/helm.js +66 -61
  817. package/dist/factories/external-dns/resources/helm.js.map +1 -1
  818. package/dist/factories/external-dns/types.d.ts +2 -2
  819. package/dist/factories/external-dns/types.d.ts.map +1 -1
  820. package/dist/factories/external-dns/types.js.map +1 -1
  821. package/dist/factories/flux/git-repository.d.ts +12 -2
  822. package/dist/factories/flux/git-repository.d.ts.map +1 -1
  823. package/dist/factories/flux/git-repository.js +33 -0
  824. package/dist/factories/flux/git-repository.js.map +1 -1
  825. package/dist/factories/flux/kustomize/kustomization.d.ts +2 -0
  826. package/dist/factories/flux/kustomize/kustomization.d.ts.map +1 -1
  827. package/dist/factories/flux/kustomize/kustomization.js.map +1 -1
  828. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts +1 -1
  829. package/dist/factories/flux/kustomize/readiness-evaluators.d.ts.map +1 -1
  830. package/dist/factories/flux/kustomize/readiness-evaluators.js +3 -1
  831. package/dist/factories/flux/kustomize/readiness-evaluators.js.map +1 -1
  832. package/dist/factories/helm/helm-release.d.ts +13 -0
  833. package/dist/factories/helm/helm-release.d.ts.map +1 -1
  834. package/dist/factories/helm/helm-release.js +39 -16
  835. package/dist/factories/helm/helm-release.js.map +1 -1
  836. package/dist/factories/helm/helm-repository.d.ts +26 -1
  837. package/dist/factories/helm/helm-repository.d.ts.map +1 -1
  838. package/dist/factories/helm/helm-repository.js +30 -17
  839. package/dist/factories/helm/helm-repository.js.map +1 -1
  840. package/dist/factories/helm/index.d.ts +10 -4
  841. package/dist/factories/helm/index.d.ts.map +1 -1
  842. package/dist/factories/helm/index.js +10 -4
  843. package/dist/factories/helm/index.js.map +1 -1
  844. package/dist/factories/helm/readiness-evaluators.d.ts +21 -8
  845. package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
  846. package/dist/factories/helm/readiness-evaluators.js +98 -82
  847. package/dist/factories/helm/readiness-evaluators.js.map +1 -1
  848. package/dist/factories/helm/types.d.ts +15 -0
  849. package/dist/factories/helm/types.d.ts.map +1 -1
  850. package/dist/factories/index.d.ts +7 -8
  851. package/dist/factories/index.d.ts.map +1 -1
  852. package/dist/factories/index.js +24 -20
  853. package/dist/factories/index.js.map +1 -1
  854. package/dist/factories/inngest/compositions/index.d.ts +2 -0
  855. package/dist/factories/inngest/compositions/index.d.ts.map +1 -0
  856. package/dist/factories/inngest/compositions/index.js +2 -0
  857. package/dist/factories/inngest/compositions/index.js.map +1 -0
  858. package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts +150 -0
  859. package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts.map +1 -0
  860. package/dist/factories/inngest/compositions/inngest-bootstrap.js +90 -0
  861. package/dist/factories/inngest/compositions/inngest-bootstrap.js.map +1 -0
  862. package/dist/factories/inngest/index.d.ts +45 -0
  863. package/dist/factories/inngest/index.d.ts.map +1 -0
  864. package/dist/factories/inngest/index.js +45 -0
  865. package/dist/factories/inngest/index.js.map +1 -0
  866. package/dist/factories/inngest/resources/helm.d.ts +53 -0
  867. package/dist/factories/inngest/resources/helm.d.ts.map +1 -0
  868. package/dist/factories/inngest/resources/helm.js +88 -0
  869. package/dist/factories/inngest/resources/helm.js.map +1 -0
  870. package/dist/factories/inngest/resources/index.d.ts +2 -0
  871. package/dist/factories/inngest/resources/index.d.ts.map +1 -0
  872. package/dist/factories/inngest/resources/index.js +2 -0
  873. package/dist/factories/inngest/resources/index.js.map +1 -0
  874. package/dist/factories/inngest/types.d.ts +177 -0
  875. package/dist/factories/inngest/types.d.ts.map +1 -0
  876. package/dist/factories/inngest/types.js +189 -0
  877. package/dist/factories/inngest/types.js.map +1 -0
  878. package/dist/factories/inngest/utils/helm-values-mapper.d.ts +127 -0
  879. package/dist/factories/inngest/utils/helm-values-mapper.d.ts.map +1 -0
  880. package/dist/factories/inngest/utils/helm-values-mapper.js +116 -0
  881. package/dist/factories/inngest/utils/helm-values-mapper.js.map +1 -0
  882. package/dist/factories/inngest/utils/index.d.ts +2 -0
  883. package/dist/factories/inngest/utils/index.d.ts.map +1 -0
  884. package/dist/factories/inngest/utils/index.js +2 -0
  885. package/dist/factories/inngest/utils/index.js.map +1 -0
  886. package/dist/factories/kro/kro-crd.d.ts.map +1 -1
  887. package/dist/factories/kro/kro-crd.js +3 -2
  888. package/dist/factories/kro/kro-crd.js.map +1 -1
  889. package/dist/factories/kro/kro-custom-resource.d.ts.map +1 -1
  890. package/dist/factories/kro/kro-custom-resource.js +3 -2
  891. package/dist/factories/kro/kro-custom-resource.js.map +1 -1
  892. package/dist/factories/kro/resource-graph-definition.d.ts +29 -1
  893. package/dist/factories/kro/resource-graph-definition.d.ts.map +1 -1
  894. package/dist/factories/kro/resource-graph-definition.js +26 -8
  895. package/dist/factories/kro/resource-graph-definition.js.map +1 -1
  896. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.d.ts +3 -2
  897. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.d.ts.map +1 -1
  898. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.js +3 -2
  899. package/dist/factories/kubernetes/admission/mutating-webhook-configuration.js.map +1 -1
  900. package/dist/factories/kubernetes/admission/validating-webhook-configuration.d.ts +3 -2
  901. package/dist/factories/kubernetes/admission/validating-webhook-configuration.d.ts.map +1 -1
  902. package/dist/factories/kubernetes/admission/validating-webhook-configuration.js +3 -2
  903. package/dist/factories/kubernetes/admission/validating-webhook-configuration.js.map +1 -1
  904. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.d.ts +3 -1
  905. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.d.ts.map +1 -1
  906. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.js.map +1 -1
  907. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.d.ts +3 -1
  908. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.d.ts.map +1 -1
  909. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js +2 -1
  910. package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js.map +1 -1
  911. package/dist/factories/kubernetes/certificates/certificate-signing-request.d.ts +3 -1
  912. package/dist/factories/kubernetes/certificates/certificate-signing-request.d.ts.map +1 -1
  913. package/dist/factories/kubernetes/certificates/certificate-signing-request.js.map +1 -1
  914. package/dist/factories/kubernetes/config/config-map.d.ts +14 -1
  915. package/dist/factories/kubernetes/config/config-map.d.ts.map +1 -1
  916. package/dist/factories/kubernetes/config/config-map.js +21 -7
  917. package/dist/factories/kubernetes/config/config-map.js.map +1 -1
  918. package/dist/factories/kubernetes/config/secret.d.ts +17 -0
  919. package/dist/factories/kubernetes/config/secret.d.ts.map +1 -1
  920. package/dist/factories/kubernetes/config/secret.js +27 -7
  921. package/dist/factories/kubernetes/config/secret.js.map +1 -1
  922. package/dist/factories/kubernetes/coordination/lease.d.ts +3 -1
  923. package/dist/factories/kubernetes/coordination/lease.d.ts.map +1 -1
  924. package/dist/factories/kubernetes/coordination/lease.js +2 -1
  925. package/dist/factories/kubernetes/coordination/lease.js.map +1 -1
  926. package/dist/factories/kubernetes/core/component-status.d.ts +3 -1
  927. package/dist/factories/kubernetes/core/component-status.d.ts.map +1 -1
  928. package/dist/factories/kubernetes/core/component-status.js.map +1 -1
  929. package/dist/factories/kubernetes/core/namespace.d.ts +10 -0
  930. package/dist/factories/kubernetes/core/namespace.d.ts.map +1 -1
  931. package/dist/factories/kubernetes/core/namespace.js +14 -3
  932. package/dist/factories/kubernetes/core/namespace.js.map +1 -1
  933. package/dist/factories/kubernetes/core/node.d.ts +3 -1
  934. package/dist/factories/kubernetes/core/node.d.ts.map +1 -1
  935. package/dist/factories/kubernetes/core/node.js.map +1 -1
  936. package/dist/factories/kubernetes/core/pod.d.ts +3 -1
  937. package/dist/factories/kubernetes/core/pod.d.ts.map +1 -1
  938. package/dist/factories/kubernetes/core/pod.js +2 -1
  939. package/dist/factories/kubernetes/core/pod.js.map +1 -1
  940. package/dist/factories/kubernetes/extensions/custom-resource-definition.d.ts +3 -1
  941. package/dist/factories/kubernetes/extensions/custom-resource-definition.d.ts.map +1 -1
  942. package/dist/factories/kubernetes/extensions/custom-resource-definition.js.map +1 -1
  943. package/dist/factories/kubernetes/extensions/custom-resource.d.ts +1 -0
  944. package/dist/factories/kubernetes/extensions/custom-resource.d.ts.map +1 -1
  945. package/dist/factories/kubernetes/extensions/custom-resource.js +5 -1
  946. package/dist/factories/kubernetes/extensions/custom-resource.js.map +1 -1
  947. package/dist/factories/kubernetes/index.d.ts +0 -2
  948. package/dist/factories/kubernetes/index.d.ts.map +1 -1
  949. package/dist/factories/kubernetes/index.js +3 -8
  950. package/dist/factories/kubernetes/index.js.map +1 -1
  951. package/dist/factories/kubernetes/networking/endpoint-slice.d.ts +3 -1
  952. package/dist/factories/kubernetes/networking/endpoint-slice.d.ts.map +1 -1
  953. package/dist/factories/kubernetes/networking/endpoint-slice.js.map +1 -1
  954. package/dist/factories/kubernetes/networking/endpoints.d.ts +3 -1
  955. package/dist/factories/kubernetes/networking/endpoints.d.ts.map +1 -1
  956. package/dist/factories/kubernetes/networking/endpoints.js +3 -2
  957. package/dist/factories/kubernetes/networking/endpoints.js.map +1 -1
  958. package/dist/factories/kubernetes/networking/ingress-class.d.ts +3 -1
  959. package/dist/factories/kubernetes/networking/ingress-class.d.ts.map +1 -1
  960. package/dist/factories/kubernetes/networking/ingress-class.js +2 -7
  961. package/dist/factories/kubernetes/networking/ingress-class.js.map +1 -1
  962. package/dist/factories/kubernetes/networking/ingress.d.ts +15 -2
  963. package/dist/factories/kubernetes/networking/ingress.d.ts.map +1 -1
  964. package/dist/factories/kubernetes/networking/ingress.js +64 -11
  965. package/dist/factories/kubernetes/networking/ingress.js.map +1 -1
  966. package/dist/factories/kubernetes/networking/network-policy.d.ts +3 -1
  967. package/dist/factories/kubernetes/networking/network-policy.d.ts.map +1 -1
  968. package/dist/factories/kubernetes/networking/network-policy.js +2 -8
  969. package/dist/factories/kubernetes/networking/network-policy.js.map +1 -1
  970. package/dist/factories/kubernetes/networking/service.d.ts +14 -1
  971. package/dist/factories/kubernetes/networking/service.d.ts.map +1 -1
  972. package/dist/factories/kubernetes/networking/service.js +22 -2
  973. package/dist/factories/kubernetes/networking/service.js.map +1 -1
  974. package/dist/factories/kubernetes/policy/limit-range.d.ts +3 -1
  975. package/dist/factories/kubernetes/policy/limit-range.d.ts.map +1 -1
  976. package/dist/factories/kubernetes/policy/limit-range.js +2 -8
  977. package/dist/factories/kubernetes/policy/limit-range.js.map +1 -1
  978. package/dist/factories/kubernetes/policy/pod-disruption-budget.d.ts +3 -1
  979. package/dist/factories/kubernetes/policy/pod-disruption-budget.d.ts.map +1 -1
  980. package/dist/factories/kubernetes/policy/pod-disruption-budget.js +3 -2
  981. package/dist/factories/kubernetes/policy/pod-disruption-budget.js.map +1 -1
  982. package/dist/factories/kubernetes/policy/resource-quota.d.ts +3 -1
  983. package/dist/factories/kubernetes/policy/resource-quota.d.ts.map +1 -1
  984. package/dist/factories/kubernetes/policy/resource-quota.js +3 -2
  985. package/dist/factories/kubernetes/policy/resource-quota.js.map +1 -1
  986. package/dist/factories/kubernetes/rbac/cluster-role-binding.d.ts +20 -1
  987. package/dist/factories/kubernetes/rbac/cluster-role-binding.d.ts.map +1 -1
  988. package/dist/factories/kubernetes/rbac/cluster-role-binding.js +19 -8
  989. package/dist/factories/kubernetes/rbac/cluster-role-binding.js.map +1 -1
  990. package/dist/factories/kubernetes/rbac/cluster-role.d.ts +3 -1
  991. package/dist/factories/kubernetes/rbac/cluster-role.d.ts.map +1 -1
  992. package/dist/factories/kubernetes/rbac/cluster-role.js +2 -8
  993. package/dist/factories/kubernetes/rbac/cluster-role.js.map +1 -1
  994. package/dist/factories/kubernetes/rbac/role-binding.d.ts +3 -1
  995. package/dist/factories/kubernetes/rbac/role-binding.d.ts.map +1 -1
  996. package/dist/factories/kubernetes/rbac/role-binding.js +2 -8
  997. package/dist/factories/kubernetes/rbac/role-binding.js.map +1 -1
  998. package/dist/factories/kubernetes/rbac/role.d.ts +3 -1
  999. package/dist/factories/kubernetes/rbac/role.d.ts.map +1 -1
  1000. package/dist/factories/kubernetes/rbac/role.js +2 -8
  1001. package/dist/factories/kubernetes/rbac/role.js.map +1 -1
  1002. package/dist/factories/kubernetes/rbac/service-account.d.ts +3 -1
  1003. package/dist/factories/kubernetes/rbac/service-account.d.ts.map +1 -1
  1004. package/dist/factories/kubernetes/rbac/service-account.js +2 -8
  1005. package/dist/factories/kubernetes/rbac/service-account.js.map +1 -1
  1006. package/dist/factories/kubernetes/scheduling/priority-class.d.ts +3 -1
  1007. package/dist/factories/kubernetes/scheduling/priority-class.d.ts.map +1 -1
  1008. package/dist/factories/kubernetes/scheduling/priority-class.js +2 -7
  1009. package/dist/factories/kubernetes/scheduling/priority-class.js.map +1 -1
  1010. package/dist/factories/kubernetes/scheduling/runtime-class.d.ts +3 -2
  1011. package/dist/factories/kubernetes/scheduling/runtime-class.d.ts.map +1 -1
  1012. package/dist/factories/kubernetes/scheduling/runtime-class.js +2 -1
  1013. package/dist/factories/kubernetes/scheduling/runtime-class.js.map +1 -1
  1014. package/dist/factories/kubernetes/storage/csi-driver.d.ts +3 -1
  1015. package/dist/factories/kubernetes/storage/csi-driver.d.ts.map +1 -1
  1016. package/dist/factories/kubernetes/storage/csi-driver.js +2 -7
  1017. package/dist/factories/kubernetes/storage/csi-driver.js.map +1 -1
  1018. package/dist/factories/kubernetes/storage/csi-node.d.ts +3 -1
  1019. package/dist/factories/kubernetes/storage/csi-node.d.ts.map +1 -1
  1020. package/dist/factories/kubernetes/storage/csi-node.js +2 -1
  1021. package/dist/factories/kubernetes/storage/csi-node.js.map +1 -1
  1022. package/dist/factories/kubernetes/storage/persistent-volume-claim.d.ts +14 -1
  1023. package/dist/factories/kubernetes/storage/persistent-volume-claim.d.ts.map +1 -1
  1024. package/dist/factories/kubernetes/storage/persistent-volume-claim.js +13 -1
  1025. package/dist/factories/kubernetes/storage/persistent-volume-claim.js.map +1 -1
  1026. package/dist/factories/kubernetes/storage/persistent-volume.d.ts +3 -1
  1027. package/dist/factories/kubernetes/storage/persistent-volume.d.ts.map +1 -1
  1028. package/dist/factories/kubernetes/storage/persistent-volume.js +3 -2
  1029. package/dist/factories/kubernetes/storage/persistent-volume.js.map +1 -1
  1030. package/dist/factories/kubernetes/storage/storage-class.d.ts +3 -1
  1031. package/dist/factories/kubernetes/storage/storage-class.d.ts.map +1 -1
  1032. package/dist/factories/kubernetes/storage/storage-class.js +2 -8
  1033. package/dist/factories/kubernetes/storage/storage-class.js.map +1 -1
  1034. package/dist/factories/kubernetes/storage/volume-attachment.d.ts +3 -1
  1035. package/dist/factories/kubernetes/storage/volume-attachment.d.ts.map +1 -1
  1036. package/dist/factories/kubernetes/storage/volume-attachment.js +10 -0
  1037. package/dist/factories/kubernetes/storage/volume-attachment.js.map +1 -1
  1038. package/dist/factories/kubernetes/workloads/cron-job.d.ts +14 -1
  1039. package/dist/factories/kubernetes/workloads/cron-job.d.ts.map +1 -1
  1040. package/dist/factories/kubernetes/workloads/cron-job.js +14 -2
  1041. package/dist/factories/kubernetes/workloads/cron-job.js.map +1 -1
  1042. package/dist/factories/kubernetes/workloads/daemon-set.d.ts +14 -1
  1043. package/dist/factories/kubernetes/workloads/daemon-set.d.ts.map +1 -1
  1044. package/dist/factories/kubernetes/workloads/daemon-set.js +13 -1
  1045. package/dist/factories/kubernetes/workloads/daemon-set.js.map +1 -1
  1046. package/dist/factories/kubernetes/workloads/deployment.d.ts +14 -1
  1047. package/dist/factories/kubernetes/workloads/deployment.d.ts.map +1 -1
  1048. package/dist/factories/kubernetes/workloads/deployment.js +27 -2
  1049. package/dist/factories/kubernetes/workloads/deployment.js.map +1 -1
  1050. package/dist/factories/kubernetes/workloads/job.d.ts +14 -1
  1051. package/dist/factories/kubernetes/workloads/job.d.ts.map +1 -1
  1052. package/dist/factories/kubernetes/workloads/job.js +19 -2
  1053. package/dist/factories/kubernetes/workloads/job.js.map +1 -1
  1054. package/dist/factories/kubernetes/workloads/replica-set.d.ts +3 -1
  1055. package/dist/factories/kubernetes/workloads/replica-set.d.ts.map +1 -1
  1056. package/dist/factories/kubernetes/workloads/replica-set.js +2 -1
  1057. package/dist/factories/kubernetes/workloads/replica-set.js.map +1 -1
  1058. package/dist/factories/kubernetes/workloads/replication-controller.d.ts +3 -1
  1059. package/dist/factories/kubernetes/workloads/replication-controller.d.ts.map +1 -1
  1060. package/dist/factories/kubernetes/workloads/replication-controller.js +3 -2
  1061. package/dist/factories/kubernetes/workloads/replication-controller.js.map +1 -1
  1062. package/dist/factories/kubernetes/workloads/stateful-set.d.ts +14 -1
  1063. package/dist/factories/kubernetes/workloads/stateful-set.d.ts.map +1 -1
  1064. package/dist/factories/kubernetes/workloads/stateful-set.js +22 -2
  1065. package/dist/factories/kubernetes/workloads/stateful-set.js.map +1 -1
  1066. package/dist/factories/kubernetes/yaml/conflict-handler.d.ts +23 -0
  1067. package/dist/factories/kubernetes/yaml/conflict-handler.d.ts.map +1 -0
  1068. package/dist/factories/kubernetes/yaml/conflict-handler.js +83 -0
  1069. package/dist/factories/kubernetes/yaml/conflict-handler.js.map +1 -0
  1070. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts +6 -11
  1071. package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -1
  1072. package/dist/factories/kubernetes/yaml/yaml-directory.js +10 -75
  1073. package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -1
  1074. package/dist/factories/kubernetes/yaml/yaml-file.d.ts +42 -13
  1075. package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -1
  1076. package/dist/factories/kubernetes/yaml/yaml-file.js +206 -99
  1077. package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -1
  1078. package/dist/factories/pebble/compositions/pebble-bootstrap.d.ts +1 -1
  1079. package/dist/factories/pebble/compositions/pebble-bootstrap.d.ts.map +1 -1
  1080. package/dist/factories/pebble/compositions/pebble-bootstrap.js +15 -17
  1081. package/dist/factories/pebble/compositions/pebble-bootstrap.js.map +1 -1
  1082. package/dist/factories/pebble/resources/helm.d.ts +2 -2
  1083. package/dist/factories/pebble/resources/helm.d.ts.map +1 -1
  1084. package/dist/factories/pebble/resources/helm.js +9 -28
  1085. package/dist/factories/pebble/resources/helm.js.map +1 -1
  1086. package/dist/factories/shared.d.ts +12 -71
  1087. package/dist/factories/shared.d.ts.map +1 -1
  1088. package/dist/factories/shared.js +10 -531
  1089. package/dist/factories/shared.js.map +1 -1
  1090. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.d.ts +11 -0
  1091. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.d.ts.map +1 -1
  1092. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.js +12 -0
  1093. package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.js.map +1 -1
  1094. package/dist/factories/simple/compositions/web-service.d.ts +35 -0
  1095. package/dist/factories/simple/compositions/web-service.d.ts.map +1 -0
  1096. package/dist/{core/composition/composition.js → factories/simple/compositions/web-service.js} +15 -2
  1097. package/dist/factories/simple/compositions/web-service.js.map +1 -0
  1098. package/dist/factories/simple/config/config-map.d.ts +11 -0
  1099. package/dist/factories/simple/config/config-map.d.ts.map +1 -1
  1100. package/dist/factories/simple/config/config-map.js +11 -0
  1101. package/dist/factories/simple/config/config-map.js.map +1 -1
  1102. package/dist/factories/simple/config/secret.d.ts +11 -0
  1103. package/dist/factories/simple/config/secret.d.ts.map +1 -1
  1104. package/dist/factories/simple/config/secret.js +17 -3
  1105. package/dist/factories/simple/config/secret.js.map +1 -1
  1106. package/dist/factories/simple/helm/index.d.ts +10 -0
  1107. package/dist/factories/simple/helm/index.d.ts.map +1 -1
  1108. package/dist/factories/simple/helm/index.js +10 -0
  1109. package/dist/factories/simple/helm/index.js.map +1 -1
  1110. package/dist/factories/simple/index.d.ts +1 -1
  1111. package/dist/factories/simple/networking/ingress.d.ts +14 -2
  1112. package/dist/factories/simple/networking/ingress.d.ts.map +1 -1
  1113. package/dist/factories/simple/networking/ingress.js +12 -0
  1114. package/dist/factories/simple/networking/ingress.js.map +1 -1
  1115. package/dist/factories/simple/networking/network-policy.d.ts +11 -1
  1116. package/dist/factories/simple/networking/network-policy.d.ts.map +1 -1
  1117. package/dist/factories/simple/networking/network-policy.js +10 -0
  1118. package/dist/factories/simple/networking/network-policy.js.map +1 -1
  1119. package/dist/factories/simple/networking/service.d.ts +10 -0
  1120. package/dist/factories/simple/networking/service.d.ts.map +1 -1
  1121. package/dist/factories/simple/networking/service.js +10 -0
  1122. package/dist/factories/simple/networking/service.js.map +1 -1
  1123. package/dist/factories/simple/storage/persistent-volume-claim.d.ts +10 -0
  1124. package/dist/factories/simple/storage/persistent-volume-claim.d.ts.map +1 -1
  1125. package/dist/factories/simple/storage/persistent-volume-claim.js +10 -0
  1126. package/dist/factories/simple/storage/persistent-volume-claim.js.map +1 -1
  1127. package/dist/factories/simple/storage/persistent-volume.d.ts +11 -0
  1128. package/dist/factories/simple/storage/persistent-volume.d.ts.map +1 -1
  1129. package/dist/factories/simple/storage/persistent-volume.js +12 -0
  1130. package/dist/factories/simple/storage/persistent-volume.js.map +1 -1
  1131. package/dist/factories/simple/types.d.ts +16 -0
  1132. package/dist/factories/simple/types.d.ts.map +1 -1
  1133. package/dist/factories/simple/workloads/cron-job.d.ts +10 -0
  1134. package/dist/factories/simple/workloads/cron-job.d.ts.map +1 -1
  1135. package/dist/factories/simple/workloads/cron-job.js +11 -0
  1136. package/dist/factories/simple/workloads/cron-job.js.map +1 -1
  1137. package/dist/factories/simple/workloads/daemon-set.d.ts +9 -0
  1138. package/dist/factories/simple/workloads/daemon-set.d.ts.map +1 -1
  1139. package/dist/factories/simple/workloads/daemon-set.js +9 -0
  1140. package/dist/factories/simple/workloads/daemon-set.js.map +1 -1
  1141. package/dist/factories/simple/workloads/deployment.d.ts +11 -1
  1142. package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
  1143. package/dist/factories/simple/workloads/deployment.js +19 -9
  1144. package/dist/factories/simple/workloads/deployment.js.map +1 -1
  1145. package/dist/factories/simple/workloads/job.d.ts +10 -0
  1146. package/dist/factories/simple/workloads/job.d.ts.map +1 -1
  1147. package/dist/factories/simple/workloads/job.js +11 -0
  1148. package/dist/factories/simple/workloads/job.js.map +1 -1
  1149. package/dist/factories/simple/workloads/stateful-set.d.ts +11 -0
  1150. package/dist/factories/simple/workloads/stateful-set.d.ts.map +1 -1
  1151. package/dist/factories/simple/workloads/stateful-set.js +12 -0
  1152. package/dist/factories/simple/workloads/stateful-set.js.map +1 -1
  1153. package/dist/factories/simple/yaml/index.d.ts +8 -0
  1154. package/dist/factories/simple/yaml/index.d.ts.map +1 -1
  1155. package/dist/factories/simple/yaml/index.js +8 -0
  1156. package/dist/factories/simple/yaml/index.js.map +1 -1
  1157. package/dist/factories/valkey/compositions/index.d.ts +2 -0
  1158. package/dist/factories/valkey/compositions/index.d.ts.map +1 -0
  1159. package/dist/factories/valkey/compositions/index.js +2 -0
  1160. package/dist/factories/valkey/compositions/index.js.map +1 -0
  1161. package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts +41 -0
  1162. package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts.map +1 -0
  1163. package/dist/factories/valkey/compositions/valkey-bootstrap.js +105 -0
  1164. package/dist/factories/valkey/compositions/valkey-bootstrap.js.map +1 -0
  1165. package/dist/factories/valkey/index.d.ts +50 -0
  1166. package/dist/factories/valkey/index.d.ts.map +1 -0
  1167. package/dist/factories/valkey/index.js +50 -0
  1168. package/dist/factories/valkey/index.js.map +1 -0
  1169. package/dist/factories/valkey/resources/helm.d.ts +53 -0
  1170. package/dist/factories/valkey/resources/helm.d.ts.map +1 -0
  1171. package/dist/factories/valkey/resources/helm.js +82 -0
  1172. package/dist/factories/valkey/resources/helm.js.map +1 -0
  1173. package/dist/factories/valkey/resources/index.d.ts +3 -0
  1174. package/dist/factories/valkey/resources/index.d.ts.map +1 -0
  1175. package/dist/factories/valkey/resources/index.js +3 -0
  1176. package/dist/factories/valkey/resources/index.js.map +1 -0
  1177. package/dist/factories/valkey/resources/valkey.d.ts +46 -0
  1178. package/dist/factories/valkey/resources/valkey.d.ts.map +1 -0
  1179. package/dist/factories/valkey/resources/valkey.js +123 -0
  1180. package/dist/factories/valkey/resources/valkey.js.map +1 -0
  1181. package/dist/factories/valkey/types.d.ts +185 -0
  1182. package/dist/factories/valkey/types.d.ts.map +1 -0
  1183. package/dist/factories/valkey/types.js +204 -0
  1184. package/dist/factories/valkey/types.js.map +1 -0
  1185. package/dist/factories/valkey/utils/helm-values-mapper.d.ts +32 -0
  1186. package/dist/factories/valkey/utils/helm-values-mapper.d.ts.map +1 -0
  1187. package/dist/factories/valkey/utils/helm-values-mapper.js +58 -0
  1188. package/dist/factories/valkey/utils/helm-values-mapper.js.map +1 -0
  1189. package/dist/factories/valkey/utils/index.d.ts +2 -0
  1190. package/dist/factories/valkey/utils/index.d.ts.map +1 -0
  1191. package/dist/factories/valkey/utils/index.js +2 -0
  1192. package/dist/factories/valkey/utils/index.js.map +1 -0
  1193. package/dist/factories/webapp/compositions/index.d.ts +2 -0
  1194. package/dist/factories/webapp/compositions/index.d.ts.map +1 -0
  1195. package/dist/factories/webapp/compositions/index.js +2 -0
  1196. package/dist/factories/webapp/compositions/index.js.map +1 -0
  1197. package/dist/factories/webapp/compositions/web-app-with-processing.d.ts +98 -0
  1198. package/dist/factories/webapp/compositions/web-app-with-processing.d.ts.map +1 -0
  1199. package/dist/factories/webapp/compositions/web-app-with-processing.js +221 -0
  1200. package/dist/factories/webapp/compositions/web-app-with-processing.js.map +1 -0
  1201. package/dist/factories/webapp/index.d.ts +53 -0
  1202. package/dist/factories/webapp/index.d.ts.map +1 -0
  1203. package/dist/factories/webapp/index.js +53 -0
  1204. package/dist/factories/webapp/index.js.map +1 -0
  1205. package/dist/factories/webapp/types.d.ts +69 -0
  1206. package/dist/factories/webapp/types.d.ts.map +1 -0
  1207. package/dist/factories/webapp/types.js +92 -0
  1208. package/dist/factories/webapp/types.js.map +1 -0
  1209. package/dist/index.d.ts +105 -6
  1210. package/dist/index.d.ts.map +1 -1
  1211. package/dist/index.js +115 -42
  1212. package/dist/index.js.map +1 -1
  1213. package/dist/shared/brands.d.ts +48 -0
  1214. package/dist/shared/brands.d.ts.map +1 -0
  1215. package/dist/shared/brands.js +48 -0
  1216. package/dist/shared/brands.js.map +1 -0
  1217. package/dist/utils/helpers.d.ts +31 -57
  1218. package/dist/utils/helpers.d.ts.map +1 -1
  1219. package/dist/utils/helpers.js +46 -494
  1220. package/dist/utils/helpers.js.map +1 -1
  1221. package/dist/utils/index.d.ts +5 -4
  1222. package/dist/utils/index.d.ts.map +1 -1
  1223. package/dist/utils/index.js +8 -6
  1224. package/dist/utils/index.js.map +1 -1
  1225. package/dist/utils/string.d.ts +31 -0
  1226. package/dist/utils/string.d.ts.map +1 -0
  1227. package/dist/utils/string.js +82 -0
  1228. package/dist/utils/string.js.map +1 -0
  1229. package/dist/utils/type-guards.d.ts +20 -11
  1230. package/dist/utils/type-guards.d.ts.map +1 -1
  1231. package/dist/utils/type-guards.js +78 -26
  1232. package/dist/utils/type-guards.js.map +1 -1
  1233. package/package.json +43 -13
  1234. package/dist/core/composition/composition.d.ts +0 -10
  1235. package/dist/core/composition/composition.d.ts.map +0 -1
  1236. package/dist/core/composition/composition.js.map +0 -1
  1237. package/dist/core/composition/typekro-runtime/index.d.ts +0 -3
  1238. package/dist/core/composition/typekro-runtime/index.d.ts.map +0 -1
  1239. package/dist/core/composition/typekro-runtime/index.js.map +0 -1
  1240. package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts.map +0 -1
  1241. package/dist/core/composition/typekro-runtime/typekro-runtime.js +0 -165
  1242. package/dist/core/composition/typekro-runtime/typekro-runtime.js.map +0 -1
  1243. package/dist/core/composition/typekro-runtime/types.d.ts +0 -19
  1244. package/dist/core/composition/typekro-runtime/types.d.ts.map +0 -1
  1245. package/dist/core/composition/typekro-runtime/types.js.map +0 -1
  1246. package/dist/core/composition/types.d.ts +0 -27
  1247. package/dist/core/composition/types.d.ts.map +0 -1
  1248. package/dist/core/composition/types.js +0 -8
  1249. package/dist/core/composition/types.js.map +0 -1
  1250. package/dist/core/dependencies/type-guards.d.ts +0 -17
  1251. package/dist/core/dependencies/type-guards.d.ts.map +0 -1
  1252. package/dist/core/dependencies/type-guards.js +0 -40
  1253. package/dist/core/dependencies/type-guards.js.map +0 -1
  1254. package/dist/core/deployment/deployment-strategies.d.ts +0 -12
  1255. package/dist/core/deployment/deployment-strategies.d.ts.map +0 -1
  1256. package/dist/core/deployment/deployment-strategies.js +0 -11
  1257. package/dist/core/deployment/deployment-strategies.js.map +0 -1
  1258. package/dist/core/deployment/event-streamer.d.ts +0 -112
  1259. package/dist/core/deployment/event-streamer.d.ts.map +0 -1
  1260. package/dist/core/deployment/event-streamer.js +0 -348
  1261. package/dist/core/deployment/event-streamer.js.map +0 -1
  1262. package/dist/core/direct-deployment.d.ts +0 -8
  1263. package/dist/core/direct-deployment.d.ts.map +0 -1
  1264. package/dist/core/direct-deployment.js +0 -9
  1265. package/dist/core/direct-deployment.js.map +0 -1
  1266. package/dist/core/evaluation/cel-optimizer.d.ts.map +0 -1
  1267. package/dist/core/evaluation/cel-optimizer.js.map +0 -1
  1268. package/dist/core/expressions/analyzer.d.ts +0 -584
  1269. package/dist/core/expressions/analyzer.d.ts.map +0 -1
  1270. package/dist/core/expressions/analyzer.js +0 -2921
  1271. package/dist/core/expressions/analyzer.js.map +0 -1
  1272. package/dist/core/expressions/cache.d.ts.map +0 -1
  1273. package/dist/core/expressions/cache.js.map +0 -1
  1274. package/dist/core/expressions/cel-conversion-engine.d.ts.map +0 -1
  1275. package/dist/core/expressions/cel-conversion-engine.js.map +0 -1
  1276. package/dist/core/expressions/compile-time-validation.d.ts +0 -270
  1277. package/dist/core/expressions/compile-time-validation.d.ts.map +0 -1
  1278. package/dist/core/expressions/compile-time-validation.js.map +0 -1
  1279. package/dist/core/expressions/composition-integration.d.ts +0 -315
  1280. package/dist/core/expressions/composition-integration.d.ts.map +0 -1
  1281. package/dist/core/expressions/composition-integration.js +0 -944
  1282. package/dist/core/expressions/composition-integration.js.map +0 -1
  1283. package/dist/core/expressions/conditional-expression-processor.d.ts.map +0 -1
  1284. package/dist/core/expressions/conditional-expression-processor.js.map +0 -1
  1285. package/dist/core/expressions/conditional-integration.d.ts.map +0 -1
  1286. package/dist/core/expressions/conditional-integration.js.map +0 -1
  1287. package/dist/core/expressions/conditional-validation.d.ts +0 -181
  1288. package/dist/core/expressions/conditional-validation.d.ts.map +0 -1
  1289. package/dist/core/expressions/conditional-validation.js +0 -460
  1290. package/dist/core/expressions/conditional-validation.js.map +0 -1
  1291. package/dist/core/expressions/context-aware-generator.d.ts.map +0 -1
  1292. package/dist/core/expressions/context-aware-generator.js.map +0 -1
  1293. package/dist/core/expressions/context-detector.d.ts.map +0 -1
  1294. package/dist/core/expressions/context-detector.js.map +0 -1
  1295. package/dist/core/expressions/context-switcher.d.ts +0 -185
  1296. package/dist/core/expressions/context-switcher.d.ts.map +0 -1
  1297. package/dist/core/expressions/context-switcher.js +0 -515
  1298. package/dist/core/expressions/context-switcher.js.map +0 -1
  1299. package/dist/core/expressions/context-validator.d.ts.map +0 -1
  1300. package/dist/core/expressions/context-validator.js.map +0 -1
  1301. package/dist/core/expressions/custom-context-manager.d.ts +0 -194
  1302. package/dist/core/expressions/custom-context-manager.d.ts.map +0 -1
  1303. package/dist/core/expressions/custom-context-manager.js +0 -390
  1304. package/dist/core/expressions/custom-context-manager.js.map +0 -1
  1305. package/dist/core/expressions/expression-proxy.d.ts +0 -80
  1306. package/dist/core/expressions/expression-proxy.d.ts.map +0 -1
  1307. package/dist/core/expressions/expression-proxy.js +0 -227
  1308. package/dist/core/expressions/expression-proxy.js.map +0 -1
  1309. package/dist/core/expressions/factory-integration.d.ts.map +0 -1
  1310. package/dist/core/expressions/factory-integration.js.map +0 -1
  1311. package/dist/core/expressions/factory-pattern-handler.d.ts.map +0 -1
  1312. package/dist/core/expressions/factory-pattern-handler.js.map +0 -1
  1313. package/dist/core/expressions/field-hydration-processor.d.ts +0 -191
  1314. package/dist/core/expressions/field-hydration-processor.d.ts.map +0 -1
  1315. package/dist/core/expressions/field-hydration-processor.js +0 -561
  1316. package/dist/core/expressions/field-hydration-processor.js.map +0 -1
  1317. package/dist/core/expressions/imperative-analyzer.d.ts +0 -21
  1318. package/dist/core/expressions/imperative-analyzer.d.ts.map +0 -1
  1319. package/dist/core/expressions/imperative-analyzer.js.map +0 -1
  1320. package/dist/core/expressions/lazy-analysis.d.ts +0 -1128
  1321. package/dist/core/expressions/lazy-analysis.d.ts.map +0 -1
  1322. package/dist/core/expressions/lazy-analysis.js +0 -2443
  1323. package/dist/core/expressions/lazy-analysis.js.map +0 -1
  1324. package/dist/core/expressions/magic-assignable-analyzer.d.ts.map +0 -1
  1325. package/dist/core/expressions/magic-assignable-analyzer.js.map +0 -1
  1326. package/dist/core/expressions/magic-proxy-analyzer.d.ts.map +0 -1
  1327. package/dist/core/expressions/magic-proxy-analyzer.js.map +0 -1
  1328. package/dist/core/expressions/magic-proxy-detector.d.ts.map +0 -1
  1329. package/dist/core/expressions/magic-proxy-detector.js.map +0 -1
  1330. package/dist/core/expressions/migration-helpers.d.ts.map +0 -1
  1331. package/dist/core/expressions/migration-helpers.js.map +0 -1
  1332. package/dist/core/expressions/optionality-handler.d.ts +0 -503
  1333. package/dist/core/expressions/optionality-handler.d.ts.map +0 -1
  1334. package/dist/core/expressions/optionality-handler.js +0 -1306
  1335. package/dist/core/expressions/optionality-handler.js.map +0 -1
  1336. package/dist/core/expressions/parser.d.ts.map +0 -1
  1337. package/dist/core/expressions/parser.js.map +0 -1
  1338. package/dist/core/expressions/readiness-integration.d.ts +0 -119
  1339. package/dist/core/expressions/readiness-integration.d.ts.map +0 -1
  1340. package/dist/core/expressions/readiness-integration.js +0 -386
  1341. package/dist/core/expressions/readiness-integration.js.map +0 -1
  1342. package/dist/core/expressions/resource-analyzer.d.ts +0 -486
  1343. package/dist/core/expressions/resource-analyzer.d.ts.map +0 -1
  1344. package/dist/core/expressions/resource-analyzer.js +0 -1086
  1345. package/dist/core/expressions/resource-analyzer.js.map +0 -1
  1346. package/dist/core/expressions/resource-validation.d.ts.map +0 -1
  1347. package/dist/core/expressions/resource-validation.js +0 -552
  1348. package/dist/core/expressions/resource-validation.js.map +0 -1
  1349. package/dist/core/expressions/runtime-error-mapper.d.ts +0 -138
  1350. package/dist/core/expressions/runtime-error-mapper.d.ts.map +0 -1
  1351. package/dist/core/expressions/runtime-error-mapper.js +0 -412
  1352. package/dist/core/expressions/runtime-error-mapper.js.map +0 -1
  1353. package/dist/core/expressions/source-map.d.ts.map +0 -1
  1354. package/dist/core/expressions/source-map.js.map +0 -1
  1355. package/dist/core/expressions/status-builder-analyzer.d.ts +0 -353
  1356. package/dist/core/expressions/status-builder-analyzer.d.ts.map +0 -1
  1357. package/dist/core/expressions/status-builder-analyzer.js +0 -1311
  1358. package/dist/core/expressions/status-builder-analyzer.js.map +0 -1
  1359. package/dist/core/expressions/type-inference.d.ts.map +0 -1
  1360. package/dist/core/expressions/type-inference.js.map +0 -1
  1361. package/dist/core/expressions/type-safety.d.ts.map +0 -1
  1362. package/dist/core/expressions/type-safety.js.map +0 -1
  1363. package/dist/core/expressions/types.d.ts.map +0 -1
  1364. package/dist/core/expressions/types.js.map +0 -1
  1365. package/dist/core/factory.d.ts +0 -12
  1366. package/dist/core/factory.d.ts.map +0 -1
  1367. package/dist/core/factory.js +0 -13
  1368. package/dist/core/factory.js.map +0 -1
  1369. package/dist/core/readiness/cluster-state.d.ts +0 -229
  1370. package/dist/core/readiness/cluster-state.d.ts.map +0 -1
  1371. package/dist/core/readiness/cluster-state.js +0 -368
  1372. package/dist/core/readiness/cluster-state.js.map +0 -1
  1373. package/dist/core/scope/resolver.d.ts +0 -16
  1374. package/dist/core/scope/resolver.d.ts.map +0 -1
  1375. package/dist/core/scope/resolver.js +0 -45
  1376. package/dist/core/scope/resolver.js.map +0 -1
  1377. package/dist/core/types/factory-scope.d.ts +0 -42
  1378. package/dist/core/types/factory-scope.d.ts.map +0 -1
  1379. package/dist/core/types/factory-scope.js +0 -14
  1380. package/dist/core/types/factory-scope.js.map +0 -1
  1381. package/dist/core/utils/crd-patcher.d.ts.map +0 -1
  1382. package/dist/core/utils/crd-patcher.js +0 -198
  1383. package/dist/core/utils/crd-patcher.js.map +0 -1
  1384. package/dist/core/utils/crd-schema-fix.d.ts.map +0 -1
  1385. package/dist/core/utils/crd-schema-fix.js.map +0 -1
  1386. package/dist/core/utils/index.d.ts +0 -12
  1387. package/dist/core/utils/index.d.ts.map +0 -1
  1388. package/dist/core/utils/index.js +0 -12
  1389. package/dist/core/utils/index.js.map +0 -1
  1390. package/dist/core/utils/minimal-connection-reset-suppression.d.ts +0 -16
  1391. package/dist/core/utils/minimal-connection-reset-suppression.d.ts.map +0 -1
  1392. package/dist/core/utils/minimal-connection-reset-suppression.js +0 -72
  1393. package/dist/core/utils/minimal-connection-reset-suppression.js.map +0 -1
  1394. package/dist/core/utils/output-filter.d.ts +0 -16
  1395. package/dist/core/utils/output-filter.d.ts.map +0 -1
  1396. package/dist/core/utils/output-filter.js +0 -90
  1397. package/dist/core/utils/output-filter.js.map +0 -1
  1398. package/dist/core/utils/scoped-error-suppression.d.ts +0 -25
  1399. package/dist/core/utils/scoped-error-suppression.d.ts.map +0 -1
  1400. package/dist/core/utils/scoped-error-suppression.js +0 -226
  1401. package/dist/core/utils/scoped-error-suppression.js.map +0 -1
  1402. package/dist/core.d.ts +0 -30
  1403. package/dist/core.d.ts.map +0 -1
  1404. package/dist/core.js +0 -59
  1405. package/dist/core.js.map +0 -1
  1406. package/dist/factories/cilium/resources/bgp.d.ts +0 -10
  1407. package/dist/factories/cilium/resources/bgp.d.ts.map +0 -1
  1408. package/dist/factories/cilium/resources/bgp.js +0 -14
  1409. package/dist/factories/cilium/resources/bgp.js.map +0 -1
  1410. package/dist/factories/cilium/resources/load-balancer.d.ts +0 -9
  1411. package/dist/factories/cilium/resources/load-balancer.d.ts.map +0 -1
  1412. package/dist/factories/cilium/resources/load-balancer.js +0 -12
  1413. package/dist/factories/cilium/resources/load-balancer.js.map +0 -1
  1414. package/dist/factories/cilium/resources/observability.d.ts +0 -9
  1415. package/dist/factories/cilium/resources/observability.d.ts.map +0 -1
  1416. package/dist/factories/cilium/resources/observability.js +0 -11
  1417. package/dist/factories/cilium/resources/observability.js.map +0 -1
  1418. package/dist/factories/cilium/resources/security.d.ts +0 -10
  1419. package/dist/factories/cilium/resources/security.d.ts.map +0 -1
  1420. package/dist/factories/cilium/resources/security.js +0 -14
  1421. package/dist/factories/cilium/resources/security.js.map +0 -1
  1422. /package/dist/{core/composition → compositions}/typekro-runtime/index.js +0 -0
  1423. /package/dist/{core/composition → compositions}/typekro-runtime/types.js +0 -0
  1424. /package/dist/core/expressions/{source-map.d.ts → analysis/source-map.d.ts} +0 -0
  1425. /package/dist/core/expressions/{types.js → analysis/types.js} +0 -0
@@ -1,2921 +0,0 @@
1
- /**
2
- * JavaScript to CEL Expression Analyzer
3
- *
4
- * This module provides the core functionality for detecting KubernetesRef objects
5
- * in JavaScript expressions and converting them to appropriate CEL expressions.
6
- *
7
- * The analyzer works with TypeKro's magic proxy system where schema.spec.name and
8
- * resources.database.status.podIP return KubernetesRef objects at runtime.
9
- */
10
- import * as estraverse from 'estraverse';
11
- import { parseExpression, parseScript, ParserError } from './parser.js';
12
- import { containsKubernetesRefs, extractResourceReferences, isKubernetesRef } from '../../utils/type-guards.js';
13
- import { CEL_EXPRESSION_BRAND, KUBERNETES_REF_BRAND } from '../constants/brands.js';
14
- import { ConversionError } from '../errors.js';
15
- import { SourceMapUtils } from './source-map.js';
16
- import { ExpressionCache } from './cache.js';
17
- import { handleExpressionWithFactoryPattern } from './factory-pattern-handler.js';
18
- import { ExpressionTypeValidator, TypeRegistry, TypeSafetyUtils } from './type-safety.js';
19
- import { CelTypeInferenceEngine } from './type-inference.js';
20
- import { ResourceReferenceValidator } from './resource-validation.js';
21
- import { CompileTimeTypeChecker } from './compile-time-validation.js';
22
- /**
23
- * Main analyzer class for JavaScript to CEL expression conversion
24
- */
25
- export class JavaScriptToCelAnalyzer {
26
- cache;
27
- typeValidator = new ExpressionTypeValidator();
28
- enableMetrics;
29
- constructor(cacheOptions) {
30
- this.cache = new ExpressionCache(cacheOptions);
31
- this.enableMetrics = cacheOptions?.enableMetrics ?? true;
32
- }
33
- typeInferenceEngine = new CelTypeInferenceEngine();
34
- resourceValidator = new ResourceReferenceValidator();
35
- compileTimeChecker = new CompileTimeTypeChecker();
36
- /**
37
- * Analyze any expression type and convert to CEL if needed
38
- */
39
- analyzeExpression(expression, context) {
40
- // Handle different expression types
41
- if (typeof expression === 'string') {
42
- return this.analyzeStringExpression(expression, context);
43
- }
44
- // Handle KubernetesRef objects directly
45
- if (expression && typeof expression === 'object' && expression[KUBERNETES_REF_BRAND]) {
46
- return this.analyzeKubernetesRefObject(expression, context);
47
- }
48
- // Handle other objects
49
- if (typeof expression === 'object' && expression !== null) {
50
- return this.analyzeObjectExpression(expression, context);
51
- }
52
- // Handle primitives
53
- return this.analyzePrimitiveExpression(expression, context);
54
- }
55
- /**
56
- * Analyze a JavaScript string expression and convert to CEL if it contains KubernetesRef objects
57
- */
58
- analyzeStringExpression(expression, context) {
59
- // Check cache first
60
- const cached = this.cache.get(expression, context);
61
- if (cached)
62
- return cached;
63
- try {
64
- // Parse JavaScript expression to AST with location tracking
65
- // Using unified acorn parser with native ES2022 support (optional chaining, nullish coalescing)
66
- const exprNode = parseExpression(expression);
67
- // Create source location from AST (handle case where loc might be undefined)
68
- const astLoc = exprNode.loc;
69
- const sourceLocation = astLoc
70
- ? SourceMapUtils.createSourceLocation(astLoc, expression)
71
- : { line: 1, column: 1, length: expression.length };
72
- // Initialize dependencies array if not provided
73
- if (!context.dependencies) {
74
- context.dependencies = [];
75
- }
76
- // Convert to CEL with source tracking (this will extract dependencies through AST analysis)
77
- const celExpression = this.convertASTNodeWithSourceTracking(exprNode, context, expression, sourceLocation);
78
- // Add source mapping entry
79
- const sourceMapEntries = [];
80
- if (context.sourceMap) {
81
- const _mappingId = context.sourceMap.addMapping(expression, celExpression.expression, sourceLocation, context.type, {
82
- expressionType: SourceMapUtils.determineExpressionType(exprNode.type),
83
- kubernetesRefs: SourceMapUtils.extractKubernetesRefPaths(celExpression.expression),
84
- dependencies: context.dependencies?.map(dep => `${dep.resourceId}.${dep.fieldPath}`) || [],
85
- conversionNotes: [`Converted from ${exprNode.type} AST node`]
86
- });
87
- sourceMapEntries.push(...context.sourceMap.getEntries());
88
- }
89
- // Perform type validation and inference if enabled
90
- let typeValidation;
91
- let inferredType;
92
- let resourceValidation;
93
- if (context.strictTypeChecking !== false && context.typeRegistry) {
94
- const availableTypes = context.typeRegistry.getAvailableTypes();
95
- typeValidation = this.typeValidator.validateExpression(expression, availableTypes, context.expectedType);
96
- inferredType = typeValidation.resultType;
97
- // Also perform CEL type inference
98
- const celTypeInference = this.inferCelExpressionType(celExpression, context);
99
- if (celTypeInference.success && !inferredType) {
100
- inferredType = celTypeInference.resultType;
101
- }
102
- }
103
- // Validate resource references if enabled
104
- if (context.validateResourceReferences !== false && context.dependencies) {
105
- resourceValidation = this.validateResourceReferences(context.dependencies, context.availableReferences, context.schemaProxy, context.validationContext);
106
- }
107
- // Perform compile-time type checking if enabled
108
- let compileTimeValidation;
109
- if (context.compileTimeTypeChecking !== false && context.compileTimeContext) {
110
- compileTimeValidation = this.performCompileTimeValidation(expression, context.compileTimeContext);
111
- }
112
- // Only treat compile-time and type validation errors as critical
113
- // Resource validation errors should be warnings, not critical errors
114
- const hasCompileTimeErrors = compileTimeValidation && !compileTimeValidation.valid;
115
- const hasTypeValidationErrors = typeValidation && !typeValidation.valid;
116
- // Collect only critical validation errors that should affect validity
117
- const criticalErrors = [];
118
- if (compileTimeValidation?.errors) {
119
- criticalErrors.push(...compileTimeValidation.errors);
120
- }
121
- if (typeValidation?.errors) {
122
- criticalErrors.push(...typeValidation.errors);
123
- }
124
- // Resource validation errors are treated as warnings, not critical errors
125
- // Aggregate warnings from all validation results
126
- const aggregatedWarnings = [];
127
- // Add resource validation warnings and errors (treat errors as warnings)
128
- if (resourceValidation) {
129
- for (const rv of resourceValidation) {
130
- // Add warnings
131
- for (const warning of rv.warnings) {
132
- const warningObj = {
133
- message: warning.message,
134
- type: warning.warningType
135
- };
136
- if (rv.suggestions.length > 0) {
137
- warningObj.suggestion = rv.suggestions.join('; ');
138
- }
139
- aggregatedWarnings.push(warningObj);
140
- }
141
- // Add errors as warnings (resource validation errors shouldn't fail the entire expression)
142
- if (rv.errors) {
143
- for (const error of rv.errors) {
144
- const warningObj = {
145
- message: error instanceof Error ? error.message : String(error),
146
- type: 'resource_validation'
147
- };
148
- if (rv.suggestions.length > 0) {
149
- warningObj.suggestion = rv.suggestions.join('; ');
150
- }
151
- aggregatedWarnings.push(warningObj);
152
- }
153
- }
154
- }
155
- }
156
- // Add type validation warnings (if any)
157
- if (typeValidation?.warnings) {
158
- for (const warning of typeValidation.warnings) {
159
- aggregatedWarnings.push({
160
- message: warning.message,
161
- type: 'type_validation'
162
- // No suggestion property for TypeValidationWarning
163
- });
164
- }
165
- }
166
- // Add compile-time validation warnings (if any)
167
- if (compileTimeValidation?.warnings) {
168
- for (const warning of compileTimeValidation.warnings) {
169
- aggregatedWarnings.push({
170
- message: warning.message,
171
- type: 'compile_time'
172
- // No suggestion property for CompileTimeWarning
173
- });
174
- }
175
- }
176
- const result = {
177
- valid: celExpression !== null && !hasCompileTimeErrors && !hasTypeValidationErrors,
178
- celExpression,
179
- dependencies: context.dependencies || [],
180
- sourceMap: sourceMapEntries,
181
- errors: criticalErrors,
182
- requiresConversion: (context.dependencies || []).length > 0, // Only requires conversion if there are KubernetesRef dependencies
183
- typeValidation,
184
- inferredType,
185
- resourceValidation,
186
- compileTimeValidation,
187
- warnings: aggregatedWarnings
188
- };
189
- // Cache the result
190
- this.cache.set(expression, context, result);
191
- return result;
192
- }
193
- catch (error) {
194
- // If parsing fails, try to handle it as a special case
195
- const specialCaseResult = this.handleSpecialCases(expression, context);
196
- if (specialCaseResult) {
197
- // Only cache successful special case results
198
- if (specialCaseResult.valid) {
199
- this.cache.set(expression, context, specialCaseResult);
200
- }
201
- return specialCaseResult;
202
- }
203
- // Create detailed error with source location from ParserError if available
204
- let sourceLocation = { line: 1, column: 1, length: expression.length };
205
- let errorMessage = error instanceof Error ? error.message : String(error);
206
- // Extract enhanced error information from ParserError
207
- if (error instanceof ParserError) {
208
- sourceLocation = {
209
- line: error.line,
210
- column: error.column,
211
- length: expression.length
212
- };
213
- errorMessage = error.message;
214
- }
215
- const conversionError = ConversionError.forParsingFailure(expression, errorMessage, sourceLocation, error instanceof Error ? error : undefined);
216
- const errorResult = {
217
- valid: false,
218
- celExpression: null,
219
- dependencies: [],
220
- sourceMap: [],
221
- errors: [conversionError],
222
- requiresConversion: false,
223
- warnings: []
224
- };
225
- // Don't cache error results to allow retry
226
- return errorResult;
227
- }
228
- }
229
- /**
230
- * Analyze a KubernetesRef object directly
231
- */
232
- analyzeKubernetesRefObject(ref, context) {
233
- // Use the proper CEL path format
234
- const resourceId = ref.resourceId === '__schema__' ? 'schema' : ref.resourceId;
235
- const celPath = `${resourceId}.${ref.fieldPath}`;
236
- // Add to dependencies
237
- if (!context.dependencies) {
238
- context.dependencies = [];
239
- }
240
- context.dependencies.push(ref);
241
- return {
242
- valid: true,
243
- celExpression: {
244
- [CEL_EXPRESSION_BRAND]: true,
245
- expression: celPath,
246
- _type: ref._type
247
- },
248
- dependencies: [ref],
249
- sourceMap: [],
250
- errors: [],
251
- warnings: [],
252
- requiresConversion: true
253
- };
254
- }
255
- /**
256
- * Analyze object expression by examining its structure
257
- */
258
- analyzeObjectExpression(obj, context) {
259
- const kubernetesRefs = [];
260
- // Recursively examine object properties for KubernetesRef objects
261
- this.extractKubernetesRefsFromObject(obj, kubernetesRefs, '');
262
- // Add to dependencies
263
- if (!context.dependencies) {
264
- context.dependencies = [];
265
- }
266
- context.dependencies.push(...kubernetesRefs);
267
- return {
268
- valid: true,
269
- celExpression: null, // Objects don't convert to single CEL expressions
270
- dependencies: kubernetesRefs,
271
- sourceMap: [],
272
- errors: [],
273
- warnings: [],
274
- requiresConversion: kubernetesRefs.length > 0
275
- };
276
- }
277
- /**
278
- * Analyze primitive expression (no KubernetesRef objects)
279
- */
280
- analyzePrimitiveExpression(_value, _context) {
281
- return {
282
- valid: true,
283
- celExpression: null,
284
- dependencies: [],
285
- sourceMap: [],
286
- errors: [],
287
- warnings: [],
288
- requiresConversion: false
289
- };
290
- }
291
- /**
292
- * Extract KubernetesRef objects from object structure
293
- */
294
- extractKubernetesRefsFromObject(obj, refs, path) {
295
- if (!obj || typeof obj !== 'object')
296
- return;
297
- // Check if this object is a KubernetesRef
298
- if (obj[KUBERNETES_REF_BRAND]) {
299
- refs.push(obj);
300
- return;
301
- }
302
- // Recursively check properties
303
- for (const [key, value] of Object.entries(obj)) {
304
- const newPath = path ? `${path}.${key}` : key;
305
- this.extractKubernetesRefsFromObject(value, refs, newPath);
306
- }
307
- }
308
- /**
309
- * NEW: Analyze expressions that may contain KubernetesRef objects from magic proxy system
310
- * This is the key method that detects when JavaScript expressions contain KubernetesRef objects
311
- */
312
- analyzeExpressionWithRefs(expression, // Could be a JavaScript expression or contain KubernetesRef objects
313
- context) {
314
- try {
315
- // First check if this is a static value (no KubernetesRef objects)
316
- if (this.isStaticValue(expression)) {
317
- // Static values don't need conversion - preserve them as-is for performance
318
- return this.createStaticValueResult(expression);
319
- }
320
- // Check if the expression contains KubernetesRef objects
321
- if (!containsKubernetesRefs(expression)) {
322
- // No KubernetesRef objects found - return as-is (no conversion needed)
323
- return this.createStaticValueResult(expression);
324
- }
325
- // Expression contains KubernetesRef objects - needs conversion
326
- if (typeof expression === 'string') {
327
- // String expression - parse and convert
328
- return this.analyzeExpression(expression, context);
329
- }
330
- if (typeof expression === 'function') {
331
- // Function expression - analyze function body
332
- return this.analyzeFunction(expression, context);
333
- }
334
- // Direct KubernetesRef object
335
- if (isKubernetesRef(expression)) {
336
- return this.convertKubernetesRefToResult(expression, context);
337
- }
338
- // Template literal or complex expression
339
- if (this.isTemplateLiteral(expression)) {
340
- return this.analyzeTemplateLiteral(expression, context);
341
- }
342
- // Complex object/array containing KubernetesRef objects
343
- return this.analyzeComplexValue(expression, context);
344
- }
345
- catch (error) {
346
- return {
347
- valid: false,
348
- celExpression: null,
349
- dependencies: [],
350
- sourceMap: [],
351
- errors: [new ConversionError(`Failed to analyze expression with refs: ${error instanceof Error ? error.message : String(error)}`, String(expression), 'javascript')],
352
- requiresConversion: false,
353
- warnings: []
354
- };
355
- }
356
- }
357
- /**
358
- * Convert an AST node to CEL expression
359
- */
360
- convertASTNode(node, context) {
361
- switch (node.type) {
362
- case 'BinaryExpression':
363
- return this.convertBinaryExpression(node, context);
364
- case 'MemberExpression':
365
- return this.convertMemberExpression(node, context);
366
- case 'ConditionalExpression':
367
- return this.convertConditionalExpression(node, context);
368
- case 'LogicalExpression':
369
- return this.convertLogicalExpression(node, context);
370
- case 'ChainExpression':
371
- return this.convertOptionalChaining(node, context);
372
- case 'TemplateLiteral':
373
- return this.convertTemplateLiteral(node, context);
374
- case 'Literal':
375
- return this.convertLiteral(node, context);
376
- case 'CallExpression':
377
- return this.convertCallExpression(node, context);
378
- case 'ArrayExpression':
379
- return this.convertArrayExpression(node, context);
380
- case 'Identifier':
381
- return this.convertIdentifier(node, context);
382
- case 'UnaryExpression':
383
- return this.convertUnaryExpression(node, context);
384
- default:
385
- throw new Error(`Unsupported expression type: ${node.type}`);
386
- }
387
- }
388
- /**
389
- * Convert an AST node to CEL expression with source location tracking
390
- */
391
- convertASTNodeWithSourceTracking(node, context, originalExpression, sourceLocation) {
392
- try {
393
- const celExpression = this.convertASTNode(node, context);
394
- // Add source mapping if builder is available
395
- if (context.sourceMap) {
396
- context.sourceMap.addMapping(originalExpression, celExpression.expression, sourceLocation, context.type, {
397
- expressionType: SourceMapUtils.determineExpressionType(node.type),
398
- kubernetesRefs: SourceMapUtils.extractKubernetesRefPaths(celExpression.expression),
399
- dependencies: context.dependencies?.map(dep => `${dep.resourceId}.${dep.fieldPath}`) || [],
400
- conversionNotes: [`Converted ${node.type} at line ${sourceLocation.line}, column ${sourceLocation.column}`]
401
- });
402
- }
403
- return celExpression;
404
- }
405
- catch (_error) {
406
- // Create detailed conversion error with source location
407
- const conversionError = ConversionError.forUnsupportedSyntax(originalExpression, node.type, sourceLocation, [`The ${node.type} syntax is not supported in this context`]);
408
- throw conversionError;
409
- }
410
- }
411
- /**
412
- * Analyze a function for JavaScript expressions containing KubernetesRef objects
413
- */
414
- analyzeFunction(fn, _context) {
415
- try {
416
- // Parse function to AST using unified acorn parser
417
- const ast = parseScript(fn.toString());
418
- // Find return statement
419
- const returnStatement = this.findReturnStatement(ast);
420
- if (!returnStatement) {
421
- throw new Error('Function must have a return statement for analysis');
422
- }
423
- // For now, return a placeholder result
424
- return {
425
- valid: false,
426
- celExpression: {
427
- expression: '/* TODO: Analyze function body */',
428
- _type: undefined
429
- },
430
- dependencies: [],
431
- sourceMap: [],
432
- errors: [],
433
- warnings: [],
434
- requiresConversion: true
435
- };
436
- }
437
- catch (error) {
438
- const errorMessage = error instanceof ParserError
439
- ? error.message
440
- : (error instanceof Error ? error.message : String(error));
441
- return {
442
- valid: false,
443
- celExpression: null,
444
- dependencies: [],
445
- sourceMap: [],
446
- errors: [new ConversionError(errorMessage, fn.toString(), 'function-call')],
447
- warnings: [],
448
- requiresConversion: false
449
- };
450
- }
451
- }
452
- /**
453
- * Convert a single KubernetesRef to a conversion result
454
- */
455
- convertKubernetesRefToResult(ref, context) {
456
- try {
457
- // Use the dedicated KubernetesRef to CEL conversion method
458
- const celExpression = this.convertKubernetesRefToCel(ref, context);
459
- const originalExpression = `${ref.resourceId}.${ref.fieldPath}`;
460
- // Create source location for the KubernetesRef
461
- const sourceLocation = {
462
- line: 1,
463
- column: 1,
464
- length: originalExpression.length
465
- };
466
- // Add source mapping
467
- const sourceMapEntries = [];
468
- if (context.sourceMap) {
469
- context.sourceMap.addMapping(originalExpression, celExpression.expression, sourceLocation, context.type, {
470
- expressionType: 'member-access',
471
- kubernetesRefs: [originalExpression],
472
- dependencies: [`${ref.resourceId}.${ref.fieldPath}`],
473
- conversionNotes: ['Direct KubernetesRef to CEL conversion']
474
- });
475
- sourceMapEntries.push(...context.sourceMap.getEntries());
476
- }
477
- return {
478
- valid: true,
479
- celExpression,
480
- dependencies: [ref],
481
- sourceMap: sourceMapEntries,
482
- errors: [],
483
- warnings: [],
484
- requiresConversion: true
485
- };
486
- }
487
- catch (_error) {
488
- const originalExpression = `${ref.resourceId}.${ref.fieldPath}`;
489
- const sourceLocation = { line: 1, column: 1, length: originalExpression.length };
490
- const conversionError = ConversionError.forKubernetesRefResolution(originalExpression, originalExpression, Object.keys(context.availableReferences || {}), sourceLocation);
491
- return {
492
- valid: false,
493
- celExpression: null,
494
- dependencies: [ref],
495
- sourceMap: [],
496
- errors: [conversionError],
497
- warnings: [],
498
- requiresConversion: true
499
- };
500
- }
501
- }
502
- /**
503
- * Analyze complex values (objects/arrays) that may contain KubernetesRef objects
504
- */
505
- analyzeComplexValue(value, context) {
506
- const dependencies = [];
507
- const errors = [];
508
- try {
509
- // Recursively find all KubernetesRef objects
510
- this.extractKubernetesRefs(value, dependencies);
511
- if (dependencies.length === 0) {
512
- return {
513
- valid: false,
514
- celExpression: null,
515
- dependencies: [],
516
- sourceMap: [],
517
- errors: [],
518
- warnings: [],
519
- requiresConversion: false
520
- };
521
- }
522
- // For complex values, we'll need to analyze the structure
523
- // This is a placeholder implementation - will be expanded in later tasks
524
- const originalExpression = JSON.stringify(value, null, 2);
525
- const celExpression = {
526
- [CEL_EXPRESSION_BRAND]: true,
527
- expression: `/* TODO: Convert complex value with ${dependencies.length} references */`,
528
- _type: undefined
529
- };
530
- // Create source location for the complex value
531
- const sourceLocation = {
532
- line: 1,
533
- column: 1,
534
- length: originalExpression.length
535
- };
536
- // Add source mapping
537
- const sourceMapEntries = [];
538
- if (context.sourceMap) {
539
- context.sourceMap.addMapping(originalExpression, celExpression.expression, sourceLocation, context.type, {
540
- expressionType: 'javascript',
541
- kubernetesRefs: dependencies.map(dep => `${dep.resourceId}.${dep.fieldPath}`),
542
- dependencies: dependencies.map(dep => `${dep.resourceId}.${dep.fieldPath}`),
543
- conversionNotes: [`Complex value with ${dependencies.length} KubernetesRef objects`]
544
- });
545
- sourceMapEntries.push(...context.sourceMap.getEntries());
546
- }
547
- return {
548
- valid: true,
549
- celExpression,
550
- dependencies,
551
- sourceMap: sourceMapEntries,
552
- errors,
553
- warnings: [],
554
- requiresConversion: true
555
- };
556
- }
557
- catch (error) {
558
- const originalExpression = JSON.stringify(value);
559
- const sourceLocation = { line: 1, column: 1, length: originalExpression.length };
560
- const conversionError = ConversionError.forParsingFailure(originalExpression, error instanceof Error ? error.message : String(error), sourceLocation, error instanceof Error ? error : undefined);
561
- errors.push(conversionError);
562
- return {
563
- valid: false,
564
- celExpression: null,
565
- dependencies,
566
- sourceMap: [],
567
- errors,
568
- warnings: [],
569
- requiresConversion: true
570
- };
571
- }
572
- }
573
- /**
574
- * Generate CEL expression from KubernetesRef based on context
575
- * This handles the core KubernetesRef to CEL field path conversion (resourceId.fieldPath)
576
- */
577
- generateCelFromKubernetesRef(ref, context) {
578
- // Validate the KubernetesRef
579
- if (!ref.resourceId || !ref.fieldPath) {
580
- throw new Error(`Invalid KubernetesRef: missing resourceId or fieldPath`);
581
- }
582
- // Generate appropriate CEL expression based on factory type and resource type
583
- if (context.factoryType === 'kro') {
584
- // For Kro factory, generate CEL expressions for runtime evaluation by Kro controller
585
- if (ref.resourceId === '__schema__') {
586
- // Schema references: schema.spec.name, schema.status.ready
587
- return `schema.${ref.fieldPath}`;
588
- }
589
- else {
590
- // Resource references: resources.database.status.podIP
591
- return `resources.${ref.resourceId}.${ref.fieldPath}`;
592
- }
593
- }
594
- else {
595
- // For direct factory, generate CEL expressions that will be resolved at deployment time
596
- // The direct factory will resolve these before deployment
597
- if (ref.resourceId === '__schema__') {
598
- // Schema references are resolved from the schema proxy
599
- return `schema.${ref.fieldPath}`;
600
- }
601
- else {
602
- // Resource references are resolved from the available resources
603
- return `resources.${ref.resourceId}.${ref.fieldPath}`;
604
- }
605
- }
606
- }
607
- /**
608
- * Convert a KubernetesRef directly to a CEL expression
609
- * This is the main method for KubernetesRef to CEL field path conversion
610
- */
611
- convertKubernetesRefToCel(ref, context) {
612
- try {
613
- // Validate KubernetesRef types if type checking is enabled
614
- if (context.strictTypeChecking !== false && context.typeRegistry) {
615
- const validation = this.typeValidator.validateKubernetesRef(ref, context.availableReferences, context.schemaProxy);
616
- if (!validation.valid) {
617
- throw new ConversionError(`KubernetesRef type validation failed: ${validation.errors.map(e => e.message).join(', ')}`, `${ref.resourceId}.${ref.fieldPath}`, 'member-access');
618
- }
619
- }
620
- const expression = this.generateCelFromKubernetesRef(ref, context);
621
- // Track this KubernetesRef as a dependency
622
- if (context.dependencies) {
623
- context.dependencies.push(ref);
624
- }
625
- return {
626
- [CEL_EXPRESSION_BRAND]: true,
627
- expression,
628
- _type: ref._type
629
- };
630
- }
631
- catch (error) {
632
- throw new ConversionError(`Failed to convert KubernetesRef to CEL: ${error instanceof Error ? error.message : String(error)}`, `${ref.resourceId}.${ref.fieldPath}`, 'member-access');
633
- }
634
- }
635
- /**
636
- * Find return statement in AST
637
- */
638
- findReturnStatement(ast) {
639
- let returnStatement = null;
640
- estraverse.traverse(ast, {
641
- enter: (node) => {
642
- if (node.type === 'ReturnStatement') {
643
- returnStatement = node;
644
- return estraverse.VisitorOption.Break;
645
- }
646
- return undefined; // Continue traversal
647
- }
648
- });
649
- return returnStatement;
650
- }
651
- /**
652
- * Check if a value is a template literal expression
653
- * This checks for JavaScript template literal syntax in runtime values
654
- */
655
- isTemplateLiteral(value) {
656
- // Check if it's a string that looks like a template literal
657
- if (typeof value === 'string') {
658
- // Look for template literal patterns like `text ${expression} more text`
659
- return value.includes('${') && value.includes('}');
660
- }
661
- // Check if it's an object that represents a template literal structure
662
- if (value && typeof value === 'object' && value.type === 'TemplateLiteral') {
663
- return true;
664
- }
665
- return false;
666
- }
667
- /**
668
- * Analyze template literal expressions containing KubernetesRef objects
669
- * This handles runtime template literal values that contain KubernetesRef interpolations
670
- */
671
- analyzeTemplateLiteral(expression, context) {
672
- try {
673
- const dependencies = extractResourceReferences(expression);
674
- const originalExpression = String(expression);
675
- let celExpression;
676
- if (typeof expression === 'string') {
677
- // Handle string-based template literals
678
- // For now, preserve the template literal structure
679
- celExpression = {
680
- [CEL_EXPRESSION_BRAND]: true,
681
- expression: expression, // Keep the ${} syntax for CEL
682
- _type: 'string'
683
- };
684
- }
685
- else {
686
- // Handle structured template literal objects
687
- // This would be used when we have parsed template literal AST nodes
688
- celExpression = {
689
- [CEL_EXPRESSION_BRAND]: true,
690
- expression: '/* Complex template literal */',
691
- _type: 'string'
692
- };
693
- }
694
- // Create source location for the template literal
695
- const sourceLocation = {
696
- line: 1,
697
- column: 1,
698
- length: originalExpression.length
699
- };
700
- // Add source mapping
701
- const sourceMapEntries = [];
702
- if (context.sourceMap) {
703
- context.sourceMap.addMapping(originalExpression, celExpression.expression, sourceLocation, context.type, {
704
- expressionType: 'template-literal',
705
- kubernetesRefs: dependencies.map(dep => `${dep.resourceId}.${dep.fieldPath}`),
706
- dependencies: dependencies.map(dep => `${dep.resourceId}.${dep.fieldPath}`),
707
- conversionNotes: ['Template literal with KubernetesRef interpolations']
708
- });
709
- sourceMapEntries.push(...context.sourceMap.getEntries());
710
- }
711
- return {
712
- valid: true,
713
- celExpression,
714
- dependencies,
715
- sourceMap: sourceMapEntries,
716
- errors: [],
717
- warnings: [],
718
- requiresConversion: true
719
- };
720
- }
721
- catch (error) {
722
- const originalExpression = String(expression);
723
- const sourceLocation = { line: 1, column: 1, length: originalExpression.length };
724
- const conversionError = ConversionError.forTemplateLiteral(originalExpression, [originalExpression], 0, sourceLocation, error instanceof Error ? error : undefined);
725
- return {
726
- valid: false,
727
- celExpression: null,
728
- dependencies: [],
729
- sourceMap: [],
730
- errors: [conversionError],
731
- warnings: [],
732
- requiresConversion: true
733
- };
734
- }
735
- }
736
- /**
737
- * Extract all KubernetesRef objects from a complex value
738
- */
739
- extractKubernetesRefs(value, refs) {
740
- const extractedRefs = extractResourceReferences(value);
741
- refs.push(...extractedRefs);
742
- }
743
- /**
744
- * Handle special cases for expressions that can't be parsed normally
745
- */
746
- handleSpecialCases(expression, context) {
747
- // Handle expressions with both optional chaining and nullish coalescing
748
- if (expression.includes('?.') && expression.includes('??')) {
749
- return this.handleMixedOptionalAndNullishExpression(expression, context);
750
- }
751
- // Handle optional chaining expressions
752
- if (expression.includes('?.')) {
753
- return this.handleOptionalChainingExpression(expression, context);
754
- }
755
- // Handle nullish coalescing expressions
756
- if (expression.includes('??')) {
757
- return this.handleNullishCoalescingExpression(expression, context);
758
- }
759
- // Handle simple resource references that might not parse as valid JavaScript
760
- if (expression.match(/^[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)*$/)) {
761
- // This looks like a simple property access path
762
- try {
763
- // Initialize dependencies array if not provided
764
- if (!context.dependencies) {
765
- context.dependencies = [];
766
- }
767
- // Extract dependencies from the expression
768
- this.extractDependenciesFromExpression(expression, context);
769
- const celExpression = {
770
- [CEL_EXPRESSION_BRAND]: true,
771
- expression: expression,
772
- _type: undefined
773
- };
774
- const sourceLocation = { line: 1, column: 1, length: expression.length };
775
- const sourceMapEntries = [];
776
- if (context.sourceMap) {
777
- context.sourceMap.addMapping(expression, expression, sourceLocation, context.type, {
778
- expressionType: 'member-access',
779
- kubernetesRefs: this.extractResourceReferencesFromExpression(expression),
780
- dependencies: context.dependencies?.map(dep => `${dep.resourceId}.${dep.fieldPath}`) || [],
781
- conversionNotes: ['Simple property access path']
782
- });
783
- sourceMapEntries.push(...context.sourceMap.getEntries());
784
- }
785
- // Perform resource validation if enabled
786
- let resourceValidation;
787
- if (context.validateResourceReferences !== false && context.dependencies && context.dependencies.length > 0) {
788
- resourceValidation = this.validateResourceReferences(context.dependencies, context.availableReferences, context.schemaProxy, context.validationContext);
789
- }
790
- // Extract errors from resource validation
791
- const errors = [];
792
- if (resourceValidation) {
793
- for (const validation of resourceValidation) {
794
- for (const error of validation.errors) {
795
- errors.push(new ConversionError(error.message, expression, 'member-access'));
796
- }
797
- }
798
- }
799
- return {
800
- valid: errors.length === 0,
801
- celExpression,
802
- dependencies: context.dependencies || [],
803
- sourceMap: sourceMapEntries,
804
- errors,
805
- warnings: [],
806
- requiresConversion: true,
807
- resourceValidation
808
- };
809
- }
810
- catch (_error) {
811
- // Fall through to return null
812
- }
813
- }
814
- return null;
815
- }
816
- /**
817
- * Handle optional chaining expressions
818
- * Note: With acorn's native ES2022 support, optional chaining is parsed directly.
819
- * This method is kept for backward compatibility and special case handling.
820
- */
821
- handleOptionalChainingExpression(expression, context) {
822
- try {
823
- // Validate that the expression is syntactically valid JavaScript
824
- // Acorn natively supports optional chaining (ES2020+)
825
- try {
826
- parseExpression(expression);
827
- }
828
- catch (syntaxError) {
829
- const errorMessage = syntaxError instanceof ParserError
830
- ? syntaxError.message
831
- : (syntaxError instanceof Error ? syntaxError.message : String(syntaxError));
832
- throw new ConversionError(`Invalid JavaScript syntax in optional chaining expression: ${errorMessage}`, expression, 'optional-chaining');
833
- }
834
- // Convert optional chaining to CEL-compatible syntax
835
- // deployment?.status?.readyReplicas -> deployment?.status?.readyReplicas
836
- const celExpression = {
837
- [CEL_EXPRESSION_BRAND]: true,
838
- expression: expression, // Keep the ?. syntax as CEL supports it
839
- _type: undefined
840
- };
841
- const sourceLocation = { line: 1, column: 1, length: expression.length };
842
- const sourceMapEntries = [];
843
- // Extract dependencies from the optional chaining expression
844
- const dependencies = this.extractDependenciesFromExpressionString(expression, context);
845
- if (context.sourceMap) {
846
- context.sourceMap.addMapping(expression, expression, sourceLocation, context.type, {
847
- expressionType: 'optional-chaining',
848
- kubernetesRefs: this.extractResourceReferencesFromExpression(expression),
849
- dependencies: dependencies.map(dep => `${dep.resourceId}.${dep.fieldPath}`),
850
- conversionNotes: ['Optional chaining expression']
851
- });
852
- sourceMapEntries.push(...context.sourceMap.getEntries());
853
- }
854
- return {
855
- valid: true,
856
- celExpression,
857
- dependencies,
858
- sourceMap: sourceMapEntries,
859
- errors: [],
860
- warnings: [],
861
- requiresConversion: true
862
- };
863
- }
864
- catch (error) {
865
- return {
866
- valid: false,
867
- celExpression: null,
868
- dependencies: [],
869
- sourceMap: [],
870
- errors: [new ConversionError(`Failed to handle optional chaining: ${error instanceof Error ? error.message : String(error)}`, expression, 'optional-chaining')],
871
- warnings: [],
872
- requiresConversion: true
873
- };
874
- }
875
- }
876
- /**
877
- * Handle expressions with both optional chaining and nullish coalescing
878
- */
879
- handleMixedOptionalAndNullishExpression(expression, context) {
880
- try {
881
- // For mixed expressions, we'll convert them to a CEL expression that handles both
882
- // Optional chaining and nullish coalescing together
883
- // Example: deployment.status?.readyReplicas ?? deployment.spec?.replicas ?? 1
884
- // Becomes: deployment.status?.readyReplicas != null ? deployment.status?.readyReplicas : (deployment.spec?.replicas != null ? deployment.spec?.replicas : 1)
885
- // Split by nullish coalescing operator
886
- const parts = expression.split('??').map(part => part.trim());
887
- if (parts.length < 2) {
888
- throw new Error('Invalid mixed expression');
889
- }
890
- // Build nested conditional expression from right to left
891
- let celExpression = parts[parts.length - 1] || ''; // Start with the last part (fallback)
892
- for (let i = parts.length - 2; i >= 0; i--) {
893
- const part = parts[i];
894
- celExpression = `${part} != null ? ${part} : ${celExpression}`;
895
- }
896
- const result = {
897
- [CEL_EXPRESSION_BRAND]: true,
898
- expression: celExpression,
899
- _type: undefined
900
- };
901
- // Extract dependencies from the mixed expression
902
- const dependencies = this.extractDependenciesFromExpressionString(expression, context);
903
- const sourceLocation = { line: 1, column: 1, length: expression.length };
904
- const sourceMapEntries = [];
905
- if (context.sourceMap) {
906
- context.sourceMap.addMapping(expression, result.expression, sourceLocation, context.type, {
907
- expressionType: 'optional-chaining',
908
- kubernetesRefs: this.extractResourceReferencesFromExpression(expression),
909
- dependencies: dependencies.map(dep => `${dep.resourceId}.${dep.fieldPath}`),
910
- conversionNotes: ['Mixed optional chaining and nullish coalescing converted to nested conditionals']
911
- });
912
- sourceMapEntries.push(...context.sourceMap.getEntries());
913
- }
914
- return {
915
- valid: true,
916
- celExpression: result,
917
- dependencies,
918
- sourceMap: sourceMapEntries,
919
- errors: [],
920
- warnings: [],
921
- requiresConversion: true
922
- };
923
- }
924
- catch (error) {
925
- return {
926
- valid: false,
927
- celExpression: null,
928
- dependencies: [],
929
- sourceMap: [],
930
- errors: [new ConversionError(`Failed to handle mixed optional chaining and nullish coalescing: ${error instanceof Error ? error.message : String(error)}`, expression, 'optional-chaining')],
931
- warnings: [],
932
- requiresConversion: true
933
- };
934
- }
935
- }
936
- /**
937
- * Handle nullish coalescing expressions
938
- * Note: With acorn's native ES2022 support, nullish coalescing is parsed directly.
939
- * This method converts ?? to CEL-compatible conditional syntax.
940
- */
941
- handleNullishCoalescingExpression(expression, context) {
942
- try {
943
- // Convert nullish coalescing to CEL-compatible syntax
944
- // deployment.status.readyReplicas ?? 0 -> deployment.status.readyReplicas != null ? deployment.status.readyReplicas : 0
945
- const parts = expression.split('??').map(part => part.trim());
946
- if (parts.length !== 2) {
947
- throw new Error('Invalid nullish coalescing expression');
948
- }
949
- const [left, right] = parts;
950
- const celExpression = {
951
- [CEL_EXPRESSION_BRAND]: true,
952
- expression: `${left} != null ? ${left} : ${right}`,
953
- _type: undefined
954
- };
955
- const sourceLocation = { line: 1, column: 1, length: expression.length };
956
- const sourceMapEntries = [];
957
- if (context.sourceMap) {
958
- context.sourceMap.addMapping(expression, celExpression.expression, sourceLocation, context.type, {
959
- expressionType: 'nullish-coalescing',
960
- kubernetesRefs: this.extractResourceReferencesFromExpression(expression),
961
- dependencies: this.extractResourceReferencesFromExpression(expression),
962
- conversionNotes: ['Nullish coalescing converted to conditional']
963
- });
964
- sourceMapEntries.push(...context.sourceMap.getEntries());
965
- }
966
- // Extract dependencies from the nullish coalescing expression
967
- const dependencies = this.extractDependenciesFromExpressionString(expression, context);
968
- return {
969
- valid: true,
970
- celExpression,
971
- dependencies,
972
- sourceMap: sourceMapEntries,
973
- errors: [],
974
- warnings: [],
975
- requiresConversion: true
976
- };
977
- }
978
- catch (error) {
979
- return {
980
- valid: false,
981
- celExpression: null,
982
- dependencies: [],
983
- sourceMap: [],
984
- errors: [new ConversionError(`Failed to handle nullish coalescing: ${error instanceof Error ? error.message : String(error)}`, expression, 'nullish-coalescing')],
985
- warnings: [],
986
- requiresConversion: true
987
- };
988
- }
989
- }
990
- /**
991
- * Extract resource references from expression string
992
- */
993
- extractResourceReferencesFromExpression(expression) {
994
- const refs = [];
995
- // Look for patterns like deployment.status.readyReplicas or service?.status?.loadBalancer
996
- const resourcePattern = /([a-zA-Z_][a-zA-Z0-9_]*)\??\.([a-zA-Z_][a-zA-Z0-9_]*(?:\??\.?[a-zA-Z_][a-zA-Z0-9_]*)*)/g;
997
- let match = resourcePattern.exec(expression);
998
- while (match !== null) {
999
- refs.push(match[0].replace(/\?/g, '')); // Remove optional chaining operators for reference tracking
1000
- match = resourcePattern.exec(expression);
1001
- }
1002
- return refs;
1003
- }
1004
- /**
1005
- * Check if an expression is a resource reference
1006
- */
1007
- isResourceReference(expression) {
1008
- // Check for explicit resource/schema prefixes
1009
- if (expression.includes('resources.') || expression.includes('schema.')) {
1010
- return true;
1011
- }
1012
- // Check if it starts with a known resource name (for direct references like deployment.status.field)
1013
- const parts = expression.split('.');
1014
- if (parts.length >= 2) {
1015
- const resourceName = parts[0];
1016
- // This is a heuristic - if it looks like a resource reference pattern
1017
- return !!(resourceName && /^[a-zA-Z][a-zA-Z0-9-]*$/.test(resourceName) &&
1018
- (parts[1] === 'status' || parts[1] === 'spec' || parts[1] === 'metadata'));
1019
- }
1020
- return false;
1021
- }
1022
- /**
1023
- * Setup type registry from analysis context
1024
- */
1025
- setupTypeRegistry(context) {
1026
- const registry = new TypeRegistry();
1027
- // Register resource types
1028
- for (const [resourceId, resource] of Object.entries(context.availableReferences)) {
1029
- const resourceType = TypeSafetyUtils.fromEnhancedType(resource);
1030
- registry.registerResourceType(resourceId, resourceType);
1031
- }
1032
- // Register basic types
1033
- registry.registerType('string', { typeName: 'string', optional: false, nullable: false });
1034
- registry.registerType('number', { typeName: 'number', optional: false, nullable: false });
1035
- registry.registerType('boolean', { typeName: 'boolean', optional: false, nullable: false });
1036
- registry.registerType('null', { typeName: 'null', optional: false, nullable: true });
1037
- registry.registerType('undefined', { typeName: 'undefined', optional: true, nullable: false });
1038
- return registry;
1039
- }
1040
- /**
1041
- * Validate expression compatibility with target context
1042
- */
1043
- validateExpressionCompatibility(expression, context) {
1044
- const registry = context.typeRegistry || this.setupTypeRegistry(context);
1045
- const availableTypes = registry.getAvailableTypes();
1046
- return this.typeValidator.validateExpression(expression, availableTypes, context.expectedType);
1047
- }
1048
- /**
1049
- * Infer the type of a CEL expression
1050
- */
1051
- inferCelExpressionType(celExpression, context) {
1052
- const inferenceContext = {
1053
- availableResources: context.availableReferences,
1054
- ...(context.schemaProxy && { schemaProxy: context.schemaProxy }),
1055
- factoryType: context.factoryType
1056
- };
1057
- return this.typeInferenceEngine.inferType(celExpression, inferenceContext);
1058
- }
1059
- /**
1060
- * Infer types for multiple CEL expressions
1061
- */
1062
- inferCelExpressionTypes(celExpressions, context) {
1063
- const inferenceContext = {
1064
- availableResources: context.availableReferences,
1065
- ...(context.schemaProxy && { schemaProxy: context.schemaProxy }),
1066
- factoryType: context.factoryType
1067
- };
1068
- return this.typeInferenceEngine.inferTypes(celExpressions, inferenceContext);
1069
- }
1070
- /**
1071
- * Validate type compatibility between JavaScript and CEL expressions
1072
- */
1073
- validateJavaScriptToCelTypeCompatibility(jsExpression, celExpression, context) {
1074
- // Get JavaScript expression type
1075
- const jsValidation = this.validateExpressionCompatibility(jsExpression, context);
1076
- if (!jsValidation.resultType) {
1077
- return jsValidation;
1078
- }
1079
- // Get CEL expression type
1080
- const celInference = this.inferCelExpressionType(celExpression, context);
1081
- if (!celInference.success) {
1082
- return {
1083
- valid: false,
1084
- errors: celInference.errors.map(e => ({
1085
- message: e.message,
1086
- expression: e.celExpression,
1087
- expectedType: { typeName: 'unknown', optional: false, nullable: false },
1088
- actualType: { typeName: 'unknown', optional: false, nullable: false }
1089
- })),
1090
- warnings: [],
1091
- suggestions: []
1092
- };
1093
- }
1094
- // Validate compatibility
1095
- return this.typeInferenceEngine.validateTypeCompatibility(jsValidation.resultType, celInference.resultType);
1096
- }
1097
- /**
1098
- * Validate resource references in KubernetesRef objects
1099
- */
1100
- validateResourceReferences(refs, availableResources, schemaProxy, validationContext) {
1101
- return this.resourceValidator.validateKubernetesRefs(refs, availableResources, schemaProxy, validationContext);
1102
- }
1103
- /**
1104
- * Validate a single resource reference
1105
- */
1106
- validateResourceReference(ref, availableResources, schemaProxy, validationContext) {
1107
- return this.resourceValidator.validateKubernetesRef(ref, availableResources, schemaProxy, validationContext);
1108
- }
1109
- /**
1110
- * Validate a reference chain for type safety and circular dependencies
1111
- */
1112
- validateReferenceChain(refs, availableResources, schemaProxy) {
1113
- return this.resourceValidator.validateReferenceChain(refs, availableResources, schemaProxy);
1114
- }
1115
- /**
1116
- * Get comprehensive validation report for an expression
1117
- */
1118
- getValidationReport(expression, context) {
1119
- const conversionResult = this.analyzeExpression(expression, context);
1120
- return {
1121
- expression,
1122
- conversionResult,
1123
- ...(conversionResult.typeValidation && { typeValidation: conversionResult.typeValidation }),
1124
- ...(conversionResult.resourceValidation && { resourceValidation: conversionResult.resourceValidation }),
1125
- summary: this.createValidationSummary(conversionResult)
1126
- };
1127
- }
1128
- /**
1129
- * Perform compile-time type checking
1130
- */
1131
- performCompileTimeValidation(expression, context) {
1132
- return this.compileTimeChecker.validateExpressionCompatibility(expression, context);
1133
- }
1134
- /**
1135
- * Validate compile-time compatibility for multiple expressions
1136
- */
1137
- performCompileTimeValidationBatch(expressions, context) {
1138
- return this.compileTimeChecker.validateExpressionsCompatibility(expressions, context);
1139
- }
1140
- /**
1141
- * Validate KubernetesRef compile-time compatibility
1142
- */
1143
- validateKubernetesRefCompileTimeCompatibility(ref, context) {
1144
- if (!context.compileTimeContext) {
1145
- throw new Error('Compile-time context required for KubernetesRef validation');
1146
- }
1147
- const usageContext = {
1148
- availableResources: context.availableReferences,
1149
- ...(context.schemaProxy && { schemaProxy: context.schemaProxy }),
1150
- usageType: 'property-access',
1151
- ...(context.expectedType && {
1152
- expectedResultType: {
1153
- typeName: context.expectedType.typeName,
1154
- isUnion: false,
1155
- isGeneric: false,
1156
- optional: context.expectedType.optional,
1157
- nullable: context.expectedType.nullable,
1158
- undefinable: context.expectedType.optional
1159
- }
1160
- })
1161
- };
1162
- return this.compileTimeChecker.validateKubernetesRefCompatibility(ref, usageContext, context.compileTimeContext);
1163
- }
1164
- /**
1165
- * Get comprehensive compile-time validation report
1166
- */
1167
- getCompileTimeValidationReport(expression, context) {
1168
- if (!context.compileTimeContext) {
1169
- return null;
1170
- }
1171
- return this.performCompileTimeValidation(expression, context.compileTimeContext);
1172
- }
1173
- /**
1174
- * Create a validation summary from conversion results
1175
- */
1176
- createValidationSummary(result) {
1177
- const totalErrors = result.errors.length +
1178
- (result.typeValidation?.errors.length || 0) +
1179
- (result.resourceValidation?.reduce((sum, rv) => sum + rv.errors.length, 0) || 0) +
1180
- (result.compileTimeValidation?.errors.length || 0);
1181
- const totalWarnings = (result.typeValidation?.warnings.length || 0) +
1182
- (result.resourceValidation?.reduce((sum, rv) => sum + rv.warnings.length, 0) || 0) +
1183
- (result.compileTimeValidation?.warnings.length || 0);
1184
- return {
1185
- valid: result.celExpression !== null && totalErrors === 0,
1186
- totalErrors,
1187
- totalWarnings,
1188
- requiresConversion: result.requiresConversion,
1189
- hasTypeIssues: (result.typeValidation?.errors.length || 0) > 0,
1190
- hasResourceIssues: (result.resourceValidation?.some(rv => !rv.valid)) || false,
1191
- hasCompileTimeIssues: (result.compileTimeValidation && !result.compileTimeValidation.valid) || false,
1192
- confidence: this.calculateOverallConfidence(result)
1193
- };
1194
- }
1195
- /**
1196
- * Extract dependencies from JavaScript expression string and return them
1197
- */
1198
- extractDependenciesFromExpressionString(expression, context) {
1199
- const dependencies = [];
1200
- // Look for direct resource references (deployment.status.field)
1201
- if (context.availableReferences) {
1202
- for (const [resourceKey, _resource] of Object.entries(context.availableReferences)) {
1203
- const resourcePattern = new RegExp(`\\b${resourceKey}\\.([a-zA-Z0-9_.?\\[\\]]+)`, 'g');
1204
- const matches = expression.match(resourcePattern);
1205
- if (matches) {
1206
- for (const match of matches) {
1207
- const fieldPath = match.substring(resourceKey.length + 1)
1208
- .replace(/\?\./g, '.') // Remove optional chaining
1209
- .replace(/\?\[/g, '['); // Remove optional array access
1210
- const ref = {
1211
- [KUBERNETES_REF_BRAND]: true,
1212
- resourceId: resourceKey,
1213
- fieldPath,
1214
- _type: this.inferTypeFromFieldPath(fieldPath)
1215
- };
1216
- // Only add if not already present
1217
- if (!dependencies.some(dep => dep.resourceId === resourceKey && dep.fieldPath === fieldPath)) {
1218
- dependencies.push(ref);
1219
- }
1220
- }
1221
- }
1222
- }
1223
- }
1224
- // Look for schema references (schema.spec.field)
1225
- const schemaPattern = /\bschema\.[a-zA-Z0-9_.?[\]?]+/g;
1226
- const schemaMatches = expression.match(schemaPattern);
1227
- if (schemaMatches) {
1228
- for (const match of schemaMatches) {
1229
- const fieldPath = match.replace('schema.', '')
1230
- .replace(/\?\./g, '.') // Remove optional chaining
1231
- .replace(/\?\[/g, '['); // Remove optional array access
1232
- const ref = {
1233
- [KUBERNETES_REF_BRAND]: true,
1234
- resourceId: '__schema__',
1235
- fieldPath,
1236
- _type: this.inferTypeFromFieldPath(fieldPath)
1237
- };
1238
- // Only add if not already present
1239
- if (!dependencies.some(dep => dep.resourceId === '__schema__' && dep.fieldPath === fieldPath)) {
1240
- dependencies.push(ref);
1241
- }
1242
- }
1243
- }
1244
- return dependencies;
1245
- }
1246
- /**
1247
- * Extract dependencies from JavaScript expression
1248
- */
1249
- extractDependenciesFromExpression(expression, context) {
1250
- if (!context.dependencies) {
1251
- context.dependencies = [];
1252
- }
1253
- // Look for resource references (resources.name.field)
1254
- const resourceMatches = expression.match(/resources\.(\w+)\.([a-zA-Z0-9_.]+)/g);
1255
- if (resourceMatches) {
1256
- for (const match of resourceMatches) {
1257
- const parts = match.split('.');
1258
- if (parts.length >= 3) {
1259
- const resourceId = parts[1];
1260
- const fieldPath = parts.slice(2).join('.');
1261
- const ref = {
1262
- [KUBERNETES_REF_BRAND]: true,
1263
- resourceId,
1264
- fieldPath,
1265
- _type: 'unknown'
1266
- };
1267
- // Only add if not already present
1268
- if (!context.dependencies.some(dep => dep.resourceId === resourceId && dep.fieldPath === fieldPath)) {
1269
- context.dependencies.push(ref);
1270
- }
1271
- }
1272
- }
1273
- }
1274
- // Look for schema references (schema.spec.field)
1275
- const schemaMatches = expression.match(/schema\.([a-zA-Z0-9_.]+)/g);
1276
- if (schemaMatches) {
1277
- for (const match of schemaMatches) {
1278
- const fieldPath = match.replace('schema.', '');
1279
- const ref = {
1280
- [KUBERNETES_REF_BRAND]: true,
1281
- resourceId: '__schema__',
1282
- fieldPath,
1283
- _type: 'unknown'
1284
- };
1285
- // Only add if not already present
1286
- if (!context.dependencies.some(dep => dep.resourceId === '__schema__' && dep.fieldPath === fieldPath)) {
1287
- context.dependencies.push(ref);
1288
- }
1289
- }
1290
- }
1291
- // Look for direct resource references with various patterns
1292
- // This handles patterns like:
1293
- // - "deployment.status.readyReplicas"
1294
- // - "deployment.status['readyReplicas']"
1295
- // - "deployment.status?.readyReplicas"
1296
- // - "deployment.status.conditions[0].type"
1297
- const directResourcePatterns = [
1298
- // Standard dot notation: deployment.status.readyReplicas
1299
- /\b([a-zA-Z_][a-zA-Z0-9_]*)\.(status|spec|metadata)\.([a-zA-Z0-9_.[\]]+)/g,
1300
- // Computed property access: deployment.status["readyReplicas"]
1301
- /\b([a-zA-Z_][a-zA-Z0-9_]*)\.(status|spec|metadata)\["([^"]+)"\]/g,
1302
- // Computed property access with single quotes: deployment.status['readyReplicas']
1303
- /\b([a-zA-Z_][a-zA-Z0-9_]*)\.(status|spec|metadata)\['([^']+)'\]/g,
1304
- // Optional chaining: deployment.status?.readyReplicas
1305
- /\b([a-zA-Z_][a-zA-Z0-9_]*)\.(status|spec|metadata)\?\?\.([a-zA-Z0-9_.[\]?]+)/g,
1306
- // Mixed patterns: deployment.status.conditions[0].type
1307
- /\b([a-zA-Z_][a-zA-Z0-9_]*)\.(status|spec|metadata)\.([a-zA-Z0-9_.[\]?]+)/g
1308
- ];
1309
- for (const pattern of directResourcePatterns) {
1310
- let match;
1311
- pattern.lastIndex = 0; // Reset regex state
1312
- match = pattern.exec(expression);
1313
- while (match !== null) {
1314
- const fullMatch = match[0];
1315
- const resourceId = match[1];
1316
- const baseField = match[2]; // status, spec, or metadata
1317
- const remainingPath = match[3];
1318
- let fieldPath = baseField;
1319
- // Handle different patterns
1320
- if (remainingPath) {
1321
- // For computed property access patterns, the remainingPath is the property name
1322
- if (pattern.source.includes('\\["') || pattern.source.includes("\\'")) {
1323
- fieldPath = `${baseField}.${remainingPath}`;
1324
- }
1325
- else {
1326
- fieldPath = `${baseField}.${remainingPath}`;
1327
- }
1328
- }
1329
- else {
1330
- // For computed property access, we need to extract the property name differently
1331
- const computedMatch = fullMatch.match(/\.(status|spec|metadata)\["([^"]+)"\]/) ||
1332
- fullMatch.match(/\.(status|spec|metadata)\['([^']+)'\]/);
1333
- if (computedMatch) {
1334
- fieldPath = `${computedMatch[1]}.${computedMatch[2]}`;
1335
- }
1336
- }
1337
- // Clean up field path
1338
- fieldPath = fieldPath?.replace(/\?\?/g, '').replace(/\?/g, '') || '';
1339
- fieldPath = fieldPath.replace(/\["([^"]+)"\]/g, '.$1');
1340
- fieldPath = fieldPath.replace(/\['([^']+)'\]/g, '.$1');
1341
- fieldPath = fieldPath.replace(/\[(\d+)\]/g, '[$1]'); // Keep array indices
1342
- // Check if this resource exists in available references or add it anyway
1343
- const shouldAdd = !context.availableReferences ||
1344
- (resourceId ? context.availableReferences[resourceId] : null) ||
1345
- true; // Add all for now, let validation handle it later
1346
- if (shouldAdd) {
1347
- const ref = {
1348
- [KUBERNETES_REF_BRAND]: true,
1349
- resourceId,
1350
- fieldPath,
1351
- _type: 'unknown'
1352
- };
1353
- // Only add if not already present
1354
- if (!context.dependencies.some(dep => dep.resourceId === resourceId && dep.fieldPath === fieldPath)) {
1355
- context.dependencies.push(ref);
1356
- }
1357
- }
1358
- // Get next match
1359
- match = pattern.exec(expression);
1360
- }
1361
- }
1362
- // Look for template literal interpolations
1363
- // This handles patterns like: `http://${service.status.loadBalancer.ingress[0].ip}`
1364
- const templateLiteralMatches = expression.match(/\$\{([^}]+)\}/g);
1365
- if (templateLiteralMatches) {
1366
- for (const match of templateLiteralMatches) {
1367
- const innerExpression = match.slice(2, -1); // Remove ${ and }
1368
- // Recursively extract dependencies from the inner expression
1369
- this.extractDependenciesFromExpression(innerExpression, context);
1370
- }
1371
- }
1372
- }
1373
- /**
1374
- * Calculate overall confidence score
1375
- */
1376
- calculateOverallConfidence(result) {
1377
- let confidence = 1.0;
1378
- // Reduce confidence for errors
1379
- if (result.errors.length > 0) {
1380
- confidence *= 0.1;
1381
- }
1382
- // Reduce confidence for type validation issues
1383
- if (result.typeValidation && !result.typeValidation.valid) {
1384
- confidence *= 0.5;
1385
- }
1386
- // Reduce confidence for resource validation issues
1387
- if (result.resourceValidation) {
1388
- const invalidResources = result.resourceValidation.filter(rv => !rv.valid).length;
1389
- if (invalidResources > 0) {
1390
- confidence *= Math.max(0.1, 1 - (invalidResources * 0.3));
1391
- }
1392
- }
1393
- // Reduce confidence for compile-time validation issues
1394
- if (result.compileTimeValidation && !result.compileTimeValidation.valid) {
1395
- confidence *= 0.3;
1396
- }
1397
- return Math.max(0, Math.min(1, confidence));
1398
- }
1399
- /**
1400
- * Convert binary expressions (>, <, ==, !=, &&, ||) with KubernetesRef operand handling
1401
- */
1402
- convertBinaryExpression(node, context) {
1403
- // Convert operands with proper precedence handling
1404
- const left = this.handleComplexExpression(node.left, context, node.operator);
1405
- const right = this.handleComplexExpression(node.right, context, node.operator);
1406
- // Map JavaScript operators to CEL operators
1407
- const operator = this.mapOperatorToCel(node.operator);
1408
- // Generate CEL expression with proper precedence
1409
- const leftExpr = this.addParenthesesIfNeeded(left.expression, node.operator, true);
1410
- const rightExpr = this.addParenthesesIfNeeded(right.expression, node.operator, false);
1411
- const expression = `${leftExpr} ${operator} ${rightExpr}`;
1412
- return {
1413
- [CEL_EXPRESSION_BRAND]: true,
1414
- expression,
1415
- _type: undefined
1416
- };
1417
- }
1418
- /**
1419
- * Convert member expressions (object.property, object['property']) and array access (array[0], array[index])
1420
- */
1421
- convertMemberExpression(node, context) {
1422
- // Handle optional member expressions (obj?.prop)
1423
- if (node.optional) {
1424
- return this.convertOptionalMemberExpression(node, context);
1425
- }
1426
- // Handle computed member access (array[index] or object['key'])
1427
- if (node.computed) {
1428
- return this.convertArrayAccess(node, context);
1429
- }
1430
- // Check if the object is a complex expression (like a method call result)
1431
- if (node.object.type === 'CallExpression' || node.object.type === 'MemberExpression' && this.isComplexExpression(node.object)) {
1432
- // Convert the object expression first
1433
- const objectExpr = this.convertASTNode(node.object, context);
1434
- const propertyName = node.property.name;
1435
- // Create a member access on the result of the complex expression
1436
- const expression = `${objectExpr.expression}.${propertyName}`;
1437
- return {
1438
- [CEL_EXPRESSION_BRAND]: true,
1439
- expression,
1440
- _type: undefined
1441
- };
1442
- }
1443
- // Try to extract the full member path for simple cases
1444
- let path;
1445
- try {
1446
- path = this.extractMemberPath(node);
1447
- }
1448
- catch (_error) {
1449
- // If path extraction fails, fall back to converting the object and property separately
1450
- const objectExpr = this.convertASTNode(node.object, context);
1451
- const propertyName = node.property.name;
1452
- const expression = `${objectExpr.expression}.${propertyName}`;
1453
- return {
1454
- [CEL_EXPRESSION_BRAND]: true,
1455
- expression,
1456
- _type: undefined
1457
- };
1458
- }
1459
- // Check if this is a resource reference
1460
- if (context.availableReferences) {
1461
- for (const [resourceKey, resource] of Object.entries(context.availableReferences)) {
1462
- if (path.startsWith(`resources.${resourceKey}.`) || path.startsWith(`${resourceKey}.`) || path === resourceKey) {
1463
- let fieldPath;
1464
- if (path === resourceKey) {
1465
- // Direct resource reference
1466
- fieldPath = '';
1467
- }
1468
- else if (path.startsWith('resources.')) {
1469
- fieldPath = path.substring(`resources.${resourceKey}.`.length);
1470
- }
1471
- else {
1472
- fieldPath = path.substring(`${resourceKey}.`.length);
1473
- }
1474
- return this.getResourceFieldReference(resource, resourceKey, fieldPath, context);
1475
- }
1476
- }
1477
- }
1478
- // Handle schema references
1479
- if (path.startsWith('schema.')) {
1480
- return this.getSchemaFieldReference(path, context);
1481
- }
1482
- // Handle unknown resources - this should be an error in strict mode
1483
- const parts = path.split('.');
1484
- if (parts.length >= 2) {
1485
- let resourceName;
1486
- let fieldPath;
1487
- // Check if this is a resources.* prefixed expression
1488
- if (parts[0] === 'resources' && parts.length >= 3) {
1489
- resourceName = parts[1] || ''; // The actual resource name after "resources."
1490
- fieldPath = parts.slice(2).join('.'); // The field path after the resource name
1491
- }
1492
- else {
1493
- resourceName = parts[0] || '';
1494
- fieldPath = parts.slice(1).join('.');
1495
- }
1496
- // For strict validation contexts, check if resource should be available
1497
- // For now, we'll be lenient and allow unknown resources with warnings
1498
- // Create a placeholder KubernetesRef for the unknown resource
1499
- const unknownRef = {
1500
- [KUBERNETES_REF_BRAND]: true,
1501
- resourceId: resourceName,
1502
- fieldPath: fieldPath,
1503
- _type: this.inferTypeFromFieldPath(fieldPath)
1504
- };
1505
- // Add to dependencies
1506
- if (context.dependencies) {
1507
- context.dependencies.push(unknownRef);
1508
- }
1509
- // Generate CEL expression for unknown resource
1510
- const expression = `resources.${resourceName}.${fieldPath}`;
1511
- return {
1512
- [CEL_EXPRESSION_BRAND]: true,
1513
- expression,
1514
- _type: undefined
1515
- };
1516
- }
1517
- throw new Error(`Unable to resolve member expression: ${path}`);
1518
- }
1519
- /**
1520
- * Convert conditional expressions (condition ? true : false)
1521
- * Handles ternary operators with proper CEL syntax and KubernetesRef support
1522
- */
1523
- convertConditionalExpression(node, context) {
1524
- const test = this.handleComplexExpression(node.test, context, '?');
1525
- const consequent = this.handleComplexExpression(node.consequent, context, '?');
1526
- const alternate = this.handleComplexExpression(node.alternate, context, '?');
1527
- // Ensure the test condition is properly formatted for CEL
1528
- let testExpression = test.expression;
1529
- // If the test is a resource reference or optional chaining, ensure it's properly evaluated as boolean
1530
- if (this.isResourceReference(testExpression) || testExpression.includes('?')) {
1531
- // For resource references, we need to check if they exist and are truthy
1532
- testExpression = this.convertToBooleanTest(testExpression);
1533
- }
1534
- // Add parentheses to operands if needed for precedence
1535
- const testExpr = this.addParenthesesIfNeeded(testExpression, '?', true);
1536
- const consequentExpr = this.addParenthesesIfNeeded(consequent.expression, '?', false);
1537
- const alternateExpr = this.addParenthesesIfNeeded(alternate.expression, '?', false);
1538
- const expression = `${testExpr} ? ${consequentExpr} : ${alternateExpr}`;
1539
- return {
1540
- [CEL_EXPRESSION_BRAND]: true,
1541
- expression,
1542
- _type: undefined
1543
- };
1544
- }
1545
- /**
1546
- * Convert an expression to a proper boolean test for CEL conditionals
1547
- */
1548
- convertToBooleanTest(expression) {
1549
- // If it's already a comparison or boolean expression, use as-is
1550
- if (this.isBooleanExpression(expression)) {
1551
- return expression;
1552
- }
1553
- // For resource references and other values, check for truthiness
1554
- // This handles JavaScript's truthy/falsy semantics in CEL
1555
- return `${expression} != null && ${expression} != "" && ${expression} != false && ${expression} != 0`;
1556
- }
1557
- /**
1558
- * Check if an expression is already a boolean expression
1559
- */
1560
- isBooleanExpression(expression) {
1561
- // Check for comparison operators
1562
- const comparisonOperators = ['==', '!=', '>', '<', '>=', '<=', '&&', '||'];
1563
- return comparisonOperators.some(op => expression.includes(` ${op} `));
1564
- }
1565
- /**
1566
- * Add parentheses to expression if needed for proper precedence
1567
- */
1568
- addParenthesesIfNeeded(expression, parentOperator, isLeftOperand) {
1569
- // If no parent operator, no parentheses needed
1570
- if (!parentOperator) {
1571
- return expression;
1572
- }
1573
- // Get the precedence of operators in the expression
1574
- const expressionOperator = this.getMainOperator(expression);
1575
- if (!expressionOperator) {
1576
- return expression; // No operator found, likely a simple expression
1577
- }
1578
- const parentPrecedence = this.getOperatorPrecedence(parentOperator);
1579
- const expressionPrecedence = this.getOperatorPrecedence(expressionOperator);
1580
- // Add parentheses if expression has lower precedence than parent
1581
- // or if it's a right operand with equal precedence (for left-associative operators)
1582
- if (expressionPrecedence < parentPrecedence ||
1583
- (expressionPrecedence === parentPrecedence && !isLeftOperand && this.isLeftAssociative(parentOperator))) {
1584
- return `(${expression})`;
1585
- }
1586
- return expression;
1587
- }
1588
- /**
1589
- * Get the main operator in an expression (the one with lowest precedence)
1590
- */
1591
- getMainOperator(expression) {
1592
- // This is a simplified implementation - in a full parser, we'd need to handle
1593
- // nested expressions properly. For now, we'll look for operators outside of parentheses.
1594
- const operators = ['||', '&&', '==', '!=', '<=', '>=', '<', '>', '+', '-', '*', '/', '%'];
1595
- let depth = 0;
1596
- let mainOperator = null;
1597
- let lowestPrecedence = Infinity;
1598
- for (let i = 0; i < expression.length; i++) {
1599
- const char = expression[i];
1600
- if (char === '(') {
1601
- depth++;
1602
- }
1603
- else if (char === ')') {
1604
- depth--;
1605
- }
1606
- else if (depth === 0) {
1607
- // Check for operators at the top level
1608
- for (const op of operators) {
1609
- if (expression.substring(i, i + op.length) === op) {
1610
- const precedence = this.getOperatorPrecedence(op);
1611
- if (precedence <= lowestPrecedence) {
1612
- lowestPrecedence = precedence;
1613
- mainOperator = op;
1614
- }
1615
- i += op.length - 1; // Skip the operator
1616
- break;
1617
- }
1618
- }
1619
- }
1620
- }
1621
- return mainOperator;
1622
- }
1623
- /**
1624
- * Get operator precedence (lower number = lower precedence)
1625
- */
1626
- getOperatorPrecedence(operator) {
1627
- const precedence = {
1628
- '||': 1,
1629
- '&&': 2,
1630
- '==': 3,
1631
- '!=': 3,
1632
- '<': 4,
1633
- '<=': 4,
1634
- '>': 4,
1635
- '>=': 4,
1636
- '+': 5,
1637
- '-': 5,
1638
- '*': 6,
1639
- '/': 6,
1640
- '%': 6,
1641
- '??': 1, // Same as ||
1642
- '?': 0 // Ternary has lowest precedence
1643
- };
1644
- return precedence[operator] ?? 10; // Unknown operators get high precedence
1645
- }
1646
- /**
1647
- * Check if an operator is left-associative
1648
- */
1649
- isLeftAssociative(operator) {
1650
- // Most operators are left-associative, ternary is right-associative
1651
- return operator !== '?';
1652
- }
1653
- /**
1654
- * Handle complex nested expressions with proper precedence
1655
- */
1656
- handleComplexExpression(node, context, parentOperator) {
1657
- const result = this.convertASTNode(node, context);
1658
- // Add parentheses if needed for precedence
1659
- const expressionWithParens = this.addParenthesesIfNeeded(result.expression, parentOperator);
1660
- return {
1661
- [CEL_EXPRESSION_BRAND]: true,
1662
- expression: expressionWithParens,
1663
- _type: result._type
1664
- };
1665
- }
1666
- /**
1667
- * Convert logical expressions (&&, ||, ??)
1668
- * Handles logical OR fallback conversion (value || default) and nullish coalescing (value ?? default)
1669
- */
1670
- convertLogicalExpression(node, context) {
1671
- const left = this.convertASTNode(node.left, context);
1672
- const right = this.convertASTNode(node.right, context);
1673
- if (node.operator === '||') {
1674
- return this.convertLogicalOrFallback(left, right, context);
1675
- }
1676
- if (node.operator === '&&') {
1677
- return this.convertLogicalAnd(left, right, context);
1678
- }
1679
- if (node.operator === '??') {
1680
- return this.convertNullishCoalescing(left, right, context);
1681
- }
1682
- // For other logical operators, use direct mapping
1683
- const operator = this.mapOperatorToCel(node.operator);
1684
- const expression = `${left.expression} ${operator} ${right.expression}`;
1685
- return {
1686
- [CEL_EXPRESSION_BRAND]: true,
1687
- expression,
1688
- _type: undefined
1689
- };
1690
- }
1691
- /**
1692
- * Convert logical OR fallback (value || default) to appropriate CEL conditionals
1693
- */
1694
- convertLogicalOrFallback(left, right, _context) {
1695
- // Add parentheses to operands if they contain lower precedence operators
1696
- const leftExpr = this.addParenthesesIfNeeded(left.expression, '||', true);
1697
- const rightExpr = this.addParenthesesIfNeeded(right.expression, '||', false);
1698
- // For resource references and optional chaining, we can use a simpler null check
1699
- if (this.isResourceReference(left.expression) || left.expression.includes('?')) {
1700
- // For resource references, primarily check for null/undefined
1701
- const expression = `${leftExpr} != null ? ${leftExpr} : ${rightExpr}`;
1702
- return {
1703
- [CEL_EXPRESSION_BRAND]: true,
1704
- expression,
1705
- _type: undefined
1706
- };
1707
- }
1708
- // For general expressions, check for all falsy values
1709
- // This handles JavaScript's truthy/falsy semantics in CEL
1710
- const expression = `${leftExpr} != null && ${leftExpr} != "" && ${leftExpr} != false && ${leftExpr} != 0 ? ${leftExpr} : ${rightExpr}`;
1711
- return {
1712
- [CEL_EXPRESSION_BRAND]: true,
1713
- expression,
1714
- _type: undefined
1715
- };
1716
- }
1717
- /**
1718
- * Convert logical AND (value && other) to CEL conditional
1719
- */
1720
- convertLogicalAnd(left, right, _context) {
1721
- // Add parentheses to operands if they contain lower precedence operators
1722
- const leftExpr = this.addParenthesesIfNeeded(left.expression, '&&', true);
1723
- const rightExpr = this.addParenthesesIfNeeded(right.expression, '&&', false);
1724
- // For resource references, primarily check for null/undefined
1725
- if (this.isResourceReference(left.expression) || left.expression.includes('?')) {
1726
- const expression = `${leftExpr} != null ? ${rightExpr} : ${leftExpr}`;
1727
- return {
1728
- [CEL_EXPRESSION_BRAND]: true,
1729
- expression,
1730
- _type: undefined
1731
- };
1732
- }
1733
- // For general expressions, check for all truthy values
1734
- const expression = `${leftExpr} != null && ${leftExpr} != "" && ${leftExpr} != false && ${leftExpr} != 0 ? ${rightExpr} : ${leftExpr}`;
1735
- return {
1736
- [CEL_EXPRESSION_BRAND]: true,
1737
- expression,
1738
- _type: undefined
1739
- };
1740
- }
1741
- /**
1742
- * Convert nullish coalescing (value ?? default) to CEL null-checking expressions
1743
- * Only checks for null and undefined, not other falsy values like || does
1744
- */
1745
- convertNullishCoalescing(left, right, _context) {
1746
- // Add parentheses to operands if they contain lower precedence operators
1747
- const leftExpr = this.addParenthesesIfNeeded(left.expression, '??', true);
1748
- const rightExpr = this.addParenthesesIfNeeded(right.expression, '??', false);
1749
- // Nullish coalescing only checks for null and undefined, not other falsy values
1750
- // This is more precise than || which checks for all falsy values
1751
- const expression = `${leftExpr} != null ? ${leftExpr} : ${rightExpr}`;
1752
- return {
1753
- [CEL_EXPRESSION_BRAND]: true,
1754
- expression,
1755
- _type: undefined
1756
- };
1757
- }
1758
- /**
1759
- * Convert optional chaining expressions (obj?.prop?.field) to Kro conditional CEL
1760
- * Uses Kro's ? operator for null-safe property access
1761
- */
1762
- convertOptionalChaining(node, context) {
1763
- // ChainExpression wraps the actual optional expression
1764
- const expression = node.expression;
1765
- if (expression.type === 'MemberExpression' && expression.optional) {
1766
- return this.convertOptionalMemberExpression(expression, context);
1767
- }
1768
- if (expression.type === 'CallExpression' && expression.optional) {
1769
- return this.convertOptionalCallExpression(expression, context);
1770
- }
1771
- // If it's not actually optional, convert the inner expression normally
1772
- return this.convertASTNode(expression, context);
1773
- }
1774
- /**
1775
- * Convert optional member expressions (obj?.prop, obj?.prop?.field)
1776
- */
1777
- convertOptionalMemberExpression(node, context) {
1778
- // Build the optional chain by recursively processing the object
1779
- const objectExpr = this.convertASTNode(node.object, context);
1780
- let propertyAccess;
1781
- if (node.computed) {
1782
- // Handle obj?.[key] syntax
1783
- const property = this.convertASTNode(node.property, context);
1784
- propertyAccess = `[${property.expression}]`;
1785
- }
1786
- else {
1787
- // Handle obj?.prop syntax
1788
- propertyAccess = `.${node.property.name}`;
1789
- }
1790
- // Use Kro's ? operator for null-safe access
1791
- // The ? operator in Kro CEL provides null-safe property access
1792
- const expression = `${objectExpr.expression}?${propertyAccess}`;
1793
- return {
1794
- [CEL_EXPRESSION_BRAND]: true,
1795
- expression,
1796
- _type: undefined
1797
- };
1798
- }
1799
- /**
1800
- * Convert optional call expressions (obj?.method?.())
1801
- */
1802
- convertOptionalCallExpression(node, context) {
1803
- // Convert the callee with optional chaining
1804
- const callee = this.convertASTNode(node.callee, context);
1805
- // Convert arguments
1806
- const args = node.arguments.map((arg) => this.convertASTNode(arg, context).expression).join(', ');
1807
- // Use Kro's ? operator for null-safe method calls
1808
- const expression = `${callee.expression}?(${args})`;
1809
- return {
1810
- [CEL_EXPRESSION_BRAND]: true,
1811
- expression,
1812
- _type: undefined
1813
- };
1814
- }
1815
- /**
1816
- * Convert template literals with KubernetesRef interpolation
1817
- * Handles expressions like `http://${database.status.podIP}:5432/db`
1818
- */
1819
- convertTemplateLiteral(node, context) {
1820
- let result = '';
1821
- const _dependencies = [];
1822
- // Process each part of the template literal
1823
- for (let i = 0; i < node.quasis.length; i++) {
1824
- // Add the literal string part
1825
- const literalPart = node.quasis[i].value.cooked;
1826
- result += literalPart;
1827
- // Add the interpolated expression if it exists
1828
- if (i < node.expressions.length) {
1829
- const expr = this.convertASTNode(node.expressions[i], context);
1830
- // For template literals, we need to wrap expressions in ${}
1831
- result += `\${${expr.expression}}`;
1832
- // Track dependencies from the interpolated expression
1833
- // Note: We'd need to extract dependencies from the expression
1834
- // For now, we'll handle this in a future enhancement
1835
- }
1836
- }
1837
- return {
1838
- [CEL_EXPRESSION_BRAND]: true,
1839
- expression: result,
1840
- _type: 'string' // Template literals always produce strings
1841
- };
1842
- }
1843
- /**
1844
- * Convert literal values (strings, numbers, booleans - no KubernetesRef objects)
1845
- * This preserves literal values exactly as they are, without any KubernetesRef processing
1846
- */
1847
- convertLiteral(node, _context) {
1848
- let literalValue;
1849
- if (typeof node.value === 'string') {
1850
- // Preserve string literals with proper quoting for CEL
1851
- literalValue = `"${node.value.replace(/"/g, '\\"')}"`;
1852
- }
1853
- else if (typeof node.value === 'number') {
1854
- // Preserve numeric literals as-is
1855
- literalValue = String(node.value);
1856
- }
1857
- else if (typeof node.value === 'boolean') {
1858
- // Preserve boolean literals as-is
1859
- literalValue = String(node.value);
1860
- }
1861
- else if (node.value === null) {
1862
- // Preserve null literals
1863
- literalValue = 'null';
1864
- }
1865
- else if (node.value === undefined) {
1866
- // Handle undefined (though this shouldn't appear in valid JS literals)
1867
- literalValue = 'null';
1868
- }
1869
- else {
1870
- // For any other literal types, convert to string
1871
- literalValue = `"${String(node.value).replace(/"/g, '\\"')}"`;
1872
- }
1873
- return {
1874
- [CEL_EXPRESSION_BRAND]: true,
1875
- expression: literalValue,
1876
- _type: typeof node.value
1877
- };
1878
- }
1879
- /**
1880
- * Convert call expressions (method calls and global functions)
1881
- */
1882
- convertCallExpression(node, context) {
1883
- // Handle global functions and Math methods
1884
- if (node.callee.type === 'Identifier') {
1885
- const functionName = node.callee.name;
1886
- return this.convertGlobalFunction(functionName, node.arguments, context);
1887
- }
1888
- // Handle Math.* functions
1889
- if (node.callee.type === 'MemberExpression' &&
1890
- node.callee.object.type === 'Identifier' &&
1891
- node.callee.object.name === 'Math') {
1892
- const mathMethod = node.callee.property.name;
1893
- return this.convertMathFunction(mathMethod, node.arguments, context);
1894
- }
1895
- // Handle common JavaScript methods that can be converted to CEL
1896
- if (node.callee.type === 'MemberExpression') {
1897
- const object = this.convertASTNode(node.callee.object, context);
1898
- const methodName = node.callee.property.name;
1899
- switch (methodName) {
1900
- case 'find':
1901
- return this.convertArrayFind(object, node.arguments, context);
1902
- case 'filter':
1903
- return this.convertArrayFilter(object, node.arguments, context);
1904
- case 'map':
1905
- return this.convertArrayMap(object, node.arguments, context);
1906
- case 'includes':
1907
- return this.convertStringIncludes(object, node.arguments, context);
1908
- case 'some':
1909
- return this.convertArraySome(object, node.arguments, context);
1910
- case 'every':
1911
- return this.convertArrayEvery(object, node.arguments, context);
1912
- case 'startsWith':
1913
- return this.convertStringStartsWith(object, node.arguments, context);
1914
- case 'endsWith':
1915
- return this.convertStringEndsWith(object, node.arguments, context);
1916
- case 'toLowerCase':
1917
- return this.convertStringToLowerCase(object, node.arguments, context);
1918
- case 'toUpperCase':
1919
- return this.convertStringToUpperCase(object, node.arguments, context);
1920
- case 'trim':
1921
- return this.convertStringTrim(object, node.arguments, context);
1922
- case 'substring':
1923
- return this.convertStringSubstring(object, node.arguments, context);
1924
- case 'slice':
1925
- return this.convertStringSlice(object, node.arguments, context);
1926
- case 'split':
1927
- return this.convertStringSplit(object, node.arguments, context);
1928
- case 'join':
1929
- return this.convertArrayJoin(object, node.arguments, context);
1930
- case 'flatMap':
1931
- return this.convertArrayFlatMap(object, node.arguments, context);
1932
- case 'length':
1933
- return this.convertLengthProperty(object, context);
1934
- case 'padStart':
1935
- return this.convertStringPadStart(object, node.arguments, context);
1936
- case 'padEnd':
1937
- return this.convertStringPadEnd(object, node.arguments, context);
1938
- case 'repeat':
1939
- return this.convertStringRepeat(object, node.arguments, context);
1940
- case 'replace':
1941
- return this.convertStringReplace(object, node.arguments, context);
1942
- case 'indexOf':
1943
- return this.convertStringIndexOf(object, node.arguments, context);
1944
- case 'lastIndexOf':
1945
- return this.convertStringLastIndexOf(object, node.arguments, context);
1946
- default:
1947
- throw new Error(`Unsupported method call: ${methodName}`);
1948
- }
1949
- }
1950
- throw new Error(`Unsupported call expression`);
1951
- }
1952
- /**
1953
- * Convert global functions like Number(), String(), Boolean()
1954
- */
1955
- convertGlobalFunction(functionName, args, context) {
1956
- const convertedArgs = args.map(arg => this.convertASTNode(arg, context));
1957
- switch (functionName) {
1958
- case 'Number':
1959
- if (args.length === 1) {
1960
- return {
1961
- [CEL_EXPRESSION_BRAND]: true,
1962
- expression: `double(${convertedArgs[0]?.expression || 'null'})`,
1963
- _type: 'number'
1964
- };
1965
- }
1966
- break;
1967
- case 'String':
1968
- if (args.length === 1) {
1969
- return {
1970
- [CEL_EXPRESSION_BRAND]: true,
1971
- expression: `string(${convertedArgs[0]?.expression || 'null'})`,
1972
- _type: 'string'
1973
- };
1974
- }
1975
- break;
1976
- case 'Boolean':
1977
- if (args.length === 1) {
1978
- return {
1979
- [CEL_EXPRESSION_BRAND]: true,
1980
- expression: `bool(${convertedArgs[0]?.expression || 'null'})`,
1981
- _type: 'boolean'
1982
- };
1983
- }
1984
- break;
1985
- case 'parseInt':
1986
- if (args.length >= 1) {
1987
- return {
1988
- [CEL_EXPRESSION_BRAND]: true,
1989
- expression: `int(${convertedArgs[0]?.expression || 'null'})`,
1990
- _type: 'number'
1991
- };
1992
- }
1993
- break;
1994
- case 'parseFloat':
1995
- if (args.length >= 1) {
1996
- return {
1997
- [CEL_EXPRESSION_BRAND]: true,
1998
- expression: `double(${convertedArgs[0]?.expression || 'null'})`,
1999
- _type: 'number'
2000
- };
2001
- }
2002
- break;
2003
- }
2004
- throw new Error(`Unsupported global function: ${functionName}`);
2005
- }
2006
- /**
2007
- * Convert Math functions like Math.min(), Math.max(), Math.abs()
2008
- */
2009
- convertMathFunction(mathMethod, args, context) {
2010
- const convertedArgs = args.map(arg => this.convertASTNode(arg, context));
2011
- switch (mathMethod) {
2012
- case 'min':
2013
- if (args.length >= 2) {
2014
- // CEL doesn't have a direct min function, so we'll use a conditional approach
2015
- // For now, we'll use a simple approach for 2 arguments
2016
- if (args.length === 2) {
2017
- return {
2018
- [CEL_EXPRESSION_BRAND]: true,
2019
- expression: `${convertedArgs[0]?.expression || 'null'} < ${convertedArgs[1]?.expression || 'null'} ? ${convertedArgs[0]?.expression || 'null'} : ${convertedArgs[1]?.expression || 'null'}`,
2020
- _type: 'number'
2021
- };
2022
- }
2023
- else {
2024
- // For more than 2 arguments, we'll create a nested conditional
2025
- let expression = convertedArgs[0]?.expression || 'null';
2026
- for (let i = 1; i < convertedArgs.length; i++) {
2027
- expression = `${expression} < ${convertedArgs[i]?.expression || 'null'} ? ${expression} : ${convertedArgs[i]?.expression || 'null'}`;
2028
- }
2029
- return {
2030
- [CEL_EXPRESSION_BRAND]: true,
2031
- expression,
2032
- _type: 'number'
2033
- };
2034
- }
2035
- }
2036
- break;
2037
- case 'max':
2038
- if (args.length >= 2) {
2039
- if (args.length === 2) {
2040
- return {
2041
- [CEL_EXPRESSION_BRAND]: true,
2042
- expression: `${convertedArgs[0]?.expression || 'null'} > ${convertedArgs[1]?.expression || 'null'} ? ${convertedArgs[0]?.expression || 'null'} : ${convertedArgs[1]?.expression || 'null'}`,
2043
- _type: 'number'
2044
- };
2045
- }
2046
- else {
2047
- let expression = convertedArgs[0]?.expression || 'null';
2048
- for (let i = 1; i < convertedArgs.length; i++) {
2049
- expression = `${expression} > ${convertedArgs[i]?.expression || 'null'} ? ${expression} : ${convertedArgs[i]?.expression || 'null'}`;
2050
- }
2051
- return {
2052
- [CEL_EXPRESSION_BRAND]: true,
2053
- expression,
2054
- _type: 'number'
2055
- };
2056
- }
2057
- }
2058
- break;
2059
- case 'abs':
2060
- if (args.length === 1) {
2061
- return {
2062
- [CEL_EXPRESSION_BRAND]: true,
2063
- expression: `${convertedArgs[0]?.expression || 'null'} < 0 ? -${convertedArgs[0]?.expression || 'null'} : ${convertedArgs[0]?.expression || 'null'}`,
2064
- _type: 'number'
2065
- };
2066
- }
2067
- break;
2068
- case 'floor':
2069
- if (args.length === 1) {
2070
- return {
2071
- [CEL_EXPRESSION_BRAND]: true,
2072
- expression: `int(${convertedArgs[0]?.expression || 'null'})`,
2073
- _type: 'number'
2074
- };
2075
- }
2076
- break;
2077
- case 'ceil':
2078
- if (args.length === 1) {
2079
- return {
2080
- [CEL_EXPRESSION_BRAND]: true,
2081
- expression: `int(${convertedArgs[0]?.expression || 'null'} + 0.999999)`,
2082
- _type: 'number'
2083
- };
2084
- }
2085
- break;
2086
- case 'round':
2087
- if (args.length === 1) {
2088
- return {
2089
- [CEL_EXPRESSION_BRAND]: true,
2090
- expression: `int(${convertedArgs[0]?.expression || 'null'} + 0.5)`,
2091
- _type: 'number'
2092
- };
2093
- }
2094
- break;
2095
- }
2096
- throw new Error(`Unsupported Math function: ${mathMethod}`);
2097
- }
2098
- /**
2099
- * Convert unary expressions like !x, +x, -x, !!x
2100
- */
2101
- convertUnaryExpression(node, context) {
2102
- const operand = this.convertASTNode(node.argument, context);
2103
- switch (node.operator) {
2104
- case '!':
2105
- return {
2106
- [CEL_EXPRESSION_BRAND]: true,
2107
- expression: `!${operand.expression}`,
2108
- _type: 'boolean'
2109
- };
2110
- case '+':
2111
- return {
2112
- [CEL_EXPRESSION_BRAND]: true,
2113
- expression: `double(${operand.expression})`,
2114
- _type: 'number'
2115
- };
2116
- case '-':
2117
- return {
2118
- [CEL_EXPRESSION_BRAND]: true,
2119
- expression: `-${operand.expression}`,
2120
- _type: 'number'
2121
- };
2122
- case 'typeof':
2123
- return {
2124
- [CEL_EXPRESSION_BRAND]: true,
2125
- expression: `type(${operand.expression})`,
2126
- _type: 'string'
2127
- };
2128
- default:
2129
- throw new Error(`Unsupported unary operator: ${node.operator}`);
2130
- }
2131
- }
2132
- /**
2133
- * Convert array expressions
2134
- */
2135
- convertArrayExpression(node, context) {
2136
- const elements = node.elements.map((element) => {
2137
- if (element === null)
2138
- return 'null';
2139
- return this.convertASTNode(element, context).expression;
2140
- });
2141
- const expression = `[${elements.join(', ')}]`;
2142
- return {
2143
- [CEL_EXPRESSION_BRAND]: true,
2144
- expression,
2145
- _type: undefined
2146
- };
2147
- }
2148
- /**
2149
- * Convert identifier expressions
2150
- */
2151
- convertIdentifier(node, context) {
2152
- // For identifiers, we need to check if they refer to available references
2153
- const name = node.name;
2154
- // Check if this is a resource reference
2155
- if (context.availableReferences?.[name]) {
2156
- // This is a direct resource reference
2157
- return {
2158
- [CEL_EXPRESSION_BRAND]: true,
2159
- expression: `resources.${name}`,
2160
- _type: undefined
2161
- };
2162
- }
2163
- // Check if this is a schema reference
2164
- if (name === 'schema') {
2165
- return {
2166
- [CEL_EXPRESSION_BRAND]: true,
2167
- expression: 'schema',
2168
- _type: undefined
2169
- };
2170
- }
2171
- // For other identifiers, return as-is (might be local variables in complex expressions)
2172
- return {
2173
- [CEL_EXPRESSION_BRAND]: true,
2174
- expression: name,
2175
- _type: undefined
2176
- };
2177
- }
2178
- /**
2179
- * Map JavaScript operators to CEL operators
2180
- */
2181
- mapOperatorToCel(operator) {
2182
- const mapping = {
2183
- '===': '==',
2184
- '!==': '!=',
2185
- '&&': '&&',
2186
- '||': '||',
2187
- '>': '>',
2188
- '<': '<',
2189
- '>=': '>=',
2190
- '<=': '<=',
2191
- '==': '==',
2192
- '!=': '!='
2193
- };
2194
- return mapping[operator] || operator;
2195
- }
2196
- /**
2197
- * Extract member path from AST node
2198
- */
2199
- extractMemberPath(node) {
2200
- if (node.type === 'Identifier') {
2201
- return node.name;
2202
- }
2203
- if (node.type === 'MemberExpression') {
2204
- const object = this.extractMemberPath(node.object);
2205
- if (node.computed) {
2206
- // For computed access like array[0] or object['key'], we need special handling
2207
- // This is used for path extraction, so we'll represent it differently
2208
- const property = this.getSourceText(node.property);
2209
- const optionalMarker = node.optional ? '?.' : '';
2210
- return `${object}${optionalMarker}[${property}]`;
2211
- }
2212
- else {
2213
- // For regular property access like object.property or object?.property
2214
- const property = node.property.name;
2215
- const optionalMarker = node.optional ? '?.' : '.';
2216
- return `${object}${optionalMarker}${property}`;
2217
- }
2218
- }
2219
- if (node.type === 'ChainExpression') {
2220
- // Handle ChainExpression wrapper for optional chaining
2221
- return this.extractMemberPath(node.expression);
2222
- }
2223
- throw new Error(`Cannot extract path from node type: ${node.type}`);
2224
- }
2225
- /**
2226
- * Check if a node represents a complex expression that can't be handled as a simple path
2227
- */
2228
- isComplexExpression(node) {
2229
- if (node.type === 'CallExpression') {
2230
- return true;
2231
- }
2232
- if (node.type === 'MemberExpression') {
2233
- // Recursively check if the object is complex
2234
- return this.isComplexExpression(node.object);
2235
- }
2236
- return false;
2237
- }
2238
- /**
2239
- * Get source text from AST node (placeholder implementation)
2240
- */
2241
- getSourceText(node) {
2242
- // For now, return a placeholder - this would need access to original source
2243
- if (node.type === 'Literal') {
2244
- return String(node.value);
2245
- }
2246
- return '<expression>';
2247
- }
2248
- /**
2249
- * Generate CEL expression for resource field reference
2250
- */
2251
- getResourceFieldReference(_resource, resourceKey, fieldPath, context) {
2252
- // Generate CEL expression for resource field reference using the correct format
2253
- // This should match the format used by getInnerCelPath
2254
- const expression = `${resourceKey}.${fieldPath}`;
2255
- // Create a KubernetesRef object and add it to dependencies
2256
- const ref = {
2257
- [KUBERNETES_REF_BRAND]: true,
2258
- resourceId: resourceKey,
2259
- fieldPath,
2260
- _type: this.inferTypeFromFieldPath(fieldPath)
2261
- };
2262
- if (!context.dependencies) {
2263
- context.dependencies = [];
2264
- }
2265
- context.dependencies.push(ref);
2266
- return {
2267
- [CEL_EXPRESSION_BRAND]: true,
2268
- expression,
2269
- _type: undefined
2270
- };
2271
- }
2272
- /**
2273
- * Generate CEL expression for schema field reference
2274
- */
2275
- getSchemaFieldReference(path, context) {
2276
- // Create a KubernetesRef object for schema reference and add it to dependencies
2277
- const fieldPath = path.substring('schema.'.length);
2278
- const ref = {
2279
- [KUBERNETES_REF_BRAND]: true,
2280
- resourceId: '__schema__',
2281
- fieldPath,
2282
- _type: this.inferTypeFromFieldPath(fieldPath)
2283
- };
2284
- if (!context.dependencies) {
2285
- context.dependencies = [];
2286
- }
2287
- context.dependencies.push(ref);
2288
- // Generate CEL expression for schema field reference
2289
- return {
2290
- [CEL_EXPRESSION_BRAND]: true,
2291
- expression: path,
2292
- _type: undefined
2293
- };
2294
- }
2295
- /**
2296
- * Convert array.find() method calls
2297
- */
2298
- convertArrayFind(object, args, context) {
2299
- if (args.length !== 1) {
2300
- throw new Error('Array.find() requires exactly one argument');
2301
- }
2302
- // For simple property comparisons like c => c.type === "Available", we can convert to CEL
2303
- const arg = args[0];
2304
- if (arg.type === 'ArrowFunctionExpression' && arg.body.type === 'BinaryExpression') {
2305
- const param = arg.params[0].name;
2306
- const binaryExpr = arg.body;
2307
- // Handle the left side (should be a member expression like c.type)
2308
- let leftExpr;
2309
- if (binaryExpr.left.type === 'MemberExpression' && binaryExpr.left.object.name === param) {
2310
- // Simple case: c.type
2311
- leftExpr = `${param}.${binaryExpr.left.property.name}`;
2312
- }
2313
- else {
2314
- // More complex case - try to convert but replace parameter references
2315
- try {
2316
- const leftResult = this.convertASTNode(binaryExpr.left, context);
2317
- leftExpr = leftResult.expression.replace(new RegExp(`\\b${param}\\b`, 'g'), param);
2318
- }
2319
- catch {
2320
- leftExpr = `${param}.property`;
2321
- }
2322
- }
2323
- // Handle the right side (usually a literal)
2324
- let rightExpr;
2325
- try {
2326
- const rightResult = this.convertASTNode(binaryExpr.right, context);
2327
- rightExpr = rightResult.expression;
2328
- }
2329
- catch {
2330
- rightExpr = 'value';
2331
- }
2332
- const operator = this.convertBinaryOperator(binaryExpr.operator);
2333
- const expression = `${object.expression}.filter(${param}, ${leftExpr} ${operator} ${rightExpr})[0]`;
2334
- return {
2335
- [CEL_EXPRESSION_BRAND]: true,
2336
- expression,
2337
- _type: undefined
2338
- };
2339
- }
2340
- // For now, create a placeholder for complex find operations
2341
- const expression = `${object.expression}.filter(/* TODO: convert find predicate */)[0]`;
2342
- return {
2343
- [CEL_EXPRESSION_BRAND]: true,
2344
- expression,
2345
- _type: undefined
2346
- };
2347
- }
2348
- /**
2349
- * Convert array.filter() method calls
2350
- */
2351
- convertArrayFilter(object, args, context) {
2352
- if (args.length !== 1) {
2353
- throw new Error('Array.filter() requires exactly one argument');
2354
- }
2355
- // For simple property access like i => i.ip, we can convert to CEL
2356
- const arg = args[0];
2357
- if (arg.type === 'ArrowFunctionExpression') {
2358
- const param = arg.params[0].name;
2359
- if (arg.body.type === 'MemberExpression') {
2360
- // Simple property access: i => i.ip
2361
- const property = arg.body.property.name;
2362
- const expression = `${object.expression}.filter(${param}, has(${param}.${property}) && ${param}.${property} != null)`;
2363
- return {
2364
- [CEL_EXPRESSION_BRAND]: true,
2365
- expression,
2366
- _type: undefined
2367
- };
2368
- }
2369
- else if (arg.body.type === 'BinaryExpression') {
2370
- // Binary comparison: i => i.type === "Available"
2371
- const left = this.convertASTNode(arg.body.left, context);
2372
- const operator = this.convertBinaryOperator(arg.body.operator);
2373
- const right = this.convertASTNode(arg.body.right, context);
2374
- // Replace parameter references with the iteration variable
2375
- const leftExpr = left.expression.replace(new RegExp(`\\b${param}\\b`, 'g'), param);
2376
- const rightExpr = right.expression;
2377
- const expression = `${object.expression}.filter(${param}, ${leftExpr} ${operator} ${rightExpr})`;
2378
- return {
2379
- [CEL_EXPRESSION_BRAND]: true,
2380
- expression,
2381
- _type: undefined
2382
- };
2383
- }
2384
- }
2385
- // For now, create a placeholder for complex filter operations
2386
- const expression = `${object.expression}.filter(/* TODO: convert filter predicate */)`;
2387
- return {
2388
- [CEL_EXPRESSION_BRAND]: true,
2389
- expression,
2390
- _type: undefined
2391
- };
2392
- }
2393
- /**
2394
- * Convert string.includes() method calls
2395
- */
2396
- convertStringIncludes(object, args, context) {
2397
- if (args.length !== 1) {
2398
- throw new Error('String.includes() requires exactly one argument');
2399
- }
2400
- const searchValue = this.convertASTNode(args[0], context);
2401
- const expression = `${object.expression}.contains(${searchValue.expression})`;
2402
- return {
2403
- [CEL_EXPRESSION_BRAND]: true,
2404
- expression,
2405
- _type: undefined
2406
- };
2407
- }
2408
- /**
2409
- * Convert array.map() method calls
2410
- */
2411
- convertArrayMap(object, args, _context) {
2412
- if (args.length !== 1) {
2413
- throw new Error('Array.map() requires exactly one argument');
2414
- }
2415
- // For simple property access like c => c.name, we can convert to CEL
2416
- const arg = args[0];
2417
- if (arg.type === 'ArrowFunctionExpression' && arg.body.type === 'MemberExpression') {
2418
- const param = arg.params[0].name;
2419
- const property = arg.body.property.name;
2420
- const expression = `${object.expression}.map(${param}, ${param}.${property})`;
2421
- return {
2422
- [CEL_EXPRESSION_BRAND]: true,
2423
- expression,
2424
- _type: undefined
2425
- };
2426
- }
2427
- // For now, create a placeholder for complex map operations
2428
- const expression = `${object.expression}.map(/* TODO: convert map predicate */)`;
2429
- return {
2430
- [CEL_EXPRESSION_BRAND]: true,
2431
- expression,
2432
- _type: undefined
2433
- };
2434
- }
2435
- /**
2436
- * Convert array.some() method calls
2437
- */
2438
- convertArraySome(object, args, _context) {
2439
- if (args.length !== 1) {
2440
- throw new Error('Array.some() requires exactly one argument');
2441
- }
2442
- // For now, create a placeholder - full implementation would need lambda support
2443
- const expression = `${object.expression}.exists(/* TODO: convert predicate */)`;
2444
- return {
2445
- [CEL_EXPRESSION_BRAND]: true,
2446
- expression,
2447
- _type: undefined
2448
- };
2449
- }
2450
- /**
2451
- * Convert array.every() method calls
2452
- */
2453
- convertArrayEvery(object, args, _context) {
2454
- if (args.length !== 1) {
2455
- throw new Error('Array.every() requires exactly one argument');
2456
- }
2457
- // For now, create a placeholder - full implementation would need lambda support
2458
- const expression = `${object.expression}.all(/* TODO: convert predicate */)`;
2459
- return {
2460
- [CEL_EXPRESSION_BRAND]: true,
2461
- expression,
2462
- _type: undefined
2463
- };
2464
- }
2465
- /**
2466
- * Convert string.startsWith() method calls
2467
- */
2468
- convertStringStartsWith(object, args, context) {
2469
- if (args.length !== 1) {
2470
- throw new Error('String.startsWith() requires exactly one argument');
2471
- }
2472
- const searchValue = this.convertASTNode(args[0], context);
2473
- const expression = `${object.expression}.startsWith(${searchValue.expression})`;
2474
- return {
2475
- [CEL_EXPRESSION_BRAND]: true,
2476
- expression,
2477
- _type: undefined
2478
- };
2479
- }
2480
- /**
2481
- * Convert string.endsWith() method calls
2482
- */
2483
- convertStringEndsWith(object, args, context) {
2484
- if (args.length !== 1) {
2485
- throw new Error('String.endsWith() requires exactly one argument');
2486
- }
2487
- const searchValue = this.convertASTNode(args[0], context);
2488
- const expression = `${object.expression}.endsWith(${searchValue.expression})`;
2489
- return {
2490
- [CEL_EXPRESSION_BRAND]: true,
2491
- expression,
2492
- _type: undefined
2493
- };
2494
- }
2495
- /**
2496
- * Convert string.toLowerCase() method calls
2497
- */
2498
- convertStringToLowerCase(object, args, _context) {
2499
- if (args.length !== 0) {
2500
- throw new Error('String.toLowerCase() requires no arguments');
2501
- }
2502
- const expression = `${object.expression}.lowerAscii()`;
2503
- return {
2504
- [CEL_EXPRESSION_BRAND]: true,
2505
- expression,
2506
- _type: undefined
2507
- };
2508
- }
2509
- /**
2510
- * Convert string.toUpperCase() method calls
2511
- */
2512
- convertStringToUpperCase(object, args, _context) {
2513
- if (args.length !== 0) {
2514
- throw new Error('String.toUpperCase() requires no arguments');
2515
- }
2516
- const expression = `${object.expression}.upperAscii()`;
2517
- return {
2518
- [CEL_EXPRESSION_BRAND]: true,
2519
- expression,
2520
- _type: undefined
2521
- };
2522
- }
2523
- /**
2524
- * Convert string.trim() method calls
2525
- */
2526
- convertStringTrim(object, args, _context) {
2527
- if (args.length !== 0) {
2528
- throw new Error('String.trim() requires no arguments');
2529
- }
2530
- // CEL doesn't have a direct trim function, so we'll use a placeholder
2531
- const expression = `${object.expression}.trim()`;
2532
- return {
2533
- [CEL_EXPRESSION_BRAND]: true,
2534
- expression,
2535
- _type: undefined
2536
- };
2537
- }
2538
- /**
2539
- * Convert string.substring() method calls
2540
- */
2541
- convertStringSubstring(object, args, context) {
2542
- if (args.length < 1 || args.length > 2) {
2543
- throw new Error('String.substring() requires 1 or 2 arguments');
2544
- }
2545
- const startIndex = this.convertASTNode(args[0], context);
2546
- if (args.length === 1) {
2547
- const expression = `${object.expression}.substring(${startIndex.expression})`;
2548
- return {
2549
- [CEL_EXPRESSION_BRAND]: true,
2550
- expression,
2551
- _type: undefined
2552
- };
2553
- }
2554
- else {
2555
- const endIndex = this.convertASTNode(args[1], context);
2556
- const expression = `${object.expression}.substring(${startIndex.expression}, ${endIndex.expression})`;
2557
- return {
2558
- [CEL_EXPRESSION_BRAND]: true,
2559
- expression,
2560
- _type: undefined
2561
- };
2562
- }
2563
- }
2564
- /**
2565
- * Convert string.slice() method calls
2566
- */
2567
- convertStringSlice(object, args, context) {
2568
- if (args.length < 1 || args.length > 2) {
2569
- throw new Error('String.slice() requires 1 or 2 arguments');
2570
- }
2571
- const startIndex = this.convertASTNode(args[0], context);
2572
- if (args.length === 1) {
2573
- const expression = `${object.expression}.substring(${startIndex.expression})`;
2574
- return {
2575
- [CEL_EXPRESSION_BRAND]: true,
2576
- expression,
2577
- _type: undefined
2578
- };
2579
- }
2580
- else {
2581
- const endIndex = this.convertASTNode(args[1], context);
2582
- const expression = `${object.expression}.substring(${startIndex.expression}, ${endIndex.expression})`;
2583
- return {
2584
- [CEL_EXPRESSION_BRAND]: true,
2585
- expression,
2586
- _type: undefined
2587
- };
2588
- }
2589
- }
2590
- /**
2591
- * Convert string.split() method calls
2592
- */
2593
- convertStringSplit(object, args, context) {
2594
- if (args.length !== 1) {
2595
- throw new Error('String.split() requires exactly one argument');
2596
- }
2597
- const separator = this.convertASTNode(args[0], context);
2598
- const expression = `${object.expression}.split(${separator.expression})`;
2599
- return {
2600
- [CEL_EXPRESSION_BRAND]: true,
2601
- expression,
2602
- _type: undefined
2603
- };
2604
- }
2605
- /**
2606
- * Convert array.join() method calls
2607
- */
2608
- convertArrayJoin(object, args, context) {
2609
- if (args.length !== 1) {
2610
- throw new Error('Array.join() requires exactly one argument');
2611
- }
2612
- const separator = this.convertASTNode(args[0], context);
2613
- const expression = `${object.expression}.join(${separator.expression})`;
2614
- return {
2615
- [CEL_EXPRESSION_BRAND]: true,
2616
- expression,
2617
- _type: undefined
2618
- };
2619
- }
2620
- /**
2621
- * Convert array.flatMap() method calls
2622
- */
2623
- convertArrayFlatMap(object, args, _context) {
2624
- if (args.length !== 1) {
2625
- throw new Error('Array.flatMap() requires exactly one argument');
2626
- }
2627
- const arg = args[0];
2628
- // Handle arrow function: arr.flatMap(x => x.items)
2629
- if (arg.type === 'ArrowFunctionExpression') {
2630
- const param = arg.params[0].name;
2631
- if (arg.body.type === 'MemberExpression') {
2632
- // Simple property access: x => x.items
2633
- const property = arg.body.property.name;
2634
- const expression = `${object.expression}.map(${param}, ${param}.${property}).flatten()`;
2635
- return {
2636
- [CEL_EXPRESSION_BRAND]: true,
2637
- expression,
2638
- _type: undefined
2639
- };
2640
- }
2641
- }
2642
- throw new Error('Unsupported flatMap expression');
2643
- }
2644
- /**
2645
- * Convert .length property access
2646
- */
2647
- convertLengthProperty(object, _context) {
2648
- const expression = `size(${object.expression})`;
2649
- return {
2650
- [CEL_EXPRESSION_BRAND]: true,
2651
- expression,
2652
- _type: undefined
2653
- };
2654
- }
2655
- /**
2656
- * Convert string.padStart() method calls
2657
- */
2658
- convertStringPadStart(object, args, context) {
2659
- if (args.length < 1 || args.length > 2) {
2660
- throw new Error('String.padStart() requires 1 or 2 arguments');
2661
- }
2662
- const targetLength = this.convertASTNode(args[0], context);
2663
- const padString = args.length > 1 ? this.convertASTNode(args[1], context) : { expression: '" "' };
2664
- // CEL doesn't have padStart, so we'll simulate it
2665
- const expression = `size(${object.expression}) >= ${targetLength.expression} ? ${object.expression} : (${padString.expression}.repeat(${targetLength.expression} - size(${object.expression})) + ${object.expression})`;
2666
- return {
2667
- [CEL_EXPRESSION_BRAND]: true,
2668
- expression,
2669
- _type: 'string'
2670
- };
2671
- }
2672
- /**
2673
- * Convert string.padEnd() method calls
2674
- */
2675
- convertStringPadEnd(object, args, context) {
2676
- if (args.length < 1 || args.length > 2) {
2677
- throw new Error('String.padEnd() requires 1 or 2 arguments');
2678
- }
2679
- const targetLength = this.convertASTNode(args[0], context);
2680
- const padString = args.length > 1 ? this.convertASTNode(args[1], context) : { expression: '" "' };
2681
- // CEL doesn't have padEnd, so we'll simulate it
2682
- const expression = `size(${object.expression}) >= ${targetLength.expression} ? ${object.expression} : (${object.expression} + ${padString.expression}.repeat(${targetLength.expression} - size(${object.expression})))`;
2683
- return {
2684
- [CEL_EXPRESSION_BRAND]: true,
2685
- expression,
2686
- _type: 'string'
2687
- };
2688
- }
2689
- /**
2690
- * Convert string.repeat() method calls
2691
- */
2692
- convertStringRepeat(object, args, context) {
2693
- if (args.length !== 1) {
2694
- throw new Error('String.repeat() requires exactly one argument');
2695
- }
2696
- const count = this.convertASTNode(args[0], context);
2697
- // CEL doesn't have repeat, so we'll use a simple approach for small counts
2698
- const expression = `${object.expression}.repeat(${count.expression})`;
2699
- return {
2700
- [CEL_EXPRESSION_BRAND]: true,
2701
- expression,
2702
- _type: 'string'
2703
- };
2704
- }
2705
- /**
2706
- * Convert string.replace() method calls
2707
- */
2708
- convertStringReplace(object, args, context) {
2709
- if (args.length !== 2) {
2710
- throw new Error('String.replace() requires exactly two arguments');
2711
- }
2712
- const searchValue = this.convertASTNode(args[0], context);
2713
- const replaceValue = this.convertASTNode(args[1], context);
2714
- // CEL doesn't have replace, so we'll use a simple substitution
2715
- const expression = `${object.expression}.replace(${searchValue.expression}, ${replaceValue.expression})`;
2716
- return {
2717
- [CEL_EXPRESSION_BRAND]: true,
2718
- expression,
2719
- _type: 'string'
2720
- };
2721
- }
2722
- /**
2723
- * Convert string.indexOf() method calls
2724
- */
2725
- convertStringIndexOf(object, args, context) {
2726
- if (args.length !== 1) {
2727
- throw new Error('String.indexOf() requires exactly one argument');
2728
- }
2729
- const searchValue = this.convertASTNode(args[0], context);
2730
- // CEL doesn't have indexOf, so we'll use a conditional approach
2731
- const expression = `${object.expression}.contains(${searchValue.expression}) ? 0 : -1`;
2732
- return {
2733
- [CEL_EXPRESSION_BRAND]: true,
2734
- expression,
2735
- _type: 'number'
2736
- };
2737
- }
2738
- /**
2739
- * Convert string.lastIndexOf() method calls
2740
- */
2741
- convertStringLastIndexOf(object, args, context) {
2742
- if (args.length !== 1) {
2743
- throw new Error('String.lastIndexOf() requires exactly one argument');
2744
- }
2745
- const searchValue = this.convertASTNode(args[0], context);
2746
- // CEL doesn't have lastIndexOf, so we'll use a conditional approach
2747
- const expression = `${object.expression}.contains(${searchValue.expression}) ? size(${object.expression}) - size(${searchValue.expression}) : -1`;
2748
- return {
2749
- [CEL_EXPRESSION_BRAND]: true,
2750
- expression,
2751
- _type: 'number'
2752
- };
2753
- }
2754
- /**
2755
- * Infer type from field path based on common Kubernetes patterns
2756
- */
2757
- inferTypeFromFieldPath(fieldPath) {
2758
- // Common patterns for type inference
2759
- if (fieldPath.includes('replicas') || fieldPath.includes('count') || fieldPath.includes('port')) {
2760
- return 0; // number
2761
- }
2762
- if (fieldPath.includes('ready') || fieldPath.includes('available') || fieldPath.includes('enabled')) {
2763
- return false; // boolean
2764
- }
2765
- if (fieldPath.includes('name') || fieldPath.includes('image') || fieldPath.includes('namespace')) {
2766
- return ''; // string
2767
- }
2768
- if (fieldPath.includes('labels') || fieldPath.includes('annotations')) {
2769
- return {}; // object
2770
- }
2771
- if (fieldPath.includes('conditions') || fieldPath.includes('ingress') || fieldPath.includes('containers')) {
2772
- return []; // array
2773
- }
2774
- // Default to string for unknown fields
2775
- return '';
2776
- }
2777
- /**
2778
- * Convert binary operators to CEL equivalents
2779
- */
2780
- convertBinaryOperator(operator) {
2781
- const operatorMap = {
2782
- '===': '==',
2783
- '!==': '!=',
2784
- '==': '==',
2785
- '!=': '!=',
2786
- '<': '<',
2787
- '<=': '<=',
2788
- '>': '>',
2789
- '>=': '>=',
2790
- '+': '+',
2791
- '-': '-',
2792
- '*': '*',
2793
- '/': '/',
2794
- '%': '%'
2795
- };
2796
- const celOperator = operatorMap[operator];
2797
- if (!celOperator) {
2798
- throw new Error(`Unsupported binary operator: ${operator}`);
2799
- }
2800
- return celOperator;
2801
- }
2802
- /**
2803
- * Convert array access expressions with KubernetesRef support (array[0], array[index])
2804
- */
2805
- convertArrayAccess(node, context) {
2806
- // Convert the object being accessed (could be a KubernetesRef)
2807
- const object = this.convertASTNode(node.object, context);
2808
- // Convert the index/key expression
2809
- const property = this.convertASTNode(node.property, context);
2810
- // Generate CEL array access expression
2811
- const expression = `${object.expression}[${property.expression}]`;
2812
- return {
2813
- [CEL_EXPRESSION_BRAND]: true,
2814
- expression,
2815
- _type: undefined
2816
- };
2817
- }
2818
- /**
2819
- * Check if a value is a static literal that doesn't need conversion
2820
- * Static values (no KubernetesRef objects) should be preserved as-is for performance
2821
- */
2822
- isStaticValue(value) {
2823
- // Primitive values are always static
2824
- if (value === null || value === undefined)
2825
- return true;
2826
- if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
2827
- return true;
2828
- }
2829
- // Check if it's a KubernetesRef (not static)
2830
- if (isKubernetesRef(value))
2831
- return false;
2832
- // Check if it contains KubernetesRef objects (not static)
2833
- if (containsKubernetesRefs(value))
2834
- return false;
2835
- // Arrays and objects need recursive checking
2836
- if (Array.isArray(value)) {
2837
- return value.every(item => this.isStaticValue(item));
2838
- }
2839
- if (value && typeof value === 'object') {
2840
- return Object.values(value).every(val => this.isStaticValue(val));
2841
- }
2842
- // Default to static for other types
2843
- return true;
2844
- }
2845
- /**
2846
- * Create a result for static values that don't require conversion
2847
- */
2848
- createStaticValueResult(_value) {
2849
- return {
2850
- valid: true,
2851
- celExpression: null, // No CEL expression needed for static values
2852
- dependencies: [],
2853
- sourceMap: [],
2854
- errors: [],
2855
- warnings: [],
2856
- requiresConversion: false // Key: static values don't need conversion
2857
- };
2858
- }
2859
- /**
2860
- * Analyze expression using factory pattern aware handling
2861
- *
2862
- * This method integrates with the factory pattern handler to provide
2863
- * appropriate expression processing based on the deployment strategy.
2864
- */
2865
- analyzeExpressionWithFactoryPattern(expression, context) {
2866
- try {
2867
- // Use the factory pattern handler for initial processing
2868
- const factoryResult = handleExpressionWithFactoryPattern(expression, context);
2869
- // If the factory handler processed it successfully, return the result
2870
- if (factoryResult.valid && factoryResult.celExpression) {
2871
- return factoryResult;
2872
- }
2873
- // If the factory handler determined no conversion is needed, return as-is
2874
- if (!factoryResult.requiresConversion) {
2875
- return factoryResult;
2876
- }
2877
- // If the factory handler couldn't process it, fall back to the main analyzer
2878
- if (typeof expression === 'string') {
2879
- return this.analyzeExpression(expression, context);
2880
- }
2881
- // For non-string expressions that need conversion, return the factory result
2882
- return factoryResult;
2883
- }
2884
- catch (error) {
2885
- return {
2886
- valid: false,
2887
- celExpression: null,
2888
- dependencies: [],
2889
- sourceMap: [],
2890
- errors: [new ConversionError(`Factory pattern expression analysis failed: ${error instanceof Error ? error.message : String(error)}`, String(expression), 'javascript')],
2891
- warnings: [],
2892
- requiresConversion: true
2893
- };
2894
- }
2895
- }
2896
- /**
2897
- * Get cache statistics for performance monitoring
2898
- */
2899
- getCacheStats() {
2900
- return this.cache.getStats();
2901
- }
2902
- /**
2903
- * Clear all caches
2904
- */
2905
- clearCache() {
2906
- this.cache.clear();
2907
- }
2908
- /**
2909
- * Force cleanup of expired cache entries
2910
- */
2911
- cleanupCache() {
2912
- return this.cache.cleanup();
2913
- }
2914
- /**
2915
- * Destroy analyzer and cleanup resources
2916
- */
2917
- destroy() {
2918
- this.cache.destroy();
2919
- }
2920
- }
2921
- //# sourceMappingURL=analyzer.js.map