@supatype/cli 0.1.0-alpha.9 → 0.1.1

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 (407) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/.turbo/turbo-test.log +285 -69
  3. package/.turbo/turbo-typecheck.log +1 -1
  4. package/assets/supatype-logo-wordmark.ascii.txt +6 -0
  5. package/bin/dev-entry.ts +2 -1
  6. package/dist/app/framework.js +1 -3
  7. package/dist/app/framework.js.map +1 -1
  8. package/dist/app/proxy-dev-app.d.ts +14 -0
  9. package/dist/app/proxy-dev-app.d.ts.map +1 -1
  10. package/dist/app/proxy-dev-app.js +110 -6
  11. package/dist/app/proxy-dev-app.js.map +1 -1
  12. package/dist/app-config.d.ts +10 -0
  13. package/dist/app-config.d.ts.map +1 -1
  14. package/dist/app-config.js +72 -0
  15. package/dist/app-config.js.map +1 -1
  16. package/dist/assets/supatype-logo-wordmark.ascii.txt +6 -0
  17. package/dist/binary-cache.d.ts +19 -7
  18. package/dist/binary-cache.d.ts.map +1 -1
  19. package/dist/binary-cache.js +92 -46
  20. package/dist/binary-cache.js.map +1 -1
  21. package/dist/cli.d.ts +1 -1
  22. package/dist/cli.d.ts.map +1 -1
  23. package/dist/cli.js +17 -2
  24. package/dist/cli.js.map +1 -1
  25. package/dist/commands/add.d.ts +3 -0
  26. package/dist/commands/add.d.ts.map +1 -0
  27. package/dist/commands/add.js +86 -0
  28. package/dist/commands/add.js.map +1 -0
  29. package/dist/commands/admin.d.ts +28 -1
  30. package/dist/commands/admin.d.ts.map +1 -1
  31. package/dist/commands/admin.js +297 -149
  32. package/dist/commands/admin.js.map +1 -1
  33. package/dist/commands/adopt.d.ts +3 -0
  34. package/dist/commands/adopt.d.ts.map +1 -0
  35. package/dist/commands/adopt.js +55 -0
  36. package/dist/commands/adopt.js.map +1 -0
  37. package/dist/commands/app.d.ts.map +1 -1
  38. package/dist/commands/app.js +20 -17
  39. package/dist/commands/app.js.map +1 -1
  40. package/dist/commands/cache.d.ts.map +1 -1
  41. package/dist/commands/cache.js +11 -10
  42. package/dist/commands/cache.js.map +1 -1
  43. package/dist/commands/cloud.d.ts +4 -9
  44. package/dist/commands/cloud.d.ts.map +1 -1
  45. package/dist/commands/cloud.js +75 -125
  46. package/dist/commands/cloud.js.map +1 -1
  47. package/dist/commands/db.d.ts.map +1 -1
  48. package/dist/commands/db.js +37 -58
  49. package/dist/commands/db.js.map +1 -1
  50. package/dist/commands/deploy.d.ts.map +1 -1
  51. package/dist/commands/deploy.js +140 -96
  52. package/dist/commands/deploy.js.map +1 -1
  53. package/dist/commands/dev.d.ts.map +1 -1
  54. package/dist/commands/dev.js +74 -39
  55. package/dist/commands/dev.js.map +1 -1
  56. package/dist/commands/diff.d.ts.map +1 -1
  57. package/dist/commands/diff.js +39 -39
  58. package/dist/commands/diff.js.map +1 -1
  59. package/dist/commands/doctor.d.ts +3 -0
  60. package/dist/commands/doctor.d.ts.map +1 -0
  61. package/dist/commands/doctor.js +78 -0
  62. package/dist/commands/doctor.js.map +1 -0
  63. package/dist/commands/engine.d.ts.map +1 -1
  64. package/dist/commands/engine.js +5 -4
  65. package/dist/commands/engine.js.map +1 -1
  66. package/dist/commands/functions.d.ts.map +1 -1
  67. package/dist/commands/functions.js +172 -119
  68. package/dist/commands/functions.js.map +1 -1
  69. package/dist/commands/generate.d.ts.map +1 -1
  70. package/dist/commands/generate.js +5 -4
  71. package/dist/commands/generate.js.map +1 -1
  72. package/dist/commands/init.d.ts +35 -1
  73. package/dist/commands/init.d.ts.map +1 -1
  74. package/dist/commands/init.js +883 -107
  75. package/dist/commands/init.js.map +1 -1
  76. package/dist/commands/introspect.d.ts +3 -0
  77. package/dist/commands/introspect.d.ts.map +1 -0
  78. package/dist/commands/introspect.js +35 -0
  79. package/dist/commands/introspect.js.map +1 -0
  80. package/dist/commands/keys.d.ts +15 -1
  81. package/dist/commands/keys.d.ts.map +1 -1
  82. package/dist/commands/keys.js +46 -10
  83. package/dist/commands/keys.js.map +1 -1
  84. package/dist/commands/link-helpers.d.ts +15 -0
  85. package/dist/commands/link-helpers.d.ts.map +1 -0
  86. package/dist/commands/link-helpers.js +225 -0
  87. package/dist/commands/link-helpers.js.map +1 -0
  88. package/dist/commands/logs.d.ts.map +1 -1
  89. package/dist/commands/logs.js +5 -4
  90. package/dist/commands/logs.js.map +1 -1
  91. package/dist/commands/migrate-from-v1.d.ts.map +1 -1
  92. package/dist/commands/migrate-from-v1.js +3 -2
  93. package/dist/commands/migrate-from-v1.js.map +1 -1
  94. package/dist/commands/migrate.d.ts.map +1 -1
  95. package/dist/commands/migrate.js +119 -26
  96. package/dist/commands/migrate.js.map +1 -1
  97. package/dist/commands/pg.d.ts.map +1 -1
  98. package/dist/commands/pg.js +11 -12
  99. package/dist/commands/pg.js.map +1 -1
  100. package/dist/commands/plugins.d.ts.map +1 -1
  101. package/dist/commands/plugins.js +55 -46
  102. package/dist/commands/plugins.js.map +1 -1
  103. package/dist/commands/pull.d.ts.map +1 -1
  104. package/dist/commands/pull.js +33 -5
  105. package/dist/commands/pull.js.map +1 -1
  106. package/dist/commands/push.d.ts.map +1 -1
  107. package/dist/commands/push.js +111 -138
  108. package/dist/commands/push.js.map +1 -1
  109. package/dist/commands/seed.d.ts.map +1 -1
  110. package/dist/commands/seed.js +4 -3
  111. package/dist/commands/seed.js.map +1 -1
  112. package/dist/commands/self-host.d.ts +2 -2
  113. package/dist/commands/self-host.d.ts.map +1 -1
  114. package/dist/commands/self-host.js +65 -50
  115. package/dist/commands/self-host.js.map +1 -1
  116. package/dist/commands/self-update.d.ts.map +1 -1
  117. package/dist/commands/self-update.js +3 -2
  118. package/dist/commands/self-update.js.map +1 -1
  119. package/dist/commands/status.d.ts +1 -1
  120. package/dist/commands/status.d.ts.map +1 -1
  121. package/dist/commands/status.js +95 -29
  122. package/dist/commands/status.js.map +1 -1
  123. package/dist/commands/types.d.ts.map +1 -1
  124. package/dist/commands/types.js +3 -2
  125. package/dist/commands/types.js.map +1 -1
  126. package/dist/commands/update.d.ts.map +1 -1
  127. package/dist/commands/update.js +54 -21
  128. package/dist/commands/update.js.map +1 -1
  129. package/dist/compose-rename.d.ts +10 -0
  130. package/dist/compose-rename.d.ts.map +1 -0
  131. package/dist/compose-rename.js +67 -0
  132. package/dist/compose-rename.js.map +1 -0
  133. package/dist/config.d.ts +2 -1
  134. package/dist/config.d.ts.map +1 -1
  135. package/dist/config.js.map +1 -1
  136. package/dist/dev-compose.d.ts +26 -0
  137. package/dist/dev-compose.d.ts.map +1 -1
  138. package/dist/dev-compose.js +357 -79
  139. package/dist/dev-compose.js.map +1 -1
  140. package/dist/dev-log-bus.d.ts +30 -0
  141. package/dist/dev-log-bus.d.ts.map +1 -0
  142. package/dist/dev-log-bus.js +87 -0
  143. package/dist/dev-log-bus.js.map +1 -0
  144. package/dist/dev-log-filter.d.ts +10 -0
  145. package/dist/dev-log-filter.d.ts.map +1 -0
  146. package/dist/dev-log-filter.js +36 -0
  147. package/dist/dev-log-filter.js.map +1 -0
  148. package/dist/dev-logo.d.ts +12 -0
  149. package/dist/dev-logo.d.ts.map +1 -0
  150. package/dist/dev-logo.js +56 -0
  151. package/dist/dev-logo.js.map +1 -0
  152. package/dist/dev-ports.d.ts +27 -0
  153. package/dist/dev-ports.d.ts.map +1 -0
  154. package/dist/dev-ports.js +171 -0
  155. package/dist/dev-ports.js.map +1 -0
  156. package/dist/dev-session-lock.d.ts +25 -0
  157. package/dist/dev-session-lock.d.ts.map +1 -0
  158. package/dist/dev-session-lock.js +81 -0
  159. package/dist/dev-session-lock.js.map +1 -0
  160. package/dist/dev-session.d.ts +26 -0
  161. package/dist/dev-session.d.ts.map +1 -0
  162. package/dist/dev-session.js +106 -0
  163. package/dist/dev-session.js.map +1 -0
  164. package/dist/dev-shutdown.d.ts +25 -0
  165. package/dist/dev-shutdown.d.ts.map +1 -0
  166. package/dist/dev-shutdown.js +114 -0
  167. package/dist/dev-shutdown.js.map +1 -0
  168. package/dist/dev-task-colors.d.ts +13 -0
  169. package/dist/dev-task-colors.d.ts.map +1 -0
  170. package/dist/dev-task-colors.js +43 -0
  171. package/dist/dev-task-colors.js.map +1 -0
  172. package/dist/dev-tui.d.ts +24 -0
  173. package/dist/dev-tui.d.ts.map +1 -0
  174. package/dist/dev-tui.js +188 -0
  175. package/dist/dev-tui.js.map +1 -0
  176. package/dist/diff-output.d.ts +5 -1
  177. package/dist/diff-output.d.ts.map +1 -1
  178. package/dist/diff-output.js +69 -0
  179. package/dist/diff-output.js.map +1 -1
  180. package/dist/docker-runtime.d.ts +30 -0
  181. package/dist/docker-runtime.d.ts.map +1 -0
  182. package/dist/docker-runtime.js +118 -0
  183. package/dist/docker-runtime.js.map +1 -0
  184. package/dist/engine-client.d.ts +10 -1
  185. package/dist/engine-client.d.ts.map +1 -1
  186. package/dist/engine-client.js +76 -17
  187. package/dist/engine-client.js.map +1 -1
  188. package/dist/engine-push-output.d.ts +17 -0
  189. package/dist/engine-push-output.d.ts.map +1 -0
  190. package/dist/engine-push-output.js +64 -0
  191. package/dist/engine-push-output.js.map +1 -0
  192. package/dist/ensure-binary.js +2 -2
  193. package/dist/ensure-binary.js.map +1 -1
  194. package/dist/env-file.d.ts +5 -0
  195. package/dist/env-file.d.ts.map +1 -0
  196. package/dist/env-file.js +33 -0
  197. package/dist/env-file.js.map +1 -0
  198. package/dist/gitignore.d.ts +8 -0
  199. package/dist/gitignore.d.ts.map +1 -0
  200. package/dist/gitignore.js +41 -0
  201. package/dist/gitignore.js.map +1 -0
  202. package/dist/kong-config.d.ts +9 -0
  203. package/dist/kong-config.d.ts.map +1 -1
  204. package/dist/kong-config.js +18 -1
  205. package/dist/kong-config.js.map +1 -1
  206. package/dist/link.d.ts +66 -0
  207. package/dist/link.d.ts.map +1 -0
  208. package/dist/link.js +160 -0
  209. package/dist/link.js.map +1 -0
  210. package/dist/process-manager.d.ts +8 -0
  211. package/dist/process-manager.d.ts.map +1 -1
  212. package/dist/process-manager.js +53 -9
  213. package/dist/process-manager.js.map +1 -1
  214. package/dist/project-config.d.ts +30 -3
  215. package/dist/project-config.d.ts.map +1 -1
  216. package/dist/project-config.js +37 -4
  217. package/dist/project-config.js.map +1 -1
  218. package/dist/prompts.d.ts +3 -0
  219. package/dist/prompts.d.ts.map +1 -0
  220. package/dist/prompts.js +3 -0
  221. package/dist/prompts.js.map +1 -0
  222. package/dist/pull-utils.d.ts +50 -14
  223. package/dist/pull-utils.d.ts.map +1 -1
  224. package/dist/pull-utils.js +152 -12
  225. package/dist/pull-utils.js.map +1 -1
  226. package/dist/resolve-target.d.ts +86 -0
  227. package/dist/resolve-target.d.ts.map +1 -0
  228. package/dist/resolve-target.js +291 -0
  229. package/dist/resolve-target.js.map +1 -0
  230. package/dist/restore-system-relation-targets.d.ts +3 -0
  231. package/dist/restore-system-relation-targets.d.ts.map +1 -0
  232. package/dist/restore-system-relation-targets.js +45 -0
  233. package/dist/restore-system-relation-targets.js.map +1 -0
  234. package/dist/runtime-routes.d.ts.map +1 -1
  235. package/dist/runtime-routes.js +7 -0
  236. package/dist/runtime-routes.js.map +1 -1
  237. package/dist/schema-ast-v2.d.ts +1 -1
  238. package/dist/schema-ast-v2.d.ts.map +1 -1
  239. package/dist/schema-ast-v2.js +2 -2
  240. package/dist/schema-ast-v2.js.map +1 -1
  241. package/dist/schema-sources.d.ts +40 -0
  242. package/dist/schema-sources.d.ts.map +1 -0
  243. package/dist/schema-sources.js +183 -0
  244. package/dist/schema-sources.js.map +1 -0
  245. package/dist/scripts/postinstall.js +5 -1
  246. package/dist/scripts/postinstall.js.map +1 -1
  247. package/dist/self-host-compose.d.ts +37 -1
  248. package/dist/self-host-compose.d.ts.map +1 -1
  249. package/dist/self-host-compose.js +234 -43
  250. package/dist/self-host-compose.js.map +1 -1
  251. package/dist/storage-provision.d.ts +4 -0
  252. package/dist/storage-provision.d.ts.map +1 -1
  253. package/dist/storage-provision.js +24 -2
  254. package/dist/storage-provision.js.map +1 -1
  255. package/dist/supatype-eval-1781522769253.d.mts +2 -0
  256. package/dist/supatype-eval-1781522769253.d.mts.map +1 -0
  257. package/dist/supatype-eval-1781522769253.mjs +3 -0
  258. package/dist/supatype-eval-1781522769253.mjs.map +1 -0
  259. package/dist/systemd.js +2 -2
  260. package/dist/systemd.js.map +1 -1
  261. package/dist/target-client.d.ts +10 -0
  262. package/dist/target-client.d.ts.map +1 -0
  263. package/dist/target-client.js +22 -0
  264. package/dist/target-client.js.map +1 -0
  265. package/dist/type-extractor.d.ts +11 -0
  266. package/dist/type-extractor.d.ts.map +1 -1
  267. package/dist/type-extractor.js +95 -8
  268. package/dist/type-extractor.js.map +1 -1
  269. package/dist/ui/brand.d.ts +9 -0
  270. package/dist/ui/brand.d.ts.map +1 -0
  271. package/dist/ui/brand.js +11 -0
  272. package/dist/ui/brand.js.map +1 -0
  273. package/dist/ui/confirm.d.ts +12 -0
  274. package/dist/ui/confirm.d.ts.map +1 -0
  275. package/dist/ui/confirm.js +28 -0
  276. package/dist/ui/confirm.js.map +1 -0
  277. package/dist/ui/fatal.d.ts +10 -0
  278. package/dist/ui/fatal.d.ts.map +1 -0
  279. package/dist/ui/fatal.js +34 -0
  280. package/dist/ui/fatal.js.map +1 -0
  281. package/dist/ui/index.d.ts +9 -0
  282. package/dist/ui/index.d.ts.map +1 -0
  283. package/dist/ui/index.js +9 -0
  284. package/dist/ui/index.js.map +1 -0
  285. package/dist/ui/interactive.d.ts +3 -0
  286. package/dist/ui/interactive.d.ts.map +1 -0
  287. package/dist/ui/interactive.js +5 -0
  288. package/dist/ui/interactive.js.map +1 -0
  289. package/dist/ui/messages.d.ts +10 -0
  290. package/dist/ui/messages.d.ts.map +1 -0
  291. package/dist/ui/messages.js +35 -0
  292. package/dist/ui/messages.js.map +1 -0
  293. package/dist/ui/next-steps.d.ts +3 -0
  294. package/dist/ui/next-steps.d.ts.map +1 -0
  295. package/dist/ui/next-steps.js +10 -0
  296. package/dist/ui/next-steps.js.map +1 -0
  297. package/dist/ui/progress.d.ts +5 -0
  298. package/dist/ui/progress.d.ts.map +1 -0
  299. package/dist/ui/progress.js +24 -0
  300. package/dist/ui/progress.js.map +1 -0
  301. package/dist/ui/prompts.d.ts +14 -0
  302. package/dist/ui/prompts.d.ts.map +1 -0
  303. package/dist/ui/prompts.js +34 -0
  304. package/dist/ui/prompts.js.map +1 -0
  305. package/package.json +5 -2
  306. package/src/app/framework.ts +1 -3
  307. package/src/app/proxy-dev-app.ts +114 -6
  308. package/src/app-config.ts +80 -0
  309. package/src/binary-cache.ts +102 -52
  310. package/src/cli.ts +16 -2
  311. package/src/commands/add.ts +97 -0
  312. package/src/commands/admin.ts +381 -190
  313. package/src/commands/adopt.ts +82 -0
  314. package/src/commands/app.ts +20 -17
  315. package/src/commands/cache.ts +11 -10
  316. package/src/commands/cloud.ts +91 -142
  317. package/src/commands/db.ts +40 -63
  318. package/src/commands/deploy.ts +186 -126
  319. package/src/commands/dev.ts +98 -55
  320. package/src/commands/diff.ts +52 -43
  321. package/src/commands/doctor.ts +103 -0
  322. package/src/commands/engine.ts +5 -4
  323. package/src/commands/functions.ts +187 -123
  324. package/src/commands/generate.ts +5 -4
  325. package/src/commands/init.ts +1087 -104
  326. package/src/commands/introspect.ts +48 -0
  327. package/src/commands/keys.ts +56 -14
  328. package/src/commands/link-helpers.ts +273 -0
  329. package/src/commands/logs.ts +5 -4
  330. package/src/commands/migrate-from-v1.ts +3 -2
  331. package/src/commands/migrate.ts +167 -27
  332. package/src/commands/pg.ts +13 -18
  333. package/src/commands/plugins.ts +55 -46
  334. package/src/commands/pull.ts +38 -9
  335. package/src/commands/push.ts +148 -175
  336. package/src/commands/seed.ts +5 -4
  337. package/src/commands/self-host.ts +85 -54
  338. package/src/commands/self-update.ts +3 -2
  339. package/src/commands/status.ts +102 -33
  340. package/src/commands/types.ts +3 -2
  341. package/src/commands/update.ts +59 -23
  342. package/src/compose-rename.ts +76 -0
  343. package/src/config.ts +2 -1
  344. package/src/dev-compose.ts +462 -76
  345. package/src/dev-log-bus.ts +101 -0
  346. package/src/dev-log-filter.ts +32 -0
  347. package/src/dev-logo.ts +61 -0
  348. package/src/dev-ports.ts +212 -0
  349. package/src/dev-session-lock.ts +101 -0
  350. package/src/dev-session.ts +130 -0
  351. package/src/dev-shutdown.ts +147 -0
  352. package/src/dev-task-colors.ts +47 -0
  353. package/src/dev-tui.ts +232 -0
  354. package/src/diff-output.ts +79 -1
  355. package/src/docker-runtime.ts +151 -0
  356. package/src/engine-client.ts +81 -17
  357. package/src/engine-push-output.ts +75 -0
  358. package/src/ensure-binary.ts +2 -2
  359. package/src/env-file.ts +37 -0
  360. package/src/gitignore.ts +48 -0
  361. package/src/kong-config.ts +24 -1
  362. package/src/link.ts +243 -0
  363. package/src/process-manager.ts +66 -10
  364. package/src/project-config.ts +62 -7
  365. package/src/prompts.ts +2 -0
  366. package/src/pull-utils.ts +217 -23
  367. package/src/resolve-target.ts +419 -0
  368. package/src/restore-system-relation-targets.ts +45 -0
  369. package/src/runtime-routes.ts +7 -0
  370. package/src/schema-ast-v2.ts +2 -1
  371. package/src/schema-sources.ts +248 -0
  372. package/src/scripts/postinstall.ts +7 -1
  373. package/src/self-host-compose.ts +262 -46
  374. package/src/storage-provision.ts +33 -1
  375. package/src/supatype-eval-1781522769253.mts +1 -0
  376. package/src/systemd.ts +2 -2
  377. package/src/target-client.ts +40 -0
  378. package/src/type-extractor.ts +124 -11
  379. package/src/ui/README.md +17 -0
  380. package/src/ui/brand.ts +12 -0
  381. package/src/ui/confirm.ts +38 -0
  382. package/src/ui/fatal.ts +43 -0
  383. package/src/ui/index.ts +8 -0
  384. package/src/ui/interactive.ts +4 -0
  385. package/src/ui/messages.ts +43 -0
  386. package/src/ui/next-steps.ts +10 -0
  387. package/src/ui/progress.ts +28 -0
  388. package/src/ui/prompts.ts +40 -0
  389. package/tests/admin-ensure.test.ts +59 -0
  390. package/tests/cli-help.test.ts +27 -2
  391. package/tests/config.test.ts +29 -2
  392. package/tests/dev-ports.test.ts +41 -0
  393. package/tests/dev-session-lock.test.ts +54 -0
  394. package/tests/dev-ui.test.ts +162 -0
  395. package/tests/docker-runtime.test.ts +236 -0
  396. package/tests/engine-push-output.test.ts +67 -0
  397. package/tests/init.test.ts +197 -18
  398. package/tests/link.test.ts +148 -0
  399. package/tests/minisign.test.ts +102 -0
  400. package/tests/proxy-dev-app.test.ts +45 -1
  401. package/tests/pull-utils.test.ts +5 -4
  402. package/tests/runtime-contract.test.ts +186 -2
  403. package/tests/schema-sources.test.ts +119 -0
  404. package/tests/storage-provision.test.ts +100 -0
  405. package/tests/ui-confirm.test.ts +41 -0
  406. package/tests/ui-messages.test.ts +66 -0
  407. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/ui/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,OAAM;IACR,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,eAAe,IAAI,OAAO,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,OAAM;IACR,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,IAAI,OAAO,EAAE,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACpB,OAAM;IACR,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,GAAG,eAAe,IAAI,OAAO,EAAE,CAAC,CAAA;AAChD,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,KAAK,CAAC,OAAO,GAAG,EAAE;IAChC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAa;IAChC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAA;AAC3B,CAAC;AAID,MAAM,UAAU,IAAI,CAAC,MAAkB,EAAE,GAAW;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,KAAK,GAAG,EAAE,CAAC,CAAA;AACpC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Print a numbered or bulleted “next steps” block. */
2
+ export declare function nextSteps(title: string, steps: string[]): void;
3
+ //# sourceMappingURL=next-steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-steps.d.ts","sourceRoot":"","sources":["../../src/ui/next-steps.ts"],"names":[],"mappings":"AAEA,uDAAuD;AACvD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAM9D"}
@@ -0,0 +1,10 @@
1
+ import { plain } from "./messages.js";
2
+ /** Print a numbered or bulleted “next steps” block. */
3
+ export function nextSteps(title, steps) {
4
+ plain(`\n${title}`);
5
+ for (const step of steps) {
6
+ plain(` ${step}`);
7
+ }
8
+ plain();
9
+ }
10
+ //# sourceMappingURL=next-steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-steps.js","sourceRoot":"","sources":["../../src/ui/next-steps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAErC,uDAAuD;AACvD,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,KAAe;IACtD,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC,CAAA;IACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IACpB,CAAC;IACD,KAAK,EAAE,CAAA;AACT,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Run an async task with a Clack spinner (TTY) or a plain status line (CI/pipes).
3
+ */
4
+ export declare function withSpinner<T>(message: string, task: () => Promise<T>, doneMessage?: string): Promise<T>;
5
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/ui/progress.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,CAAC,CAgBZ"}
@@ -0,0 +1,24 @@
1
+ import * as p from "@clack/prompts";
2
+ import { isInteractive } from "./interactive.js";
3
+ import { info } from "./messages.js";
4
+ /**
5
+ * Run an async task with a Clack spinner (TTY) or a plain status line (CI/pipes).
6
+ */
7
+ export async function withSpinner(message, task, doneMessage) {
8
+ if (!isInteractive()) {
9
+ info(`${message}...`);
10
+ return task();
11
+ }
12
+ const spinner = p.spinner();
13
+ spinner.start(message);
14
+ try {
15
+ const result = await task();
16
+ spinner.stop(doneMessage ?? message);
17
+ return result;
18
+ }
19
+ catch (err) {
20
+ spinner.stop("Failed");
21
+ throw err;
22
+ }
23
+ }
24
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/ui/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAe,EACf,IAAsB,EACtB,WAAoB;IAEpB,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC,CAAA;QACrB,OAAO,IAAI,EAAE,CAAA;IACf,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;IAC3B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;QAC3B,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,CAAA;QACpC,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtB,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import * as p from "@clack/prompts";
2
+ /** Print the coloured Supatype ASCII wordmark at the top of an interactive command. */
3
+ export declare function printLogo(): void;
4
+ /**
5
+ * Unwrap a clack prompt result, exiting cleanly when the user cancels (Ctrl-C).
6
+ */
7
+ export declare function ensureNotCancelled<T>(value: T | symbol, cancelMessage?: string): T;
8
+ /** Single-line text input via Clack (TTY only). */
9
+ export declare function promptText(message: string, opts?: {
10
+ defaultValue?: string;
11
+ placeholder?: string;
12
+ }): Promise<string>;
13
+ export { p as clack };
14
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAA;AAKnC,uFAAuF;AACvF,wBAAgB,SAAS,IAAI,IAAI,CAIhC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,aAAa,SAAe,GAAG,CAAC,CAMxF;AAED,mDAAmD;AACnD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED,OAAO,EAAE,CAAC,IAAI,KAAK,EAAE,CAAA"}
@@ -0,0 +1,34 @@
1
+ import * as p from "@clack/prompts";
2
+ import { SUPATYPE_ASCII_LOGO_WORDMARK, colorLogoLines } from "../dev-logo.js";
3
+ import { plain } from "./messages.js";
4
+ import { isInteractive } from "./interactive.js";
5
+ /** Print the coloured Supatype ASCII wordmark at the top of an interactive command. */
6
+ export function printLogo() {
7
+ plain();
8
+ plain(colorLogoLines([...SUPATYPE_ASCII_LOGO_WORDMARK]).join("\n"));
9
+ plain();
10
+ }
11
+ /**
12
+ * Unwrap a clack prompt result, exiting cleanly when the user cancels (Ctrl-C).
13
+ */
14
+ export function ensureNotCancelled(value, cancelMessage = "Cancelled.") {
15
+ if (p.isCancel(value)) {
16
+ p.cancel(cancelMessage);
17
+ process.exit(0);
18
+ }
19
+ return value;
20
+ }
21
+ /** Single-line text input via Clack (TTY only). */
22
+ export async function promptText(message, opts) {
23
+ if (!isInteractive()) {
24
+ throw new Error(`Cannot prompt for "${message}" in non-interactive mode.`);
25
+ }
26
+ const value = await p.text({
27
+ message,
28
+ ...(opts?.defaultValue !== undefined ? { defaultValue: opts.defaultValue } : {}),
29
+ ...(opts?.placeholder !== undefined ? { placeholder: opts.placeholder } : {}),
30
+ });
31
+ return ensureNotCancelled(value).trim();
32
+ }
33
+ export { p as clack };
34
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,4BAA4B,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC7E,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,uFAAuF;AACvF,MAAM,UAAU,SAAS;IACvB,KAAK,EAAE,CAAA;IACP,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACnE,KAAK,EAAE,CAAA;AACT,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAI,KAAiB,EAAE,aAAa,GAAG,YAAY;IACnF,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,KAAU,CAAA;AACnB,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe,EACf,IAAsD;IAEtD,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,4BAA4B,CAAC,CAAA;IAC5E,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;QACzB,OAAO;QACP,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC,CAAA;IACF,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;AACzC,CAAC;AAED,OAAO,EAAE,CAAC,IAAI,KAAK,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supatype/cli",
3
- "version": "0.1.0-alpha.9",
3
+ "version": "0.1.1",
4
4
  "description": "Supatype CLI — schema push, introspect, generate",
5
5
  "type": "module",
6
6
  "bin": {
@@ -19,6 +19,8 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
+ "@clack/prompts": "^1.6.0",
23
+ "bcryptjs": "^3.0.2",
22
24
  "commander": "^12.1.0",
23
25
  "pg": "^8.13.0",
24
26
  "ts-morph": "^28.0.0",
@@ -26,12 +28,13 @@
26
28
  "typescript": "^5"
27
29
  },
28
30
  "devDependencies": {
31
+ "@types/bcryptjs": "^2.4.6",
29
32
  "@types/node": "^22",
30
33
  "@types/pg": "^8",
31
34
  "vitest": "^4.0.18"
32
35
  },
33
36
  "scripts": {
34
- "build": "tsc --project tsconfig.json",
37
+ "build": "tsc --project tsconfig.json && node --input-type=module -e \"import{cpSync,mkdirSync}from'node:fs';const a='dist/assets';mkdirSync(a,{recursive:true});cpSync('assets/supatype-logo-wordmark.ascii.txt',a+'/supatype-logo-wordmark.ascii.txt')\"",
35
38
  "dev": "tsc --project tsconfig.json --watch",
36
39
  "typecheck": "tsc --project tsconfig.json --noEmit",
37
40
  "postinstall": "node --input-type=module --eval \"import{existsSync}from'node:fs';import{resolve}from'node:path';import{pathToFileURL}from'node:url';const f=resolve(process.cwd(),'dist/scripts/postinstall.js');if(existsSync(f))await import(pathToFileURL(f).href)\"",
@@ -4,7 +4,7 @@
4
4
  * build command, output directory, and SPA mode defaults.
5
5
  */
6
6
 
7
- import { existsSync, readFileSync } from "node:fs"
7
+ import { existsSync, readFileSync, readdirSync, statSync } from "node:fs"
8
8
  import { join, resolve } from "node:path"
9
9
  import type { AppConfig, AppFramework } from "../config.js"
10
10
 
@@ -227,7 +227,6 @@ export function validateBuildOutput(outputDir: string, maxSizeMb: number): strin
227
227
  }
228
228
 
229
229
  function findHtmlFile(dir: string): boolean {
230
- const { readdirSync, statSync } = require("node:fs") as typeof import("node:fs")
231
230
  for (const entry of readdirSync(dir, { withFileTypes: true })) {
232
231
  if (entry.isFile() && entry.name.endsWith(".html")) return true
233
232
  if (entry.isDirectory()) {
@@ -238,7 +237,6 @@ function findHtmlFile(dir: string): boolean {
238
237
  }
239
238
 
240
239
  function getDirSizeMb(dir: string): number {
241
- const { readdirSync, statSync } = require("node:fs") as typeof import("node:fs")
242
240
  let size = 0
243
241
  for (const entry of readdirSync(dir, { withFileTypes: true })) {
244
242
  const path = join(dir, entry.name)
@@ -2,10 +2,12 @@
2
2
  * Spawn the frontend dev server during `supatype dev` when app.mode is proxy.
3
3
  */
4
4
 
5
+ import { execSync } from "node:child_process"
5
6
  import { existsSync, readFileSync } from "node:fs"
6
7
  import { join } from "node:path"
7
8
  import { detectPackageManager } from "./framework.js"
8
- import { ProcessManager } from "../process-manager.js"
9
+ import { appendDevTaskLog } from "../dev-session.js"
10
+ import { ProcessManager, readPid } from "../process-manager.js"
9
11
  import { projectRootFromConfig, type SupatypeProjectConfig } from "../project-config.js"
10
12
 
11
13
  const DEFAULT_PROXY_DEV_SCRIPT = "start"
@@ -17,6 +19,102 @@ export function resolveProxyDevScript(config: SupatypeProjectConfig): string | n
17
19
  return script && script.length > 0 ? script : DEFAULT_PROXY_DEV_SCRIPT
18
20
  }
19
21
 
22
+ /** Port from app.upstream (e.g. http://localhost:5285 → 5285). */
23
+ export function portFromUpstream(config: SupatypeProjectConfig): number | null {
24
+ const raw = config.app?.upstream?.trim()
25
+ if (!raw) return null
26
+ try {
27
+ const port = new URL(raw).port
28
+ if (!port) return null
29
+ const n = Number(port)
30
+ return Number.isFinite(n) && n > 0 ? n : null
31
+ } catch {
32
+ return null
33
+ }
34
+ }
35
+
36
+ function killPidTree(pid: number): void {
37
+ if (!Number.isFinite(pid) || pid <= 0) return
38
+ try {
39
+ if (process.platform === "win32") {
40
+ execSync(`taskkill /pid ${pid} /T /F`, { stdio: "ignore" })
41
+ } else {
42
+ execSync(`kill -9 ${pid}`, { stdio: "ignore" })
43
+ }
44
+ } catch {
45
+ /* already gone */
46
+ }
47
+ }
48
+
49
+ function killPortListeners(port: number): void {
50
+ if (process.platform === "win32") {
51
+ try {
52
+ const out = execSync(`netstat -ano | findstr :${port}`, { encoding: "utf8" })
53
+ const pids = new Set<string>()
54
+ for (const line of out.split("\n")) {
55
+ const match = line.match(/LISTENING\s+(\d+)/)
56
+ if (match?.[1]) pids.add(match[1])
57
+ }
58
+ for (const pid of pids) {
59
+ try {
60
+ execSync(`taskkill /pid ${pid} /T /F`, { stdio: "ignore" })
61
+ } catch {
62
+ /* already gone */
63
+ }
64
+ }
65
+ } catch {
66
+ /* nothing listening */
67
+ }
68
+ return
69
+ }
70
+
71
+ try {
72
+ const out = execSync(`lsof -ti :${port}`, { encoding: "utf8" })
73
+ for (const pid of out.trim().split(/\s+/)) {
74
+ try {
75
+ execSync(`kill -9 ${pid}`, { stdio: "ignore" })
76
+ } catch {
77
+ /* already gone */
78
+ }
79
+ }
80
+ } catch {
81
+ /* nothing listening */
82
+ }
83
+ }
84
+
85
+ /** Free the upstream port and any stale app PID before spawning Vite. */
86
+ export function freeProxyDevPort(pidDir: string, port: number): void {
87
+ const stalePid = readPid(pidDir, "app")
88
+ if (stalePid) killPidTree(stalePid)
89
+ killPortListeners(port)
90
+ }
91
+
92
+ /**
93
+ * When a package.json script only runs Vite, spawn node + vite.js directly.
94
+ * Avoids Windows shell shims (pnpm → bash → vite) that orphan the real server
95
+ * and break PID-based cleanup / auto-restart.
96
+ */
97
+ export function resolveViteDirectSpawn(
98
+ appDir: string,
99
+ script: string,
100
+ scripts: Record<string, string> | undefined,
101
+ ): { bin: string; args: string[]; shell: boolean } | null {
102
+ const body = scripts?.[script]?.trim() ?? ""
103
+ if (!body) return null
104
+
105
+ const runsVite =
106
+ body === "vite" ||
107
+ /^vite\s/.test(body) ||
108
+ body.includes("vite/bin/vite")
109
+
110
+ if (!runsVite) return null
111
+
112
+ const viteJs = join(appDir, "node_modules", "vite", "bin", "vite.js")
113
+ if (!existsSync(viteJs)) return null
114
+
115
+ return { bin: process.execPath, args: [viteJs], shell: false }
116
+ }
117
+
20
118
  /**
21
119
  * Start the configured package.json script for proxy dev.
22
120
  * Returns null when not in proxy mode or when the script is missing.
@@ -47,13 +145,22 @@ export function startProxyDevApp(
47
145
  return null
48
146
  }
49
147
 
148
+ const upstreamPort = portFromUpstream(config)
149
+ const directVite = resolveViteDirectSpawn(appDir, script, pkg.scripts)
50
150
  const pm = detectPackageManager(appDir)
51
- const bin = pm
52
- const args = pm === "yarn" ? [script] : ["run", script]
53
- // pnpm/npm/yarn are .cmd shims on Windows spawn via shell so PATH resolution works.
54
- const useShell = process.platform === "win32"
151
+ const bin = directVite?.bin ?? pm
152
+ const args = directVite?.args ?? (pm === "yarn" ? [script] : ["run", script])
153
+ const useShell = directVite ? false : process.platform === "win32"
154
+
155
+ appendDevTaskLog(
156
+ "app",
157
+ "app",
158
+ directVite
159
+ ? `Proxy mode: running node vite.js (${appDir})`
160
+ : `Proxy mode: running ${bin} ${args.join(" ")} (${appDir})`,
161
+ )
55
162
 
56
- console.log(`[supatype] Proxy mode: running ${bin} ${args.join(" ")} (${appDir})`)
163
+ if (upstreamPort) freeProxyDevPort(pidDir, upstreamPort)
57
164
 
58
165
  const manager = new ProcessManager(bin, args, {
59
166
  label: "app",
@@ -61,6 +168,7 @@ export function startProxyDevApp(
61
168
  cwd: appDir,
62
169
  colour: "\x1b[33m",
63
170
  shell: useShell,
171
+ ...(upstreamPort ? { beforeRestart: () => freeProxyDevPort(pidDir, upstreamPort) } : {}),
64
172
  })
65
173
  manager.start()
66
174
  return manager
package/src/app-config.ts CHANGED
@@ -55,6 +55,86 @@ function updateAppConfigAst(configPath: string, input: UpdateAppConfigInput): st
55
55
  return sourceFile.getFullText()
56
56
  }
57
57
 
58
+ export interface UpdateServerConfigInput {
59
+ domain: string
60
+ tlsEmail: string
61
+ provider?: "kong" | "none"
62
+ }
63
+
64
+ /**
65
+ * Set `server.mode = "standalone"` plus `domain` and `tls` in supatype.config.ts,
66
+ * enabling self-host HTTPS. Preserves other `server` keys (port, etc).
67
+ */
68
+ export function updateServerConfigInProject(cwd: string, input: UpdateServerConfigInput): string {
69
+ const configPath = resolve(cwd, "supatype.config.ts")
70
+ if (!existsSync(configPath)) {
71
+ throw new Error("supatype.config.ts not found. Run: supatype init")
72
+ }
73
+ const next = updateServerConfigAst(configPath, input)
74
+ writeFileSync(configPath, next, "utf8")
75
+ return configPath
76
+ }
77
+
78
+ function updateServerConfigAst(configPath: string, input: UpdateServerConfigInput): string {
79
+ const project = new Project({
80
+ useInMemoryFileSystem: false,
81
+ skipAddingFilesFromTsConfig: true,
82
+ manipulationSettings: {
83
+ quoteKind: QuoteKind.Double,
84
+ },
85
+ })
86
+ const srcText = readFileSync(configPath, "utf8")
87
+ const sourceFile = project.createSourceFile(configPath, srcText, { overwrite: true })
88
+ const rootObject = getRootConfigObject(sourceFile)
89
+
90
+ const serverProperty = rootObject.getProperty("server")
91
+
92
+ if (serverProperty === undefined) {
93
+ rootObject.addPropertyAssignment({
94
+ name: "server",
95
+ initializer: renderServerInitializer(input),
96
+ })
97
+ } else if (Node.isPropertyAssignment(serverProperty)) {
98
+ const init = serverProperty.getInitializer()
99
+ if (init && Node.isObjectLiteralExpression(init)) {
100
+ patchServerObject(init, input)
101
+ } else {
102
+ serverProperty.setInitializer(renderServerInitializer(input))
103
+ }
104
+ } else {
105
+ serverProperty.remove()
106
+ rootObject.addPropertyAssignment({
107
+ name: "server",
108
+ initializer: renderServerInitializer(input),
109
+ })
110
+ }
111
+
112
+ return sourceFile.getFullText()
113
+ }
114
+
115
+ function renderServerInitializer(input: UpdateServerConfigInput): string {
116
+ const provider = input.provider ?? "kong"
117
+ return `{
118
+ mode: "standalone",
119
+ domain: "${input.domain}",
120
+ tls: { email: "${input.tlsEmail}", provider: "${provider}" },
121
+ }`
122
+ }
123
+
124
+ function patchServerObject(serverObj: ObjectLiteralExpression, input: UpdateServerConfigInput): void {
125
+ upsertStringProperty(serverObj, "mode", "standalone")
126
+ upsertStringProperty(serverObj, "domain", input.domain)
127
+ const provider = input.provider ?? "kong"
128
+ const tlsInitializer = `{ email: "${input.tlsEmail}", provider: "${provider}" }`
129
+ const existing = serverObj.getProperty("tls")
130
+ if (existing && Node.isPropertyAssignment(existing)) {
131
+ existing.setInitializer(tlsInitializer)
132
+ } else {
133
+ if (existing) existing.remove()
134
+ serverObj.addPropertyAssignment({ name: "tls", initializer: tlsInitializer })
135
+ }
136
+ }
137
+
58
138
  function getRootConfigObject(sourceFile: SourceFile): ObjectLiteralExpression {
59
139
  const exportAssignment = sourceFile.getFirstDescendantByKind(SyntaxKind.ExportAssignment)
60
140
  if (!exportAssignment) {