@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
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Scaffold Deno IDE types for edge functions so tsserver / Cursor stop
3
+ * reporting "Cannot find name 'Deno'" under the project root tsconfig.
4
+ *
5
+ * We ship a curated ambient declaration (not `@types/deno` at the app root):
6
+ * installing `@types/deno` as a project dependency auto-includes it in the
7
+ * whole app when root `tsconfig` omits `"types"`, which pollutes React/Next.
8
+ */
9
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
10
+ import { join, relative } from "node:path";
11
+ import ts from "typescript";
12
+ const MARKER = "Supatype edge functions (IDE / tsserver)";
13
+ /** Ambient Deno types written into `functions/deno.d.ts`. */
14
+ export function functionsDenoAmbientSource() {
15
+ return `/**
16
+ * ${MARKER}.
17
+ * Runtime is Deno; this file covers APIs edge functions commonly use.
18
+ * Do not add \`@types/deno\` to the app package.json, it leaks into the
19
+ * whole project when root tsconfig has no \`"types"\` field.
20
+ *
21
+ * Optional: for the full Deno API, install the Deno VS Code/Cursor extension
22
+ * and open \`functions/\` as a Deno-enabled workspace folder.
23
+ */
24
+ /* eslint-disable @typescript-eslint/no-unused-vars */
25
+
26
+ interface DenoEnv {
27
+ /** Returns the value of the environment variable, or \`undefined\` if unset. */
28
+ get(key: string): string | undefined
29
+ set(key: string, value: string): void
30
+ delete(key: string): void
31
+ has(key: string): boolean
32
+ toObject(): { [key: string]: string }
33
+ }
34
+
35
+ declare namespace Deno {
36
+ const env: DenoEnv
37
+
38
+ namespace errors {
39
+ class NotFound extends Error {}
40
+ class PermissionDenied extends Error {}
41
+ }
42
+
43
+ interface DirEntry {
44
+ name: string
45
+ isFile: boolean
46
+ isDirectory: boolean
47
+ isSymlink: boolean
48
+ }
49
+
50
+ interface FileInfo {
51
+ isFile: boolean
52
+ isDirectory: boolean
53
+ isSymlink: boolean
54
+ size: number
55
+ mtime: Date | null
56
+ }
57
+
58
+ function readDir(path: string): AsyncIterable<DirEntry>
59
+ function readTextFile(path: string): Promise<string>
60
+ function stat(path: string): Promise<FileInfo>
61
+
62
+ function serve(
63
+ options: { port: number; hostname?: string; onListen?: (params: { hostname: string; port: number }) => void },
64
+ handler: (req: Request) => Response | Promise<Response>,
65
+ ): void
66
+ }
67
+ `;
68
+ }
69
+ /** `functions/tsconfig.json`: owns function files so the app config can exclude them. */
70
+ export function functionsTsConfigSource() {
71
+ return `{
72
+ "compilerOptions": {
73
+ "target": "ES2022",
74
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
75
+ "strict": true,
76
+ "noEmit": true,
77
+ "module": "ESNext",
78
+ "moduleResolution": "bundler",
79
+ "isolatedModules": true,
80
+ "skipLibCheck": true,
81
+ "allowImportingTsExtensions": true,
82
+ "types": []
83
+ },
84
+ "include": ["./**/*.ts", "./deno.d.ts"]
85
+ }
86
+ `;
87
+ }
88
+ /**
89
+ * Ensure `functions/deno.d.ts` + `functions/tsconfig.json` exist, and try to
90
+ * exclude `functions` from the project-root `tsconfig.json`.
91
+ */
92
+ export function ensureFunctionsDenoTypes(projectRoot, functionsDir) {
93
+ mkdirSync(functionsDir, { recursive: true });
94
+ const denoDtsPath = join(functionsDir, "deno.d.ts");
95
+ const tsconfigPath = join(functionsDir, "tsconfig.json");
96
+ let wroteDenoDts = false;
97
+ if (!existsSync(denoDtsPath)) {
98
+ writeFileSync(denoDtsPath, functionsDenoAmbientSource(), "utf8");
99
+ wroteDenoDts = true;
100
+ }
101
+ let wroteTsconfig = false;
102
+ if (!existsSync(tsconfigPath)) {
103
+ writeFileSync(tsconfigPath, functionsTsConfigSource(), "utf8");
104
+ wroteTsconfig = true;
105
+ }
106
+ const rootExclude = ensureRootTsconfigExcludesFunctions(projectRoot);
107
+ const hints = [];
108
+ const fnRel = toPosix(relative(projectRoot, functionsDir)) || "functions";
109
+ if (rootExclude === "manual") {
110
+ hints.push(`Add "functions" to the root tsconfig.json "exclude" array so the app checker skips ${fnRel}/.`);
111
+ }
112
+ else if (rootExclude === "missing") {
113
+ hints.push(`If you add a root tsconfig.json, exclude "${fnRel}" (or "functions") so app typecheck stays separate.`);
114
+ }
115
+ return { wroteDenoDts, wroteTsconfig, rootExclude, hints };
116
+ }
117
+ function ensureRootTsconfigExcludesFunctions(projectRoot) {
118
+ const path = join(projectRoot, "tsconfig.json");
119
+ if (!existsSync(path))
120
+ return "missing";
121
+ const raw = readFileSync(path, "utf8");
122
+ const parsed = ts.parseConfigFileTextToJson(path, raw);
123
+ if (parsed.error || parsed.config === undefined || typeof parsed.config !== "object") {
124
+ return "manual";
125
+ }
126
+ const cfg = parsed.config;
127
+ const exclude = Array.isArray(cfg.exclude) ? cfg.exclude.map(String) : [];
128
+ if (exclude.some(isFunctionsExcludeEntry))
129
+ return "already";
130
+ try {
131
+ const asJson = JSON.parse(raw);
132
+ asJson.exclude = [...(Array.isArray(asJson.exclude) ? asJson.exclude : []), "functions"];
133
+ writeFileSync(path, `${JSON.stringify(asJson, null, 2)}\n`, "utf8");
134
+ return "updated";
135
+ }
136
+ catch {
137
+ // JSONC / trailing commas, try a conservative string splice into an existing exclude array.
138
+ if (/"exclude"\s*:\s*\[/.test(raw)) {
139
+ const next = raw.replace(/("exclude"\s*:\s*\[)/, `$1\n "functions",`);
140
+ if (next !== raw) {
141
+ writeFileSync(path, next, "utf8");
142
+ return "updated";
143
+ }
144
+ }
145
+ return "manual";
146
+ }
147
+ }
148
+ function isFunctionsExcludeEntry(entry) {
149
+ const n = entry.replace(/\\/g, "/").replace(/^\.\//, "");
150
+ return n === "functions" || n === "functions/**" || n.startsWith("functions/");
151
+ }
152
+ function toPosix(path) {
153
+ return path.replace(/\\/g, "/");
154
+ }
155
+ //# sourceMappingURL=functions-deno-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions-deno-types.js","sourceRoot":"","sources":["../src/functions-deno-types.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ function importSpecFromRouter(routerFilePath, entrypoint) {
37
37
  export function generateFunctionsRouterSource(routerFilePath, fns) {
38
38
  const imports = fns.map((fn, i) => `import handler_${i} from "${importSpecFromRouter(routerFilePath, fn.entrypoint)}"`);
39
39
  const routes = fns.map((fn, i) => ` "${fn.name}": handler_${i},`);
40
- return `// Auto-generated do not edit (regenerated by supatype dev / functions serve)
40
+ return `// Auto-generated: do not edit (regenerated by supatype dev / functions serve)
41
41
  ${imports.join("\n")}
42
42
 
43
43
  const handlers: Record<string, (req: Request) => Response | Promise<Response>> = {
@@ -1,5 +1,5 @@
1
- export declare const SUPATYPE_GITIGNORE_MARKER = "# Supatype \u2014 local runtime (contains secrets in link.json)";
2
- export declare const SUPATYPE_GITIGNORE_BLOCK = "# Supatype \u2014 local runtime (contains secrets in link.json)\n.env\n.supatype/\nsupatype.local.config.ts\nsupatype.local.config.js\nsupatype.local.config.mjs\n";
1
+ export declare const SUPATYPE_GITIGNORE_MARKER = "# Supatype, local runtime (contains secrets in link.json)";
2
+ export declare const SUPATYPE_GITIGNORE_BLOCK = "# Supatype, local runtime (contains secrets in link.json)\n.env\n.supatype/\nsupatype.local.config.ts\nsupatype.local.config.js\nsupatype.local.config.mjs\n";
3
3
  export declare function isSupatypeGitignored(cwd: string): boolean;
4
4
  export declare function ensureSupatypeGitignore(cwd: string, opts?: {
5
5
  silent?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,oEAA+D,CAAA;AACrG,eAAO,MAAM,wBAAwB,uKAMpC,CAAA;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKzD;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAoBzF;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMzD"}
1
+ {"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,8DAA8D,CAAA;AACpG,eAAO,MAAM,wBAAwB,iKAMpC,CAAA;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKzD;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAoBzF;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMzD"}
package/dist/gitignore.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { resolve } from "node:path";
3
- export const SUPATYPE_GITIGNORE_MARKER = "# Supatype local runtime (contains secrets in link.json)";
3
+ export const SUPATYPE_GITIGNORE_MARKER = "# Supatype, local runtime (contains secrets in link.json)";
4
4
  export const SUPATYPE_GITIGNORE_BLOCK = `${SUPATYPE_GITIGNORE_MARKER}
5
5
  .env
6
6
  .supatype/
@@ -28,14 +28,14 @@ export function ensureSupatypeGitignore(cwd, opts) {
28
28
  writeFileSync(gitignorePath, `.env\nnode_modules/\ndist/\n${SUPATYPE_GITIGNORE_BLOCK}`, "utf8");
29
29
  }
30
30
  if (!opts?.silent) {
31
- console.warn("Added .supatype/ to .gitignore (link.json contains secrets never commit).");
31
+ console.warn("Added .supatype/ to .gitignore (link.json contains secrets, never commit).");
32
32
  }
33
33
  return true;
34
34
  }
35
35
  export function warnIfLinkNotGitignored(cwd) {
36
36
  if (isSupatypeGitignored(cwd))
37
37
  return;
38
- console.warn("\n⚠ Warning: .supatype/ is not in .gitignore link.json contains tokens and must not be committed.");
38
+ console.warn("\n⚠ Warning: .supatype/ is not in .gitignore, link.json contains tokens and must not be committed.");
39
39
  console.warn(" Run with link --fix-gitignore to append the Supatype block.\n");
40
40
  }
41
41
  //# sourceMappingURL=gitignore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,CAAC,MAAM,yBAAyB,GAAG,4DAA4D,CAAA;AACrG,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,yBAAyB;;;;;;CAMnE,CAAA;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IAChD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAA;IAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACnD,OAAO,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAW,EAAE,IAA2B;IAC9E,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IAChD,IAAI,oBAAoB,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAE1C,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;QACnD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAA;QAC9D,aAAa,CAAC,aAAa,EAAE,GAAG,IAAI,KAAK,wBAAwB,EAAE,EAAE,MAAM,CAAC,CAAA;IAC9E,CAAC;SAAM,CAAC;QACN,aAAa,CACX,aAAa,EACb,+BAA+B,wBAAwB,EAAE,EACzD,MAAM,CACP,CAAA;IACH,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAA;IAC7F,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,IAAI,oBAAoB,CAAC,GAAG,CAAC;QAAE,OAAM;IACrC,OAAO,CAAC,IAAI,CACV,sGAAsG,CACvG,CAAA;IACD,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;AAClF,CAAC"}
1
+ {"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../src/gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,CAAC,MAAM,yBAAyB,GAAG,2DAA2D,CAAA;AACpG,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,yBAAyB;;;;;;CAMnE,CAAA;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IAChD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAA;IAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACnD,OAAO,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAW,EAAE,IAA2B;IAC9E,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IAChD,IAAI,oBAAoB,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAE1C,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;QACnD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAA;QAC9D,aAAa,CAAC,aAAa,EAAE,GAAG,IAAI,KAAK,wBAAwB,EAAE,EAAE,MAAM,CAAC,CAAA;IAC9E,CAAC;SAAM,CAAC;QACN,aAAa,CACX,aAAa,EACb,+BAA+B,wBAAwB,EAAE,EACzD,MAAM,CACP,CAAA;IACH,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAA;IAC5F,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,IAAI,oBAAoB,CAAC,GAAG,CAAC;QAAE,OAAM;IACrC,OAAO,CAAC,IAAI,CACV,qGAAqG,CACtG,CAAA;IACD,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;AAClF,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { type ManifestHookEntry } from "./model-hooks.js";
2
+ /** The generated adapter, flattened. `_`-prefixed, so the worker never routes to it. */
3
+ export declare const ADAPTER_KEY = "_supatype-hooks.ts";
4
+ export interface HookUpload {
5
+ /** Handler name → its source, flattened and import-rewritten. */
6
+ handlers: Array<{
7
+ name: string;
8
+ source: string;
9
+ }>;
10
+ /** table → event → config, exactly as the manifest would carry it. */
11
+ map: Record<string, Record<string, ManifestHookEntry>>;
12
+ }
13
+ /**
14
+ * Read the hooks a schema actually names, ready to upload.
15
+ *
16
+ * **Named-only**, not every directory under `hooks/`: an unnamed handler would sit on the worker
17
+ * holding the service-role key with nothing able to call it. Uploading it buys nothing and widens what
18
+ * runs with that credential.
19
+ *
20
+ * Throws with a message meant for a terminal when a handler cannot be flattened faithfully, the
21
+ * alternative is a deploy that succeeds and a hook that fails to import, which reads to the caller as
22
+ * the table's writes being broken for no visible reason.
23
+ */
24
+ export declare function readHookUpload(cwd: string, hooksDir: string, ast: unknown): HookUpload | null;
25
+ /** The generated adapter as a handler-shaped entry, so it travels with them. */
26
+ export declare function adapterEntry(module: string): {
27
+ name: string;
28
+ source: string;
29
+ };
30
+ //# sourceMappingURL=hook-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-upload.d.ts","sourceRoot":"","sources":["../src/hook-upload.ts"],"names":[],"mappings":"AAWA,OAAO,EAAgC,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEvF,wFAAwF;AACxF,eAAO,MAAM,WAAW,uBAAuB,CAAA;AAK/C,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAA;CACvD;AA0BD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAwC7F;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAE7E"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Package a project's hooks for a managed stack.
3
+ *
4
+ * Self-hosted stacks need none of this: the worker mounts the project directory, so `hooks/` is already
5
+ * where it looks. A managed project has no directory, its worker reads a ConfigMap, whose keys may only
6
+ * contain alphanumerics, `-`, `_` and `.`. So the tree is flattened here, where it can be checked and
7
+ * explained, rather than in the deploy route where a dropped file would be silent.
8
+ */
9
+ import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
10
+ import { join, relative } from "node:path";
11
+ import { declaredHooks, manifestHooks } from "./model-hooks.js";
12
+ /** The generated adapter, flattened. `_`-prefixed, so the worker never routes to it. */
13
+ export const ADAPTER_KEY = "_supatype-hooks.ts";
14
+ /** What the handlers import locally, and what has to be rewritten to reach the flattened name. */
15
+ const ADAPTER_IMPORT = "../_supatype/hooks.ts";
16
+ /**
17
+ * Rewrite the one import a hook handler is generated to make.
18
+ *
19
+ * `../_supatype/hooks.ts` is a path that cannot survive flattening, and it is the specifier our own
20
+ * scaffold writes: so it is rewritten rather than refused. Any *other* relative import is refused
21
+ * below: it would resolve to nothing on the worker, and a hook that fails to import is a hooked table
22
+ * whose writes all start failing.
23
+ */
24
+ function rewriteAdapterImport(source) {
25
+ return source.split(ADAPTER_IMPORT).join(`./${ADAPTER_KEY}`);
26
+ }
27
+ /** Relative specifiers a flattened layout cannot honour, so the caller can refuse with a real reason. */
28
+ function unsupportedImports(source) {
29
+ const found = new Set();
30
+ // Matches `from "…"` and `import("…")`, which is every form that resolves against the file's own path.
31
+ for (const match of source.matchAll(/(?:from|import)\s*\(?\s*["'](\.[^"']*)["']/g)) {
32
+ const specifier = match[1];
33
+ if (specifier === ADAPTER_IMPORT || specifier === `./${ADAPTER_KEY}`)
34
+ continue;
35
+ found.add(specifier);
36
+ }
37
+ return [...found].sort();
38
+ }
39
+ /**
40
+ * Read the hooks a schema actually names, ready to upload.
41
+ *
42
+ * **Named-only**, not every directory under `hooks/`: an unnamed handler would sit on the worker
43
+ * holding the service-role key with nothing able to call it. Uploading it buys nothing and widens what
44
+ * runs with that credential.
45
+ *
46
+ * Throws with a message meant for a terminal when a handler cannot be flattened faithfully, the
47
+ * alternative is a deploy that succeeds and a hook that fails to import, which reads to the caller as
48
+ * the table's writes being broken for no visible reason.
49
+ */
50
+ export function readHookUpload(cwd, hooksDir, ast) {
51
+ const declared = declaredHooks(ast);
52
+ if (declared.length === 0)
53
+ return null;
54
+ const names = [...new Set(declared.map((hook) => hook.function))].sort();
55
+ const where = relative(cwd, hooksDir) || hooksDir;
56
+ const handlers = [];
57
+ for (const name of names) {
58
+ const dir = join(hooksDir, name);
59
+ const entry = join(dir, "index.ts");
60
+ if (!existsSync(entry)) {
61
+ throw new Error(`Hook "${name}" has no ${where}/${name}/index.ts`);
62
+ }
63
+ const extra = readdirSync(dir)
64
+ .filter((file) => file !== "index.ts")
65
+ .filter((file) => statSync(join(dir, file)).isFile() || !file.startsWith("."));
66
+ if (extra.length > 0) {
67
+ throw new Error(`Hook "${name}" has more than one file (${extra.join(", ")}).\n` +
68
+ `A managed stack serves each hook as a single module today, so the others would not be ` +
69
+ `uploaded and the hook would fail to import.\nMove what it needs into index.ts, or run this ` +
70
+ `hook on a self-hosted stack, which mounts the directory as it is.`);
71
+ }
72
+ const source = readFileSync(entry, "utf8");
73
+ const unsupported = unsupportedImports(source);
74
+ if (unsupported.length > 0) {
75
+ throw new Error(`Hook "${name}" imports ${unsupported.join(", ")}, which a managed stack cannot resolve.\n` +
76
+ `Only the generated ${ADAPTER_IMPORT} survives upload; bare specifiers and URLs are fine.`);
77
+ }
78
+ handlers.push({ name, source: rewriteAdapterImport(source) });
79
+ }
80
+ return { handlers, map: manifestHooks(ast) };
81
+ }
82
+ /** The generated adapter as a handler-shaped entry, so it travels with them. */
83
+ export function adapterEntry(module) {
84
+ return { name: ADAPTER_KEY.replace(/\.ts$/, ""), source: module };
85
+ }
86
+ //# sourceMappingURL=hook-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-upload.js","sourceRoot":"","sources":["../src/hook-upload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The module source, or `null` when no model declares a hook.
3
+ *
4
+ * Returning null rather than an empty module keeps a `_supatype/hooks.ts` from appearing in projects
5
+ * that have no hooks, a generated file nobody imports is a file somebody eventually edits.
6
+ */
7
+ export declare function generateHooksModule(ast: unknown): string | null;
8
+ //# sourceMappingURL=hooks-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-generator.d.ts","sourceRoot":"","sources":["../src/hooks-generator.ts"],"names":[],"mappings":"AAsCA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA0R/D"}