@supatype/cli 0.1.6 → 0.1.9

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 (477) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +152 -102
  3. package/.turbo/turbo-typecheck.log +1 -1
  4. package/LICENSE +202 -0
  5. package/deno.d.ts +52 -0
  6. package/dist/app/framework.js +1 -1
  7. package/dist/app/framework.js.map +1 -1
  8. package/dist/augmentation-generator.d.ts +22 -0
  9. package/dist/augmentation-generator.d.ts.map +1 -1
  10. package/dist/augmentation-generator.js +19 -5
  11. package/dist/augmentation-generator.js.map +1 -1
  12. package/dist/binary-cache.d.ts +42 -6
  13. package/dist/binary-cache.d.ts.map +1 -1
  14. package/dist/binary-cache.js +76 -44
  15. package/dist/binary-cache.js.map +1 -1
  16. package/dist/cache-clean.d.ts +15 -0
  17. package/dist/cache-clean.d.ts.map +1 -0
  18. package/dist/cache-clean.js +76 -0
  19. package/dist/cache-clean.js.map +1 -0
  20. package/dist/cache-pins.d.ts +51 -0
  21. package/dist/cache-pins.d.ts.map +1 -0
  22. package/dist/cache-pins.js +184 -0
  23. package/dist/cache-pins.js.map +1 -0
  24. package/dist/cli-artifacts.d.ts +32 -0
  25. package/dist/cli-artifacts.d.ts.map +1 -0
  26. package/dist/cli-artifacts.js +49 -0
  27. package/dist/cli-artifacts.js.map +1 -0
  28. package/dist/cli-install-method.d.ts +27 -0
  29. package/dist/cli-install-method.d.ts.map +1 -0
  30. package/dist/cli-install-method.js +78 -0
  31. package/dist/cli-install-method.js.map +1 -0
  32. package/dist/cli-package-version.d.ts +1 -1
  33. package/dist/cli-package-version.d.ts.map +1 -1
  34. package/dist/cli-package-version.js +6 -1
  35. package/dist/cli-package-version.js.map +1 -1
  36. package/dist/cli-standalone.d.ts +13 -4
  37. package/dist/cli-standalone.d.ts.map +1 -1
  38. package/dist/cli-standalone.js +86 -31
  39. package/dist/cli-standalone.js.map +1 -1
  40. package/dist/cli-version-embedded.d.ts +10 -0
  41. package/dist/cli-version-embedded.d.ts.map +1 -0
  42. package/dist/cli-version-embedded.js +13 -0
  43. package/dist/cli-version-embedded.js.map +1 -0
  44. package/dist/cli.d.ts.map +1 -1
  45. package/dist/cli.js +7 -1
  46. package/dist/cli.js.map +1 -1
  47. package/dist/cloud-credentials.d.ts +34 -0
  48. package/dist/cloud-credentials.d.ts.map +1 -0
  49. package/dist/cloud-credentials.js +139 -0
  50. package/dist/cloud-credentials.js.map +1 -0
  51. package/dist/commands/add.js +1 -1
  52. package/dist/commands/add.js.map +1 -1
  53. package/dist/commands/admin.d.ts +11 -0
  54. package/dist/commands/admin.d.ts.map +1 -1
  55. package/dist/commands/admin.js +123 -21
  56. package/dist/commands/admin.js.map +1 -1
  57. package/dist/commands/adopt.js +1 -1
  58. package/dist/commands/adopt.js.map +1 -1
  59. package/dist/commands/app.js +2 -2
  60. package/dist/commands/app.js.map +1 -1
  61. package/dist/commands/cache.d.ts +1 -1
  62. package/dist/commands/cache.d.ts.map +1 -1
  63. package/dist/commands/cache.js +69 -73
  64. package/dist/commands/cache.js.map +1 -1
  65. package/dist/commands/cloud.d.ts.map +1 -1
  66. package/dist/commands/cloud.js +32 -8
  67. package/dist/commands/cloud.js.map +1 -1
  68. package/dist/commands/db.d.ts +3 -2
  69. package/dist/commands/db.d.ts.map +1 -1
  70. package/dist/commands/db.js +149 -3
  71. package/dist/commands/db.js.map +1 -1
  72. package/dist/commands/deploy.d.ts +9 -9
  73. package/dist/commands/deploy.js +12 -12
  74. package/dist/commands/deploy.js.map +1 -1
  75. package/dist/commands/dev.d.ts +3 -3
  76. package/dist/commands/dev.d.ts.map +1 -1
  77. package/dist/commands/dev.js +63 -23
  78. package/dist/commands/dev.js.map +1 -1
  79. package/dist/commands/doctor.d.ts +28 -0
  80. package/dist/commands/doctor.d.ts.map +1 -1
  81. package/dist/commands/doctor.js +60 -3
  82. package/dist/commands/doctor.js.map +1 -1
  83. package/dist/commands/engine.d.ts +1 -1
  84. package/dist/commands/engine.js +1 -1
  85. package/dist/commands/functions.d.ts +7 -0
  86. package/dist/commands/functions.d.ts.map +1 -1
  87. package/dist/commands/functions.js +45 -11
  88. package/dist/commands/functions.js.map +1 -1
  89. package/dist/commands/generate.d.ts.map +1 -1
  90. package/dist/commands/generate.js +5 -1
  91. package/dist/commands/generate.js.map +1 -1
  92. package/dist/commands/hooks.d.ts +12 -0
  93. package/dist/commands/hooks.d.ts.map +1 -0
  94. package/dist/commands/hooks.js +118 -0
  95. package/dist/commands/hooks.js.map +1 -0
  96. package/dist/commands/init.d.ts.map +1 -1
  97. package/dist/commands/init.js +64 -30
  98. package/dist/commands/init.js.map +1 -1
  99. package/dist/commands/internal.d.ts +6 -0
  100. package/dist/commands/internal.d.ts.map +1 -0
  101. package/dist/commands/internal.js +22 -0
  102. package/dist/commands/internal.js.map +1 -0
  103. package/dist/commands/link-helpers.d.ts.map +1 -1
  104. package/dist/commands/link-helpers.js +8 -2
  105. package/dist/commands/link-helpers.js.map +1 -1
  106. package/dist/commands/login.d.ts +7 -0
  107. package/dist/commands/login.d.ts.map +1 -0
  108. package/dist/commands/login.js +110 -0
  109. package/dist/commands/login.js.map +1 -0
  110. package/dist/commands/logs.d.ts +1 -1
  111. package/dist/commands/migrate.js +5 -5
  112. package/dist/commands/migrate.js.map +1 -1
  113. package/dist/commands/pg.d.ts +1 -1
  114. package/dist/commands/pg.js +1 -1
  115. package/dist/commands/plugins.js +1 -1
  116. package/dist/commands/plugins.js.map +1 -1
  117. package/dist/commands/pull.js +2 -2
  118. package/dist/commands/pull.js.map +1 -1
  119. package/dist/commands/push.d.ts.map +1 -1
  120. package/dist/commands/push.js +110 -7
  121. package/dist/commands/push.js.map +1 -1
  122. package/dist/commands/self-host.d.ts +1 -1
  123. package/dist/commands/self-host.js +1 -1
  124. package/dist/commands/self-update.d.ts +3 -2
  125. package/dist/commands/self-update.d.ts.map +1 -1
  126. package/dist/commands/self-update.js +31 -16
  127. package/dist/commands/self-update.js.map +1 -1
  128. package/dist/commands/status.d.ts +1 -1
  129. package/dist/commands/update.d.ts +1 -1
  130. package/dist/commands/update.js +1 -1
  131. package/dist/config.d.ts +1 -1
  132. package/dist/config.d.ts.map +1 -1
  133. package/dist/config.js +19 -4
  134. package/dist/config.js.map +1 -1
  135. package/dist/db-preflight.d.ts +78 -0
  136. package/dist/db-preflight.d.ts.map +1 -0
  137. package/dist/db-preflight.js +452 -0
  138. package/dist/db-preflight.js.map +1 -0
  139. package/dist/dev-compose.d.ts +4 -4
  140. package/dist/dev-compose.d.ts.map +1 -1
  141. package/dist/dev-compose.js +143 -88
  142. package/dist/dev-compose.js.map +1 -1
  143. package/dist/dev-log-filter.d.ts +1 -1
  144. package/dist/dev-log-filter.d.ts.map +1 -1
  145. package/dist/dev-log-filter.js +1 -1
  146. package/dist/dev-log-filter.js.map +1 -1
  147. package/dist/dev-ports.d.ts +2 -2
  148. package/dist/dev-ports.d.ts.map +1 -1
  149. package/dist/dev-ports.js +2 -2
  150. package/dist/dev-ports.js.map +1 -1
  151. package/dist/dev-session.d.ts +5 -5
  152. package/dist/dev-session.d.ts.map +1 -1
  153. package/dist/dev-session.js +6 -6
  154. package/dist/dev-session.js.map +1 -1
  155. package/dist/dev-shutdown.d.ts +5 -5
  156. package/dist/dev-shutdown.d.ts.map +1 -1
  157. package/dist/dev-shutdown.js +7 -7
  158. package/dist/dev-shutdown.js.map +1 -1
  159. package/dist/dev-task-colors.d.ts +1 -1
  160. package/dist/dev-task-colors.d.ts.map +1 -1
  161. package/dist/dev-task-colors.js +1 -1
  162. package/dist/dev-task-colors.js.map +1 -1
  163. package/dist/docker-postgres.d.ts +5 -5
  164. package/dist/docker-postgres.d.ts.map +1 -1
  165. package/dist/docker-postgres.js +5 -5
  166. package/dist/docker-postgres.js.map +1 -1
  167. package/dist/docker-runtime.d.ts +2 -2
  168. package/dist/docker-runtime.d.ts.map +1 -1
  169. package/dist/docker-runtime.js +5 -5
  170. package/dist/docker-runtime.js.map +1 -1
  171. package/dist/engine-client.d.ts +1 -1
  172. package/dist/engine-client.js +3 -3
  173. package/dist/engine-client.js.map +1 -1
  174. package/dist/engine-push-output.js +1 -1
  175. package/dist/engine-push-output.js.map +1 -1
  176. package/dist/ensure-binary.d.ts.map +1 -1
  177. package/dist/ensure-binary.js +17 -0
  178. package/dist/ensure-binary.js.map +1 -1
  179. package/dist/ensure-component-binaries.js +1 -1
  180. package/dist/ensure-component-binaries.js.map +1 -1
  181. package/dist/env-file.d.ts +40 -2
  182. package/dist/env-file.d.ts.map +1 -1
  183. package/dist/env-file.js +132 -11
  184. package/dist/env-file.js.map +1 -1
  185. package/dist/field-masking-tier.d.ts +50 -0
  186. package/dist/field-masking-tier.d.ts.map +1 -0
  187. package/dist/field-masking-tier.js +91 -0
  188. package/dist/field-masking-tier.js.map +1 -0
  189. package/dist/functions-deno-types.d.ts +24 -0
  190. package/dist/functions-deno-types.d.ts.map +1 -0
  191. package/dist/functions-deno-types.js +155 -0
  192. package/dist/functions-deno-types.js.map +1 -0
  193. package/dist/functions-router-gen.js +1 -1
  194. package/dist/gitignore.d.ts +2 -2
  195. package/dist/gitignore.d.ts.map +1 -1
  196. package/dist/gitignore.js +3 -3
  197. package/dist/gitignore.js.map +1 -1
  198. package/dist/hook-upload.d.ts +30 -0
  199. package/dist/hook-upload.d.ts.map +1 -0
  200. package/dist/hook-upload.js +86 -0
  201. package/dist/hook-upload.js.map +1 -0
  202. package/dist/hooks-generator.d.ts +8 -0
  203. package/dist/hooks-generator.d.ts.map +1 -0
  204. package/dist/hooks-generator.js +332 -0
  205. package/dist/hooks-generator.js.map +1 -0
  206. package/dist/index.d.ts +1 -1
  207. package/dist/index.js +1 -1
  208. package/dist/init-project-detect.d.ts +1 -1
  209. package/dist/init-project-detect.d.ts.map +1 -1
  210. package/dist/init-project-detect.js +1 -1
  211. package/dist/init-project-detect.js.map +1 -1
  212. package/dist/link.d.ts +4 -0
  213. package/dist/link.d.ts.map +1 -1
  214. package/dist/link.js +2 -0
  215. package/dist/link.js.map +1 -1
  216. package/dist/local-secrets.d.ts +71 -0
  217. package/dist/local-secrets.d.ts.map +1 -0
  218. package/dist/local-secrets.js +100 -0
  219. package/dist/local-secrets.js.map +1 -0
  220. package/dist/main.d.ts +2 -0
  221. package/dist/main.d.ts.map +1 -0
  222. package/dist/main.js +20 -0
  223. package/dist/main.js.map +1 -0
  224. package/dist/model-hooks.d.ts +73 -0
  225. package/dist/model-hooks.d.ts.map +1 -0
  226. package/dist/model-hooks.js +211 -0
  227. package/dist/model-hooks.js.map +1 -0
  228. package/dist/pgbouncer-userlist.d.ts +1 -1
  229. package/dist/pgbouncer-userlist.d.ts.map +1 -1
  230. package/dist/pgbouncer-userlist.js +2 -2
  231. package/dist/pgbouncer-userlist.js.map +1 -1
  232. package/dist/postgres-ctl.d.ts +12 -1
  233. package/dist/postgres-ctl.d.ts.map +1 -1
  234. package/dist/postgres-ctl.js +28 -5
  235. package/dist/postgres-ctl.js.map +1 -1
  236. package/dist/process-manager.d.ts +2 -2
  237. package/dist/process-manager.d.ts.map +1 -1
  238. package/dist/process-manager.js +4 -4
  239. package/dist/process-manager.js.map +1 -1
  240. package/dist/project-config.d.ts +122 -2
  241. package/dist/project-config.d.ts.map +1 -1
  242. package/dist/project-config.js +150 -1
  243. package/dist/project-config.js.map +1 -1
  244. package/dist/pull-utils.d.ts +2 -2
  245. package/dist/pull-utils.d.ts.map +1 -1
  246. package/dist/pull-utils.js +4 -4
  247. package/dist/pull-utils.js.map +1 -1
  248. package/dist/realtime-launch.js +1 -1
  249. package/dist/realtime-launch.js.map +1 -1
  250. package/dist/release-pins.d.ts +1 -1
  251. package/dist/release-pins.js +2 -2
  252. package/dist/release-pins.js.map +1 -1
  253. package/dist/resolve-api-url.js +1 -1
  254. package/dist/resolve-api-url.js.map +1 -1
  255. package/dist/resolve-target.d.ts +4 -0
  256. package/dist/resolve-target.d.ts.map +1 -1
  257. package/dist/resolve-target.js +69 -73
  258. package/dist/resolve-target.js.map +1 -1
  259. package/dist/rest-cache-admin.js +2 -2
  260. package/dist/rest-cache-admin.js.map +1 -1
  261. package/dist/runtime-routes.d.ts +1 -1
  262. package/dist/runtime-routes.js +1 -1
  263. package/dist/schema-ast-v2.d.ts +5 -4
  264. package/dist/schema-ast-v2.d.ts.map +1 -1
  265. package/dist/schema-ast-v2.js +5 -3
  266. package/dist/schema-ast-v2.js.map +1 -1
  267. package/dist/schema-push-lock.d.ts.map +1 -1
  268. package/dist/schema-push-lock.js +43 -16
  269. package/dist/schema-push-lock.js.map +1 -1
  270. package/dist/scripts/postinstall.d.ts +1 -1
  271. package/dist/scripts/postinstall.js +1 -1
  272. package/dist/self-host-compose.d.ts +26 -2
  273. package/dist/self-host-compose.d.ts.map +1 -1
  274. package/dist/self-host-compose.js +305 -73
  275. package/dist/self-host-compose.js.map +1 -1
  276. package/dist/service-role-check.d.ts +21 -0
  277. package/dist/service-role-check.d.ts.map +1 -0
  278. package/dist/service-role-check.js +85 -0
  279. package/dist/service-role-check.js.map +1 -0
  280. package/dist/storage-provision.d.ts +1 -1
  281. package/dist/storage-provision.js +3 -3
  282. package/dist/storage-provision.js.map +1 -1
  283. package/dist/studio-dev-server.d.ts +1 -1
  284. package/dist/studio-dev-server.d.ts.map +1 -1
  285. package/dist/systemd.d.ts +1 -1
  286. package/dist/systemd.js +1 -1
  287. package/dist/target-client.d.ts +17 -0
  288. package/dist/target-client.d.ts.map +1 -1
  289. package/dist/target-client.js +69 -17
  290. package/dist/target-client.js.map +1 -1
  291. package/dist/tsx-runner.js +1 -1
  292. package/dist/tsx-runner.js.map +1 -1
  293. package/dist/type-extractor.d.ts.map +1 -1
  294. package/dist/type-extractor.js +738 -34
  295. package/dist/type-extractor.js.map +1 -1
  296. package/dist/type-resolver.js +1 -1
  297. package/dist/type-resolver.js.map +1 -1
  298. package/dist/ui/brand.d.ts +1 -1
  299. package/dist/ui/brand.js +1 -1
  300. package/dist/ui/components/LogoWordmark.d.ts +1 -1
  301. package/dist/ui/components/LogoWordmark.d.ts.map +1 -1
  302. package/dist/ui/components/LogoWordmark.js +1 -1
  303. package/dist/ui/components/LogoWordmark.js.map +1 -1
  304. package/dist/ui/components/SelectField.js +1 -1
  305. package/dist/ui/components/SelectField.js.map +1 -1
  306. package/dist/ui/confirm.d.ts +1 -1
  307. package/dist/ui/confirm.js +1 -1
  308. package/dist/ui/fatal.d.ts +1 -1
  309. package/dist/ui/fatal.d.ts.map +1 -1
  310. package/dist/ui/fatal.js +1 -1
  311. package/dist/ui/fatal.js.map +1 -1
  312. package/dist/ui/flows/prompt-fields.js +1 -1
  313. package/dist/ui/flows/prompt-fields.js.map +1 -1
  314. package/dist/ui/interactive.d.ts +1 -1
  315. package/dist/ui/interactive.d.ts.map +1 -1
  316. package/dist/ui/interactive.js +1 -1
  317. package/dist/ui/interactive.js.map +1 -1
  318. package/dist/ui/progress.d.ts +1 -1
  319. package/dist/ui/progress.js +1 -1
  320. package/dist/ui/runtime/command-chrome.js +2 -2
  321. package/dist/ui/runtime/command-chrome.js.map +1 -1
  322. package/dist/ui/runtime/run-clack-flow.js +1 -1
  323. package/dist/ui/runtime/run-clack-flow.js.map +1 -1
  324. package/dist/ui/runtime/stdin-after-ink.d.ts.map +1 -1
  325. package/dist/ui/runtime/stdin-after-ink.js +4 -2
  326. package/dist/ui/runtime/stdin-after-ink.js.map +1 -1
  327. package/dist/ui/theme.d.ts +1 -1
  328. package/dist/ui/theme.js +1 -1
  329. package/dist/valkey-sidecar.d.ts +1 -1
  330. package/dist/valkey-sidecar.d.ts.map +1 -1
  331. package/dist/valkey-sidecar.js +2 -2
  332. package/dist/valkey-sidecar.js.map +1 -1
  333. package/package.json +6 -2
  334. package/scripts/build-release-artifacts.sh +112 -0
  335. package/scripts/generate-homebrew-formula.mjs +123 -0
  336. package/scripts/mirror-deno-release.sh +1 -1
  337. package/src/TYPE-RESOLUTION.md +31 -31
  338. package/src/app/framework.ts +1 -1
  339. package/src/augmentation-generator.ts +19 -6
  340. package/src/binary-cache.ts +94 -47
  341. package/src/cache-clean.ts +81 -0
  342. package/src/cache-pins.ts +243 -0
  343. package/src/cli-artifacts.ts +65 -0
  344. package/src/cli-install-method.ts +87 -0
  345. package/src/cli-package-version.ts +5 -1
  346. package/src/cli-standalone.ts +116 -34
  347. package/src/cli-version-embedded.ts +12 -0
  348. package/src/cli.ts +7 -1
  349. package/src/cloud-credentials.ts +183 -0
  350. package/src/commands/add.ts +1 -1
  351. package/src/commands/admin.ts +142 -27
  352. package/src/commands/adopt.ts +1 -1
  353. package/src/commands/app.ts +2 -2
  354. package/src/commands/cache.ts +92 -77
  355. package/src/commands/cloud.ts +32 -8
  356. package/src/commands/db.ts +164 -3
  357. package/src/commands/deploy.ts +12 -12
  358. package/src/commands/dev.ts +72 -23
  359. package/src/commands/doctor.ts +69 -3
  360. package/src/commands/engine.ts +1 -1
  361. package/src/commands/functions.ts +47 -10
  362. package/src/commands/generate.ts +5 -1
  363. package/src/commands/hooks.ts +138 -0
  364. package/src/commands/init.ts +65 -31
  365. package/src/commands/internal.ts +23 -0
  366. package/src/commands/link-helpers.ts +9 -2
  367. package/src/commands/login.ts +127 -0
  368. package/src/commands/logs.ts +1 -1
  369. package/src/commands/migrate.ts +5 -5
  370. package/src/commands/pg.ts +1 -1
  371. package/src/commands/plugins.ts +1 -1
  372. package/src/commands/pull.ts +2 -2
  373. package/src/commands/push.ts +124 -7
  374. package/src/commands/self-host.ts +1 -1
  375. package/src/commands/self-update.ts +41 -19
  376. package/src/commands/status.ts +1 -1
  377. package/src/commands/update.ts +1 -1
  378. package/src/config.ts +23 -4
  379. package/src/db-preflight.ts +575 -0
  380. package/src/dev-compose.ts +158 -89
  381. package/src/dev-log-filter.ts +1 -1
  382. package/src/dev-ports.ts +3 -3
  383. package/src/dev-session.ts +6 -6
  384. package/src/dev-shutdown.ts +8 -8
  385. package/src/dev-task-colors.ts +1 -1
  386. package/src/docker-postgres.ts +6 -6
  387. package/src/docker-runtime.ts +5 -5
  388. package/src/engine-client.ts +3 -3
  389. package/src/engine-push-output.ts +1 -1
  390. package/src/ensure-binary.ts +20 -0
  391. package/src/ensure-component-binaries.ts +1 -1
  392. package/src/env-file.ts +157 -11
  393. package/src/field-masking-tier.ts +107 -0
  394. package/src/functions-deno-types.ts +188 -0
  395. package/src/functions-router-gen.ts +1 -1
  396. package/src/gitignore.ts +3 -3
  397. package/src/hook-upload.ts +107 -0
  398. package/src/hooks-generator.ts +352 -0
  399. package/src/index.ts +1 -1
  400. package/src/init-project-detect.ts +1 -1
  401. package/src/link.ts +7 -0
  402. package/src/local-secrets.ts +104 -0
  403. package/src/main.ts +20 -0
  404. package/src/model-hooks.ts +260 -0
  405. package/src/pgbouncer-userlist.ts +2 -2
  406. package/src/postgres-ctl.ts +32 -5
  407. package/src/process-manager.ts +4 -4
  408. package/src/project-config.ts +237 -3
  409. package/src/pull-utils.ts +4 -4
  410. package/src/realtime-launch.ts +1 -1
  411. package/src/release-pins.ts +2 -2
  412. package/src/resolve-api-url.ts +1 -1
  413. package/src/resolve-target.ts +113 -68
  414. package/src/rest-cache-admin.ts +2 -2
  415. package/src/runtime-routes.ts +2 -2
  416. package/src/schema-ast-v2.ts +8 -5
  417. package/src/schema-push-lock.ts +56 -17
  418. package/src/scripts/postinstall.ts +1 -1
  419. package/src/self-host-compose.ts +348 -72
  420. package/src/service-role-check.ts +111 -0
  421. package/src/storage-provision.ts +3 -3
  422. package/src/studio-dev-server.ts +1 -1
  423. package/src/systemd.ts +1 -1
  424. package/src/target-client.ts +105 -18
  425. package/src/tsx-runner.ts +1 -1
  426. package/src/type-extractor.ts +885 -30
  427. package/src/type-resolver.ts +1 -1
  428. package/src/ui/README.md +1 -1
  429. package/src/ui/brand.ts +1 -1
  430. package/src/ui/components/LogoWordmark.tsx +1 -1
  431. package/src/ui/components/SelectField.tsx +1 -1
  432. package/src/ui/confirm.ts +1 -1
  433. package/src/ui/fatal.ts +1 -1
  434. package/src/ui/flows/prompt-fields.tsx +1 -1
  435. package/src/ui/interactive.ts +1 -1
  436. package/src/ui/progress.ts +1 -1
  437. package/src/ui/runtime/command-chrome.ts +2 -2
  438. package/src/ui/runtime/run-clack-flow.tsx +1 -1
  439. package/src/ui/runtime/stdin-after-ink.ts +4 -2
  440. package/src/ui/theme.ts +1 -1
  441. package/src/valkey-sidecar.ts +2 -2
  442. package/tests/access-composition.test.ts +667 -0
  443. package/tests/admin-studio-membership.test.ts +121 -0
  444. package/tests/api-schemas.test.ts +83 -0
  445. package/tests/archive-name-alias.test.ts +42 -0
  446. package/tests/augmentation-generator.test.ts +28 -0
  447. package/tests/cache-clean.test.ts +206 -0
  448. package/tests/cli-help.test.ts +11 -2
  449. package/tests/cli-install-method.test.ts +66 -0
  450. package/tests/command-chrome-coverage.test.ts +31 -26
  451. package/tests/command-chrome-wrap.test.ts +1 -0
  452. package/tests/db-preflight.test.ts +72 -0
  453. package/tests/doctor-render.test.ts +62 -0
  454. package/tests/doctor-service-role.test.ts +55 -0
  455. package/tests/engine-push-output.test.ts +1 -1
  456. package/tests/env-file.test.ts +121 -0
  457. package/tests/external-database-compose.test.ts +184 -0
  458. package/tests/external-database-config.test.ts +154 -0
  459. package/tests/field-masking-tier.test.ts +184 -0
  460. package/tests/functions-deno-types.test.ts +197 -0
  461. package/tests/homebrew-formula.test.ts +100 -0
  462. package/tests/hook-upload.test.ts +125 -0
  463. package/tests/hooks-generator.test.ts +212 -0
  464. package/tests/init.test.ts +5 -2
  465. package/tests/keys.test.ts +8 -2
  466. package/tests/local-secrets.test.ts +92 -0
  467. package/tests/model-hooks.test.ts +322 -0
  468. package/tests/runtime-contract.test.ts +113 -1
  469. package/tests/service-role-check.test.ts +109 -0
  470. package/tests/service-role-routes.test.ts +51 -0
  471. package/tests/storage-provision.test.ts +1 -1
  472. package/tests/target-client-refresh.test.ts +94 -0
  473. package/tests/type-extractor.test.ts +187 -0
  474. package/tsconfig.tsbuildinfo +1 -1
  475. package/vitest.config.ts +7 -1
  476. package/scripts/build-release-bundle.mjs +0 -27
  477. package/tests/engine-distribution.test.ts +0 -418
package/vitest.config.ts CHANGED
@@ -5,10 +5,16 @@ export default defineConfig({
5
5
  jsx: "automatic",
6
6
  },
7
7
  test: {
8
+ // Many tests here spawn the built CLI as a subprocess, so each one pays Node startup plus
9
+ // the Ink and React import cost before it does any work. The 5s default leaves almost no
10
+ // headroom, and CI runs `turbo run test`, which runs every package concurrently: the same
11
+ // tests that take 1.2s alone take over 5s under that contention and fail as timeouts.
12
+ testTimeout: 30_000,
13
+ hookTimeout: 30_000,
8
14
  exclude: [
9
15
  "**/node_modules/**",
10
16
  "**/dist/**",
11
- // Spec for src/engine/* (platform, cache, verify, resolve, download) enable when Phase 0.5 modules land.
17
+ // Spec for src/engine/* (platform, cache, verify, resolve, download), enable when Phase 0.5 modules land.
12
18
  "tests/engine-distribution.test.ts",
13
19
  ],
14
20
  },
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env node
2
- import { spawnSync } from "node:child_process"
3
- import { mkdirSync } from "node:fs"
4
- import { dirname, join } from "node:path"
5
- import { fileURLToPath } from "node:url"
6
-
7
- const root = join(dirname(fileURLToPath(import.meta.url)), "..")
8
- const outDir = join(root, "release-bundle")
9
- mkdirSync(outDir, { recursive: true })
10
- const outfile = join(outDir, "supatype-cli-bundle.cjs")
11
-
12
- const result = spawnSync(
13
- "npx",
14
- [
15
- "--yes", "esbuild@0.25.5",
16
- join(root, "dist", "cli.js"),
17
- "--bundle",
18
- "--platform=node",
19
- "--target=node22",
20
- "--format=cjs",
21
- `--outfile=${outfile}`,
22
- `--banner:js=#!/usr/bin/env node`,
23
- ],
24
- { stdio: "inherit", shell: process.platform === "win32" },
25
- )
26
- if (result.status !== 0) process.exit(result.status ?? 1)
27
- console.log(`Wrote ${outfile}`)
@@ -1,418 +0,0 @@
1
- /**
2
- * Integration tests for engine binary distribution (Phase 0.5).
3
- *
4
- * Tests cover:
5
- * - Platform detection
6
- * - Cache management
7
- * - Download, checksum, and signature verification
8
- * - Version compatibility
9
- * - Offline mode
10
- * - Error handling
11
- */
12
-
13
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest"
14
- import { mkdirSync, writeFileSync, readFileSync, existsSync, rmSync, chmodSync } from "node:fs"
15
- import { join } from "node:path"
16
- import { tmpdir, homedir } from "node:os"
17
- import { createHash } from "node:crypto"
18
-
19
- // ── Platform detection ───────────────────────────────────────────────
20
-
21
- describe("Platform detection", () => {
22
- it("detects supported platforms", async () => {
23
- const { detectPlatform } = await import("../src/engine/platform.js")
24
- // This test runs on the current platform — just verify it doesn't throw
25
- const platform = detectPlatform()
26
- expect(platform.os).toMatch(/^(linux|darwin|win)$/)
27
- expect(platform.arch).toMatch(/^(x64|arm64)$/)
28
- expect(platform.binaryName).toContain("supatype-engine")
29
- })
30
-
31
- it("builds correct artifact names", async () => {
32
- const { getArtifactName } = await import("../src/engine/platform.js")
33
-
34
- expect(
35
- getArtifactName("0.1.0-alpha.1", { os: "linux", arch: "x64", binaryName: "supatype-engine", ext: "" }),
36
- ).toBe("supatype-engine-0.1.0-alpha.1-linux-x64")
37
-
38
- expect(
39
- getArtifactName("0.1.0-alpha.1", { os: "darwin", arch: "arm64", binaryName: "supatype-engine", ext: "" }),
40
- ).toBe("supatype-engine-0.1.0-alpha.1-darwin-arm64")
41
-
42
- expect(
43
- getArtifactName("0.1.0-alpha.1", { os: "win", arch: "x64", binaryName: "supatype-engine.exe", ext: ".exe" }),
44
- ).toBe("supatype-engine-0.1.0-alpha.1-win-x64.exe")
45
- })
46
-
47
- it("rejects unsupported platforms", async () => {
48
- const platformModule = await import("../src/engine/platform.js")
49
- // We can't easily test this without mocking process.platform/arch
50
- // but the logic is covered by the PLATFORM_MAP check
51
- expect(typeof platformModule.detectPlatform).toBe("function")
52
- })
53
- })
54
-
55
- // ── CDN URL construction ─────────────────────────────────────────────
56
-
57
- describe("CDN URL construction", () => {
58
- it("builds correct CDN URLs", async () => {
59
- const { getCdnUrl } = await import("../src/engine/platform.js")
60
-
61
- const url = getCdnUrl(
62
- "https://releases.supatype.com/engine",
63
- "0.1.0-alpha.1",
64
- "supatype-engine-0.1.0-alpha.1-linux-x64",
65
- )
66
- expect(url).toBe(
67
- "https://releases.supatype.com/engine/v0.1.0-alpha.1/supatype-engine-0.1.0-alpha.1-linux-x64",
68
- )
69
- })
70
- })
71
-
72
- // ── Cache management ─────────────────────────────────────────────────
73
-
74
- describe("Cache management", () => {
75
- const testCacheDir = join(tmpdir(), `supatype-test-cache-${Date.now()}`)
76
-
77
- // We test the pure functions, not the ones using homedir()
78
- afterEach(() => {
79
- if (existsSync(testCacheDir)) {
80
- rmSync(testCacheDir, { recursive: true, force: true })
81
- }
82
- })
83
-
84
- it("lists cached versions from empty cache", async () => {
85
- const { listCachedVersions } = await import("../src/engine/cache.js")
86
- // May or may not have cached versions on this machine
87
- const versions = listCachedVersions()
88
- expect(Array.isArray(versions)).toBe(true)
89
- })
90
-
91
- it("pruneCacheExcept keeps specified version", async () => {
92
- const { pruneCacheExcept, getCacheDir } = await import("../src/engine/cache.js")
93
- const cacheDir = getCacheDir()
94
-
95
- // Create test versions
96
- const v1Dir = join(cacheDir, "test-0.0.1")
97
- const v2Dir = join(cacheDir, "test-0.0.2")
98
- mkdirSync(v1Dir, { recursive: true })
99
- mkdirSync(v2Dir, { recursive: true })
100
- writeFileSync(join(v1Dir, "supatype-engine"), "binary1")
101
- writeFileSync(join(v2Dir, "supatype-engine"), "binary2")
102
-
103
- const result = pruneCacheExcept("test-0.0.2")
104
- expect(result.removed).toContain("test-0.0.1")
105
- expect(result.removed).not.toContain("test-0.0.2")
106
-
107
- // Cleanup
108
- if (existsSync(v2Dir)) rmSync(v2Dir, { recursive: true, force: true })
109
- })
110
- })
111
-
112
- // ── Checksum verification ────────────────────────────────────────────
113
-
114
- describe("Checksum verification", () => {
115
- const testDir = join(tmpdir(), `supatype-test-checksum-${Date.now()}`)
116
-
117
- beforeEach(() => {
118
- mkdirSync(testDir, { recursive: true })
119
- })
120
-
121
- afterEach(() => {
122
- if (existsSync(testDir)) {
123
- rmSync(testDir, { recursive: true, force: true })
124
- }
125
- })
126
-
127
- it("verifies correct checksum", async () => {
128
- const { verifyChecksum } = await import("../src/engine/verify.js")
129
-
130
- const binaryContent = Buffer.from("test binary content")
131
- const binaryPath = join(testDir, "supatype-engine")
132
- writeFileSync(binaryPath, binaryContent)
133
-
134
- const hash = createHash("sha256").update(binaryContent).digest("hex")
135
- const checksumPath = join(testDir, "checksums.sha256")
136
- writeFileSync(checksumPath, `${hash} supatype-engine-0.1.0-linux-x64\n`)
137
-
138
- const result = await verifyChecksum(
139
- binaryPath,
140
- checksumPath,
141
- "supatype-engine-0.1.0-linux-x64",
142
- )
143
- expect(result).toBe(true)
144
- })
145
-
146
- it("rejects mismatched checksum", async () => {
147
- const { verifyChecksum } = await import("../src/engine/verify.js")
148
-
149
- const binaryPath = join(testDir, "supatype-engine")
150
- writeFileSync(binaryPath, "actual content")
151
-
152
- const checksumPath = join(testDir, "checksums.sha256")
153
- writeFileSync(checksumPath, `${"a".repeat(64)} supatype-engine-0.1.0-linux-x64\n`)
154
-
155
- const result = await verifyChecksum(
156
- binaryPath,
157
- checksumPath,
158
- "supatype-engine-0.1.0-linux-x64",
159
- )
160
- expect(result).toBe(false)
161
- })
162
-
163
- it("rejects corrupt cached binary (flipped byte)", async () => {
164
- const { verifyChecksum } = await import("../src/engine/verify.js")
165
-
166
- const originalContent = Buffer.from("original binary content here")
167
- const hash = createHash("sha256").update(originalContent).digest("hex")
168
-
169
- // Corrupt the binary (flip a byte)
170
- const corruptContent = Buffer.from(originalContent)
171
- corruptContent[0] = corruptContent[0]! ^ 0xff
172
-
173
- const binaryPath = join(testDir, "supatype-engine")
174
- writeFileSync(binaryPath, corruptContent)
175
-
176
- const checksumPath = join(testDir, "checksums.sha256")
177
- writeFileSync(checksumPath, `${hash} supatype-engine-0.1.0-linux-x64\n`)
178
-
179
- const result = await verifyChecksum(
180
- binaryPath,
181
- checksumPath,
182
- "supatype-engine-0.1.0-linux-x64",
183
- )
184
- expect(result).toBe(false)
185
- })
186
-
187
- it("throws when filename not found in checksum file", async () => {
188
- const { verifyChecksum } = await import("../src/engine/verify.js")
189
-
190
- const binaryPath = join(testDir, "supatype-engine")
191
- writeFileSync(binaryPath, "content")
192
-
193
- const checksumPath = join(testDir, "checksums.sha256")
194
- writeFileSync(checksumPath, `${"a".repeat(64)} other-file\n`)
195
-
196
- await expect(
197
- verifyChecksum(binaryPath, checksumPath, "supatype-engine-0.1.0-linux-x64"),
198
- ).rejects.toThrow("No checksum found")
199
- })
200
- })
201
-
202
- // ── Signature verification ───────────────────────────────────────────
203
-
204
- describe("Signature verification", () => {
205
- const testDir = join(tmpdir(), `supatype-test-sig-${Date.now()}`)
206
-
207
- beforeEach(() => {
208
- mkdirSync(testDir, { recursive: true })
209
- })
210
-
211
- afterEach(() => {
212
- if (existsSync(testDir)) {
213
- rmSync(testDir, { recursive: true, force: true })
214
- }
215
- })
216
-
217
- it("rejects tampered checksum file (invalid signature)", async () => {
218
- const { verifySignature } = await import("../src/engine/verify.js")
219
-
220
- const checksumPath = join(testDir, "checksums.sha256")
221
- writeFileSync(checksumPath, `${"a".repeat(64)} supatype-engine-0.1.0-linux-x64\n`)
222
-
223
- // Create a fake .minisig with garbage signature
224
- const sigPath = join(testDir, "checksums.sha256.minisig")
225
- writeFileSync(
226
- sigPath,
227
- `untrusted comment: fake\n${Buffer.alloc(74).toString("base64")}\n`,
228
- )
229
-
230
- const result = await verifySignature(checksumPath, sigPath)
231
- expect(result).toBe(false)
232
- })
233
-
234
- it("rejects missing .minisig file", async () => {
235
- const { verifySignature } = await import("../src/engine/verify.js")
236
-
237
- const checksumPath = join(testDir, "checksums.sha256")
238
- writeFileSync(checksumPath, "some content")
239
-
240
- const result = await verifySignature(checksumPath, join(testDir, "nonexistent.minisig"))
241
- expect(result).toBe(false)
242
- })
243
-
244
- it("rejects forged signature with wrong key", async () => {
245
- const { verifySignature } = await import("../src/engine/verify.js")
246
-
247
- const checksumPath = join(testDir, "checksums.sha256")
248
- writeFileSync(checksumPath, `${"a".repeat(64)} supatype-engine\n`)
249
-
250
- // Forged signature (valid format but wrong key)
251
- const sigPath = join(testDir, "checksums.sha256.minisig")
252
- const fakeSignature = Buffer.alloc(74)
253
- fakeSignature.writeUInt16LE(0x4564, 0) // Ed algorithm bytes
254
- writeFileSync(
255
- sigPath,
256
- `untrusted comment: forged\n${fakeSignature.toString("base64")}\n`,
257
- )
258
-
259
- const result = await verifySignature(checksumPath, sigPath)
260
- expect(result).toBe(false)
261
- })
262
- })
263
-
264
- // ── Version compatibility ────────────────────────────────────────────
265
-
266
- describe("Version compatibility", () => {
267
- it("accepts same major version", async () => {
268
- const { checkVersionCompatibility } = await import("../src/engine/resolve.js")
269
-
270
- expect(checkVersionCompatibility("1.2.3", "1.0.0").compatible).toBe(true)
271
- expect(checkVersionCompatibility("0.1.0", "0.2.0").compatible).toBe(true)
272
- })
273
-
274
- it("rejects different major versions", async () => {
275
- const { checkVersionCompatibility } = await import("../src/engine/resolve.js")
276
-
277
- const result = checkVersionCompatibility("2.1.0", "1.3.0")
278
- expect(result.compatible).toBe(false)
279
- expect(result.message).toContain("not compatible")
280
- expect(result.message).toContain("npm update @supatype/cli")
281
- })
282
- })
283
-
284
- // ── Update check throttling ─────────────────────────────────────────
285
-
286
- describe("Update check throttling", () => {
287
- it("returns true when no check file exists", async () => {
288
- const { shouldCheckForUpdates } = await import("../src/engine/cache.js")
289
- // On fresh machine, should want to check
290
- const result = await shouldCheckForUpdates()
291
- expect(typeof result).toBe("boolean")
292
- })
293
-
294
- it("skips check in CI environments", async () => {
295
- const origCI = process.env.CI
296
- process.env.CI = "true"
297
-
298
- const { shouldCheckForUpdates } = await import("../src/engine/cache.js")
299
- const result = await shouldCheckForUpdates()
300
- expect(result).toBe(false)
301
-
302
- if (origCI !== undefined) {
303
- process.env.CI = origCI
304
- } else {
305
- delete process.env.CI
306
- }
307
- })
308
- })
309
-
310
- // ── Download retry ──────────────────────────────────────────────────
311
-
312
- describe("Download retry", () => {
313
- it("fetchJson returns undefined on network error", async () => {
314
- const { fetchJson } = await import("../src/engine/download.js")
315
- const result = await fetchJson("http://localhost:1/nonexistent")
316
- expect(result).toBeUndefined()
317
- })
318
- })
319
-
320
- // ── Engine version constants ─────────────────────────────────────────
321
-
322
- describe("Engine version constants", () => {
323
- it("exports valid version and URLs", async () => {
324
- const {
325
- ENGINE_VERSION,
326
- CDN_BASE_URL,
327
- ENGINE_RELEASES_REPO,
328
- GITHUB_RELEASES_FALLBACK_URL,
329
- } = await import("../src/engine-version.js")
330
-
331
- expect(ENGINE_VERSION).toMatch(/^\d+\.\d+\.\d+/)
332
- expect(CDN_BASE_URL).toBe("https://releases.supatype.com/engine")
333
- expect(ENGINE_RELEASES_REPO).toBe("supatype/engine-releases")
334
- expect(GITHUB_RELEASES_FALLBACK_URL).toContain("github.com")
335
- })
336
- })
337
-
338
- // ── Full binary verification pipeline ────────────────────────────────
339
-
340
- describe("Binary verification pipeline", () => {
341
- const testDir = join(tmpdir(), `supatype-test-pipeline-${Date.now()}`)
342
-
343
- beforeEach(() => {
344
- mkdirSync(testDir, { recursive: true })
345
- })
346
-
347
- afterEach(() => {
348
- if (existsSync(testDir)) {
349
- rmSync(testDir, { recursive: true, force: true })
350
- }
351
- })
352
-
353
- it("verifyChecksumOnly passes with valid checksum", async () => {
354
- const { verifyChecksumOnly } = await import("../src/engine/verify.js")
355
-
356
- const content = Buffer.from("valid engine binary")
357
- const hash = createHash("sha256").update(content).digest("hex")
358
-
359
- const binaryPath = join(testDir, "engine")
360
- writeFileSync(binaryPath, content)
361
-
362
- const checksumPath = join(testDir, "checksums.sha256")
363
- writeFileSync(checksumPath, `${hash} engine-0.1.0-linux-x64\n`)
364
-
365
- // Should not throw
366
- await verifyChecksumOnly(binaryPath, checksumPath, "engine-0.1.0-linux-x64")
367
- })
368
-
369
- it("verifyChecksumOnly rejects and deletes corrupt binary", async () => {
370
- const { verifyChecksumOnly } = await import("../src/engine/verify.js")
371
-
372
- const binaryPath = join(testDir, "engine")
373
- writeFileSync(binaryPath, "corrupt content")
374
-
375
- const checksumPath = join(testDir, "checksums.sha256")
376
- writeFileSync(checksumPath, `${"f".repeat(64)} engine-0.1.0-linux-x64\n`)
377
-
378
- await expect(
379
- verifyChecksumOnly(binaryPath, checksumPath, "engine-0.1.0-linux-x64"),
380
- ).rejects.toThrow("checksum mismatch")
381
-
382
- // Binary should be deleted
383
- expect(existsSync(binaryPath)).toBe(false)
384
- })
385
-
386
- it("verifyBinary rejects when signature is invalid", async () => {
387
- const { verifyBinary } = await import("../src/engine/verify.js")
388
-
389
- const content = Buffer.from("binary content")
390
- const hash = createHash("sha256").update(content).digest("hex")
391
-
392
- const binaryPath = join(testDir, "engine")
393
- writeFileSync(binaryPath, content)
394
-
395
- const checksumPath = join(testDir, "checksums.sha256")
396
- writeFileSync(checksumPath, `${hash} engine-artifact\n`)
397
-
398
- const sigPath = join(testDir, "checksums.sha256.minisig")
399
- writeFileSync(sigPath, `untrusted comment: bad\n${Buffer.alloc(74).toString("base64")}\n`)
400
-
401
- await expect(
402
- verifyBinary(binaryPath, checksumPath, sigPath, "engine-artifact"),
403
- ).rejects.toThrow("signature verification failed")
404
-
405
- // Binary should be deleted
406
- expect(existsSync(binaryPath)).toBe(false)
407
- })
408
- })
409
-
410
- // ── Binary size check (placeholder for CI) ───────────────────────────
411
-
412
- describe("Binary size", () => {
413
- it("has a 20MB size target documented", () => {
414
- // This is a CI-level check. Here we just verify the constant is defined.
415
- const MAX_BINARY_SIZE_MB = 20
416
- expect(MAX_BINARY_SIZE_MB).toBe(20)
417
- })
418
- })