@supatype/cli 0.1.0-alpha.6 → 0.1.0-alpha.7

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 (309) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +203 -1
  3. package/.turbo/turbo-typecheck.log +1 -1
  4. package/dist/app-config.d.ts +7 -0
  5. package/dist/app-config.d.ts.map +1 -0
  6. package/dist/app-config.js +113 -0
  7. package/dist/app-config.js.map +1 -0
  8. package/dist/augmentation-generator.d.ts +2 -0
  9. package/dist/augmentation-generator.d.ts.map +1 -0
  10. package/dist/augmentation-generator.js +111 -0
  11. package/dist/augmentation-generator.js.map +1 -0
  12. package/dist/binary-cache.d.ts +89 -0
  13. package/dist/binary-cache.d.ts.map +1 -0
  14. package/dist/binary-cache.js +656 -0
  15. package/dist/binary-cache.js.map +1 -0
  16. package/dist/cli.d.ts.map +1 -1
  17. package/dist/cli.js +13 -7
  18. package/dist/cli.js.map +1 -1
  19. package/dist/commands/admin.d.ts.map +1 -1
  20. package/dist/commands/admin.js +4 -3
  21. package/dist/commands/admin.js.map +1 -1
  22. package/dist/commands/app.d.ts.map +1 -1
  23. package/dist/commands/app.js +56 -209
  24. package/dist/commands/app.js.map +1 -1
  25. package/dist/commands/cache.d.ts +6 -0
  26. package/dist/commands/cache.d.ts.map +1 -0
  27. package/dist/commands/cache.js +105 -0
  28. package/dist/commands/cache.js.map +1 -0
  29. package/dist/commands/cloud.d.ts +12 -0
  30. package/dist/commands/cloud.d.ts.map +1 -1
  31. package/dist/commands/cloud.js +36 -46
  32. package/dist/commands/cloud.js.map +1 -1
  33. package/dist/commands/db.d.ts.map +1 -1
  34. package/dist/commands/db.js +47 -54
  35. package/dist/commands/db.js.map +1 -1
  36. package/dist/commands/deploy.d.ts +2 -1
  37. package/dist/commands/deploy.d.ts.map +1 -1
  38. package/dist/commands/deploy.js +92 -51
  39. package/dist/commands/deploy.js.map +1 -1
  40. package/dist/commands/dev.d.ts +11 -0
  41. package/dist/commands/dev.d.ts.map +1 -1
  42. package/dist/commands/dev.js +751 -384
  43. package/dist/commands/dev.js.map +1 -1
  44. package/dist/commands/diff.d.ts.map +1 -1
  45. package/dist/commands/diff.js +20 -15
  46. package/dist/commands/diff.js.map +1 -1
  47. package/dist/commands/engine.d.ts +1 -3
  48. package/dist/commands/engine.d.ts.map +1 -1
  49. package/dist/commands/engine.js +13 -85
  50. package/dist/commands/engine.js.map +1 -1
  51. package/dist/commands/functions.d.ts.map +1 -1
  52. package/dist/commands/functions.js +92 -105
  53. package/dist/commands/functions.js.map +1 -1
  54. package/dist/commands/generate.d.ts.map +1 -1
  55. package/dist/commands/generate.js +22 -12
  56. package/dist/commands/generate.js.map +1 -1
  57. package/dist/commands/init.d.ts +1 -1
  58. package/dist/commands/init.d.ts.map +1 -1
  59. package/dist/commands/init.js +124 -410
  60. package/dist/commands/init.js.map +1 -1
  61. package/dist/commands/migrate-from-v1.d.ts +5 -0
  62. package/dist/commands/migrate-from-v1.d.ts.map +1 -0
  63. package/dist/commands/migrate-from-v1.js +125 -0
  64. package/dist/commands/migrate-from-v1.js.map +1 -0
  65. package/dist/commands/migrate.d.ts.map +1 -1
  66. package/dist/commands/migrate.js +27 -23
  67. package/dist/commands/migrate.js.map +1 -1
  68. package/dist/commands/pg.d.ts +8 -0
  69. package/dist/commands/pg.d.ts.map +1 -0
  70. package/dist/commands/pg.js +102 -0
  71. package/dist/commands/pg.js.map +1 -0
  72. package/dist/commands/pull.d.ts.map +1 -1
  73. package/dist/commands/pull.js +5 -66
  74. package/dist/commands/pull.js.map +1 -1
  75. package/dist/commands/push.d.ts.map +1 -1
  76. package/dist/commands/push.js +99 -39
  77. package/dist/commands/push.js.map +1 -1
  78. package/dist/commands/seed.d.ts +2 -0
  79. package/dist/commands/seed.d.ts.map +1 -1
  80. package/dist/commands/seed.js +44 -11
  81. package/dist/commands/seed.js.map +1 -1
  82. package/dist/commands/self-host.d.ts +7 -1
  83. package/dist/commands/self-host.d.ts.map +1 -1
  84. package/dist/commands/self-host.js +272 -758
  85. package/dist/commands/self-host.js.map +1 -1
  86. package/dist/commands/self-update.d.ts +9 -0
  87. package/dist/commands/self-update.d.ts.map +1 -0
  88. package/dist/commands/self-update.js +33 -0
  89. package/dist/commands/self-update.js.map +1 -0
  90. package/dist/commands/status.d.ts.map +1 -1
  91. package/dist/commands/status.js +4 -3
  92. package/dist/commands/status.js.map +1 -1
  93. package/dist/commands/types.d.ts +3 -0
  94. package/dist/commands/types.d.ts.map +1 -0
  95. package/dist/commands/types.js +62 -0
  96. package/dist/commands/types.js.map +1 -0
  97. package/dist/commands/update.d.ts +7 -0
  98. package/dist/commands/update.d.ts.map +1 -0
  99. package/dist/commands/update.js +77 -0
  100. package/dist/commands/update.js.map +1 -0
  101. package/dist/components.d.ts +5 -0
  102. package/dist/components.d.ts.map +1 -0
  103. package/dist/components.js +3 -0
  104. package/dist/components.js.map +1 -0
  105. package/dist/config.d.ts +10 -51
  106. package/dist/config.d.ts.map +1 -1
  107. package/dist/config.js +101 -33
  108. package/dist/config.js.map +1 -1
  109. package/dist/docker-postgres.d.ts +39 -0
  110. package/dist/docker-postgres.d.ts.map +1 -0
  111. package/dist/docker-postgres.js +96 -0
  112. package/dist/docker-postgres.js.map +1 -0
  113. package/dist/engine-client.d.ts +67 -0
  114. package/dist/engine-client.d.ts.map +1 -0
  115. package/dist/engine-client.js +156 -0
  116. package/dist/engine-client.js.map +1 -0
  117. package/dist/ensure-binary.d.ts +7 -0
  118. package/dist/ensure-binary.d.ts.map +1 -0
  119. package/dist/ensure-binary.js +17 -0
  120. package/dist/ensure-binary.js.map +1 -0
  121. package/dist/functions-router-gen.d.ts +14 -0
  122. package/dist/functions-router-gen.d.ts.map +1 -0
  123. package/dist/functions-router-gen.js +199 -0
  124. package/dist/functions-router-gen.js.map +1 -0
  125. package/dist/index.d.ts +4 -5
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +2 -3
  128. package/dist/index.js.map +1 -1
  129. package/dist/kong-config.d.ts +21 -0
  130. package/dist/kong-config.d.ts.map +1 -0
  131. package/dist/kong-config.js +60 -0
  132. package/dist/kong-config.js.map +1 -0
  133. package/dist/local-gateway.d.ts +7 -0
  134. package/dist/local-gateway.d.ts.map +1 -0
  135. package/dist/local-gateway.js +9 -0
  136. package/dist/local-gateway.js.map +1 -0
  137. package/dist/local-storage.d.ts +8 -0
  138. package/dist/local-storage.d.ts.map +1 -0
  139. package/dist/local-storage.js +14 -0
  140. package/dist/local-storage.js.map +1 -0
  141. package/dist/pgbouncer-userlist.d.ts +5 -0
  142. package/dist/pgbouncer-userlist.d.ts.map +1 -0
  143. package/dist/pgbouncer-userlist.js +14 -0
  144. package/dist/pgbouncer-userlist.js.map +1 -0
  145. package/dist/postgres-ctl.d.ts +44 -0
  146. package/dist/postgres-ctl.d.ts.map +1 -0
  147. package/dist/postgres-ctl.js +137 -0
  148. package/dist/postgres-ctl.js.map +1 -0
  149. package/dist/process-manager.d.ts +41 -0
  150. package/dist/process-manager.d.ts.map +1 -0
  151. package/dist/process-manager.js +120 -0
  152. package/dist/process-manager.js.map +1 -0
  153. package/dist/project-config.d.ts +215 -0
  154. package/dist/project-config.d.ts.map +1 -0
  155. package/dist/project-config.js +145 -0
  156. package/dist/project-config.js.map +1 -0
  157. package/dist/pull-utils.d.ts +15 -0
  158. package/dist/pull-utils.d.ts.map +1 -1
  159. package/dist/pull-utils.js +12 -0
  160. package/dist/pull-utils.js.map +1 -1
  161. package/dist/release-pins.d.ts +7 -0
  162. package/dist/release-pins.d.ts.map +1 -0
  163. package/dist/release-pins.js +27 -0
  164. package/dist/release-pins.js.map +1 -0
  165. package/dist/release-public-key.d.ts +8 -0
  166. package/dist/release-public-key.d.ts.map +1 -0
  167. package/dist/release-public-key.js +13 -0
  168. package/dist/release-public-key.js.map +1 -0
  169. package/dist/runtime-routes.d.ts +25 -0
  170. package/dist/runtime-routes.d.ts.map +1 -0
  171. package/dist/runtime-routes.js +189 -0
  172. package/dist/runtime-routes.js.map +1 -0
  173. package/dist/scripts/postinstall.d.ts +5 -6
  174. package/dist/scripts/postinstall.d.ts.map +1 -1
  175. package/dist/scripts/postinstall.js +36 -20
  176. package/dist/scripts/postinstall.js.map +1 -1
  177. package/dist/self-host-compose.d.ts +14 -0
  178. package/dist/self-host-compose.d.ts.map +1 -0
  179. package/dist/self-host-compose.js +236 -0
  180. package/dist/self-host-compose.js.map +1 -0
  181. package/dist/storage-provision.d.ts +24 -0
  182. package/dist/storage-provision.d.ts.map +1 -0
  183. package/dist/storage-provision.js +44 -0
  184. package/dist/storage-provision.js.map +1 -0
  185. package/dist/systemd.d.ts +26 -0
  186. package/dist/systemd.d.ts.map +1 -0
  187. package/dist/systemd.js +102 -0
  188. package/dist/systemd.js.map +1 -0
  189. package/dist/tsx-runner.d.ts.map +1 -1
  190. package/dist/tsx-runner.js +9 -2
  191. package/dist/tsx-runner.js.map +1 -1
  192. package/dist/type-extractor.d.ts +31 -0
  193. package/dist/type-extractor.d.ts.map +1 -0
  194. package/dist/type-extractor.js +876 -0
  195. package/dist/type-extractor.js.map +1 -0
  196. package/package.json +4 -3
  197. package/releases/deno/VERSION +1 -0
  198. package/scripts/mirror-deno-release.sh +76 -0
  199. package/src/app-config.ts +128 -0
  200. package/src/augmentation-generator.ts +126 -0
  201. package/src/binary-cache.ts +802 -0
  202. package/src/cli.ts +13 -8
  203. package/src/commands/admin.ts +4 -3
  204. package/src/commands/app.ts +67 -231
  205. package/src/commands/cache.ts +117 -0
  206. package/src/commands/cloud.ts +46 -57
  207. package/src/commands/db.ts +54 -63
  208. package/src/commands/deploy.ts +110 -61
  209. package/src/commands/dev.ts +930 -405
  210. package/src/commands/diff.ts +21 -29
  211. package/src/commands/engine.ts +13 -116
  212. package/src/commands/functions.ts +97 -115
  213. package/src/commands/generate.ts +23 -10
  214. package/src/commands/init.ts +136 -414
  215. package/src/commands/migrate-from-v1.ts +131 -0
  216. package/src/commands/migrate.ts +27 -23
  217. package/src/commands/pg.ts +133 -0
  218. package/src/commands/pull.ts +6 -85
  219. package/src/commands/push.ts +128 -59
  220. package/src/commands/seed.ts +54 -12
  221. package/src/commands/self-host.ts +312 -880
  222. package/src/commands/self-update.ts +45 -0
  223. package/src/commands/status.ts +4 -3
  224. package/src/commands/types.ts +76 -0
  225. package/src/commands/update.ts +92 -0
  226. package/src/components.ts +6 -0
  227. package/src/config.ts +127 -94
  228. package/src/docker-postgres.ts +138 -0
  229. package/src/engine-client.ts +231 -0
  230. package/src/ensure-binary.ts +28 -0
  231. package/src/functions-router-gen.ts +224 -0
  232. package/src/index.ts +4 -12
  233. package/src/kong-config.ts +78 -0
  234. package/src/local-gateway.ts +9 -0
  235. package/src/local-storage.ts +14 -0
  236. package/src/pgbouncer-userlist.ts +15 -0
  237. package/src/postgres-ctl.ts +171 -0
  238. package/src/process-manager.ts +151 -0
  239. package/src/project-config.ts +353 -0
  240. package/src/pull-utils.ts +24 -0
  241. package/src/release-pins.ts +31 -0
  242. package/src/release-public-key.ts +12 -0
  243. package/src/runtime-routes.ts +216 -0
  244. package/src/scripts/postinstall.ts +36 -25
  245. package/src/self-host-compose.ts +257 -0
  246. package/src/storage-provision.ts +58 -0
  247. package/src/systemd.ts +137 -0
  248. package/src/tsx-runner.ts +11 -1
  249. package/src/type-extractor.ts +1016 -0
  250. package/tests/app-command.test.ts +54 -0
  251. package/tests/augmentation-generator.test.ts +59 -0
  252. package/tests/binary-cache-cloud-overrides.test.ts +123 -0
  253. package/tests/cached-artifact-format.test.ts +84 -0
  254. package/tests/cli-help.test.ts +40 -14
  255. package/tests/config.test.ts +140 -37
  256. package/tests/engine-distribution.test.ts +3 -3
  257. package/tests/ensure-binary.test.ts +59 -0
  258. package/tests/init.test.ts +28 -86
  259. package/tests/migrate-from-v1.test.ts +29 -0
  260. package/tests/pg-spawn-env.test.ts +18 -0
  261. package/tests/postgres-archive-tag.test.ts +9 -0
  262. package/tests/pull-utils.test.ts +36 -1
  263. package/tests/release-pins.test.ts +28 -0
  264. package/tests/runtime-contract.test.ts +236 -0
  265. package/tests/seed-discover.test.ts +31 -0
  266. package/tests/tsconfig.json +9 -0
  267. package/tests/type-extractor.test.ts +401 -0
  268. package/tsconfig.tsbuildinfo +1 -1
  269. package/vitest.config.ts +12 -0
  270. package/dist/engine/cache.d.ts +0 -37
  271. package/dist/engine/cache.d.ts.map +0 -1
  272. package/dist/engine/cache.js +0 -121
  273. package/dist/engine/cache.js.map +0 -1
  274. package/dist/engine/download.d.ts +0 -19
  275. package/dist/engine/download.d.ts.map +0 -1
  276. package/dist/engine/download.js +0 -108
  277. package/dist/engine/download.js.map +0 -1
  278. package/dist/engine/platform.d.ts +0 -24
  279. package/dist/engine/platform.d.ts.map +0 -1
  280. package/dist/engine/platform.js +0 -50
  281. package/dist/engine/platform.js.map +0 -1
  282. package/dist/engine/resolve.d.ts +0 -37
  283. package/dist/engine/resolve.d.ts.map +0 -1
  284. package/dist/engine/resolve.js +0 -133
  285. package/dist/engine/resolve.js.map +0 -1
  286. package/dist/engine/update-notify.d.ts +0 -11
  287. package/dist/engine/update-notify.d.ts.map +0 -1
  288. package/dist/engine/update-notify.js +0 -43
  289. package/dist/engine/update-notify.js.map +0 -1
  290. package/dist/engine/verify.d.ts +0 -50
  291. package/dist/engine/verify.d.ts.map +0 -1
  292. package/dist/engine/verify.js +0 -161
  293. package/dist/engine/verify.js.map +0 -1
  294. package/dist/engine-version.d.ts +0 -35
  295. package/dist/engine-version.d.ts.map +0 -1
  296. package/dist/engine-version.js +0 -35
  297. package/dist/engine-version.js.map +0 -1
  298. package/dist/engine.d.ts +0 -34
  299. package/dist/engine.d.ts.map +0 -1
  300. package/dist/engine.js +0 -76
  301. package/dist/engine.js.map +0 -1
  302. package/src/engine/cache.ts +0 -135
  303. package/src/engine/download.ts +0 -143
  304. package/src/engine/platform.ts +0 -66
  305. package/src/engine/resolve.ts +0 -197
  306. package/src/engine/update-notify.ts +0 -50
  307. package/src/engine/verify.ts +0 -206
  308. package/src/engine-version.ts +0 -39
  309. package/src/engine.ts +0 -99
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ProcessManager — spawn a child process, write its PID, stream logs with a
3
+ * colored prefix, and restart on crash with exponential backoff.
4
+ */
5
+ export interface ProcessOptions {
6
+ /** Human-readable label (used in log prefix and PID filename). */
7
+ label: string;
8
+ /** Directory to write {label}.pid to. */
9
+ pidDir: string;
10
+ /** ANSI colour prefix string (e.g. "\x1b[36m"). Pass "" for no colour. */
11
+ colour?: string;
12
+ /** Working directory for the spawned process. Defaults to process.cwd(). */
13
+ cwd?: string;
14
+ /** Environment variables to merge with process.env. */
15
+ env?: Record<string, string>;
16
+ /** Initial restart backoff in ms. Doubles each crash up to maxBackoffMs. */
17
+ initialBackoffMs?: number;
18
+ /** Maximum restart backoff cap in ms. */
19
+ maxBackoffMs?: number;
20
+ /** Called when the process exits cleanly (code 0). */
21
+ onExit?: () => void;
22
+ }
23
+ export declare class ProcessManager {
24
+ private readonly bin;
25
+ private readonly args;
26
+ private child;
27
+ private stopped;
28
+ private backoffMs;
29
+ private opts;
30
+ constructor(bin: string, args: string[], opts: ProcessOptions);
31
+ /** Start the process. Returns immediately — the process runs in the background. */
32
+ start(): void;
33
+ /** Stop the process and clear the PID file. */
34
+ stop(): Promise<void>;
35
+ private spawn;
36
+ private writePid;
37
+ private clearPid;
38
+ }
39
+ /** Read a PID from a file (returns null if not found or stale). */
40
+ export declare function readPid(pidDir: string, label: string): number | null;
41
+ //# sourceMappingURL=process-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAA;IACb,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB;AAID,qBAAa,cAAc;IAOvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPvB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,IAAI,CAA0B;gBAGnB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EAC/B,IAAI,EAAE,cAAc;IActB,mFAAmF;IACnF,KAAK,IAAI,IAAI;IAKb,+CAA+C;IACzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B,OAAO,CAAC,KAAK;IA6Cb,OAAO,CAAC,QAAQ;YASF,QAAQ;CAOvB;AAED,mEAAmE;AACnE,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMpE"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * ProcessManager — spawn a child process, write its PID, stream logs with a
3
+ * colored prefix, and restart on crash with exponential backoff.
4
+ */
5
+ import { spawn } from "node:child_process";
6
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
7
+ import { unlink } from "node:fs/promises";
8
+ import { join } from "node:path";
9
+ const RESET = "\x1b[0m";
10
+ export class ProcessManager {
11
+ bin;
12
+ args;
13
+ child = null;
14
+ stopped = false;
15
+ backoffMs;
16
+ opts;
17
+ constructor(bin, args, opts) {
18
+ this.bin = bin;
19
+ this.args = args;
20
+ this.opts = {
21
+ colour: "\x1b[36m",
22
+ cwd: process.cwd(),
23
+ env: {},
24
+ initialBackoffMs: 1_000,
25
+ maxBackoffMs: 30_000,
26
+ onExit: () => { },
27
+ ...opts,
28
+ };
29
+ this.backoffMs = this.opts.initialBackoffMs;
30
+ }
31
+ /** Start the process. Returns immediately — the process runs in the background. */
32
+ start() {
33
+ this.stopped = false;
34
+ this.spawn();
35
+ }
36
+ /** Stop the process and clear the PID file. */
37
+ async stop() {
38
+ this.stopped = true;
39
+ if (this.child && !this.child.killed) {
40
+ this.child.kill("SIGTERM");
41
+ // Give it 5s to exit gracefully, then SIGKILL.
42
+ await new Promise((resolve) => {
43
+ const timeout = setTimeout(() => {
44
+ this.child?.kill("SIGKILL");
45
+ resolve();
46
+ }, 5_000);
47
+ this.child.once("exit", () => {
48
+ clearTimeout(timeout);
49
+ resolve();
50
+ });
51
+ });
52
+ }
53
+ await this.clearPid();
54
+ }
55
+ spawn() {
56
+ if (this.stopped)
57
+ return;
58
+ const env = { ...process.env, ...this.opts.env };
59
+ this.child = spawn(this.bin, this.args, { env, cwd: this.opts.cwd, stdio: "pipe" });
60
+ const pid = this.child.pid;
61
+ if (pid)
62
+ this.writePid(pid);
63
+ const prefix = this.opts.colour
64
+ ? `${this.opts.colour}[${this.opts.label}]${RESET} `
65
+ : `[${this.opts.label}] `;
66
+ this.child.stdout?.on("data", (chunk) => {
67
+ for (const line of chunk.toString().split("\n")) {
68
+ if (line)
69
+ process.stdout.write(prefix + line + "\n");
70
+ }
71
+ });
72
+ this.child.stderr?.on("data", (chunk) => {
73
+ for (const line of chunk.toString().split("\n")) {
74
+ if (line)
75
+ process.stderr.write(prefix + line + "\n");
76
+ }
77
+ });
78
+ this.child.once("exit", (code, signal) => {
79
+ if (this.stopped)
80
+ return;
81
+ if (code === 0) {
82
+ this.opts.onExit();
83
+ return;
84
+ }
85
+ const reason = signal ? `signal ${signal}` : `code ${code}`;
86
+ process.stderr.write(`${prefix}process exited (${reason}), restarting in ${this.backoffMs}ms\n`);
87
+ setTimeout(() => {
88
+ this.backoffMs = Math.min(this.backoffMs * 2, this.opts.maxBackoffMs);
89
+ this.spawn();
90
+ }, this.backoffMs);
91
+ });
92
+ }
93
+ writePid(pid) {
94
+ try {
95
+ mkdirSync(this.opts.pidDir, { recursive: true });
96
+ writeFileSync(join(this.opts.pidDir, `${this.opts.label}.pid`), String(pid));
97
+ }
98
+ catch {
99
+ // Non-fatal — PID tracking is best-effort.
100
+ }
101
+ }
102
+ async clearPid() {
103
+ try {
104
+ await unlink(join(this.opts.pidDir, `${this.opts.label}.pid`));
105
+ }
106
+ catch {
107
+ // Ignore — file may already be gone.
108
+ }
109
+ }
110
+ }
111
+ /** Read a PID from a file (returns null if not found or stale). */
112
+ export function readPid(pidDir, label) {
113
+ const pidFile = join(pidDir, `${label}.pid`);
114
+ if (!existsSync(pidFile))
115
+ return null;
116
+ const raw = readFileSync(pidFile, "utf8").trim();
117
+ const pid = Number(raw);
118
+ return Number.isFinite(pid) && pid > 0 ? pid : null;
119
+ }
120
+ //# sourceMappingURL=process-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../src/process-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ import type { ComponentVersions } from "./components.js";
2
+ export interface SupatypeProjectConfig {
3
+ supatype?: {
4
+ /**
5
+ * Base directory for Supatype project assets (schema, functions, etc).
6
+ * "." means the current working directory (default).
7
+ */
8
+ root?: string;
9
+ };
10
+ project: {
11
+ /** Project name — used for per-project state dirs and logging. */
12
+ name: string;
13
+ /** Cloud project reference (set by `supatype link`). */
14
+ ref?: string;
15
+ };
16
+ database: {
17
+ /**
18
+ * Database backend.
19
+ * "native" = supatype manages a native Postgres binary (downloaded from CDN).
20
+ * "docker" = supatype runs supatype/postgres via Docker (includes all extensions).
21
+ */
22
+ provider: "native" | "docker";
23
+ /**
24
+ * Directory where Postgres stores its data files (provider=native).
25
+ * Defaults to ~/.supatype/projects/{name}/data when omitted.
26
+ */
27
+ data_dir?: string;
28
+ /**
29
+ * Docker image to use (provider=docker).
30
+ * Defaults to supatype/postgres:17-latest.
31
+ * Override in supatype.local.config.ts for local builds.
32
+ */
33
+ image?: string;
34
+ };
35
+ server: {
36
+ /**
37
+ * Server mode.
38
+ * "dev" = no TLS, permissive CORS, Vite HMR proxy
39
+ * "standalone" = ACME TLS (Let's Encrypt)
40
+ * "managed" = cloud-managed, HMAC tenant verification
41
+ */
42
+ mode: "dev" | "standalone" | "managed";
43
+ /** Port supatype-server listens on (default: 54321). */
44
+ port?: number;
45
+ /** Port PostgREST listens on in local dev (default: 3001). */
46
+ postgrestPort?: number;
47
+ /** Domain for ACME TLS certificate (mode=standalone). */
48
+ domain?: string;
49
+ };
50
+ app: {
51
+ /**
52
+ * How the root path "/" is handled by supatype-server.
53
+ * "none" = 404
54
+ * "static" = serve files from static_dir
55
+ * "proxy" = reverse-proxy to upstream
56
+ */
57
+ mode: "none" | "static" | "proxy";
58
+ /** Directory to serve static files from (mode=static). */
59
+ static_dir?: string;
60
+ /** Upstream URL to proxy to (mode=proxy). */
61
+ upstream?: string;
62
+ /**
63
+ * Vite dev server base URL for HMR (`/_vite/*`) when `server.mode` is dev.
64
+ * Example: `http://127.0.0.1:5173`. Sets `SUPATYPE_VITE_DEV_URL` for supatype-server.
65
+ * When omitted, dev still falls back to `SUPATYPE_APP_UPSTREAM` for non-proxy app modes.
66
+ */
67
+ vite_dev_url?: string;
68
+ };
69
+ /**
70
+ * Pinned binary versions per component. Use **`"local"`** with the matching **`overrides.*`**
71
+ * entry when testing a local build (Phase 10.7).
72
+ */
73
+ versions: ComponentVersions;
74
+ /**
75
+ * Override component binaries with local build paths.
76
+ * Intended for supatype contributors testing local changes.
77
+ * Cannot be combined with a linked cloud project (`project.ref`, `.supatype/cloud.json`, or `.supatype/linked.json`; hard error in `resolveBinary`).
78
+ */
79
+ overrides?: {
80
+ /** Path to local engine binary. */
81
+ engine?: string;
82
+ /** Path to local supatype-server binary. */
83
+ server?: string;
84
+ /** Path to a directory containing a local Postgres installation. */
85
+ postgres_dir?: string;
86
+ /** Path to a local deno binary. */
87
+ deno?: string;
88
+ /** Path to the @supatype/studio package directory (starts Vite dev server). */
89
+ studio?: string;
90
+ /** Path to a local PostgREST binary. */
91
+ postgrest?: string;
92
+ };
93
+ email?: {
94
+ /**
95
+ * Email delivery provider.
96
+ * "console" = log to stdout (default for dev)
97
+ * "smtp" = SMTP (set `smtp` below and/or GOTRUE_SMTP_* in `.env`)
98
+ * "resend" = Resend API (requires RESEND_API_KEY, RESEND_FROM)
99
+ * "ses" = AWS SES v2 (ambient credentials, requires SES_FROM)
100
+ */
101
+ provider: "console" | "smtp" | "resend" | "ses";
102
+ /**
103
+ * SMTP settings for provider=smtp (merged into process env as GOTRUE_SMTP_*).
104
+ * Omitted keys can still be set via `.env` / shell.
105
+ */
106
+ smtp?: {
107
+ host?: string;
108
+ port?: number;
109
+ user?: string;
110
+ pass?: string;
111
+ admin_email?: string;
112
+ sender_name?: string;
113
+ };
114
+ /** Resend API key (provider=resend, or set RESEND_API_KEY env var). */
115
+ resend_api_key?: string;
116
+ /** From address for Resend (provider=resend, or set RESEND_FROM env var). */
117
+ resend_from?: string;
118
+ /** From address for SES (provider=ses, or set SES_FROM env var). */
119
+ ses_from?: string;
120
+ /**
121
+ * When true, `supatype dev` enables the GoTrue send-email HTTP hook pointing at this
122
+ * server's POST `/internal/v0hooks/send-email` (signed delivery, dev-only secret).
123
+ * Override `GOTRUE_HOOK_SEND_EMAIL_*` in `.env` if needed.
124
+ */
125
+ send_email_hook?: boolean;
126
+ /**
127
+ * Override hook target URL when `send_email_hook` is true (e.g. HTTPS tunnel or Edge URL).
128
+ * Default: `http://127.0.0.1:<serverPort>/internal/v0hooks/send-email`.
129
+ */
130
+ send_email_hook_uri?: string;
131
+ /**
132
+ * Standard Webhooks v1 secrets for the send-email hook (`v1,whsec_...`, pipe-separated for rotation).
133
+ * Default in dev: a fixed local secret; override for team-shared dev or CI.
134
+ */
135
+ send_email_hook_secrets?: string;
136
+ };
137
+ storage?: {
138
+ /**
139
+ * Storage backend.
140
+ * "local" = files on disk (LocalStoragePath required)
141
+ * "s3" = AWS S3 or compatible (ambient credentials)
142
+ */
143
+ provider: "local" | "s3";
144
+ /** Local directory to store objects in (provider=local). */
145
+ local_path?: string;
146
+ };
147
+ schema?: {
148
+ /** Path (or glob) to the schema entry point. Defaults to "schema/index.ts". */
149
+ path?: string;
150
+ /** Postgres schema name. Defaults to "public". */
151
+ pg_schema?: string;
152
+ };
153
+ functions?: {
154
+ /** Path to edge functions directory, relative to `supatype.root` when not absolute. */
155
+ path?: string;
156
+ };
157
+ output?: {
158
+ /** Path for generated TypeScript types. */
159
+ types?: string;
160
+ /** Path for generated client helpers. */
161
+ client?: string;
162
+ };
163
+ /**
164
+ * App build configuration for `supatype deploy`.
165
+ * Separate from `app` which controls how supatype-server serves at runtime.
166
+ */
167
+ build?: {
168
+ /** Framework name. Auto-detected from package.json when omitted. */
169
+ framework?: "nextjs" | "astro" | "vite" | "remix-spa" | "sveltekit" | "nuxt" | "static";
170
+ /** Path to the app directory. Defaults to cwd. */
171
+ directory?: string;
172
+ /** Build command. Inferred from framework when omitted. */
173
+ buildCommand?: string;
174
+ /** Build output directory. Inferred from framework when omitted. */
175
+ outputDirectory?: string;
176
+ /** Enable SPA fallback routing. */
177
+ spa?: boolean;
178
+ /** Environment variables injected at build time. */
179
+ env?: Record<string, string>;
180
+ /** Custom response headers for the deployed static site. */
181
+ headers?: Record<string, string>;
182
+ };
183
+ /**
184
+ * Optional Postgres URL for CLI commands that talk to the DB (`push`, `migrate`, …).
185
+ * When omitted, `DATABASE_URL` from the environment is used, then a local default DSN.
186
+ */
187
+ connection?: string;
188
+ }
189
+ /**
190
+ * Merge each top-level section from `override` on top of `base`.
191
+ * Within each section, override values win. New optional sections in override are added.
192
+ */
193
+ export declare function mergeProjectConfig(base: SupatypeProjectConfig, override: Partial<SupatypeProjectConfig>): SupatypeProjectConfig;
194
+ export declare function validateProjectConfig(raw: unknown, filename: string): SupatypeProjectConfig;
195
+ /** Schema entry path (with fallback). */
196
+ export declare function schemaPathFromProject(cfg: SupatypeProjectConfig, cwd: string): string;
197
+ /** Resolve project root for schema/functions defaults. */
198
+ export declare function projectRootFromConfig(cfg: SupatypeProjectConfig, cwd: string): string;
199
+ /** Candidate functions directories in lookup order. */
200
+ export declare function functionsPathCandidatesFromProject(cfg: SupatypeProjectConfig, cwd: string): string[];
201
+ /** Preferred default functions path (used when creating new functions). */
202
+ export declare function preferredFunctionsPathFromProject(cfg: SupatypeProjectConfig, cwd: string): string;
203
+ /**
204
+ * Derive the supatype-server base URL from the project config.
205
+ * Returns undefined if the mode is "managed" (cloud controls the URL).
206
+ */
207
+ export declare function serverBaseUrl(cfg: SupatypeProjectConfig): string | undefined;
208
+ /** The local Postgres DSN derived from project name (dev default). */
209
+ export declare function localDSN(cfg: SupatypeProjectConfig): string;
210
+ /**
211
+ * Resolve the database connection string.
212
+ * Prefers optional `connection` in config, then `DATABASE_URL` env, then a local default DSN.
213
+ */
214
+ export declare function connectionString(cfg: SupatypeProjectConfig): string;
215
+ //# sourceMappingURL=project-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../src/project-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ import { existsSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ // ---------------------------------------------------------------------------
4
+ // Merge + validate
5
+ // ---------------------------------------------------------------------------
6
+ /**
7
+ * Merge each top-level section from `override` on top of `base`.
8
+ * Within each section, override values win. New optional sections in override are added.
9
+ */
10
+ export function mergeProjectConfig(base, override) {
11
+ return {
12
+ ...(base.supatype !== undefined || override.supatype !== undefined
13
+ ? { supatype: { ...base.supatype, ...override.supatype } }
14
+ : {}),
15
+ project: { ...base.project, ...override.project },
16
+ database: { ...base.database, ...override.database },
17
+ server: { ...base.server, ...override.server },
18
+ app: { ...base.app, ...override.app },
19
+ versions: { ...base.versions, ...override.versions },
20
+ ...(base.overrides !== undefined || override.overrides !== undefined
21
+ ? {
22
+ overrides: {
23
+ ...base.overrides,
24
+ ...override.overrides,
25
+ },
26
+ }
27
+ : {}),
28
+ ...(base.email !== undefined || override.email !== undefined
29
+ ? (() => {
30
+ const b = base.email;
31
+ const o = override.email;
32
+ const mergedSmtp = b?.smtp !== undefined || o?.smtp !== undefined
33
+ ? { ...(b?.smtp ?? {}), ...(o?.smtp ?? {}) }
34
+ : undefined;
35
+ return {
36
+ email: {
37
+ ...b,
38
+ ...o,
39
+ ...(mergedSmtp !== undefined ? { smtp: mergedSmtp } : {}),
40
+ },
41
+ };
42
+ })()
43
+ : {}),
44
+ ...(base.storage !== undefined || override.storage !== undefined
45
+ ? {
46
+ storage: {
47
+ ...base.storage,
48
+ ...override.storage,
49
+ },
50
+ }
51
+ : {}),
52
+ ...(base.schema !== undefined || override.schema !== undefined
53
+ ? { schema: { ...base.schema, ...override.schema } }
54
+ : {}),
55
+ ...(base.functions !== undefined || override.functions !== undefined
56
+ ? { functions: { ...base.functions, ...override.functions } }
57
+ : {}),
58
+ ...(base.output !== undefined || override.output !== undefined
59
+ ? { output: { ...base.output, ...override.output } }
60
+ : {}),
61
+ ...(base.build !== undefined || override.build !== undefined
62
+ ? { build: { ...base.build, ...override.build } }
63
+ : {}),
64
+ ...(base.connection !== undefined || override.connection !== undefined
65
+ ? { connection: override.connection ?? base.connection }
66
+ : {}),
67
+ };
68
+ }
69
+ export function validateProjectConfig(raw, filename) {
70
+ if (typeof raw !== "object" || raw === null) {
71
+ throw new Error(`${filename}: expected a config object at the root`);
72
+ }
73
+ const cfg = raw;
74
+ if (!cfg["project"] || typeof cfg["project"]["name"] !== "string") {
75
+ throw new Error(`${filename}: project.name is required`);
76
+ }
77
+ if (!cfg["database"]) {
78
+ throw new Error(`${filename}: database section is required`);
79
+ }
80
+ if (!cfg["server"]) {
81
+ throw new Error(`${filename}: server section is required`);
82
+ }
83
+ if (!cfg["app"]) {
84
+ throw new Error(`${filename}: app section is required`);
85
+ }
86
+ if (!cfg["versions"]) {
87
+ throw new Error(`${filename}: versions section is required`);
88
+ }
89
+ return raw;
90
+ }
91
+ /** Schema entry path (with fallback). */
92
+ export function schemaPathFromProject(cfg, cwd) {
93
+ return resolve(projectRootFromConfig(cfg, cwd), cfg.schema?.path ?? "schema/index.ts");
94
+ }
95
+ /** Resolve project root for schema/functions defaults. */
96
+ export function projectRootFromConfig(cfg, cwd) {
97
+ return resolve(cwd, cfg.supatype?.root ?? ".");
98
+ }
99
+ /** Candidate functions directories in lookup order. */
100
+ export function functionsPathCandidatesFromProject(cfg, cwd) {
101
+ const root = projectRootFromConfig(cfg, cwd);
102
+ if (cfg.functions?.path) {
103
+ return [resolve(root, cfg.functions.path)];
104
+ }
105
+ // Prefer modern default, but keep legacy fallback for compatibility.
106
+ return [resolve(root, "functions"), resolve(root, "supatype/functions")];
107
+ }
108
+ /** Preferred default functions path (used when creating new functions). */
109
+ export function preferredFunctionsPathFromProject(cfg, cwd) {
110
+ const candidates = functionsPathCandidatesFromProject(cfg, cwd);
111
+ for (const dir of candidates) {
112
+ if (existsSync(dir))
113
+ return dir;
114
+ }
115
+ return candidates[0] ?? resolve(projectRootFromConfig(cfg, cwd), "functions");
116
+ }
117
+ /**
118
+ * Derive the supatype-server base URL from the project config.
119
+ * Returns undefined if the mode is "managed" (cloud controls the URL).
120
+ */
121
+ export function serverBaseUrl(cfg) {
122
+ const port = cfg.server.port ?? 54321;
123
+ switch (cfg.server.mode) {
124
+ case "dev":
125
+ case "standalone":
126
+ return cfg.server.domain
127
+ ? `https://${cfg.server.domain}`
128
+ : `http://localhost:${port}`;
129
+ case "managed":
130
+ return undefined;
131
+ }
132
+ }
133
+ /** The local Postgres DSN derived from project name (dev default). */
134
+ export function localDSN(cfg) {
135
+ const port = 5432; // standard; per-project state dir isolates data dirs
136
+ return `postgres://postgres:postgres@127.0.0.1:${port}/${cfg.project.name}?sslmode=disable`;
137
+ }
138
+ /**
139
+ * Resolve the database connection string.
140
+ * Prefers optional `connection` in config, then `DATABASE_URL` env, then a local default DSN.
141
+ */
142
+ export function connectionString(cfg) {
143
+ return cfg.connection ?? process.env["DATABASE_URL"] ?? localDSN(cfg);
144
+ }
145
+ //# sourceMappingURL=project-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-config.js","sourceRoot":"","sources":["../src/project-config.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,21 @@ export interface ColumnInfo {
9
9
  isUnique: boolean;
10
10
  hasDefault: boolean;
11
11
  }
12
+ /** Engine `/introspect` column shape (see {@link IntrospectResult} in engine-client). */
13
+ export interface IntrospectColumn {
14
+ name: string;
15
+ type: string;
16
+ nullable: boolean;
17
+ default?: string;
18
+ primaryKey?: boolean;
19
+ unique?: boolean;
20
+ references?: {
21
+ table: string;
22
+ column: string;
23
+ };
24
+ }
25
+ /** Map engine introspection JSON to {@link ColumnInfo} for {@link pgTypeToField}. */
26
+ export declare function introspectColumnToColumnInfo(col: IntrospectColumn): ColumnInfo;
12
27
  /** Map a Postgres column type to the corresponding field.X() call string. */
13
28
  export declare function pgTypeToField(col: ColumnInfo): string;
14
29
  /** Convert snake_case table name to PascalCase model export name. */
@@ -1 +1 @@
1
- {"version":3,"file":"pull-utils.d.ts","sourceRoot":"","sources":["../src/pull-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAmCrD;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI7C"}
1
+ {"version":3,"file":"pull-utils.d.ts","sourceRoot":"","sources":["../src/pull-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,yFAAyF;AACzF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED,qFAAqF;AACrF,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,gBAAgB,GAAG,UAAU,CAU9E;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAmCrD;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI7C"}
@@ -1,6 +1,18 @@
1
1
  /**
2
2
  * Utilities for the `pull` command — extracted for unit testability.
3
3
  */
4
+ /** Map engine introspection JSON to {@link ColumnInfo} for {@link pgTypeToField}. */
5
+ export function introspectColumnToColumnInfo(col) {
6
+ const def = col.default;
7
+ return {
8
+ name: col.name,
9
+ pgType: col.type,
10
+ nullable: col.nullable,
11
+ isPrimary: col.primaryKey ?? false,
12
+ isUnique: col.unique ?? false,
13
+ hasDefault: def !== undefined && def !== "",
14
+ };
15
+ }
4
16
  /** Map a Postgres column type to the corresponding field.X() call string. */
5
17
  export function pgTypeToField(col) {
6
18
  const opts = { required: !col.nullable };
@@ -1 +1 @@
1
- {"version":3,"file":"pull-utils.js","sourceRoot":"","sources":["../src/pull-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pull-utils.js","sourceRoot":"","sources":["../src/pull-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Release pins read from files under packages/cli/releases/.
3
+ * CI (deno-releases workflow) uses the same paths — bump only releases/deno/VERSION.
4
+ */
5
+ /** Pinned Deno runtime for edge functions (also published to CDN under /deno/v{version}/). */
6
+ export declare const DENO_RELEASE_PIN: string;
7
+ //# sourceMappingURL=release-pins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-pins.d.ts","sourceRoot":"","sources":["../src/release-pins.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH,8FAA8F;AAC9F,eAAO,MAAM,gBAAgB,QAAiC,CAAA"}