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

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 (350) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +208 -1
  3. package/.turbo/turbo-typecheck.log +1 -1
  4. package/dist/app/proxy-dev-app.d.ts +13 -0
  5. package/dist/app/proxy-dev-app.d.ts.map +1 -0
  6. package/dist/app/proxy-dev-app.js +53 -0
  7. package/dist/app/proxy-dev-app.js.map +1 -0
  8. package/dist/app-config.d.ts +7 -0
  9. package/dist/app-config.d.ts.map +1 -0
  10. package/dist/app-config.js +113 -0
  11. package/dist/app-config.js.map +1 -0
  12. package/dist/augmentation-generator.d.ts +2 -0
  13. package/dist/augmentation-generator.d.ts.map +1 -0
  14. package/dist/augmentation-generator.js +111 -0
  15. package/dist/augmentation-generator.js.map +1 -0
  16. package/dist/binary-cache.d.ts +94 -0
  17. package/dist/binary-cache.d.ts.map +1 -0
  18. package/dist/binary-cache.js +669 -0
  19. package/dist/binary-cache.js.map +1 -0
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +13 -7
  22. package/dist/cli.js.map +1 -1
  23. package/dist/commands/admin.d.ts.map +1 -1
  24. package/dist/commands/admin.js +4 -3
  25. package/dist/commands/admin.js.map +1 -1
  26. package/dist/commands/app.d.ts.map +1 -1
  27. package/dist/commands/app.js +56 -209
  28. package/dist/commands/app.js.map +1 -1
  29. package/dist/commands/cache.d.ts +6 -0
  30. package/dist/commands/cache.d.ts.map +1 -0
  31. package/dist/commands/cache.js +105 -0
  32. package/dist/commands/cache.js.map +1 -0
  33. package/dist/commands/cloud.d.ts +20 -0
  34. package/dist/commands/cloud.d.ts.map +1 -1
  35. package/dist/commands/cloud.js +50 -52
  36. package/dist/commands/cloud.js.map +1 -1
  37. package/dist/commands/db.d.ts.map +1 -1
  38. package/dist/commands/db.js +47 -54
  39. package/dist/commands/db.js.map +1 -1
  40. package/dist/commands/deploy.d.ts +2 -1
  41. package/dist/commands/deploy.d.ts.map +1 -1
  42. package/dist/commands/deploy.js +79 -52
  43. package/dist/commands/deploy.js.map +1 -1
  44. package/dist/commands/dev.d.ts +11 -0
  45. package/dist/commands/dev.d.ts.map +1 -1
  46. package/dist/commands/dev.js +759 -385
  47. package/dist/commands/dev.js.map +1 -1
  48. package/dist/commands/diff.d.ts.map +1 -1
  49. package/dist/commands/diff.js +30 -15
  50. package/dist/commands/diff.js.map +1 -1
  51. package/dist/commands/engine.d.ts +1 -3
  52. package/dist/commands/engine.d.ts.map +1 -1
  53. package/dist/commands/engine.js +13 -85
  54. package/dist/commands/engine.js.map +1 -1
  55. package/dist/commands/functions.d.ts.map +1 -1
  56. package/dist/commands/functions.js +92 -105
  57. package/dist/commands/functions.js.map +1 -1
  58. package/dist/commands/generate.d.ts.map +1 -1
  59. package/dist/commands/generate.js +22 -12
  60. package/dist/commands/generate.js.map +1 -1
  61. package/dist/commands/init.d.ts +1 -1
  62. package/dist/commands/init.d.ts.map +1 -1
  63. package/dist/commands/init.js +137 -410
  64. package/dist/commands/init.js.map +1 -1
  65. package/dist/commands/migrate-from-v1.d.ts +5 -0
  66. package/dist/commands/migrate-from-v1.d.ts.map +1 -0
  67. package/dist/commands/migrate-from-v1.js +125 -0
  68. package/dist/commands/migrate-from-v1.js.map +1 -0
  69. package/dist/commands/migrate.d.ts.map +1 -1
  70. package/dist/commands/migrate.js +27 -23
  71. package/dist/commands/migrate.js.map +1 -1
  72. package/dist/commands/pg.d.ts +8 -0
  73. package/dist/commands/pg.d.ts.map +1 -0
  74. package/dist/commands/pg.js +102 -0
  75. package/dist/commands/pg.js.map +1 -0
  76. package/dist/commands/pull.d.ts.map +1 -1
  77. package/dist/commands/pull.js +5 -66
  78. package/dist/commands/pull.js.map +1 -1
  79. package/dist/commands/push.d.ts.map +1 -1
  80. package/dist/commands/push.js +128 -38
  81. package/dist/commands/push.js.map +1 -1
  82. package/dist/commands/seed.d.ts +2 -0
  83. package/dist/commands/seed.d.ts.map +1 -1
  84. package/dist/commands/seed.js +44 -11
  85. package/dist/commands/seed.js.map +1 -1
  86. package/dist/commands/self-host.d.ts +7 -1
  87. package/dist/commands/self-host.d.ts.map +1 -1
  88. package/dist/commands/self-host.js +272 -758
  89. package/dist/commands/self-host.js.map +1 -1
  90. package/dist/commands/self-update.d.ts +9 -0
  91. package/dist/commands/self-update.d.ts.map +1 -0
  92. package/dist/commands/self-update.js +33 -0
  93. package/dist/commands/self-update.js.map +1 -0
  94. package/dist/commands/status.d.ts.map +1 -1
  95. package/dist/commands/status.js +4 -3
  96. package/dist/commands/status.js.map +1 -1
  97. package/dist/commands/types.d.ts +3 -0
  98. package/dist/commands/types.d.ts.map +1 -0
  99. package/dist/commands/types.js +62 -0
  100. package/dist/commands/types.js.map +1 -0
  101. package/dist/commands/update.d.ts +7 -0
  102. package/dist/commands/update.d.ts.map +1 -0
  103. package/dist/commands/update.js +93 -0
  104. package/dist/commands/update.js.map +1 -0
  105. package/dist/components.d.ts +5 -0
  106. package/dist/components.d.ts.map +1 -0
  107. package/dist/components.js +3 -0
  108. package/dist/components.js.map +1 -0
  109. package/dist/config.d.ts +10 -51
  110. package/dist/config.d.ts.map +1 -1
  111. package/dist/config.js +101 -33
  112. package/dist/config.js.map +1 -1
  113. package/dist/dev-compose.d.ts +17 -0
  114. package/dist/dev-compose.d.ts.map +1 -0
  115. package/dist/dev-compose.js +374 -0
  116. package/dist/dev-compose.js.map +1 -0
  117. package/dist/diff-output.d.ts +4 -0
  118. package/dist/diff-output.d.ts.map +1 -0
  119. package/dist/diff-output.js +12 -0
  120. package/dist/diff-output.js.map +1 -0
  121. package/dist/docker-postgres.d.ts +57 -0
  122. package/dist/docker-postgres.d.ts.map +1 -0
  123. package/dist/docker-postgres.js +208 -0
  124. package/dist/docker-postgres.js.map +1 -0
  125. package/dist/engine-client.d.ts +69 -0
  126. package/dist/engine-client.d.ts.map +1 -0
  127. package/dist/engine-client.js +157 -0
  128. package/dist/engine-client.js.map +1 -0
  129. package/dist/ensure-binary.d.ts +7 -0
  130. package/dist/ensure-binary.d.ts.map +1 -0
  131. package/dist/ensure-binary.js +17 -0
  132. package/dist/ensure-binary.js.map +1 -0
  133. package/dist/functions-router-gen.d.ts +14 -0
  134. package/dist/functions-router-gen.d.ts.map +1 -0
  135. package/dist/functions-router-gen.js +199 -0
  136. package/dist/functions-router-gen.js.map +1 -0
  137. package/dist/index.d.ts +4 -5
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +2 -3
  140. package/dist/index.js.map +1 -1
  141. package/dist/kong-config.d.ts +25 -0
  142. package/dist/kong-config.d.ts.map +1 -0
  143. package/dist/kong-config.js +71 -0
  144. package/dist/kong-config.js.map +1 -0
  145. package/dist/local-gateway.d.ts +7 -0
  146. package/dist/local-gateway.d.ts.map +1 -0
  147. package/dist/local-gateway.js +9 -0
  148. package/dist/local-gateway.js.map +1 -0
  149. package/dist/local-storage.d.ts +8 -0
  150. package/dist/local-storage.d.ts.map +1 -0
  151. package/dist/local-storage.js +14 -0
  152. package/dist/local-storage.js.map +1 -0
  153. package/dist/pgbouncer-userlist.d.ts +5 -0
  154. package/dist/pgbouncer-userlist.d.ts.map +1 -0
  155. package/dist/pgbouncer-userlist.js +14 -0
  156. package/dist/pgbouncer-userlist.js.map +1 -0
  157. package/dist/postgres-ctl.d.ts +44 -0
  158. package/dist/postgres-ctl.d.ts.map +1 -0
  159. package/dist/postgres-ctl.js +137 -0
  160. package/dist/postgres-ctl.js.map +1 -0
  161. package/dist/process-manager.d.ts +43 -0
  162. package/dist/process-manager.d.ts.map +1 -0
  163. package/dist/process-manager.js +135 -0
  164. package/dist/process-manager.js.map +1 -0
  165. package/dist/project-config.d.ts +235 -0
  166. package/dist/project-config.d.ts.map +1 -0
  167. package/dist/project-config.js +160 -0
  168. package/dist/project-config.js.map +1 -0
  169. package/dist/pull-utils.d.ts +15 -0
  170. package/dist/pull-utils.d.ts.map +1 -1
  171. package/dist/pull-utils.js +12 -0
  172. package/dist/pull-utils.js.map +1 -1
  173. package/dist/release-pins.d.ts +7 -0
  174. package/dist/release-pins.d.ts.map +1 -0
  175. package/dist/release-pins.js +27 -0
  176. package/dist/release-pins.js.map +1 -0
  177. package/dist/release-public-key.d.ts +8 -0
  178. package/dist/release-public-key.d.ts.map +1 -0
  179. package/dist/release-public-key.js +13 -0
  180. package/dist/release-public-key.js.map +1 -0
  181. package/dist/runtime-routes.d.ts +34 -0
  182. package/dist/runtime-routes.d.ts.map +1 -0
  183. package/dist/runtime-routes.js +252 -0
  184. package/dist/runtime-routes.js.map +1 -0
  185. package/dist/schema-ast-v2.d.ts +127 -0
  186. package/dist/schema-ast-v2.d.ts.map +1 -0
  187. package/dist/schema-ast-v2.js +226 -0
  188. package/dist/schema-ast-v2.js.map +1 -0
  189. package/dist/scripts/postinstall.d.ts +5 -6
  190. package/dist/scripts/postinstall.d.ts.map +1 -1
  191. package/dist/scripts/postinstall.js +36 -20
  192. package/dist/scripts/postinstall.js.map +1 -1
  193. package/dist/self-host-compose.d.ts +22 -0
  194. package/dist/self-host-compose.d.ts.map +1 -0
  195. package/dist/self-host-compose.js +347 -0
  196. package/dist/self-host-compose.js.map +1 -0
  197. package/dist/storage-provision.d.ts +24 -0
  198. package/dist/storage-provision.d.ts.map +1 -0
  199. package/dist/storage-provision.js +44 -0
  200. package/dist/storage-provision.js.map +1 -0
  201. package/dist/studio-admin-roles.d.ts +7 -0
  202. package/dist/studio-admin-roles.d.ts.map +1 -0
  203. package/dist/studio-admin-roles.js +14 -0
  204. package/dist/studio-admin-roles.js.map +1 -0
  205. package/dist/studio-dev-server.d.ts +22 -0
  206. package/dist/studio-dev-server.d.ts.map +1 -0
  207. package/dist/studio-dev-server.js +28 -0
  208. package/dist/studio-dev-server.js.map +1 -0
  209. package/dist/systemd.d.ts +26 -0
  210. package/dist/systemd.d.ts.map +1 -0
  211. package/dist/systemd.js +102 -0
  212. package/dist/systemd.js.map +1 -0
  213. package/dist/tsx-runner.d.ts.map +1 -1
  214. package/dist/tsx-runner.js +9 -2
  215. package/dist/tsx-runner.js.map +1 -1
  216. package/dist/type-extractor.d.ts +4 -0
  217. package/dist/type-extractor.d.ts.map +1 -0
  218. package/dist/type-extractor.js +1213 -0
  219. package/dist/type-extractor.js.map +1 -0
  220. package/dist/type-resolver.d.ts +33 -0
  221. package/dist/type-resolver.d.ts.map +1 -0
  222. package/dist/type-resolver.js +338 -0
  223. package/dist/type-resolver.js.map +1 -0
  224. package/package.json +4 -3
  225. package/releases/deno/VERSION +1 -0
  226. package/scripts/mirror-deno-release.sh +76 -0
  227. package/src/TYPE-RESOLUTION.md +294 -0
  228. package/src/app/proxy-dev-app.ts +67 -0
  229. package/src/app-config.ts +128 -0
  230. package/src/augmentation-generator.ts +126 -0
  231. package/src/binary-cache.ts +822 -0
  232. package/src/cli.ts +13 -8
  233. package/src/commands/admin.ts +4 -3
  234. package/src/commands/app.ts +67 -231
  235. package/src/commands/cache.ts +117 -0
  236. package/src/commands/cloud.ts +63 -64
  237. package/src/commands/db.ts +54 -63
  238. package/src/commands/deploy.ts +96 -62
  239. package/src/commands/dev.ts +933 -405
  240. package/src/commands/diff.ts +31 -29
  241. package/src/commands/engine.ts +13 -116
  242. package/src/commands/functions.ts +97 -115
  243. package/src/commands/generate.ts +23 -10
  244. package/src/commands/init.ts +149 -414
  245. package/src/commands/migrate-from-v1.ts +131 -0
  246. package/src/commands/migrate.ts +27 -23
  247. package/src/commands/pg.ts +133 -0
  248. package/src/commands/pull.ts +6 -85
  249. package/src/commands/push.ts +161 -56
  250. package/src/commands/seed.ts +54 -12
  251. package/src/commands/self-host.ts +312 -880
  252. package/src/commands/self-update.ts +45 -0
  253. package/src/commands/status.ts +4 -3
  254. package/src/commands/types.ts +76 -0
  255. package/src/commands/update.ts +109 -0
  256. package/src/components.ts +6 -0
  257. package/src/config.ts +127 -94
  258. package/src/dev-compose.ts +455 -0
  259. package/src/diff-output.ts +12 -0
  260. package/src/docker-postgres.ts +295 -0
  261. package/src/engine-client.ts +236 -0
  262. package/src/ensure-binary.ts +28 -0
  263. package/src/functions-router-gen.ts +224 -0
  264. package/src/index.ts +4 -12
  265. package/src/kong-config.ts +93 -0
  266. package/src/local-gateway.ts +9 -0
  267. package/src/local-storage.ts +14 -0
  268. package/src/pgbouncer-userlist.ts +15 -0
  269. package/src/postgres-ctl.ts +171 -0
  270. package/src/process-manager.ts +168 -0
  271. package/src/project-config.ts +386 -0
  272. package/src/pull-utils.ts +24 -0
  273. package/src/release-pins.ts +31 -0
  274. package/src/release-public-key.ts +12 -0
  275. package/src/runtime-routes.ts +291 -0
  276. package/src/schema-ast-v2.ts +324 -0
  277. package/src/scripts/postinstall.ts +36 -25
  278. package/src/self-host-compose.ts +389 -0
  279. package/src/storage-provision.ts +58 -0
  280. package/src/studio-admin-roles.ts +16 -0
  281. package/src/studio-dev-server.ts +53 -0
  282. package/src/systemd.ts +137 -0
  283. package/src/tsx-runner.ts +11 -1
  284. package/src/type-extractor.ts +1479 -0
  285. package/src/type-resolver.ts +457 -0
  286. package/tests/app-command.test.ts +54 -0
  287. package/tests/augmentation-generator.test.ts +59 -0
  288. package/tests/binary-cache-cloud-overrides.test.ts +123 -0
  289. package/tests/cached-artifact-format.test.ts +84 -0
  290. package/tests/cli-help.test.ts +40 -14
  291. package/tests/config.test.ts +171 -37
  292. package/tests/docker-postgres.test.ts +39 -0
  293. package/tests/engine-distribution.test.ts +3 -3
  294. package/tests/ensure-binary.test.ts +59 -0
  295. package/tests/init.test.ts +28 -86
  296. package/tests/migrate-from-v1.test.ts +29 -0
  297. package/tests/normalize-admin-config.test.ts +48 -0
  298. package/tests/pg-spawn-env.test.ts +18 -0
  299. package/tests/postgres-archive-tag.test.ts +9 -0
  300. package/tests/proxy-dev-app.test.ts +33 -0
  301. package/tests/pull-utils.test.ts +36 -1
  302. package/tests/release-pins.test.ts +28 -0
  303. package/tests/runtime-contract.test.ts +351 -0
  304. package/tests/seed-discover.test.ts +31 -0
  305. package/tests/studio-admin-roles.test.ts +27 -0
  306. package/tests/tsconfig.json +9 -0
  307. package/tests/type-extractor.test.ts +985 -0
  308. package/tests/type-resolver.test.ts +59 -0
  309. package/tsconfig.tsbuildinfo +1 -1
  310. package/vitest.config.ts +12 -0
  311. package/dist/engine/cache.d.ts +0 -37
  312. package/dist/engine/cache.d.ts.map +0 -1
  313. package/dist/engine/cache.js +0 -121
  314. package/dist/engine/cache.js.map +0 -1
  315. package/dist/engine/download.d.ts +0 -19
  316. package/dist/engine/download.d.ts.map +0 -1
  317. package/dist/engine/download.js +0 -108
  318. package/dist/engine/download.js.map +0 -1
  319. package/dist/engine/platform.d.ts +0 -24
  320. package/dist/engine/platform.d.ts.map +0 -1
  321. package/dist/engine/platform.js +0 -50
  322. package/dist/engine/platform.js.map +0 -1
  323. package/dist/engine/resolve.d.ts +0 -37
  324. package/dist/engine/resolve.d.ts.map +0 -1
  325. package/dist/engine/resolve.js +0 -133
  326. package/dist/engine/resolve.js.map +0 -1
  327. package/dist/engine/update-notify.d.ts +0 -11
  328. package/dist/engine/update-notify.d.ts.map +0 -1
  329. package/dist/engine/update-notify.js +0 -43
  330. package/dist/engine/update-notify.js.map +0 -1
  331. package/dist/engine/verify.d.ts +0 -50
  332. package/dist/engine/verify.d.ts.map +0 -1
  333. package/dist/engine/verify.js +0 -161
  334. package/dist/engine/verify.js.map +0 -1
  335. package/dist/engine-version.d.ts +0 -35
  336. package/dist/engine-version.d.ts.map +0 -1
  337. package/dist/engine-version.js +0 -35
  338. package/dist/engine-version.js.map +0 -1
  339. package/dist/engine.d.ts +0 -34
  340. package/dist/engine.d.ts.map +0 -1
  341. package/dist/engine.js +0 -76
  342. package/dist/engine.js.map +0 -1
  343. package/src/engine/cache.ts +0 -135
  344. package/src/engine/download.ts +0 -143
  345. package/src/engine/platform.ts +0 -66
  346. package/src/engine/resolve.ts +0 -197
  347. package/src/engine/update-notify.ts +0 -50
  348. package/src/engine/verify.ts +0 -206
  349. package/src/engine-version.ts +0 -39
  350. package/src/engine.ts +0 -99
@@ -0,0 +1,57 @@
1
+ /**
2
+ * docker-postgres — manage a supatype/postgres Docker container for local dev.
3
+ *
4
+ * Used by `supatype dev` when database.provider = "docker".
5
+ * The container is named supatype-{projectName} and persists data in a
6
+ * named Docker volume (supatype-{projectName}-data) across restarts.
7
+ */
8
+ export interface DockerPgOptions {
9
+ /** Docker image to run. Defaults to supatype/postgres:latest. */
10
+ image: string;
11
+ /** Project name — used to derive the container and volume names. */
12
+ projectName: string;
13
+ /** Host port to bind to container's 5432. */
14
+ port: number;
15
+ /** Superuser password (dev only). Defaults to "postgres". */
16
+ password?: string;
17
+ }
18
+ /** Derived container name for a project. */
19
+ export declare function containerName(projectName: string): string;
20
+ /**
21
+ * Start the supatype/postgres Docker container.
22
+ * Removes any stopped container with the same name before starting.
23
+ * Throws if `docker run` exits non-zero.
24
+ */
25
+ export declare function dockerPgStart(opts: DockerPgOptions): void;
26
+ /**
27
+ * Stop the container (fast — does not remove it or the data volume).
28
+ * Safe to call even if the container is not running.
29
+ */
30
+ export declare function dockerPgStop(projectName: string): void;
31
+ /** True when the final post-init Postgres process is accepting connections. */
32
+ export declare function dockerPgPostInitServing(logs: string): boolean;
33
+ /**
34
+ * Poll until Postgres accepts connections and the image entrypoint init has
35
+ * finished (anon/authenticated/service_role come from supatype-postgres
36
+ * migrations/db/init-scripts/00000000000000-initial-schema.sql via migrate.sh).
37
+ */
38
+ export declare function dockerPgWaitReady(projectName: string, timeoutMs?: number, password?: string): Promise<void>;
39
+ /** Connection string for the Docker container (local dev credentials). */
40
+ export declare function dockerDbUrl(projectName: string, port: number, password?: string): string;
41
+ /**
42
+ * DB URL for processes sharing the Postgres container network namespace
43
+ * (supatype-server migrate in a one-shot container). Uses loopback inside the
44
+ * container where pg_hba grants trust — avoids host-published-port SCRAM/SSL issues.
45
+ */
46
+ export declare function dockerPgLoopbackDbUrl(projectName: string, password?: string): string;
47
+ /**
48
+ * Published Hub tag for local dev when CDN server version is not on Docker Hub yet.
49
+ * Keep in sync with tests/integration/scripts/compose-smoke.sh.
50
+ */
51
+ export declare const DEFAULT_SERVER_DOCKER_IMAGE = "supatype/server:latest";
52
+ /**
53
+ * Run `supatype-server migrate` on the Postgres container network (loopback trust).
54
+ * Used on Windows + database.provider docker — host-published :5432 breaks libpq TLS there.
55
+ */
56
+ export declare function runGotrueMigrationsViaDocker(pgContainerName: string, serverImage: string, migrateEnv: Record<string, string>): void;
57
+ //# sourceMappingURL=docker-postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-postgres.d.ts","sourceRoot":"","sources":["../src/docker-postgres.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAA;IACb,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAwBD,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CA+BzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAEtD;AAsBD,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAW7D;AAkCD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,SAAU,EACnB,QAAQ,SAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAqDf;AAWD,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAuB,GAAG,MAAM,CAGtG;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,SAAuB,GAAG,MAAM,CAElG;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B,2BAA2B,CAAA;AAEnE;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,IAAI,CAoBN"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * docker-postgres — manage a supatype/postgres Docker container for local dev.
3
+ *
4
+ * Used by `supatype dev` when database.provider = "docker".
5
+ * The container is named supatype-{projectName} and persists data in a
6
+ * named Docker volume (supatype-{projectName}-data) across restarts.
7
+ */
8
+ import { spawnSync } from "node:child_process";
9
+ const PG_USER = "supatype_admin";
10
+ /** Must match `dockerPgStart` default `POSTGRES_PASSWORD`. */
11
+ const DEFAULT_DEV_PASSWORD = "postgres";
12
+ function dockerPgPsql(name, db, sql, password = DEFAULT_DEV_PASSWORD) {
13
+ return spawnSync("docker", [
14
+ "exec",
15
+ "-e", `PGPASSWORD=${password}`,
16
+ name,
17
+ "psql", "--no-password", "-U", PG_USER, "-d", db, "-tAc", sql,
18
+ ], { encoding: "utf8", stdio: "pipe" });
19
+ }
20
+ /** Derived container name for a project. */
21
+ export function containerName(projectName) {
22
+ return `supatype-${projectName}`;
23
+ }
24
+ /**
25
+ * Start the supatype/postgres Docker container.
26
+ * Removes any stopped container with the same name before starting.
27
+ * Throws if `docker run` exits non-zero.
28
+ */
29
+ export function dockerPgStart(opts) {
30
+ const { image, projectName, port, password = "postgres" } = opts;
31
+ const name = containerName(projectName);
32
+ const volume = `${name}-data`;
33
+ // Remove any stopped container from a previous session.
34
+ spawnSync("docker", ["rm", "-f", name], { encoding: "utf8" });
35
+ const result = spawnSync("docker", [
36
+ "run", "-d",
37
+ "--name", name,
38
+ "-e", `POSTGRES_USER=${PG_USER}`,
39
+ "-e", `POSTGRES_PASSWORD=${password}`,
40
+ "-e", `POSTGRES_DB=${projectName}`,
41
+ "-p", `${port}:5432`,
42
+ "-v", `${volume}:/var/lib/postgresql/data`,
43
+ image,
44
+ ], { encoding: "utf8", stdio: "pipe" });
45
+ if (result.status !== 0) {
46
+ const detail = (result.stderr ?? result.stdout ?? "").trim();
47
+ throw new Error(`Failed to start Docker container "${name}".\n` +
48
+ (detail ? ` docker: ${detail}\n` : "") +
49
+ ` Is Docker running? docker info`);
50
+ }
51
+ }
52
+ /**
53
+ * Stop the container (fast — does not remove it or the data volume).
54
+ * Safe to call even if the container is not running.
55
+ */
56
+ export function dockerPgStop(projectName) {
57
+ spawnSync("docker", ["stop", containerName(projectName)], { encoding: "utf8" });
58
+ }
59
+ function dockerPgLogsTail(name, tail = 120) {
60
+ const logs = spawnSync("docker", ["logs", "--tail", String(tail), name], { encoding: "utf8" });
61
+ return `${logs.stdout ?? ""}${logs.stderr ?? ""}`;
62
+ }
63
+ function dockerPgHealthStatus(name) {
64
+ const inspect = spawnSync("docker", ["inspect", "-f", "{{if .State.Health}}{{.State.Health.Status}}{{end}}", name], { encoding: "utf8", stdio: "pipe" });
65
+ if (inspect.status !== 0)
66
+ return undefined;
67
+ const status = inspect.stdout?.trim();
68
+ return status === "" ? undefined : status;
69
+ }
70
+ /** True when the final post-init Postgres process is accepting connections. */
71
+ export function dockerPgPostInitServing(logs) {
72
+ const ready = "database system is ready to accept connections";
73
+ const lastReady = logs.lastIndexOf(ready);
74
+ if (lastReady === -1)
75
+ return false;
76
+ const initDone = logs.lastIndexOf("PostgreSQL init process complete");
77
+ if (initDone === -1) {
78
+ // Reused data volume — this run did not re-run entrypoint init.
79
+ return true;
80
+ }
81
+ return initDone < lastReady;
82
+ }
83
+ function migrateStillRunning(logs) {
84
+ return /99-supatype-migrate\.sh: running .+\.sql/.test(logs);
85
+ }
86
+ function psqlTruthy(stdout) {
87
+ const v = (stdout ?? "").replace(/\r/g, "").trim().toLowerCase();
88
+ return v === "t" || v === "true";
89
+ }
90
+ const ANON_ROLE_SQL = "SELECT EXISTS (SELECT FROM pg_roles WHERE rolname = 'anon')";
91
+ function dockerPgHasAnonRole(name, projectName, password = DEFAULT_DEV_PASSWORD) {
92
+ for (const db of [projectName, "postgres"]) {
93
+ const result = dockerPgPsql(name, db, ANON_ROLE_SQL, password);
94
+ if (result.status === 0 && psqlTruthy(result.stdout))
95
+ return true;
96
+ }
97
+ return false;
98
+ }
99
+ function dockerPgExecReady(name) {
100
+ const ready = spawnSync("docker", ["exec", name, "pg_isready", "-U", PG_USER, "-q"], { encoding: "utf8", stdio: "pipe" });
101
+ return ready.status === 0;
102
+ }
103
+ /**
104
+ * Poll until Postgres accepts connections and the image entrypoint init has
105
+ * finished (anon/authenticated/service_role come from supatype-postgres
106
+ * migrations/db/init-scripts/00000000000000-initial-schema.sql via migrate.sh).
107
+ */
108
+ export async function dockerPgWaitReady(projectName, timeoutMs = 180_000, password = DEFAULT_DEV_PASSWORD) {
109
+ const name = containerName(projectName);
110
+ const deadline = Date.now() + timeoutMs;
111
+ let servingWithoutAnonMs = 0;
112
+ let lastPsqlDetail = "";
113
+ while (Date.now() < deadline) {
114
+ const health = dockerPgHealthStatus(name);
115
+ const logs = dockerPgLogsTail(name);
116
+ const serving = health === "healthy" ||
117
+ dockerPgPostInitServing(logs) ||
118
+ dockerPgExecReady(name);
119
+ if (serving && !migrateStillRunning(logs)) {
120
+ if (dockerPgHasAnonRole(name, projectName, password))
121
+ return;
122
+ const probe = dockerPgPsql(name, projectName, ANON_ROLE_SQL, password);
123
+ lastPsqlDetail = [
124
+ probe.status !== 0 ? `psql exit ${probe.status}` : "",
125
+ probe.stderr?.trim(),
126
+ probe.stdout?.trim() ? `stdout=${probe.stdout.trim()}` : "",
127
+ ]
128
+ .filter(Boolean)
129
+ .join("; ");
130
+ const reusedVolume = logs.includes("database system is ready to accept connections") &&
131
+ !logs.includes("PostgreSQL init process complete");
132
+ if (reusedVolume) {
133
+ servingWithoutAnonMs += 500;
134
+ if (servingWithoutAnonMs >= 5_000)
135
+ throw staleVolumeError(name);
136
+ }
137
+ else {
138
+ servingWithoutAnonMs = 0;
139
+ }
140
+ }
141
+ else {
142
+ servingWithoutAnonMs = 0;
143
+ }
144
+ await sleep(500);
145
+ }
146
+ const logs = dockerPgLogsTail(name, 80);
147
+ throw new Error(`Docker Postgres "${name}" did not finish image init within ${timeoutMs}ms.\n` +
148
+ " API roles (anon, authenticated, service_role) are created by the supatype/postgres\n" +
149
+ " entrypoint (99-supatype-migrate.sh), not by the CLI.\n" +
150
+ " If you upgraded the image, remove the stale volume:\n" +
151
+ ` docker volume rm ${name}-data\n` +
152
+ (lastPsqlDetail ? ` Last anon probe: ${lastPsqlDetail}\n` : "") +
153
+ (logs ? ` logs (tail):\n${indent(logs)}\n` : ""));
154
+ }
155
+ function staleVolumeError(name) {
156
+ return new Error(`Docker Postgres "${name}" is up but API roles are missing.\n` +
157
+ " The data volume was initialised without supatype/postgres migrations (stale or wrong image).\n" +
158
+ " Remove the volume so first-boot 99-supatype-migrate.sh runs again:\n" +
159
+ ` docker volume rm ${name}-data`);
160
+ }
161
+ /** Connection string for the Docker container (local dev credentials). */
162
+ export function dockerDbUrl(projectName, port, password = DEFAULT_DEV_PASSWORD) {
163
+ // Host → published port. sqlx/libpq "prefer" can mis-handle SSL on some hosts (e.g. Docker Desktop on Windows).
164
+ return `postgres://${PG_USER}:${password}@127.0.0.1:${port}/${projectName}?sslmode=disable`;
165
+ }
166
+ /**
167
+ * DB URL for processes sharing the Postgres container network namespace
168
+ * (supatype-server migrate in a one-shot container). Uses loopback inside the
169
+ * container where pg_hba grants trust — avoids host-published-port SCRAM/SSL issues.
170
+ */
171
+ export function dockerPgLoopbackDbUrl(projectName, password = DEFAULT_DEV_PASSWORD) {
172
+ return `postgres://${PG_USER}:${password}@127.0.0.1:5432/${projectName}?sslmode=disable`;
173
+ }
174
+ /**
175
+ * Published Hub tag for local dev when CDN server version is not on Docker Hub yet.
176
+ * Keep in sync with tests/integration/scripts/compose-smoke.sh.
177
+ */
178
+ export const DEFAULT_SERVER_DOCKER_IMAGE = "supatype/server:latest";
179
+ /**
180
+ * Run `supatype-server migrate` on the Postgres container network (loopback trust).
181
+ * Used on Windows + database.provider docker — host-published :5432 breaks libpq TLS there.
182
+ */
183
+ export function runGotrueMigrationsViaDocker(pgContainerName, serverImage, migrateEnv) {
184
+ const envArgs = Object.entries(migrateEnv).flatMap(([k, v]) => ["-e", `${k}=${v}`]);
185
+ const result = spawnSync("docker", [
186
+ "run", "--rm",
187
+ "--network", `container:${pgContainerName}`,
188
+ ...envArgs,
189
+ serverImage,
190
+ "migrate",
191
+ ], { encoding: "utf8", stdio: "pipe" });
192
+ if (result.status !== 0) {
193
+ const detail = (result.stderr ?? result.stdout ?? "").trim();
194
+ throw new Error(`GoTrue migrations failed in Docker (exit ${result.status ?? "unknown"})` +
195
+ (detail ? `:\n${detail}` : ""));
196
+ }
197
+ }
198
+ function sleep(ms) {
199
+ return new Promise((resolve) => setTimeout(resolve, ms));
200
+ }
201
+ function indent(s) {
202
+ return s
203
+ .trimEnd()
204
+ .split("\n")
205
+ .map((l) => ` ${l}`)
206
+ .join("\n");
207
+ }
208
+ //# sourceMappingURL=docker-postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-postgres.js","sourceRoot":"","sources":["../src/docker-postgres.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * engine-client.ts — subprocess-based engine invocation.
3
+ *
4
+ * Replaces the former HTTP-based engine client (Docker container API).
5
+ * All callers use the same interface; only the transport changed.
6
+ *
7
+ * The engine binary reads a request JSON file passed via --request-file and
8
+ * writes a response JSON to stdout.
9
+ */
10
+ export interface Operation {
11
+ kind: "create_table" | "alter_table" | "drop_table" | "create_index" | "drop_index" | "create_policy" | "drop_policy" | "add_column" | "drop_column" | "alter_column" | "recreate_column";
12
+ type?: string;
13
+ description?: string;
14
+ risk?: "safe" | "warn" | "danger" | "cautious" | "destructive";
15
+ warning?: string;
16
+ sql?: string;
17
+ }
18
+ export interface DiffResult {
19
+ operations: Operation[];
20
+ warnings?: string[];
21
+ summary?: string;
22
+ }
23
+ export interface IntrospectResult {
24
+ models: Array<{
25
+ name: string;
26
+ table: string;
27
+ columns: Array<{
28
+ name: string;
29
+ type: string;
30
+ nullable: boolean;
31
+ default?: string;
32
+ primaryKey?: boolean;
33
+ unique?: boolean;
34
+ references?: {
35
+ table: string;
36
+ column: string;
37
+ };
38
+ }>;
39
+ }>;
40
+ }
41
+ export interface EngineResult<T = unknown> {
42
+ ok: boolean;
43
+ data: T;
44
+ message?: string;
45
+ error?: string;
46
+ }
47
+ export declare class EngineError extends Error {
48
+ readonly endpoint: string;
49
+ readonly exitCode: number | null;
50
+ constructor(message: string, endpoint: string, exitCode: number | null);
51
+ }
52
+ /** Verify the engine binary is accessible. Throws if not found. */
53
+ export declare function ensureEngine(): Promise<void>;
54
+ /** Check if the engine can be invoked. Returns true/false. */
55
+ export declare function engineHealth(): Promise<boolean>;
56
+ /**
57
+ * Invoke the engine and return a typed result.
58
+ *
59
+ * The endpoint maps to a subcommand:
60
+ * /diff → engine diff
61
+ * /push → engine push
62
+ * /generate → engine generate
63
+ * /migrations → engine migrations
64
+ * /introspect → engine introspect
65
+ * /validate → engine validate
66
+ * /admin → engine admin (admin-config JSON on stdout)
67
+ */
68
+ export declare function engineRequest<T = unknown>(endpoint: string, body: Record<string, unknown>): Promise<T>;
69
+ //# sourceMappingURL=engine-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-client.d.ts","sourceRoot":"","sources":["../src/engine-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,YAAY,GAC7E,eAAe,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,GAC/E,iBAAiB,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAA;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,MAAM,CAAA;YACZ,IAAI,EAAE,MAAM,CAAA;YACZ,QAAQ,EAAE,OAAO,CAAA;YACjB,OAAO,CAAC,EAAE,MAAM,CAAA;YAChB,UAAU,CAAC,EAAE,OAAO,CAAA;YACpB,MAAM,CAAC,EAAE,OAAO,CAAA;YAChB,UAAU,CAAC,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAA;SAC/C,CAAC,CAAA;KACH,CAAC,CAAA;CACH;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,CAAC,CAAA;IACP,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,WAAY,SAAQ,KAAK;aAGlB,QAAQ,EAAE,MAAM;aAChB,QAAQ,EAAE,MAAM,GAAG,IAAI;gBAFvC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,IAAI;CAK1C;AA4CD,mEAAmE;AACnE,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AAED,8DAA8D;AAC9D,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAQrD;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,CAAC,GAAG,OAAO,EAC7C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC,CA0CZ"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * engine-client.ts — subprocess-based engine invocation.
3
+ *
4
+ * Replaces the former HTTP-based engine client (Docker container API).
5
+ * All callers use the same interface; only the transport changed.
6
+ *
7
+ * The engine binary reads a request JSON file passed via --request-file and
8
+ * writes a response JSON to stdout.
9
+ */
10
+ import { spawnSync } from "node:child_process";
11
+ import { mkdirSync, writeFileSync, unlinkSync, existsSync, readdirSync } from "node:fs";
12
+ import { tmpdir, homedir } from "node:os";
13
+ import { join } from "node:path";
14
+ import { loadConfig } from "./config.js";
15
+ import { resolveBinary, currentPlatform, cachePath } from "./binary-cache.js";
16
+ export class EngineError extends Error {
17
+ endpoint;
18
+ exitCode;
19
+ constructor(message, endpoint, exitCode) {
20
+ super(message);
21
+ this.endpoint = endpoint;
22
+ this.exitCode = exitCode;
23
+ this.name = "EngineError";
24
+ }
25
+ }
26
+ // ---------------------------------------------------------------------------
27
+ // Engine binary resolution
28
+ // ---------------------------------------------------------------------------
29
+ let _engineBin = null;
30
+ async function getEngineBin() {
31
+ if (_engineBin)
32
+ return _engineBin;
33
+ const cwd = process.cwd();
34
+ try {
35
+ const config = loadConfig(cwd);
36
+ _engineBin = await resolveBinary("engine", config);
37
+ return _engineBin;
38
+ }
39
+ catch {
40
+ // No valid project config — fall through to default cache path.
41
+ }
42
+ // No config found — scan the cache for any available engine binary.
43
+ const platform = currentPlatform();
44
+ const engineCacheDir = join(homedir(), ".supatype", "cache", "engine");
45
+ try {
46
+ const cachedVersions = readdirSync(engineCacheDir).sort();
47
+ for (const version of cachedVersions.reverse()) {
48
+ const bin = join(cachePath("engine", version), `supatype-engine-${platform.os}-${platform.arch}`);
49
+ if (existsSync(bin)) {
50
+ _engineBin = bin;
51
+ return _engineBin;
52
+ }
53
+ }
54
+ }
55
+ catch { /* cache dir doesn't exist */ }
56
+ throw new Error("Engine binary not found. Run: supatype update");
57
+ }
58
+ // ---------------------------------------------------------------------------
59
+ // Public API
60
+ // ---------------------------------------------------------------------------
61
+ /** Verify the engine binary is accessible. Throws if not found. */
62
+ export async function ensureEngine() {
63
+ await getEngineBin();
64
+ }
65
+ /** Check if the engine can be invoked. Returns true/false. */
66
+ export async function engineHealth() {
67
+ try {
68
+ const bin = await getEngineBin();
69
+ const result = spawnSync(bin, ["--version"], { encoding: "utf8" });
70
+ return result.status === 0;
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ }
76
+ /**
77
+ * Invoke the engine and return a typed result.
78
+ *
79
+ * The endpoint maps to a subcommand:
80
+ * /diff → engine diff
81
+ * /push → engine push
82
+ * /generate → engine generate
83
+ * /migrations → engine migrations
84
+ * /introspect → engine introspect
85
+ * /validate → engine validate
86
+ * /admin → engine admin (admin-config JSON on stdout)
87
+ */
88
+ export async function engineRequest(endpoint, body) {
89
+ const bin = await getEngineBin();
90
+ // Write request to a temp file.
91
+ // For CLI-mode endpoints the engine reads the input file as a raw SchemaAst,
92
+ // so we extract the `ast` field when present, otherwise write the full body.
93
+ const tmpDir = join(tmpdir(), "supatype-engine");
94
+ mkdirSync(tmpDir, { recursive: true });
95
+ const reqFile = join(tmpDir, `req-${Date.now()}.json`);
96
+ const inputPayload = body["ast"] !== undefined ? body["ast"] : body;
97
+ writeFileSync(reqFile, JSON.stringify(inputPayload));
98
+ const args = endpointToArgs(endpoint, body, reqFile);
99
+ const result = spawnSync(bin, args, {
100
+ encoding: "utf8",
101
+ cwd: process.cwd(),
102
+ });
103
+ // Clean up temp file.
104
+ try {
105
+ unlinkSync(reqFile);
106
+ }
107
+ catch { /* ignore */ }
108
+ if (result.status !== 0) {
109
+ const stderr = result.stderr?.trim() || "(no output)";
110
+ throw new EngineError(`Engine ${endpoint} failed (exit ${result.status}): ${stderr}`, endpoint, result.status);
111
+ }
112
+ if (!result.stdout?.trim()) {
113
+ // Some subcommands print nothing on success.
114
+ return {};
115
+ }
116
+ try {
117
+ return JSON.parse(result.stdout);
118
+ }
119
+ catch {
120
+ // Non-JSON stdout — return as message.
121
+ return { message: result.stdout.trim() };
122
+ }
123
+ }
124
+ // ---------------------------------------------------------------------------
125
+ // Endpoint → CLI args mapping
126
+ // ---------------------------------------------------------------------------
127
+ function endpointToArgs(endpoint, body, reqFile) {
128
+ const dbUrl = body["database_url"] ?? "";
129
+ const schema = body["schema"] ?? "public";
130
+ const force = body["force"] ? ["--force"] : [];
131
+ const nonInteractive = body["non_interactive"] === true || body["force"] === true ? ["--non-interactive"] : [];
132
+ switch (endpoint) {
133
+ case "/diff":
134
+ return ["diff", "--input", reqFile, "--database-url", dbUrl, "--schema", schema];
135
+ case "/push":
136
+ return ["push", "--input", reqFile, "--database-url", dbUrl, "--schema", schema, ...force, ...nonInteractive];
137
+ case "/parse":
138
+ return ["parse", "--input", reqFile];
139
+ case "/generate": {
140
+ const lang = body["lang"] ?? "typescript";
141
+ return ["generate", "--input", reqFile, "--lang", lang];
142
+ }
143
+ case "/introspect":
144
+ return ["introspect", "--database-url", dbUrl, "--schema", schema];
145
+ case "/validate":
146
+ return ["validate", "--input", reqFile];
147
+ case "/admin":
148
+ return ["admin", "--input", reqFile];
149
+ default:
150
+ if (endpoint.startsWith("/migrations")) {
151
+ const action = body["action"] ?? "list";
152
+ return ["migrations", action, "--database-url", dbUrl];
153
+ }
154
+ return [endpoint.replace(/^\//, ""), "--input", reqFile];
155
+ }
156
+ }
157
+ //# sourceMappingURL=engine-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-client.js","sourceRoot":"","sources":["../src/engine-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Resolve component binaries, downloading from the CDN when not cached.
3
+ */
4
+ import { type Component } from "./binary-cache.js";
5
+ import type { SupatypeProjectConfig } from "./project-config.js";
6
+ export declare function ensureBinary(component: Component, config: SupatypeProjectConfig): Promise<string>;
7
+ //# sourceMappingURL=ensure-binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-binary.d.ts","sourceRoot":"","sources":["../src/ensure-binary.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,wBAAsB,YAAY,CAChC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAWjB"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Resolve component binaries, downloading from the CDN when not cached.
3
+ */
4
+ import { resolveBinary, download, currentPlatform, versionFor, } from "./binary-cache.js";
5
+ export async function ensureBinary(component, config) {
6
+ try {
7
+ return await resolveBinary(component, config);
8
+ }
9
+ catch (err) {
10
+ const message = err instanceof Error ? err.message : String(err);
11
+ if (!message.includes("not found in cache")) {
12
+ throw err;
13
+ }
14
+ }
15
+ return download(component, versionFor(component, config), currentPlatform());
16
+ }
17
+ //# sourceMappingURL=ensure-binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-binary.js","sourceRoot":"","sources":["../src/ensure-binary.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,QAAQ,EACR,eAAe,EACf,UAAU,GAEX,MAAM,mBAAmB,CAAA;AAG1B,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAoB,EACpB,MAA6B;IAE7B,IAAI,CAAC;QACH,OAAO,MAAM,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC,CAAA;AAC9E,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface DiscoveredFunctionRoute {
2
+ name: string;
3
+ entrypoint: string;
4
+ }
5
+ /** Discover *.ts handlers and `{name}/index.ts` dirs; skips `_shared`, dotfiles. */
6
+ export declare function discoverTsFunctionsInDir(functionsDir: string): DiscoveredFunctionRoute[];
7
+ /** Router source rooted at routerFilePath (defines import paths). */
8
+ export declare function generateFunctionsRouterSource(routerFilePath: string, fns: DiscoveredFunctionRoute[]): string;
9
+ /**
10
+ * Writes `.supatype/functions-router.ts` under project cwd. Returns absolute path or null if no handlers.
11
+ * Pass `routes` when callers already scanned the dir to avoid duplicate I/O.
12
+ */
13
+ export declare function writeDevFunctionsRouter(cwd: string, functionsDir: string, routes?: DiscoveredFunctionRoute[]): string | null;
14
+ //# sourceMappingURL=functions-router-gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions-router-gen.d.ts","sourceRoot":"","sources":["../src/functions-router-gen.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,oFAAoF;AACpF,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,uBAAuB,EAAE,CAsBxF;AAQD,qEAAqE;AACrE,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,uBAAuB,EAAE,GAC7B,MAAM,CAsJR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,uBAAuB,EAAE,GACjC,MAAM,GAAG,IAAI,CAUf"}