k8ts 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +3 -0
  3. package/dist/.imports.tsbuildinfo +1 -0
  4. package/dist/_imports/_mix.d.ts +4 -0
  5. package/dist/_imports/_mix.d.ts.map +1 -0
  6. package/dist/_imports/_mix.js +20 -0
  7. package/dist/_imports/_mix.js.map +1 -0
  8. package/dist/_imports/acme.cert-manager.io.d.ts +4832 -0
  9. package/dist/_imports/acme.cert-manager.io.d.ts.map +1 -0
  10. package/dist/_imports/acme.cert-manager.io.js +2476 -0
  11. package/dist/_imports/acme.cert-manager.io.js.map +1 -0
  12. package/dist/_imports/gateway.networking.k8s.io.d.ts +8786 -0
  13. package/dist/_imports/gateway.networking.k8s.io.d.ts.map +1 -0
  14. package/dist/_imports/gateway.networking.k8s.io.js +3668 -0
  15. package/dist/_imports/gateway.networking.k8s.io.js.map +1 -0
  16. package/dist/_imports/index.d.ts +3 -0
  17. package/dist/_imports/index.d.ts.map +1 -0
  18. package/dist/_imports/index.js +39 -0
  19. package/dist/_imports/index.js.map +1 -0
  20. package/dist/_imports/k8s.d.ts +18782 -0
  21. package/dist/_imports/k8s.d.ts.map +1 -0
  22. package/dist/_imports/k8s.js +12173 -0
  23. package/dist/_imports/k8s.js.map +1 -0
  24. package/dist/api-versions.d.ts +5 -0
  25. package/dist/api-versions.d.ts.map +1 -0
  26. package/dist/api-versions.js +8 -0
  27. package/dist/api-versions.js.map +1 -0
  28. package/dist/error.d.ts +5 -0
  29. package/dist/error.d.ts.map +1 -0
  30. package/dist/error.js +12 -0
  31. package/dist/error.js.map +1 -0
  32. package/dist/external/index.d.ts +13 -0
  33. package/dist/external/index.d.ts.map +1 -0
  34. package/dist/external/index.js +81 -0
  35. package/dist/external/index.js.map +1 -0
  36. package/dist/file/exports.d.ts +20 -0
  37. package/dist/file/exports.d.ts.map +1 -0
  38. package/dist/file/exports.js +62 -0
  39. package/dist/file/exports.js.map +1 -0
  40. package/dist/file/factory.d.ts +34 -0
  41. package/dist/file/factory.d.ts.map +1 -0
  42. package/dist/file/factory.js +171 -0
  43. package/dist/file/factory.js.map +1 -0
  44. package/dist/file/file.d.ts +17 -0
  45. package/dist/file/file.d.ts.map +1 -0
  46. package/dist/file/file.js +21 -0
  47. package/dist/file/file.js.map +1 -0
  48. package/dist/file/index.d.ts +2 -0
  49. package/dist/file/index.d.ts.map +1 -0
  50. package/dist/file/index.js +18 -0
  51. package/dist/file/index.js.map +1 -0
  52. package/dist/file/origin.d.ts +18 -0
  53. package/dist/file/origin.d.ts.map +1 -0
  54. package/dist/file/origin.js +27 -0
  55. package/dist/file/origin.js.map +1 -0
  56. package/dist/index.d.ts +9 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +49 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/k8ts-sys-kind.d.ts +3 -0
  61. package/dist/k8ts-sys-kind.d.ts.map +1 -0
  62. package/dist/k8ts-sys-kind.js +8 -0
  63. package/dist/k8ts-sys-kind.js.map +1 -0
  64. package/dist/kind-map.d.ts +11 -0
  65. package/dist/kind-map.d.ts.map +1 -0
  66. package/dist/kind-map.js +29 -0
  67. package/dist/kind-map.js.map +1 -0
  68. package/dist/meta/k8ts-section.d.ts +3 -0
  69. package/dist/meta/k8ts-section.d.ts.map +1 -0
  70. package/dist/meta/k8ts-section.js +10 -0
  71. package/dist/meta/k8ts-section.js.map +1 -0
  72. package/dist/node/abs-resource.d.ts +15 -0
  73. package/dist/node/abs-resource.d.ts.map +1 -0
  74. package/dist/node/abs-resource.js +76 -0
  75. package/dist/node/abs-resource.js.map +1 -0
  76. package/dist/node/dependencies.d.ts +1 -0
  77. package/dist/node/dependencies.d.ts.map +1 -0
  78. package/dist/node/dependencies.js +2 -0
  79. package/dist/node/dependencies.js.map +1 -0
  80. package/dist/node/index.d.ts +2 -0
  81. package/dist/node/index.d.ts.map +1 -0
  82. package/dist/node/index.js +6 -0
  83. package/dist/node/index.js.map +1 -0
  84. package/dist/node/manifest-resource.d.ts +11 -0
  85. package/dist/node/manifest-resource.d.ts.map +1 -0
  86. package/dist/node/manifest-resource.js +19 -0
  87. package/dist/node/manifest-resource.js.map +1 -0
  88. package/dist/node/sub-resource.d.ts +8 -0
  89. package/dist/node/sub-resource.d.ts.map +1 -0
  90. package/dist/node/sub-resource.js +72 -0
  91. package/dist/node/sub-resource.js.map +1 -0
  92. package/dist/node/top-resource.d.ts +7 -0
  93. package/dist/node/top-resource.d.ts.map +1 -0
  94. package/dist/node/top-resource.js +8 -0
  95. package/dist/node/top-resource.js.map +1 -0
  96. package/dist/paths.d.ts +2 -0
  97. package/dist/paths.d.ts.map +1 -0
  98. package/dist/paths.js +5 -0
  99. package/dist/paths.js.map +1 -0
  100. package/dist/resources/configmap/configmap.d.ts +12 -0
  101. package/dist/resources/configmap/configmap.d.ts.map +1 -0
  102. package/dist/resources/configmap/configmap.js +79 -0
  103. package/dist/resources/configmap/configmap.js.map +1 -0
  104. package/dist/resources/configmap/index.d.ts +2 -0
  105. package/dist/resources/configmap/index.d.ts.map +1 -0
  106. package/dist/resources/configmap/index.js +18 -0
  107. package/dist/resources/configmap/index.js.map +1 -0
  108. package/dist/resources/deployment/deployment.d.ts +18 -0
  109. package/dist/resources/deployment/deployment.d.ts.map +1 -0
  110. package/dist/resources/deployment/deployment.js +99 -0
  111. package/dist/resources/deployment/deployment.js.map +1 -0
  112. package/dist/resources/deployment/index.d.ts +2 -0
  113. package/dist/resources/deployment/index.d.ts.map +1 -0
  114. package/dist/resources/deployment/index.js +18 -0
  115. package/dist/resources/deployment/index.js.map +1 -0
  116. package/dist/resources/http-route/http-route.d.ts +17 -0
  117. package/dist/resources/http-route/http-route.d.ts.map +1 -0
  118. package/dist/resources/http-route/http-route.js +93 -0
  119. package/dist/resources/http-route/http-route.js.map +1 -0
  120. package/dist/resources/http-route/index.d.ts +2 -0
  121. package/dist/resources/http-route/index.d.ts.map +1 -0
  122. package/dist/resources/http-route/index.js +18 -0
  123. package/dist/resources/http-route/index.js.map +1 -0
  124. package/dist/resources/index.d.ts +9 -0
  125. package/dist/resources/index.d.ts.map +1 -0
  126. package/dist/resources/index.js +25 -0
  127. package/dist/resources/index.js.map +1 -0
  128. package/dist/resources/namespace/index.d.ts +2 -0
  129. package/dist/resources/namespace/index.d.ts.map +1 -0
  130. package/dist/resources/namespace/index.js +18 -0
  131. package/dist/resources/namespace/index.js.map +1 -0
  132. package/dist/resources/namespace/namespace.d.ts +13 -0
  133. package/dist/resources/namespace/namespace.d.ts.map +1 -0
  134. package/dist/resources/namespace/namespace.js +79 -0
  135. package/dist/resources/namespace/namespace.js.map +1 -0
  136. package/dist/resources/persistent/access-mode.d.ts +8 -0
  137. package/dist/resources/persistent/access-mode.d.ts.map +1 -0
  138. package/dist/resources/persistent/access-mode.js +29 -0
  139. package/dist/resources/persistent/access-mode.js.map +1 -0
  140. package/dist/resources/persistent/block-mode.d.ts +2 -0
  141. package/dist/resources/persistent/block-mode.d.ts.map +1 -0
  142. package/dist/resources/persistent/block-mode.js +3 -0
  143. package/dist/resources/persistent/block-mode.js.map +1 -0
  144. package/dist/resources/persistent/claim/index.d.ts +2 -0
  145. package/dist/resources/persistent/claim/index.d.ts.map +1 -0
  146. package/dist/resources/persistent/claim/index.js +18 -0
  147. package/dist/resources/persistent/claim/index.js.map +1 -0
  148. package/dist/resources/persistent/claim/pvc.d.ts +23 -0
  149. package/dist/resources/persistent/claim/pvc.d.ts.map +1 -0
  150. package/dist/resources/persistent/claim/pvc.js +99 -0
  151. package/dist/resources/persistent/claim/pvc.js.map +1 -0
  152. package/dist/resources/persistent/index.d.ts +11 -0
  153. package/dist/resources/persistent/index.d.ts.map +1 -0
  154. package/dist/resources/persistent/index.js +13 -0
  155. package/dist/resources/persistent/index.js.map +1 -0
  156. package/dist/resources/persistent/volume/backend.d.ts +13 -0
  157. package/dist/resources/persistent/volume/backend.d.ts.map +1 -0
  158. package/dist/resources/persistent/volume/backend.js +3 -0
  159. package/dist/resources/persistent/volume/backend.js.map +1 -0
  160. package/dist/resources/persistent/volume/index.d.ts +2 -0
  161. package/dist/resources/persistent/volume/index.d.ts.map +1 -0
  162. package/dist/resources/persistent/volume/index.js +18 -0
  163. package/dist/resources/persistent/volume/index.js.map +1 -0
  164. package/dist/resources/persistent/volume/parse-backend.d.ts +14 -0
  165. package/dist/resources/persistent/volume/parse-backend.d.ts.map +1 -0
  166. package/dist/resources/persistent/volume/parse-backend.js +26 -0
  167. package/dist/resources/persistent/volume/parse-backend.js.map +1 -0
  168. package/dist/resources/persistent/volume/pv.d.ts +26 -0
  169. package/dist/resources/persistent/volume/pv.d.ts.map +1 -0
  170. package/dist/resources/persistent/volume/pv.js +95 -0
  171. package/dist/resources/persistent/volume/pv.js.map +1 -0
  172. package/dist/resources/pod/container/container.d.ts +44 -0
  173. package/dist/resources/pod/container/container.d.ts.map +1 -0
  174. package/dist/resources/pod/container/container.js +156 -0
  175. package/dist/resources/pod/container/container.js.map +1 -0
  176. package/dist/resources/pod/container/index.d.ts +2 -0
  177. package/dist/resources/pod/container/index.d.ts.map +1 -0
  178. package/dist/resources/pod/container/index.js +18 -0
  179. package/dist/resources/pod/container/index.js.map +1 -0
  180. package/dist/resources/pod/container/mounts.d.ts +27 -0
  181. package/dist/resources/pod/container/mounts.d.ts.map +1 -0
  182. package/dist/resources/pod/container/mounts.js +40 -0
  183. package/dist/resources/pod/container/mounts.js.map +1 -0
  184. package/dist/resources/pod/index.d.ts +4 -0
  185. package/dist/resources/pod/index.d.ts.map +1 -0
  186. package/dist/resources/pod/index.js +20 -0
  187. package/dist/resources/pod/index.js.map +1 -0
  188. package/dist/resources/pod/pod-template.d.ts +29 -0
  189. package/dist/resources/pod/pod-template.d.ts.map +1 -0
  190. package/dist/resources/pod/pod-template.js +123 -0
  191. package/dist/resources/pod/pod-template.js.map +1 -0
  192. package/dist/resources/pod/volume/devices.d.ts +23 -0
  193. package/dist/resources/pod/volume/devices.d.ts.map +1 -0
  194. package/dist/resources/pod/volume/devices.js +94 -0
  195. package/dist/resources/pod/volume/devices.js.map +1 -0
  196. package/dist/resources/pod/volume/index.d.ts +4 -0
  197. package/dist/resources/pod/volume/index.d.ts.map +1 -0
  198. package/dist/resources/pod/volume/index.js +10 -0
  199. package/dist/resources/pod/volume/index.js.map +1 -0
  200. package/dist/resources/pod/volume/volumes.d.ts +30 -0
  201. package/dist/resources/pod/volume/volumes.d.ts.map +1 -0
  202. package/dist/resources/pod/volume/volumes.js +124 -0
  203. package/dist/resources/pod/volume/volumes.js.map +1 -0
  204. package/dist/resources/secret/index.d.ts +4 -0
  205. package/dist/resources/secret/index.d.ts.map +1 -0
  206. package/dist/resources/secret/index.js +39 -0
  207. package/dist/resources/secret/index.js.map +1 -0
  208. package/dist/resources/secret/secret.d.ts +9 -0
  209. package/dist/resources/secret/secret.d.ts.map +1 -0
  210. package/dist/resources/secret/secret.js +77 -0
  211. package/dist/resources/secret/secret.js.map +1 -0
  212. package/dist/resources/service/frontend.d.ts +11 -0
  213. package/dist/resources/service/frontend.d.ts.map +1 -0
  214. package/dist/resources/service/frontend.js +3 -0
  215. package/dist/resources/service/frontend.js.map +1 -0
  216. package/dist/resources/service/index.d.ts +2 -0
  217. package/dist/resources/service/index.d.ts.map +1 -0
  218. package/dist/resources/service/index.js +18 -0
  219. package/dist/resources/service/index.js.map +1 -0
  220. package/dist/resources/service/service-port.d.ts +19 -0
  221. package/dist/resources/service/service-port.d.ts.map +1 -0
  222. package/dist/resources/service/service-port.js +21 -0
  223. package/dist/resources/service/service-port.js.map +1 -0
  224. package/dist/resources/service/service.d.ts +21 -0
  225. package/dist/resources/service/service.d.ts.map +1 -0
  226. package/dist/resources/service/service.js +99 -0
  227. package/dist/resources/service/service.js.map +1 -0
  228. package/dist/resources/utils/adapters.d.ts +8 -0
  229. package/dist/resources/utils/adapters.d.ts.map +1 -0
  230. package/dist/resources/utils/adapters.js +38 -0
  231. package/dist/resources/utils/adapters.js.map +1 -0
  232. package/dist/runner/exporter/assembler.d.ts +50 -0
  233. package/dist/runner/exporter/assembler.d.ts.map +1 -0
  234. package/dist/runner/exporter/assembler.js +122 -0
  235. package/dist/runner/exporter/assembler.js.map +1 -0
  236. package/dist/runner/exporter/index.d.ts +3 -0
  237. package/dist/runner/exporter/index.d.ts.map +1 -0
  238. package/dist/runner/exporter/index.js +19 -0
  239. package/dist/runner/exporter/index.js.map +1 -0
  240. package/dist/runner/exporter/loader.d.ts +19 -0
  241. package/dist/runner/exporter/loader.d.ts.map +1 -0
  242. package/dist/runner/exporter/loader.js +47 -0
  243. package/dist/runner/exporter/loader.js.map +1 -0
  244. package/dist/runner/exporter/manifester.d.ts +21 -0
  245. package/dist/runner/exporter/manifester.d.ts.map +1 -0
  246. package/dist/runner/exporter/manifester.js +72 -0
  247. package/dist/runner/exporter/manifester.js.map +1 -0
  248. package/dist/runner/exporter/meta.d.ts +2 -0
  249. package/dist/runner/exporter/meta.d.ts.map +1 -0
  250. package/dist/runner/exporter/meta.js +5 -0
  251. package/dist/runner/exporter/meta.js.map +1 -0
  252. package/dist/runner/exporter/progress-shower.d.ts +11 -0
  253. package/dist/runner/exporter/progress-shower.d.ts.map +1 -0
  254. package/dist/runner/exporter/progress-shower.js +68 -0
  255. package/dist/runner/exporter/progress-shower.js.map +1 -0
  256. package/dist/runner/exporter/saver.d.ts +27 -0
  257. package/dist/runner/exporter/saver.d.ts.map +1 -0
  258. package/dist/runner/exporter/saver.js +49 -0
  259. package/dist/runner/exporter/saver.js.map +1 -0
  260. package/dist/runner/exporter/serializer.d.ts +18 -0
  261. package/dist/runner/exporter/serializer.d.ts.map +1 -0
  262. package/dist/runner/exporter/serializer.js +47 -0
  263. package/dist/runner/exporter/serializer.js.map +1 -0
  264. package/dist/runner/exporter/stage.d.ts +9 -0
  265. package/dist/runner/exporter/stage.d.ts.map +1 -0
  266. package/dist/runner/exporter/stage.js +94 -0
  267. package/dist/runner/exporter/stage.js.map +1 -0
  268. package/dist/runner/exporter/trace-embedder.d.ts +1 -0
  269. package/dist/runner/exporter/trace-embedder.d.ts.map +1 -0
  270. package/dist/runner/exporter/trace-embedder.js +2 -0
  271. package/dist/runner/exporter/trace-embedder.js.map +1 -0
  272. package/dist/runner/index.d.ts +2 -0
  273. package/dist/runner/index.d.ts.map +1 -0
  274. package/dist/runner/index.js +18 -0
  275. package/dist/runner/index.js.map +1 -0
  276. package/dist/runner/proverbs.d.ts +1 -0
  277. package/dist/runner/proverbs.d.ts.map +1 -0
  278. package/dist/runner/proverbs.js +2 -0
  279. package/dist/runner/proverbs.js.map +1 -0
  280. package/dist/runner/runner.d.ts +13 -0
  281. package/dist/runner/runner.d.ts.map +1 -0
  282. package/dist/runner/runner.js +51 -0
  283. package/dist/runner/runner.js.map +1 -0
  284. package/dist/runner/silly/proverbs.d.ts +7 -0
  285. package/dist/runner/silly/proverbs.d.ts.map +1 -0
  286. package/dist/runner/silly/proverbs.js +20 -0
  287. package/dist/runner/silly/proverbs.js.map +1 -0
  288. package/dist/runner/summarizer.d.ts +23 -0
  289. package/dist/runner/summarizer.d.ts.map +1 -0
  290. package/dist/runner/summarizer.js +115 -0
  291. package/dist/runner/summarizer.js.map +1 -0
  292. package/dist/src.tsbuildinfo +1 -0
  293. package/dist/test.tsbuildinfo +1 -0
  294. package/dist/version.d.ts +2 -0
  295. package/dist/version.d.ts.map +1 -0
  296. package/dist/version.js +5 -0
  297. package/dist/version.js.map +1 -0
  298. package/dist/world/index.d.ts +2 -0
  299. package/dist/world/index.d.ts.map +1 -0
  300. package/dist/world/index.js +18 -0
  301. package/dist/world/index.js.map +1 -0
  302. package/dist/world/world.d.ts +28 -0
  303. package/dist/world/world.d.ts.map +1 -0
  304. package/dist/world/world.js +41 -0
  305. package/dist/world/world.js.map +1 -0
  306. package/package.json +106 -0
  307. package/proverbs.txt +23 -0
  308. package/src/_imports/_mix.ts +3 -0
  309. package/src/_imports/acme.cert-manager.io.ts +8202 -0
  310. package/src/_imports/gateway.networking.k8s.io.ts +12226 -0
  311. package/src/_imports/index.ts +2 -0
  312. package/src/_imports/k8s.ts +31028 -0
  313. package/src/_imports/tsconfig.json +22 -0
  314. package/src/api-versions.ts +5 -0
  315. package/src/error.ts +7 -0
  316. package/src/external/index.ts +34 -0
  317. package/src/file/exports.ts +63 -0
  318. package/src/file/factory.ts +150 -0
  319. package/src/file/file.ts +34 -0
  320. package/src/file/index.ts +1 -0
  321. package/src/file/origin.ts +38 -0
  322. package/src/index.ts +8 -0
  323. package/src/k8ts-sys-kind.ts +4 -0
  324. package/src/kind-map.ts +39 -0
  325. package/src/meta/k8ts-section.ts +6 -0
  326. package/src/node/abs-resource.ts +32 -0
  327. package/src/node/dependencies.ts +0 -0
  328. package/src/node/index.ts +1 -0
  329. package/src/node/manifest-resource.ts +19 -0
  330. package/src/node/sub-resource.ts +20 -0
  331. package/src/node/top-resource.ts +7 -0
  332. package/src/paths.ts +1 -0
  333. package/src/resources/configmap/configmap.ts +26 -0
  334. package/src/resources/configmap/index.ts +1 -0
  335. package/src/resources/deployment/deployment.ts +54 -0
  336. package/src/resources/deployment/index.ts +1 -0
  337. package/src/resources/http-route/http-route.ts +45 -0
  338. package/src/resources/http-route/index.ts +1 -0
  339. package/src/resources/index.ts +8 -0
  340. package/src/resources/namespace/index.ts +1 -0
  341. package/src/resources/namespace/namespace.ts +26 -0
  342. package/src/resources/persistent/access-mode.ts +29 -0
  343. package/src/resources/persistent/block-mode.ts +1 -0
  344. package/src/resources/persistent/claim/index.ts +1 -0
  345. package/src/resources/persistent/claim/pvc.ts +52 -0
  346. package/src/resources/persistent/index.ts +10 -0
  347. package/src/resources/persistent/volume/backend.ts +14 -0
  348. package/src/resources/persistent/volume/index.ts +1 -0
  349. package/src/resources/persistent/volume/parse-backend.ts +23 -0
  350. package/src/resources/persistent/volume/pv.ts +56 -0
  351. package/src/resources/pod/container/container.ts +137 -0
  352. package/src/resources/pod/container/index.ts +1 -0
  353. package/src/resources/pod/container/mounts.ts +45 -0
  354. package/src/resources/pod/index.ts +3 -0
  355. package/src/resources/pod/pod-template.ts +73 -0
  356. package/src/resources/pod/volume/devices.ts +50 -0
  357. package/src/resources/pod/volume/index.ts +3 -0
  358. package/src/resources/pod/volume/volumes.ts +90 -0
  359. package/src/resources/secret/index.ts +3 -0
  360. package/src/resources/secret/secret.ts +25 -0
  361. package/src/resources/service/frontend.ts +11 -0
  362. package/src/resources/service/index.ts +1 -0
  363. package/src/resources/service/service-port.ts +24 -0
  364. package/src/resources/service/service.ts +53 -0
  365. package/src/resources/utils/adapters.ts +36 -0
  366. package/src/runner/exporter/FILE xyz.md +47 -0
  367. package/src/runner/exporter/assembler.ts +170 -0
  368. package/src/runner/exporter/index.ts +2 -0
  369. package/src/runner/exporter/loader.ts +54 -0
  370. package/src/runner/exporter/manifester.ts +77 -0
  371. package/src/runner/exporter/meta.ts +1 -0
  372. package/src/runner/exporter/progress-shower.ts +77 -0
  373. package/src/runner/exporter/saver.ts +62 -0
  374. package/src/runner/exporter/serializer.ts +49 -0
  375. package/src/runner/exporter/stage.ts +36 -0
  376. package/src/runner/exporter/trace-embedder.ts +0 -0
  377. package/src/runner/index.ts +1 -0
  378. package/src/runner/proverbs.ts +0 -0
  379. package/src/runner/runner.ts +53 -0
  380. package/src/runner/silly/proverbs.ts +14 -0
  381. package/src/runner/summarizer.ts +133 -0
  382. package/src/tsconfig.json +16 -0
  383. package/src/version.ts +1 -0
  384. package/src/world/index.ts +1 -0
  385. package/src/world/world.ts +62 -0
@@ -0,0 +1 @@
1
+ export * from "./service"
@@ -0,0 +1,24 @@
1
+ import type { Service } from "./service"
2
+
3
+ export type Port<Port extends string> = Port.Port<Port>
4
+ export namespace Port {
5
+ export interface Props<Port extends string> {
6
+ service: Service<Port>
7
+ port: Port
8
+ }
9
+
10
+ export class Port<Port extends string> {
11
+ constructor(
12
+ readonly service: Service<Port>,
13
+ readonly port: Port
14
+ ) {}
15
+
16
+ ref() {
17
+ return {
18
+ kind: "Service",
19
+ namespace: this.service.meta.tryGet("namespace"),
20
+ name: this.service.meta.get("name")
21
+ }
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,53 @@
1
+ import { manifest, relations, type InputPortMapping } from "@k8ts/instruments"
2
+ import { CDK } from "../../_imports"
3
+ import { v1 } from "../../api-versions"
4
+ import { k8ts } from "../../kind-map"
5
+ import { ManifestResource } from "../../node"
6
+ import type { Deployment } from "../deployment/deployment"
7
+ import { toServicePorts } from "../utils/adapters"
8
+
9
+ import { Frontend as Frontend_ } from "./frontend"
10
+ import { Port as Port_ } from "./service-port"
11
+ export type Service<Ports extends string> = Service.Service<Ports>
12
+ export namespace Service {
13
+ export import Port = Port_
14
+ export import Frontend = Frontend_
15
+ export interface Props<Ports extends string> {
16
+ ports: InputPortMapping<Ports>
17
+ backend: Deployment.Deployment<Ports>
18
+ frontend: Frontend
19
+ }
20
+
21
+ const ident = v1.kind("Service")
22
+ @k8ts(ident)
23
+ @relations({
24
+ needs: self => ({
25
+ backend: self.props.backend
26
+ })
27
+ })
28
+ @manifest({
29
+ body(self): CDK.KubeServiceProps {
30
+ const svcPorts = self.ports
31
+ return {
32
+ spec: {
33
+ ports: toServicePorts(svcPorts).toArray(),
34
+ selector: self.props.backend.meta.pick("%app").labels,
35
+ ...self.props.frontend
36
+ }
37
+ }
38
+ }
39
+ })
40
+ export class Service<Ports extends string = string> extends ManifestResource<Props<Ports>> {
41
+ kind = ident
42
+
43
+ get ports() {
44
+ const srcPorts = this.props.backend.ports.pull()
45
+ const svcPorts = srcPorts.map(this.props.ports)
46
+ return svcPorts
47
+ }
48
+
49
+ getPortRef(port: Ports) {
50
+ return new Port.Port(this, port)
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,36 @@
1
+ import type { EnvBuilder, PortMap, PortMapEntry, PortSet, PortSetEntry } from "@k8ts/instruments"
2
+ import { CDK } from "../../_imports"
3
+
4
+ export function toContainerPort(entry: PortSetEntry): CDK.ContainerPort {
5
+ return {
6
+ containerPort: entry.port,
7
+ name: entry.name,
8
+ protocol: entry.protocol
9
+ }
10
+ }
11
+
12
+ export function toContainerPorts(ports: PortSet<any>) {
13
+ return ports.values.map(toContainerPort)
14
+ }
15
+
16
+ export function toServicePort(entry: PortMapEntry): CDK.ServicePort {
17
+ return {
18
+ port: entry.source,
19
+ targetPort: CDK.IntOrString.fromNumber(entry.target),
20
+ protocol: entry.protocol,
21
+ name: entry.name
22
+ }
23
+ }
24
+
25
+ export function toServicePorts(ports: PortMap<any>) {
26
+ return ports.values.map(toServicePort).toList()
27
+ }
28
+
29
+ export function toEnvVars(env: EnvBuilder) {
30
+ return env.values.map((x, key) => {
31
+ return {
32
+ name: key,
33
+ value: x
34
+ } as CDK.EnvVar
35
+ })
36
+ }
@@ -0,0 +1,47 @@
1
+ FILE xyz.yaml
2
+
3
+ Service _ ZZ
4
+ HttpRoute _ OtherThing
5
+ Gateway --> Gateway
6
+ Deployment _ ABC
7
+ PodTemplate _ (no name)
8
+ Volume _ Xyz
9
+ PVC --> AAA
10
+ Container _ z
11
+ Volume --> ABC : /mnt/data
12
+ Container \* y
13
+ Volume --> ABC : /mnt/data
14
+
15
+ Service/X: - @Deployment/AAA
16
+ HttpRoute/X: - @Service/X
17
+ Deployment/X:
18
+ PodTemplate:
19
+ Container/XYZ: - Own/Thing: 222 - /mnt/data --> Volume/ABC -
20
+
21
+ Container/
22
+ - /mnt/b: @Volume/ABC
23
+ Volume:
24
+ - A:
25
+ - @Claim/AAA
26
+ - B:
27
+ - @Claim/XYZ
28
+
29
+ Claim/AAA:
30
+
31
+ - @Deployment/ABC
32
+
33
+ ---> BackThing/Hello (backend) \* ABC/AYZ
34
+ ---> OtherThing/Goodbye (service)
35
+
36
+ - Deployment/ ABC [app=x]
37
+ - - PodTemplate [app=x]
38
+ - * Container/ XYZ
39
+ --> Volume/ Xyz : /mnt/data
40
+
41
+ * Volume A
42
+ --> AAA [PersistentVolumeClaim]
43
+
44
+ - @ N
45
+ - @ Name 3/
46
+ - * xtz
47
+ - * abc
@@ -0,0 +1,170 @@
1
+ import { BaseManifest, Origin, ResourceNode } from "@k8ts/instruments"
2
+ import { Meta } from "@k8ts/metadata"
3
+ import { aseq } from "doddle"
4
+ import Emittery from "emittery"
5
+ import { cloneDeep } from "lodash"
6
+ import type { File } from "../../file"
7
+ import { ResourceLoader, type ResourceLoaderEventsTable } from "./loader"
8
+ import { Manifester, type ManifesterEventsTable } from "./manifester"
9
+ import { ManifestSaver, type ManifestSaverEventsTable } from "./saver"
10
+ import { YamlSerializer, type YamlSerializerEventsTable } from "./serializer"
11
+
12
+ export class Assembler extends Emittery<AssemblerEventsTable> {
13
+ constructor(private readonly _options: AssemblerOptions) {
14
+ super()
15
+ }
16
+
17
+ async assemble(inFiles: Iterable<File.Input>) {
18
+ const _emit = async <Name extends keyof AssemblerEventsTable>(
19
+ event: Name,
20
+ payload: AssemblerEventsTable[Name]
21
+ ) => {
22
+ return await this.emit(event, payload)
23
+ }
24
+ const loader = new ResourceLoader({})
25
+ loader.onAny(_emit)
26
+ const generator = new Manifester({
27
+ cwd: this._options.cwd
28
+ })
29
+ generator.onAny(_emit)
30
+ const serializer = new YamlSerializer({})
31
+ serializer.onAny(_emit)
32
+ const saver = new ManifestSaver({
33
+ outdir: this._options.outdir
34
+ })
35
+ saver.onAny(_emit)
36
+ const reports = aseq(inFiles)
37
+ .before(async () => {
38
+ await _emit("stage", { stage: "gathering" })
39
+ })
40
+ .each(async file => {
41
+ await _emit("received-file", { file: file.__node__ })
42
+ })
43
+ .after(async () => {
44
+ await _emit("stage", { stage: "loading" })
45
+ })
46
+ .collect()
47
+ .map(async file => {
48
+ const loaded = await loader.load(file)
49
+ loaded.forEach(r => r.meta!.add(this._options.meta))
50
+ return {
51
+ file: file.__entity__,
52
+ resources: loaded.filter(x => !x.isExternal)
53
+ }
54
+ })
55
+ .after(async () => {
56
+ await _emit("stage", { stage: "manifesting" })
57
+ })
58
+ .collect()
59
+ .map(async ({ file, resources }) => {
60
+ const manifests = await aseq(resources)
61
+ .map(async resource => {
62
+ return {
63
+ k8ts: resource,
64
+ manifest: await generator.generate(resource)
65
+ }
66
+ })
67
+ .toArray()
68
+ .pull()
69
+
70
+ return {
71
+ file,
72
+ manifests
73
+ }
74
+ })
75
+ .after(async () => {
76
+ await _emit("stage", { stage: "serializing" })
77
+ })
78
+ .collect()
79
+ .map(async ({ file, manifests }) => {
80
+ const artifacts = await aseq(manifests)
81
+ .map(async obj => {
82
+ return {
83
+ ...obj,
84
+ yaml: await serializer.serialize(obj.manifest)
85
+ }
86
+ })
87
+ .toArray()
88
+ .pull()
89
+
90
+ return {
91
+ file,
92
+ artifacts
93
+ }
94
+ })
95
+ .after(async () => {
96
+ await _emit("stage", { stage: "saving" })
97
+ })
98
+ .after(async () => {
99
+ await saver.prepareOnce()
100
+ })
101
+ .collect()
102
+ .map(async ({ file, artifacts }) => {
103
+ const { filename, bytes, path } = await saver.save(
104
+ file.node,
105
+ artifacts.map(x => x.yaml)
106
+ )
107
+ return {
108
+ file: file.node,
109
+ path,
110
+ filename,
111
+ bytes,
112
+ artifacts
113
+ }
114
+ })
115
+ .after(async () => {
116
+ await _emit("stage", { stage: "done" })
117
+ })
118
+ .collect()
119
+ .toArray()
120
+ const files = (await reports.pull()) satisfies AssembledFile[]
121
+ return {
122
+ files,
123
+ options: cloneDeep(this._options)
124
+ } as AssembledResult
125
+ }
126
+ }
127
+ export interface Artifact {
128
+ k8ts: ResourceNode
129
+ manifest: BaseManifest
130
+ yaml: string
131
+ }
132
+ export interface AssembledFile {
133
+ file: Origin
134
+ path: string
135
+ filename: string
136
+ bytes: number
137
+ artifacts: Artifact[]
138
+ }
139
+ export interface AssembledResult {
140
+ files: AssembledFile[]
141
+ options: AssemblerOptions
142
+ }
143
+ export interface AssemblerOptions {
144
+ cwd?: string
145
+ printOptions?: boolean
146
+ outdir: string
147
+ meta?: Omit<Meta.Input, "name" | "namespace"> | Meta
148
+ }
149
+ export type AssemblyStage =
150
+ | "loading"
151
+ | "manifesting"
152
+ | "serializing"
153
+ | "saving"
154
+ | "start"
155
+ | "reporting"
156
+ | "done"
157
+ | "gathering"
158
+ export interface AssemblerEventsTable
159
+ extends ManifestSaverEventsTable,
160
+ YamlSerializerEventsTable,
161
+ ManifesterEventsTable,
162
+ ResourceLoaderEventsTable {
163
+ ["received-file"]: { file: Origin }
164
+ ["stage"]: { stage: AssemblyStage }
165
+ }
166
+ export type AnyAssemblerEvent = {
167
+ [K in keyof AssemblerEventsTable]: AssemblerEventsTable[K] & {
168
+ type: K
169
+ }
170
+ }[keyof AssemblerEventsTable]
@@ -0,0 +1,2 @@
1
+ export * from "./assembler"
2
+ export * from "./progress-shower"
@@ -0,0 +1,54 @@
1
+ import { ForwardRef, ResourceNode } from "@k8ts/instruments"
2
+ import { seq } from "doddle"
3
+ import Emittery from "emittery"
4
+ import { List } from "immutable"
5
+ import { MakeError } from "../../error"
6
+ import type { File } from "../../file"
7
+ import { k8ts_namespace } from "./meta"
8
+ export class ResourceLoader extends Emittery<ResourceLoaderEventsTable> {
9
+ constructor(private readonly _options: ResourceLoaderOptions) {
10
+ super()
11
+ }
12
+
13
+ private _attachSourceAnnotations(loadEvent: ResourceLoadedEvent) {
14
+ const { resource } = loadEvent
15
+
16
+ resource.meta!.add(k8ts_namespace, {
17
+ "^declared-in": `(${resource.origin.root.name}) ${resource.origin.name}`
18
+ })
19
+ }
20
+
21
+ async load(input: File.Input) {
22
+ let resources = List<ResourceNode>()
23
+ seq(input).drain().pull()
24
+ for (let res of input.__node__.resources) {
25
+ const origin = res.origin
26
+ if (!origin.isChildOf(origin)) {
27
+ throw new MakeError(`Resource ${res} is not a child of the input file ${input}`)
28
+ }
29
+ if (ForwardRef.is(res)) {
30
+ throw new MakeError(`Resource ${res} is a forward reference`)
31
+ }
32
+ const event = {
33
+ isExported: res.meta!.has(`#${k8ts_namespace}is-exported`),
34
+ resource: res
35
+ } as const
36
+
37
+ this._attachSourceAnnotations(event)
38
+ await this.emit("load", event)
39
+ resources = resources.push(res)
40
+ }
41
+
42
+ return resources.toArray()
43
+ }
44
+ }
45
+ export interface ResourceLoadedEvent {
46
+ isExported: boolean
47
+ resource: ResourceNode
48
+ }
49
+
50
+ export interface ResourceLoaderEventsTable {
51
+ load: ResourceLoadedEvent
52
+ }
53
+
54
+ export interface ResourceLoaderOptions {}
@@ -0,0 +1,77 @@
1
+ import { BaseManifest, ResourceNode, TraceEmbedder } from "@k8ts/instruments"
2
+ import Emittery from "emittery"
3
+ import { cloneDeep, cloneDeepWith, isEmpty, unset } from "lodash"
4
+ import { ManifestResource } from "../../node"
5
+ import { version } from "../../version"
6
+ import { k8ts_namespace } from "./meta"
7
+ export interface ManifesterOptions {
8
+ cwd?: string
9
+ }
10
+ export class Manifester extends Emittery<ManifesterEventsTable> {
11
+ constructor(private readonly _options: ManifesterOptions) {
12
+ super()
13
+ }
14
+ private _cleanSpecificEmptyObjects(manifest: BaseManifest) {
15
+ const clone = cloneDeepWith(manifest, (value, key) => {
16
+ if (key !== "metadata") {
17
+ return
18
+ }
19
+ for (const k in value) {
20
+ if (["labels", "annotations"].includes(k)) {
21
+ if (isEmpty(value[k])) {
22
+ unset(value, k)
23
+ }
24
+ }
25
+ }
26
+ })
27
+ return clone
28
+ }
29
+ private _cleanNullishValues(manifest: BaseManifest) {
30
+ const _cleanKeys = (obj: any) => {
31
+ if (typeof obj !== "object") {
32
+ return obj
33
+ }
34
+ for (const [k, v] of Object.entries(obj)) {
35
+ if (v == null) {
36
+ delete obj[k]
37
+ }
38
+ }
39
+ return undefined
40
+ }
41
+ const clone = cloneDeep(manifest)
42
+
43
+ return cloneDeepWith(clone, _cleanKeys)
44
+ }
45
+ private _generate(resource: ManifestResource): BaseManifest {
46
+ const manifest = resource["manifest"]()
47
+ const noNullish = this._cleanNullishValues(manifest)
48
+ const noEmpty = this._cleanSpecificEmptyObjects(noNullish)
49
+ return noEmpty
50
+ }
51
+
52
+ private _attachProductionAnnotations(resource: ResourceNode) {
53
+ const origin = resource.origin
54
+ const entry = TraceEmbedder.get(resource)
55
+ const loc = resource.trace.format({
56
+ cwd: this._options.cwd
57
+ })
58
+ resource.meta!.add(k8ts_namespace, {
59
+ "^constructed-at": loc,
60
+ "^produced-by": `k8ts@${version}`
61
+ })
62
+ }
63
+
64
+ async generate(res: ResourceNode) {
65
+ this._attachProductionAnnotations(res)
66
+ await this.emit("manifest", { resource: res })
67
+ const manifest = this._generate(res.entity as ManifestResource)
68
+ return manifest
69
+ }
70
+ }
71
+ export interface ManifesterManifestEvent {
72
+ resource: ResourceNode
73
+ }
74
+
75
+ export interface ManifesterEventsTable {
76
+ manifest: ManifesterManifestEvent
77
+ }
@@ -0,0 +1 @@
1
+ export const k8ts_namespace = "k8ts.org/" as const
@@ -0,0 +1,77 @@
1
+ import { attr, dest, ManifestSourceEmbedder, pretty, quantity, verb } from "@k8ts/instruments"
2
+ import ora from "ora"
3
+ import { setTimeout } from "timers/promises"
4
+ import type { Assembler, AssemblerEventsTable, AssemblyStage } from "./assembler"
5
+ import { stage } from "./stage"
6
+ export interface ProgressOptions {
7
+ waitTransition?: number
8
+ debug?: boolean
9
+ }
10
+
11
+ function typedOnAny(
12
+ target: Assembler,
13
+ handler: (
14
+ typedEvent: {
15
+ [K in keyof AssemblerEventsTable]: AssemblerEventsTable[K] & { type: K }
16
+ }[keyof AssemblerEventsTable]
17
+ ) => void | Promise<void>
18
+ ) {
19
+ return target.onAny((name, ev) => {
20
+ return handler({ ...ev, type: name } as any)
21
+ })
22
+ }
23
+
24
+ export class ProgressShower {
25
+ constructor(private readonly _options: ProgressOptions) {}
26
+ async visualize(events: Assembler) {
27
+ const spinner = ora({
28
+ spinner: "dots",
29
+ text: "K8ts is getting ready..."
30
+ })
31
+ spinner.text = "abc"
32
+ let filesWritten = 0
33
+ let lastStage: AssemblyStage = "start"
34
+ const unsub = typedOnAny(events, async event => {
35
+ switch (event.type) {
36
+ case "load":
37
+ spinner.text = pretty`${verb("Load")} ${attr(
38
+ event.isExported ? "exported" : ""
39
+ )} ${event.resource} `
40
+ break
41
+ case "stage":
42
+ if (event.stage !== "done") {
43
+ return
44
+ }
45
+ spinner.text = pretty`${stage(event.stage)}`
46
+ break
47
+ case "received-file":
48
+ spinner.text = pretty`${verb("Receive")} ${event.file}`
49
+ break
50
+ case "serialize":
51
+ const rsc = ManifestSourceEmbedder.get(event.manifest)
52
+ spinner.text = pretty`${verb("Serialize")} ${rsc}`
53
+ break
54
+ case "save":
55
+ spinner.text = pretty`${verb("Save")} ${dest(event.filename)} (${quantity(event.bytes, "byte")})`
56
+ break
57
+
58
+ case "manifest":
59
+ spinner.text = pretty`${verb("Manifest")} ${event.resource}`
60
+ break
61
+ case "purge":
62
+ spinner.text = pretty`${verb("Purge")} ${dest(event.outdir)}`
63
+ break
64
+ }
65
+ if (this._options.waitTransition) {
66
+ await setTimeout(this._options.waitTransition)
67
+ }
68
+ spinner.render()
69
+
70
+ if (this._options.debug) {
71
+ console.log()
72
+ }
73
+ })
74
+
75
+ spinner.render()
76
+ }
77
+ }
@@ -0,0 +1,62 @@
1
+ import type { Origin } from "@k8ts/instruments"
2
+ import Emittery from "emittery"
3
+ import { mkdir, rm, writeFile } from "fs/promises"
4
+ import { join, resolve } from "path"
5
+
6
+ export class ManifestSaver extends Emittery<ManifestSaverEventsTable> {
7
+ private _encoder = new TextEncoder()
8
+ constructor(private readonly _options: ManifestSaverOptions) {
9
+ super()
10
+ }
11
+
12
+ _splat(manifests: string[]) {
13
+ return manifests.join("\n---\n")
14
+ }
15
+
16
+ async prepareOnce() {
17
+ await this.emit("purge", {
18
+ outdir: this._options.outdir
19
+ })
20
+ await rm(this._options.outdir, {
21
+ force: true,
22
+ maxRetries: 2,
23
+ retryDelay: 500,
24
+ recursive: true
25
+ })
26
+ await mkdir(this._options.outdir, { recursive: true })
27
+ }
28
+
29
+ async save(origin: Origin, manifests: string[]) {
30
+ const content = this._splat(manifests)
31
+ const filename = `${origin.name}`
32
+ const encoded = this._encoder.encode(content)
33
+ const outPath = resolve(this._options.outdir, filename)
34
+ const e: SavingManifestEvent = {
35
+ filename,
36
+ path: outPath,
37
+ content: content,
38
+ bytes: encoded.byteLength
39
+ }
40
+ await this.emit("save", e)
41
+ await mkdir(this._options.outdir, { recursive: true })
42
+ await writeFile(join(this._options.outdir, filename), encoded)
43
+ return e
44
+ }
45
+ }
46
+ export interface SavingManifestEvent {
47
+ path: string
48
+ filename: string
49
+ content: string
50
+ bytes: number
51
+ }
52
+ export interface PurgingDirEvent {
53
+ outdir: string
54
+ }
55
+ export interface ManifestSaverEventsTable {
56
+ save: SavingManifestEvent
57
+ purge: PurgingDirEvent
58
+ }
59
+
60
+ export interface ManifestSaverOptions {
61
+ outdir: string
62
+ }
@@ -0,0 +1,49 @@
1
+ import { BaseManifest, ManifestSourceEmbedder } from "@k8ts/instruments"
2
+ import Emittery from "emittery"
3
+ import { dump, type DumpOptions } from "js-yaml"
4
+ import { CDK } from "../../_imports"
5
+ import { MakeError } from "../../error"
6
+
7
+ export interface YamlSerializerOptions {
8
+ jsYamlOptions: DumpOptions
9
+ }
10
+ export interface SerializingEvent {
11
+ manifest: BaseManifest
12
+ }
13
+ export interface YamlSerializerEventsTable {
14
+ serialize: SerializingEvent
15
+ }
16
+ export class YamlSerializer extends Emittery<YamlSerializerEventsTable> {
17
+ constructor(private readonly _options: Partial<YamlSerializerOptions>) {
18
+ super()
19
+ }
20
+
21
+ async serialize(input: BaseManifest) {
22
+ await this.emit("serialize", { manifest: input })
23
+
24
+ try {
25
+ const result = dump(input, {
26
+ lineWidth: 800,
27
+ noArrayIndent: true,
28
+ indent: 2,
29
+ replacer(key, value) {
30
+ if (value instanceof CDK.IntOrString) {
31
+ return value.value
32
+ }
33
+ if (value instanceof CDK.Quantity) {
34
+ return value.value
35
+ }
36
+ return value
37
+ },
38
+ ...this._options.jsYamlOptions,
39
+ noRefs: true
40
+ })
41
+ return result
42
+ } catch (err) {
43
+ const resource = ManifestSourceEmbedder.get(input)
44
+ throw new MakeError(`Failed to serialize manifest ${resource?.shortFqn ?? "???"}`, {
45
+ cause: err
46
+ })
47
+ }
48
+ }
49
+ }