@supatype/cli 0.1.0-alpha.10

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 (416) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.turbo/turbo-test.log +221 -0
  3. package/.turbo/turbo-typecheck.log +4 -0
  4. package/assets/supatype-logo-wordmark.ascii.txt +6 -0
  5. package/bin/dev-entry.ts +2 -0
  6. package/bin/supatype.js +5 -0
  7. package/dist/app/framework.d.ts +44 -0
  8. package/dist/app/framework.d.ts.map +1 -0
  9. package/dist/app/framework.js +200 -0
  10. package/dist/app/framework.js.map +1 -0
  11. package/dist/app/proxy-dev-app.d.ts +13 -0
  12. package/dist/app/proxy-dev-app.d.ts.map +1 -0
  13. package/dist/app/proxy-dev-app.js +54 -0
  14. package/dist/app/proxy-dev-app.js.map +1 -0
  15. package/dist/app-config.d.ts +7 -0
  16. package/dist/app-config.d.ts.map +1 -0
  17. package/dist/app-config.js +113 -0
  18. package/dist/app-config.js.map +1 -0
  19. package/dist/assets/supatype-logo-wordmark.ascii.txt +6 -0
  20. package/dist/augmentation-generator.d.ts +2 -0
  21. package/dist/augmentation-generator.d.ts.map +1 -0
  22. package/dist/augmentation-generator.js +111 -0
  23. package/dist/augmentation-generator.js.map +1 -0
  24. package/dist/binary-cache.d.ts +98 -0
  25. package/dist/binary-cache.d.ts.map +1 -0
  26. package/dist/binary-cache.js +687 -0
  27. package/dist/binary-cache.js.map +1 -0
  28. package/dist/cli.d.ts +2 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +61 -0
  31. package/dist/cli.js.map +1 -0
  32. package/dist/commands/admin.d.ts +4 -0
  33. package/dist/commands/admin.d.ts.map +1 -0
  34. package/dist/commands/admin.js +271 -0
  35. package/dist/commands/admin.js.map +1 -0
  36. package/dist/commands/app.d.ts +3 -0
  37. package/dist/commands/app.d.ts.map +1 -0
  38. package/dist/commands/app.js +82 -0
  39. package/dist/commands/app.js.map +1 -0
  40. package/dist/commands/cache.d.ts +6 -0
  41. package/dist/commands/cache.d.ts.map +1 -0
  42. package/dist/commands/cache.js +105 -0
  43. package/dist/commands/cache.js.map +1 -0
  44. package/dist/commands/cloud.d.ts +23 -0
  45. package/dist/commands/cloud.d.ts.map +1 -0
  46. package/dist/commands/cloud.js +254 -0
  47. package/dist/commands/cloud.js.map +1 -0
  48. package/dist/commands/db.d.ts +8 -0
  49. package/dist/commands/db.d.ts.map +1 -0
  50. package/dist/commands/db.js +116 -0
  51. package/dist/commands/db.js.map +1 -0
  52. package/dist/commands/deploy-types.d.ts +14 -0
  53. package/dist/commands/deploy-types.d.ts.map +1 -0
  54. package/dist/commands/deploy-types.js +38 -0
  55. package/dist/commands/deploy-types.js.map +1 -0
  56. package/dist/commands/deploy.d.ts +15 -0
  57. package/dist/commands/deploy.d.ts.map +1 -0
  58. package/dist/commands/deploy.js +322 -0
  59. package/dist/commands/deploy.js.map +1 -0
  60. package/dist/commands/dev.d.ts +14 -0
  61. package/dist/commands/dev.d.ts.map +1 -0
  62. package/dist/commands/dev.js +806 -0
  63. package/dist/commands/dev.js.map +1 -0
  64. package/dist/commands/diff.d.ts +3 -0
  65. package/dist/commands/diff.d.ts.map +1 -0
  66. package/dist/commands/diff.js +54 -0
  67. package/dist/commands/diff.js.map +1 -0
  68. package/dist/commands/engine.d.ts +7 -0
  69. package/dist/commands/engine.d.ts.map +1 -0
  70. package/dist/commands/engine.js +27 -0
  71. package/dist/commands/engine.js.map +1 -0
  72. package/dist/commands/functions.d.ts +3 -0
  73. package/dist/commands/functions.d.ts.map +1 -0
  74. package/dist/commands/functions.js +749 -0
  75. package/dist/commands/functions.js.map +1 -0
  76. package/dist/commands/generate.d.ts +3 -0
  77. package/dist/commands/generate.d.ts.map +1 -0
  78. package/dist/commands/generate.js +38 -0
  79. package/dist/commands/generate.js.map +1 -0
  80. package/dist/commands/init.d.ts +7 -0
  81. package/dist/commands/init.d.ts.map +1 -0
  82. package/dist/commands/init.js +228 -0
  83. package/dist/commands/init.js.map +1 -0
  84. package/dist/commands/keys.d.ts +4 -0
  85. package/dist/commands/keys.d.ts.map +1 -0
  86. package/dist/commands/keys.js +57 -0
  87. package/dist/commands/keys.js.map +1 -0
  88. package/dist/commands/logs.d.ts +6 -0
  89. package/dist/commands/logs.d.ts.map +1 -0
  90. package/dist/commands/logs.js +52 -0
  91. package/dist/commands/logs.js.map +1 -0
  92. package/dist/commands/migrate-from-v1.d.ts +5 -0
  93. package/dist/commands/migrate-from-v1.d.ts.map +1 -0
  94. package/dist/commands/migrate-from-v1.js +125 -0
  95. package/dist/commands/migrate-from-v1.js.map +1 -0
  96. package/dist/commands/migrate.d.ts +3 -0
  97. package/dist/commands/migrate.d.ts.map +1 -0
  98. package/dist/commands/migrate.js +75 -0
  99. package/dist/commands/migrate.js.map +1 -0
  100. package/dist/commands/pg.d.ts +8 -0
  101. package/dist/commands/pg.d.ts.map +1 -0
  102. package/dist/commands/pg.js +102 -0
  103. package/dist/commands/pg.js.map +1 -0
  104. package/dist/commands/plugins.d.ts +3 -0
  105. package/dist/commands/plugins.d.ts.map +1 -0
  106. package/dist/commands/plugins.js +431 -0
  107. package/dist/commands/plugins.js.map +1 -0
  108. package/dist/commands/pull.d.ts +3 -0
  109. package/dist/commands/pull.d.ts.map +1 -0
  110. package/dist/commands/pull.js +12 -0
  111. package/dist/commands/pull.js.map +1 -0
  112. package/dist/commands/push.d.ts +3 -0
  113. package/dist/commands/push.d.ts.map +1 -0
  114. package/dist/commands/push.js +179 -0
  115. package/dist/commands/push.js.map +1 -0
  116. package/dist/commands/seed.d.ts +5 -0
  117. package/dist/commands/seed.d.ts.map +1 -0
  118. package/dist/commands/seed.js +55 -0
  119. package/dist/commands/seed.js.map +1 -0
  120. package/dist/commands/self-host.d.ts +9 -0
  121. package/dist/commands/self-host.d.ts.map +1 -0
  122. package/dist/commands/self-host.js +310 -0
  123. package/dist/commands/self-host.js.map +1 -0
  124. package/dist/commands/self-update.d.ts +9 -0
  125. package/dist/commands/self-update.d.ts.map +1 -0
  126. package/dist/commands/self-update.js +33 -0
  127. package/dist/commands/self-update.js.map +1 -0
  128. package/dist/commands/status.d.ts +6 -0
  129. package/dist/commands/status.d.ts.map +1 -0
  130. package/dist/commands/status.js +70 -0
  131. package/dist/commands/status.js.map +1 -0
  132. package/dist/commands/types.d.ts +3 -0
  133. package/dist/commands/types.d.ts.map +1 -0
  134. package/dist/commands/types.js +62 -0
  135. package/dist/commands/types.js.map +1 -0
  136. package/dist/commands/update.d.ts +7 -0
  137. package/dist/commands/update.d.ts.map +1 -0
  138. package/dist/commands/update.js +118 -0
  139. package/dist/commands/update.js.map +1 -0
  140. package/dist/components.d.ts +5 -0
  141. package/dist/components.d.ts.map +1 -0
  142. package/dist/components.js +3 -0
  143. package/dist/components.js.map +1 -0
  144. package/dist/config.d.ts +65 -0
  145. package/dist/config.d.ts.map +1 -0
  146. package/dist/config.js +134 -0
  147. package/dist/config.js.map +1 -0
  148. package/dist/dev-compose.d.ts +19 -0
  149. package/dist/dev-compose.d.ts.map +1 -0
  150. package/dist/dev-compose.js +468 -0
  151. package/dist/dev-compose.js.map +1 -0
  152. package/dist/dev-log-bus.d.ts +30 -0
  153. package/dist/dev-log-bus.d.ts.map +1 -0
  154. package/dist/dev-log-bus.js +87 -0
  155. package/dist/dev-log-bus.js.map +1 -0
  156. package/dist/dev-log-filter.d.ts +10 -0
  157. package/dist/dev-log-filter.d.ts.map +1 -0
  158. package/dist/dev-log-filter.js +36 -0
  159. package/dist/dev-log-filter.js.map +1 -0
  160. package/dist/dev-logo.d.ts +12 -0
  161. package/dist/dev-logo.d.ts.map +1 -0
  162. package/dist/dev-logo.js +57 -0
  163. package/dist/dev-logo.js.map +1 -0
  164. package/dist/dev-session.d.ts +26 -0
  165. package/dist/dev-session.d.ts.map +1 -0
  166. package/dist/dev-session.js +106 -0
  167. package/dist/dev-session.js.map +1 -0
  168. package/dist/dev-shutdown.d.ts +9 -0
  169. package/dist/dev-shutdown.d.ts.map +1 -0
  170. package/dist/dev-shutdown.js +50 -0
  171. package/dist/dev-shutdown.js.map +1 -0
  172. package/dist/dev-task-colors.d.ts +14 -0
  173. package/dist/dev-task-colors.d.ts.map +1 -0
  174. package/dist/dev-task-colors.js +44 -0
  175. package/dist/dev-task-colors.js.map +1 -0
  176. package/dist/dev-tui.d.ts +24 -0
  177. package/dist/dev-tui.d.ts.map +1 -0
  178. package/dist/dev-tui.js +188 -0
  179. package/dist/dev-tui.js.map +1 -0
  180. package/dist/diff-output.d.ts +4 -0
  181. package/dist/diff-output.d.ts.map +1 -0
  182. package/dist/diff-output.js +12 -0
  183. package/dist/diff-output.js.map +1 -0
  184. package/dist/docker-postgres.d.ts +57 -0
  185. package/dist/docker-postgres.d.ts.map +1 -0
  186. package/dist/docker-postgres.js +208 -0
  187. package/dist/docker-postgres.js.map +1 -0
  188. package/dist/engine-client.d.ts +69 -0
  189. package/dist/engine-client.d.ts.map +1 -0
  190. package/dist/engine-client.js +157 -0
  191. package/dist/engine-client.js.map +1 -0
  192. package/dist/engine-push-output.d.ts +16 -0
  193. package/dist/engine-push-output.d.ts.map +1 -0
  194. package/dist/engine-push-output.js +61 -0
  195. package/dist/engine-push-output.js.map +1 -0
  196. package/dist/ensure-binary.d.ts +7 -0
  197. package/dist/ensure-binary.d.ts.map +1 -0
  198. package/dist/ensure-binary.js +17 -0
  199. package/dist/ensure-binary.js.map +1 -0
  200. package/dist/functions-router-gen.d.ts +14 -0
  201. package/dist/functions-router-gen.d.ts.map +1 -0
  202. package/dist/functions-router-gen.js +199 -0
  203. package/dist/functions-router-gen.js.map +1 -0
  204. package/dist/index.d.ts +11 -0
  205. package/dist/index.d.ts.map +1 -0
  206. package/dist/index.js +9 -0
  207. package/dist/index.js.map +1 -0
  208. package/dist/jwt.d.ts +3 -0
  209. package/dist/jwt.d.ts.map +1 -0
  210. package/dist/jwt.js +13 -0
  211. package/dist/jwt.js.map +1 -0
  212. package/dist/kong-config.d.ts +25 -0
  213. package/dist/kong-config.d.ts.map +1 -0
  214. package/dist/kong-config.js +71 -0
  215. package/dist/kong-config.js.map +1 -0
  216. package/dist/local-gateway.d.ts +7 -0
  217. package/dist/local-gateway.d.ts.map +1 -0
  218. package/dist/local-gateway.js +9 -0
  219. package/dist/local-gateway.js.map +1 -0
  220. package/dist/local-storage.d.ts +8 -0
  221. package/dist/local-storage.d.ts.map +1 -0
  222. package/dist/local-storage.js +14 -0
  223. package/dist/local-storage.js.map +1 -0
  224. package/dist/pgbouncer-userlist.d.ts +5 -0
  225. package/dist/pgbouncer-userlist.d.ts.map +1 -0
  226. package/dist/pgbouncer-userlist.js +14 -0
  227. package/dist/pgbouncer-userlist.js.map +1 -0
  228. package/dist/postgres-ctl.d.ts +44 -0
  229. package/dist/postgres-ctl.d.ts.map +1 -0
  230. package/dist/postgres-ctl.js +137 -0
  231. package/dist/postgres-ctl.js.map +1 -0
  232. package/dist/process-manager.d.ts +49 -0
  233. package/dist/process-manager.d.ts.map +1 -0
  234. package/dist/process-manager.js +177 -0
  235. package/dist/process-manager.js.map +1 -0
  236. package/dist/project-config.d.ts +238 -0
  237. package/dist/project-config.d.ts.map +1 -0
  238. package/dist/project-config.js +159 -0
  239. package/dist/project-config.js.map +1 -0
  240. package/dist/pull-utils.d.ts +31 -0
  241. package/dist/pull-utils.d.ts.map +1 -0
  242. package/dist/pull-utils.js +77 -0
  243. package/dist/pull-utils.js.map +1 -0
  244. package/dist/release-pins.d.ts +7 -0
  245. package/dist/release-pins.d.ts.map +1 -0
  246. package/dist/release-pins.js +27 -0
  247. package/dist/release-pins.js.map +1 -0
  248. package/dist/release-public-key.d.ts +8 -0
  249. package/dist/release-public-key.d.ts.map +1 -0
  250. package/dist/release-public-key.js +13 -0
  251. package/dist/release-public-key.js.map +1 -0
  252. package/dist/restore-system-relation-targets.d.ts +3 -0
  253. package/dist/restore-system-relation-targets.d.ts.map +1 -0
  254. package/dist/restore-system-relation-targets.js +45 -0
  255. package/dist/restore-system-relation-targets.js.map +1 -0
  256. package/dist/runtime-routes.d.ts +34 -0
  257. package/dist/runtime-routes.d.ts.map +1 -0
  258. package/dist/runtime-routes.js +252 -0
  259. package/dist/runtime-routes.js.map +1 -0
  260. package/dist/schema-ast-v2.d.ts +127 -0
  261. package/dist/schema-ast-v2.d.ts.map +1 -0
  262. package/dist/schema-ast-v2.js +226 -0
  263. package/dist/schema-ast-v2.js.map +1 -0
  264. package/dist/scripts/postinstall.d.ts +11 -0
  265. package/dist/scripts/postinstall.d.ts.map +1 -0
  266. package/dist/scripts/postinstall.js +47 -0
  267. package/dist/scripts/postinstall.js.map +1 -0
  268. package/dist/seed.d.ts +8 -0
  269. package/dist/seed.d.ts.map +1 -0
  270. package/dist/seed.js +32 -0
  271. package/dist/seed.js.map +1 -0
  272. package/dist/self-host-compose.d.ts +43 -0
  273. package/dist/self-host-compose.d.ts.map +1 -0
  274. package/dist/self-host-compose.js +400 -0
  275. package/dist/self-host-compose.js.map +1 -0
  276. package/dist/storage-provision.d.ts +24 -0
  277. package/dist/storage-provision.d.ts.map +1 -0
  278. package/dist/storage-provision.js +44 -0
  279. package/dist/storage-provision.js.map +1 -0
  280. package/dist/studio-admin-roles.d.ts +7 -0
  281. package/dist/studio-admin-roles.d.ts.map +1 -0
  282. package/dist/studio-admin-roles.js +14 -0
  283. package/dist/studio-admin-roles.js.map +1 -0
  284. package/dist/studio-dev-server.d.ts +22 -0
  285. package/dist/studio-dev-server.d.ts.map +1 -0
  286. package/dist/studio-dev-server.js +28 -0
  287. package/dist/studio-dev-server.js.map +1 -0
  288. package/dist/supatype-eval-1781522769253.d.mts +2 -0
  289. package/dist/supatype-eval-1781522769253.d.mts.map +1 -0
  290. package/dist/supatype-eval-1781522769253.mjs +3 -0
  291. package/dist/supatype-eval-1781522769253.mjs.map +1 -0
  292. package/dist/systemd.d.ts +26 -0
  293. package/dist/systemd.d.ts.map +1 -0
  294. package/dist/systemd.js +102 -0
  295. package/dist/systemd.js.map +1 -0
  296. package/dist/tsx-runner.d.ts +18 -0
  297. package/dist/tsx-runner.d.ts.map +1 -0
  298. package/dist/tsx-runner.js +69 -0
  299. package/dist/tsx-runner.js.map +1 -0
  300. package/dist/type-extractor.d.ts +4 -0
  301. package/dist/type-extractor.d.ts.map +1 -0
  302. package/dist/type-extractor.js +1213 -0
  303. package/dist/type-extractor.js.map +1 -0
  304. package/dist/type-resolver.d.ts +33 -0
  305. package/dist/type-resolver.d.ts.map +1 -0
  306. package/dist/type-resolver.js +338 -0
  307. package/dist/type-resolver.js.map +1 -0
  308. package/package.json +41 -0
  309. package/releases/deno/VERSION +1 -0
  310. package/scripts/mirror-deno-release.sh +76 -0
  311. package/src/TYPE-RESOLUTION.md +294 -0
  312. package/src/app/framework.ts +249 -0
  313. package/src/app/proxy-dev-app.ts +68 -0
  314. package/src/app-config.ts +128 -0
  315. package/src/augmentation-generator.ts +126 -0
  316. package/src/binary-cache.ts +845 -0
  317. package/src/cli.ts +63 -0
  318. package/src/commands/admin.ts +372 -0
  319. package/src/commands/app.ts +97 -0
  320. package/src/commands/cache.ts +117 -0
  321. package/src/commands/cloud.ts +325 -0
  322. package/src/commands/db.ts +136 -0
  323. package/src/commands/deploy-types.ts +49 -0
  324. package/src/commands/deploy.ts +400 -0
  325. package/src/commands/dev.ts +1009 -0
  326. package/src/commands/diff.ts +63 -0
  327. package/src/commands/engine.ts +30 -0
  328. package/src/commands/functions.ts +901 -0
  329. package/src/commands/generate.ts +44 -0
  330. package/src/commands/init.ts +253 -0
  331. package/src/commands/keys.ts +66 -0
  332. package/src/commands/logs.ts +58 -0
  333. package/src/commands/migrate-from-v1.ts +131 -0
  334. package/src/commands/migrate.ts +87 -0
  335. package/src/commands/pg.ts +133 -0
  336. package/src/commands/plugins.ts +508 -0
  337. package/src/commands/pull.ts +17 -0
  338. package/src/commands/push.ts +226 -0
  339. package/src/commands/seed.ts +68 -0
  340. package/src/commands/self-host.ts +364 -0
  341. package/src/commands/self-update.ts +45 -0
  342. package/src/commands/status.ts +84 -0
  343. package/src/commands/types.ts +76 -0
  344. package/src/commands/update.ts +136 -0
  345. package/src/components.ts +6 -0
  346. package/src/config.ts +223 -0
  347. package/src/dev-compose.ts +583 -0
  348. package/src/dev-log-bus.ts +101 -0
  349. package/src/dev-log-filter.ts +32 -0
  350. package/src/dev-logo.ts +62 -0
  351. package/src/dev-session.ts +130 -0
  352. package/src/dev-shutdown.ts +54 -0
  353. package/src/dev-task-colors.ts +47 -0
  354. package/src/dev-tui.ts +232 -0
  355. package/src/diff-output.ts +12 -0
  356. package/src/docker-postgres.ts +295 -0
  357. package/src/engine-client.ts +236 -0
  358. package/src/engine-push-output.ts +71 -0
  359. package/src/ensure-binary.ts +28 -0
  360. package/src/functions-router-gen.ts +224 -0
  361. package/src/index.ts +11 -0
  362. package/src/jwt.ts +14 -0
  363. package/src/kong-config.ts +93 -0
  364. package/src/local-gateway.ts +9 -0
  365. package/src/local-storage.ts +14 -0
  366. package/src/pgbouncer-userlist.ts +15 -0
  367. package/src/postgres-ctl.ts +171 -0
  368. package/src/process-manager.ts +220 -0
  369. package/src/project-config.ts +388 -0
  370. package/src/pull-utils.ts +81 -0
  371. package/src/release-pins.ts +31 -0
  372. package/src/release-public-key.ts +12 -0
  373. package/src/restore-system-relation-targets.ts +45 -0
  374. package/src/runtime-routes.ts +291 -0
  375. package/src/schema-ast-v2.ts +324 -0
  376. package/src/scripts/postinstall.ts +51 -0
  377. package/src/seed.ts +43 -0
  378. package/src/self-host-compose.ts +452 -0
  379. package/src/storage-provision.ts +58 -0
  380. package/src/studio-admin-roles.ts +16 -0
  381. package/src/studio-dev-server.ts +53 -0
  382. package/src/supatype-eval-1781522769253.mts +1 -0
  383. package/src/systemd.ts +137 -0
  384. package/src/tsx-runner.ts +89 -0
  385. package/src/type-extractor.ts +1479 -0
  386. package/src/type-resolver.ts +457 -0
  387. package/tests/app-command.test.ts +54 -0
  388. package/tests/augmentation-generator.test.ts +59 -0
  389. package/tests/binary-cache-cloud-overrides.test.ts +123 -0
  390. package/tests/cached-artifact-format.test.ts +84 -0
  391. package/tests/cli-help.test.ts +133 -0
  392. package/tests/config.test.ts +252 -0
  393. package/tests/dev-ui.test.ts +139 -0
  394. package/tests/docker-postgres.test.ts +39 -0
  395. package/tests/engine-distribution.test.ts +418 -0
  396. package/tests/engine-push-output.test.ts +67 -0
  397. package/tests/ensure-binary.test.ts +59 -0
  398. package/tests/init.test.ts +127 -0
  399. package/tests/keys.test.ts +160 -0
  400. package/tests/migrate-from-v1.test.ts +29 -0
  401. package/tests/normalize-admin-config.test.ts +48 -0
  402. package/tests/pg-spawn-env.test.ts +18 -0
  403. package/tests/postgres-archive-tag.test.ts +9 -0
  404. package/tests/proxy-dev-app.test.ts +33 -0
  405. package/tests/pull-utils.test.ts +150 -0
  406. package/tests/release-pins.test.ts +28 -0
  407. package/tests/runtime-contract.test.ts +370 -0
  408. package/tests/seed-discover.test.ts +31 -0
  409. package/tests/studio-admin-roles.test.ts +27 -0
  410. package/tests/tsconfig.json +9 -0
  411. package/tests/tsx-runner.test.ts +66 -0
  412. package/tests/type-extractor.test.ts +985 -0
  413. package/tests/type-resolver.test.ts +59 -0
  414. package/tsconfig.json +10 -0
  415. package/tsconfig.tsbuildinfo +1 -0
  416. package/vitest.config.ts +12 -0
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Postinstall script — downloads component binaries on first install.
3
+ *
4
+ * Components: supatype-engine, supatype-server, supatype-pg (Postgres), deno.
5
+ * Binaries are cached in ~/.supatype/cache/{component}/{version}/.
6
+ *
7
+ * Failures are non-fatal: an installation message is printed and the user
8
+ * can run `supatype update` manually to retry.
9
+ */
10
+ import { download, currentPlatform, fetchAllLatestVersions } from "../binary-cache.js";
11
+ async function main() {
12
+ const platform = currentPlatform();
13
+ let versions;
14
+ try {
15
+ console.log("[supatype] Fetching latest component versions...");
16
+ versions = await fetchAllLatestVersions();
17
+ }
18
+ catch (err) {
19
+ console.error(`[supatype] Failed to fetch latest versions: ${err.message}`);
20
+ console.error("[supatype] Run 'supatype update' to download component binaries.");
21
+ return;
22
+ }
23
+ console.log(`[supatype] Downloading component binaries for ${platform.os}/${platform.arch}...`);
24
+ const components = Object.entries(versions);
25
+ let anyFailed = false;
26
+ for (const [component, version] of components) {
27
+ try {
28
+ await download(component, version, platform);
29
+ }
30
+ catch (err) {
31
+ console.error(`[supatype] Failed to download ${component} v${version}: ${err.message}`);
32
+ anyFailed = true;
33
+ }
34
+ }
35
+ if (anyFailed) {
36
+ console.error("[supatype] Some downloads failed. Run 'supatype update' to retry.");
37
+ }
38
+ else {
39
+ console.log("[supatype] All component binaries downloaded successfully.");
40
+ }
41
+ }
42
+ main().catch((err) => {
43
+ // Non-fatal — postinstall failures should not break npm install.
44
+ console.error("[supatype] Postinstall failed:", err);
45
+ process.exit(0);
46
+ });
47
+ //# sourceMappingURL=postinstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../../src/scripts/postinstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,sBAAsB,EAAkB,MAAM,oBAAoB,CAAA;AAEtG,KAAK,UAAU,IAAI;IACjB,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAA;IAElC,IAAI,QAAmC,CAAA;IACvC,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;QAC/D,QAAQ,GAAG,MAAM,sBAAsB,EAAE,CAAA;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+CAAgD,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QACtF,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACjF,OAAM;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iDAAiD,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAA;IAE/F,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAA0B,CAAA;IAEpE,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,UAAU,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,SAAS,KAAK,OAAO,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;YAClG,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAA;IACpF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;IAC3E,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,iEAAiE;IACjE,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAA;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
package/dist/seed.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import pg from "pg";
2
+ export interface SeedSql {
3
+ (strings: TemplateStringsArray, ...values: unknown[]): Promise<pg.QueryResult>;
4
+ end(): Promise<void>;
5
+ }
6
+ /** Lightweight tagged-template SQL helper for project `seed.ts` scripts. */
7
+ export declare function sql(connectionString: string): SeedSql;
8
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,MAAM,WAAW,OAAO;IACtB,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;IAC9E,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACrB;AAED,4EAA4E;AAC5E,wBAAgB,GAAG,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAkCrD"}
package/dist/seed.js ADDED
@@ -0,0 +1,32 @@
1
+ import pg from "pg";
2
+ /** Lightweight tagged-template SQL helper for project `seed.ts` scripts. */
3
+ export function sql(connectionString) {
4
+ const client = new pg.Client({ connectionString });
5
+ let connected = false;
6
+ const ensureConnected = async () => {
7
+ if (!connected) {
8
+ await client.connect();
9
+ connected = true;
10
+ }
11
+ };
12
+ const tag = async (strings, ...values) => {
13
+ await ensureConnected();
14
+ let text = "";
15
+ for (let i = 0; i < strings.length; i++) {
16
+ text += strings[i];
17
+ if (i < values.length) {
18
+ text += `$${i + 1}`;
19
+ }
20
+ }
21
+ return client.query(text, values);
22
+ };
23
+ return Object.assign(tag, {
24
+ end: async () => {
25
+ if (connected) {
26
+ await client.end();
27
+ connected = false;
28
+ }
29
+ },
30
+ });
31
+ }
32
+ //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AAOnB,4EAA4E;AAC5E,MAAM,UAAU,GAAG,CAAC,gBAAwB;IAC1C,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAA;IAClD,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,MAAM,eAAe,GAAG,KAAK,IAAmB,EAAE;QAChD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;YACtB,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,GAAG,GAAG,KAAK,EACf,OAA6B,EAC7B,GAAG,MAAiB,EACK,EAAE;QAC3B,MAAM,eAAe,EAAE,CAAA;QACvB,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;YAClB,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;YACrB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC,CAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;QACxB,GAAG,EAAE,KAAK,IAAmB,EAAE;YAC7B,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;gBAClB,SAAS,GAAG,KAAK,CAAA;YACnB,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { type SupatypeProjectConfig } from "./project-config.js";
2
+ /** Env keys written when `versions` pins exist in supatype.config.ts. */
3
+ export declare const COMPOSE_PINNED_IMAGE_ENV_KEYS: readonly ["SUPATYPE_ENGINE_IMAGE", "SUPATYPE_SERVER_IMAGE", "SUPATYPE_POSTGRES_IMAGE"];
4
+ type DockerPinComponent = "engine" | "server" | "postgres";
5
+ /** Map a config version pin to a Docker Hub image reference. */
6
+ export declare function dockerImageRef(component: DockerPinComponent, version: string, config?: SupatypeProjectConfig): string;
7
+ /**
8
+ * When the user pins `versions` in config, sync matching SUPATYPE_*_IMAGE vars for Compose.
9
+ * Unpinned components are omitted so compose falls back to :latest defaults.
10
+ */
11
+ export declare function composeDockerImageEnv(config: SupatypeProjectConfig): Record<string, string>;
12
+ /**
13
+ * Schema-engine image for a one-off `docker compose run` when pushing schema.
14
+ * Uses config pin when set; otherwise CDN engine semver (Docker Hub `:latest` can lag).
15
+ * Does not touch `.env` — server/postgres still use compose `:latest` defaults.
16
+ */
17
+ export declare function schemaEngineImageForPush(config: SupatypeProjectConfig): Promise<string | undefined>;
18
+ export interface SelfHostComposePaths {
19
+ dir: string;
20
+ composePath: string;
21
+ kongPath: string;
22
+ nginxPath: string;
23
+ }
24
+ export declare function selfHostComposePaths(cwd: string): SelfHostComposePaths;
25
+ export declare function appUpstreamForCompose(config: SupatypeProjectConfig): string | undefined;
26
+ export declare function staticDirForCompose(config: SupatypeProjectConfig): string | undefined;
27
+ /** Host Vite dev server as seen from Kong inside Docker Compose. */
28
+ export declare const COMPOSE_STUDIO_HOST_URL = "http://host.docker.internal:3002";
29
+ export interface SelfHostComposeOptions {
30
+ /** `supatype dev` with provider docker: internal-only db/server; Kong on host :18473. */
31
+ devLocal?: boolean;
32
+ }
33
+ export declare function renderSelfHostCompose(config: SupatypeProjectConfig, cwd?: string, options?: SelfHostComposeOptions): string;
34
+ export declare function writeSelfHostCompose(cwd: string, config: SupatypeProjectConfig, options?: SelfHostComposeOptions): SelfHostComposePaths;
35
+ export interface RunDockerComposeOptions {
36
+ /** Suppress docker compose progress UI (container status lines). */
37
+ quiet?: boolean;
38
+ }
39
+ export declare function runDockerCompose(composePath: string, args: string[], projectRoot?: string, composeProject?: string, options?: RunDockerComposeOptions): number;
40
+ /** Compose project name for a Supatype project — isolates docker state per project. */
41
+ export declare function composeProjectName(projectName: string): string;
42
+ export {};
43
+ //# sourceMappingURL=self-host-compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-host-compose.d.ts","sourceRoot":"","sources":["../src/self-host-compose.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqC,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAInG,yEAAyE;AACzE,eAAO,MAAM,6BAA6B,wFAIhC,CAAA;AAEV,KAAK,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAA;AAE1D,gEAAgE;AAChE,wBAAgB,cAAc,CAC5B,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,qBAAqB,GAC7B,MAAM,CAeR;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe3F;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM7B;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAQtE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAIvF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,GAAG,SAAS,CAIrF;AAwBD,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,qCAAqC,CAAA;AAmCzE,MAAM,WAAW,sBAAsB;IACrC,yFAAyF;IACzF,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,EAC7B,GAAG,GAAE,MAAsB,EAC3B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,MAAM,CAqMR;AAoBD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,qBAAqB,EAC7B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,oBAAoB,CAmBtB;AAED,MAAM,WAAW,uBAAuB;IACtC,oEAAoE;IACpE,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,GAAE,MAAsB,EACnC,cAAc,CAAC,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,uBAAuB,GAChC,MAAM,CAsBR;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG9D"}
@@ -0,0 +1,400 @@
1
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
2
+ import { dirname, join, relative, resolve } from "node:path";
3
+ import { spawnSync } from "node:child_process";
4
+ import { preferredFunctionsPathFromProject } from "./project-config.js";
5
+ import { hasEngineOverride, hasStudioOverride, pinnedVersion, fetchLatestVersion, VERSION_PIN_LOCAL } from "./binary-cache.js";
6
+ import { buildKongDeclarative } from "./kong-config.js";
7
+ /** Env keys written when `versions` pins exist in supatype.config.ts. */
8
+ export const COMPOSE_PINNED_IMAGE_ENV_KEYS = [
9
+ "SUPATYPE_ENGINE_IMAGE",
10
+ "SUPATYPE_SERVER_IMAGE",
11
+ "SUPATYPE_POSTGRES_IMAGE",
12
+ ];
13
+ /** Map a config version pin to a Docker Hub image reference. */
14
+ export function dockerImageRef(component, version, config) {
15
+ const trimmed = version.trim();
16
+ switch (component) {
17
+ case "engine":
18
+ return `supatype/schema-engine:${trimmed.startsWith("v") ? trimmed : `v${trimmed}`}`;
19
+ case "server":
20
+ return `supatype/server:${trimmed.startsWith("v") ? trimmed : `v${trimmed}`}`;
21
+ case "postgres": {
22
+ const override = config?.database?.image?.trim();
23
+ if (override)
24
+ return override;
25
+ if (trimmed.includes("-latest"))
26
+ return `supatype/postgres:${trimmed}`;
27
+ const major = trimmed.split(".")[0];
28
+ return `supatype/postgres:${major}-latest`;
29
+ }
30
+ }
31
+ }
32
+ /**
33
+ * When the user pins `versions` in config, sync matching SUPATYPE_*_IMAGE vars for Compose.
34
+ * Unpinned components are omitted so compose falls back to :latest defaults.
35
+ */
36
+ export function composeDockerImageEnv(config) {
37
+ const env = {};
38
+ const versions = config.versions;
39
+ if (!versions)
40
+ return env;
41
+ if (versions.engine && versions.engine !== VERSION_PIN_LOCAL) {
42
+ env.SUPATYPE_ENGINE_IMAGE = dockerImageRef("engine", versions.engine);
43
+ }
44
+ if (versions.server && versions.server !== VERSION_PIN_LOCAL) {
45
+ env.SUPATYPE_SERVER_IMAGE = dockerImageRef("server", versions.server);
46
+ }
47
+ if (versions.postgres && versions.postgres !== VERSION_PIN_LOCAL) {
48
+ env.SUPATYPE_POSTGRES_IMAGE = dockerImageRef("postgres", versions.postgres, config);
49
+ }
50
+ return env;
51
+ }
52
+ /**
53
+ * Schema-engine image for a one-off `docker compose run` when pushing schema.
54
+ * Uses config pin when set; otherwise CDN engine semver (Docker Hub `:latest` can lag).
55
+ * Does not touch `.env` — server/postgres still use compose `:latest` defaults.
56
+ */
57
+ export async function schemaEngineImageForPush(config) {
58
+ const pinned = pinnedVersion("engine", config);
59
+ if (pinned === VERSION_PIN_LOCAL)
60
+ return undefined;
61
+ if (pinned)
62
+ return dockerImageRef("engine", pinned);
63
+ const version = await fetchLatestVersion("engine");
64
+ return dockerImageRef("engine", version);
65
+ }
66
+ export function selfHostComposePaths(cwd) {
67
+ const dir = resolve(cwd, ".supatype", "self-host");
68
+ return {
69
+ dir,
70
+ composePath: join(dir, "docker-compose.yml"),
71
+ kongPath: join(dir, "kong.yml"),
72
+ nginxPath: join(dir, "nginx.conf"),
73
+ };
74
+ }
75
+ export function appUpstreamForCompose(config) {
76
+ if (config.app.mode !== "proxy")
77
+ return undefined;
78
+ const upstream = config.app.upstream?.trim();
79
+ return upstream && upstream.length > 0 ? upstream : undefined;
80
+ }
81
+ export function staticDirForCompose(config) {
82
+ if (config.app.mode !== "static")
83
+ return undefined;
84
+ const dir = config.app.static_dir?.trim();
85
+ return dir && dir.length > 0 ? dir : "./public";
86
+ }
87
+ /**
88
+ * Bind-mount source for `/project` in generated compose files.
89
+ * Paths are resolved from `--project-directory` (always the project root in `runDockerCompose`),
90
+ * not from the compose file directory — use `.` not `../..`.
91
+ */
92
+ function projectMountPath(_cwd) {
93
+ return ".";
94
+ }
95
+ /** Paths in generated compose are resolved from `--project-directory` (project root). */
96
+ function relativeFromProjectRoot(cwd, target) {
97
+ let rel = relative(resolve(cwd), resolve(target)).replace(/\\/g, "/");
98
+ if (!rel.startsWith(".") && !rel.startsWith("/")) {
99
+ rel = `./${rel}`;
100
+ }
101
+ return rel;
102
+ }
103
+ function kongMountPath(_cwd) {
104
+ return ".supatype/self-host/kong.yml";
105
+ }
106
+ /** Host Vite dev server as seen from Kong inside Docker Compose. */
107
+ export const COMPOSE_STUDIO_HOST_URL = "http://host.docker.internal:3002";
108
+ /** Studio container — always Docker Hub unless SUPATYPE_STUDIO_IMAGE is set in .env. */
109
+ function studioServiceBlock() {
110
+ return ` image: \${SUPATYPE_STUDIO_IMAGE:-supatype/studio:latest}`;
111
+ }
112
+ /** Host dev app (Astro/Vite on the machine) as seen from inside compose services. */
113
+ function proxyUpstreamForCompose(upstream, devLocal) {
114
+ const trimmed = upstream.trim();
115
+ if (!devLocal)
116
+ return trimmed;
117
+ try {
118
+ const url = new URL(trimmed);
119
+ if (url.hostname === "localhost" || url.hostname === "127.0.0.1") {
120
+ url.hostname = "host.docker.internal";
121
+ return url.toString();
122
+ }
123
+ }
124
+ catch {
125
+ // keep literal upstream when not a URL
126
+ }
127
+ return trimmed;
128
+ }
129
+ function serverAppEnvForCompose(config, devLocal) {
130
+ const mode = config.app.mode ?? "none";
131
+ const lines = [` SUPATYPE_APP_MODE: ${mode}`];
132
+ if (mode === "static") {
133
+ const dir = staticDirForCompose(config) ?? "./public";
134
+ lines.push(` SUPATYPE_APP_STATIC_DIR: /project/${dir.replace(/^\.\//, "")}`);
135
+ }
136
+ else if (mode === "proxy" && config.app.upstream?.trim()) {
137
+ lines.push(` SUPATYPE_APP_UPSTREAM: ${proxyUpstreamForCompose(config.app.upstream, devLocal)}`);
138
+ }
139
+ return lines.join("\n");
140
+ }
141
+ export function renderSelfHostCompose(config, cwd = process.cwd(), options) {
142
+ const projectMount = projectMountPath(cwd);
143
+ const kongMount = kongMountPath(cwd);
144
+ const devLocal = options?.devLocal === true;
145
+ const studioHostDev = devLocal && hasStudioOverride(config);
146
+ const appEnv = serverAppEnvForCompose(config, devLocal);
147
+ const studioService = studioServiceBlock();
148
+ const studioBlock = studioHostDev
149
+ ? ""
150
+ : `
151
+ studio:
152
+ ${studioService}
153
+ environment:
154
+ SUPATYPE_CLOUD_JSON: '{"url":"\${API_EXTERNAL_URL:-http://localhost:18473}","anonKey":"\${ANON_KEY:-}"}'
155
+ expose:
156
+ - "3002"
157
+ `;
158
+ const kongDependsOn = studioHostDev
159
+ ? ` - server`
160
+ : ` - server
161
+ - studio`;
162
+ const publishDbToHost = !devLocal || hasEngineOverride(config);
163
+ const dbPorts = publishDbToHost
164
+ ? devLocal
165
+ ? ` ports:
166
+ - "127.0.0.1:\${SUPATYPE_DEV_DB_PORT:-54329}:5432"
167
+ `
168
+ : ` ports:
169
+ - "5432:5432"
170
+ `
171
+ : "";
172
+ const serverPorts = devLocal
173
+ ? ""
174
+ : ` ports:
175
+ - "9999:9999"
176
+ `;
177
+ const minioPorts = devLocal
178
+ ? ""
179
+ : ` ports:
180
+ - "9000:9000"
181
+ - "9001:9001"
182
+ `;
183
+ return `# Generated by supatype self-host compose
184
+ # Kong → supatype-server (unified gateway) → internal PostgREST / storage / etc.
185
+ services:
186
+ db:
187
+ image: \${SUPATYPE_POSTGRES_IMAGE:-supatype/postgres:latest}
188
+ environment:
189
+ POSTGRES_USER: \${POSTGRES_USER:-supatype_admin}
190
+ POSTGRES_PASSWORD: \${POSTGRES_PASSWORD:-postgres}
191
+ POSTGRES_DB: \${POSTGRES_DB:-supatype}
192
+ ${dbPorts} volumes:
193
+ - db-data:/var/lib/postgresql/data
194
+ healthcheck:
195
+ test: ["CMD-SHELL", "pg_isready -U \${POSTGRES_USER:-supatype_admin}"]
196
+ interval: 5s
197
+ timeout: 5s
198
+ retries: 20
199
+
200
+ postgrest:
201
+ image: postgrest/postgrest:v12.2.8
202
+ expose:
203
+ - "3000"
204
+ environment:
205
+ PGRST_DB_URI: postgresql://\${POSTGRES_USER:-supatype_admin}:\${POSTGRES_PASSWORD:-postgres}@db:5432/\${POSTGRES_DB:-supatype}
206
+ PGRST_DB_SCHEMA: "public, supatype, graphql_public, auth"
207
+ PGRST_DB_ANON_ROLE: anon
208
+ PGRST_JWT_SECRET: \${JWT_SECRET:-super-secret-jwt-token-change-in-production}
209
+ PGRST_DB_EXTRA_SEARCH_PATH: public,extensions
210
+ PGRST_DB_POOL: 3
211
+ depends_on:
212
+ db:
213
+ condition: service_healthy
214
+
215
+ storage:
216
+ image: \${SUPATYPE_STORAGE_IMAGE:-supatype/storage:latest}
217
+ expose:
218
+ - "5000"
219
+ environment:
220
+ PORT: 5000
221
+ DATABASE_URL: "postgresql://\${POSTGRES_USER:-supatype_admin}:\${POSTGRES_PASSWORD:-postgres}@db:5432/\${POSTGRES_DB:-supatype}"
222
+ JWT_SECRET: \${JWT_SECRET:-super-secret-jwt-token-change-in-production}
223
+ S3_ENDPOINT: http://minio:9000
224
+ S3_REGION: us-east-1
225
+ S3_ACCESS_KEY: supatype
226
+ S3_SECRET_KEY: supatype-secret
227
+ S3_FORCE_PATH_STYLE: "true"
228
+ depends_on:
229
+ db:
230
+ condition: service_healthy
231
+
232
+ functions-worker:
233
+ image: \${SUPATYPE_FUNCTIONS_WORKER_IMAGE:-supatype/functions-worker:latest}
234
+ expose:
235
+ - "8001"
236
+ volumes:
237
+ - ${projectMount}:/project:ro
238
+ environment:
239
+ SUPATYPE_FUNCTIONS_ROOT: /project/functions
240
+ SUPATYPE_DENO_FUNCTIONS_DIR: /project/functions
241
+ PORT: "8001"
242
+ SUPATYPE_URL: \${API_EXTERNAL_URL:-http://localhost:18473}
243
+ SUPATYPE_ANON_KEY: \${ANON_KEY:-}
244
+ SUPATYPE_SERVICE_ROLE_KEY: \${SERVICE_ROLE_KEY:-}
245
+ STRIPE_SECRET_KEY: \${STRIPE_SECRET_KEY:-}
246
+ STRIPE_WEBHOOK_SECRET: \${STRIPE_WEBHOOK_SECRET:-}
247
+ SITE_URL: \${SITE_URL:-\${API_EXTERNAL_URL:-http://localhost:18473}}
248
+ depends_on:
249
+ db:
250
+ condition: service_healthy
251
+
252
+ server:
253
+ image: \${SUPATYPE_SERVER_IMAGE:-\${SUPATYPE_AUTH_IMAGE:-supatype/server:latest}}
254
+ ${serverPorts} volumes:
255
+ - ${projectMount}:/project:ro
256
+ working_dir: /project
257
+ environment:
258
+ SUPATYPE_MODE: ${devLocal ? "dev" : "standalone"}
259
+ SUPATYPE_MANIFEST_PATH: .supatype/manifest.json
260
+ SUPATYPE_ADMIN_CONFIG_PATH: .supatype/admin-config.json
261
+ SUPATYPE_API_CONFIG_PATH: .supatype/api-config.json
262
+ SUPATYPE_POSTGREST_URL: http://postgrest:3000
263
+ SUPATYPE_GRAPHQL_URL: http://postgrest:3000
264
+ SUPATYPE_STORAGE_URL: http://storage:5000
265
+ SUPATYPE_URL: \${API_EXTERNAL_URL:-http://localhost:18473}
266
+ SUPATYPE_ANON_KEY: \${ANON_KEY:-}
267
+ SUPATYPE_SERVICE_ROLE_KEY: \${SERVICE_ROLE_KEY:-}
268
+ SUPATYPE_SQL_DATABASE_URL: "postgresql://\${POSTGRES_USER:-supatype_admin}:\${POSTGRES_PASSWORD:-postgres}@db:5432/\${POSTGRES_DB:-supatype}"
269
+ SUPATYPE_DENO_FUNCTIONS_DIR: /project/functions
270
+ SUPATYPE_FUNCTIONS_WORKER_URL: http://functions-worker:8001
271
+ ${appEnv}
272
+ GOTRUE_API_HOST: 0.0.0.0
273
+ GOTRUE_API_PORT: 9999
274
+ API_EXTERNAL_URL: \${API_EXTERNAL_URL:-http://localhost:18473}
275
+ GOTRUE_API_EXTERNAL_URL: \${API_EXTERNAL_URL:-http://localhost:18473}
276
+ GOTRUE_DB_DRIVER: postgres
277
+ GOTRUE_DB_DATABASE_URL: "postgres://\${POSTGRES_USER:-supatype_admin}:\${POSTGRES_PASSWORD:-postgres}@db:5432/\${POSTGRES_DB:-supatype}?search_path=auth"
278
+ GOTRUE_SITE_URL: \${SITE_URL:-http://localhost:3000}
279
+ GOTRUE_JWT_SECRET: \${JWT_SECRET:-super-secret-jwt-token-change-in-production}
280
+ GOTRUE_JWT_EXP: 3600
281
+ GOTRUE_JWT_AUD: authenticated
282
+ GOTRUE_JWT_DEFAULT_GROUP_NAME: authenticated
283
+ GOTRUE_JWT_ADMIN_ROLES: service_role,supatype_admin
284
+ GOTRUE_MAILER_AUTOCONFIRM: \${GOTRUE_MAILER_AUTOCONFIRM:-true}
285
+ GOTRUE_DISABLE_SIGNUP: \${DISABLE_SIGNUP:-false}
286
+ ${devLocal ? " STUDIO_OPEN_DEV: \"1\"\n" : ""}
287
+ depends_on:
288
+ db:
289
+ condition: service_healthy
290
+ postgrest:
291
+ condition: service_started
292
+ storage:
293
+ condition: service_started
294
+ functions-worker:
295
+ condition: service_started
296
+
297
+ minio:
298
+ image: minio/minio:RELEASE.2024-11-07T00-52-20Z
299
+ command: server /data --console-address ":9001"
300
+ environment:
301
+ MINIO_ROOT_USER: supatype
302
+ MINIO_ROOT_PASSWORD: supatype-secret
303
+ ${minioPorts} volumes:
304
+ - minio-data:/data
305
+
306
+ schema-engine:
307
+ image: \${SUPATYPE_ENGINE_IMAGE:-supatype/schema-engine:latest}
308
+ profiles: ["tools"]
309
+ entrypoint: ["supatype-engine"]
310
+ volumes:
311
+ - ${projectMount}:/project
312
+ working_dir: /project
313
+ depends_on:
314
+ db:
315
+ condition: service_healthy
316
+ ${studioBlock}
317
+ kong:
318
+ image: kong:3.6
319
+ environment:
320
+ KONG_DATABASE: "off"
321
+ KONG_DECLARATIVE_CONFIG: /etc/kong/kong.yml
322
+ KONG_PROXY_ACCESS_LOG: /dev/stdout
323
+ KONG_ADMIN_ACCESS_LOG: /dev/stdout
324
+ KONG_PROXY_ERROR_LOG: /dev/stderr
325
+ KONG_ADMIN_ERROR_LOG: /dev/stderr
326
+ volumes:
327
+ - ${kongMount}:/etc/kong/kong.yml:ro
328
+ ports:
329
+ - "\${SUPATYPE_KONG_PORT:-18473}:8000"
330
+ depends_on:
331
+ ${kongDependsOn}
332
+
333
+ volumes:
334
+ db-data:
335
+ minio-data:
336
+ `;
337
+ }
338
+ function ensureComposeManifest(cwd) {
339
+ const manifestPath = join(cwd, ".supatype", "manifest.json");
340
+ if (existsSync(manifestPath))
341
+ return;
342
+ mkdirSync(dirname(manifestPath), { recursive: true });
343
+ const manifest = {
344
+ schema: "public",
345
+ postgrest_url: "http://postgrest:3000",
346
+ storage_url: "http://storage:5000",
347
+ realtime_enabled: true,
348
+ functions_enabled: false,
349
+ };
350
+ writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
351
+ }
352
+ function ensureProjectFunctionsDir(cwd, config) {
353
+ mkdirSync(preferredFunctionsPathFromProject(config, cwd), { recursive: true });
354
+ }
355
+ export function writeSelfHostCompose(cwd, config, options) {
356
+ const paths = selfHostComposePaths(cwd);
357
+ mkdirSync(paths.dir, { recursive: true });
358
+ ensureProjectFunctionsDir(cwd, config);
359
+ ensureComposeManifest(cwd);
360
+ writeFileSync(paths.composePath, renderSelfHostCompose(config, cwd, options), "utf8");
361
+ const studioHostDev = options?.devLocal === true && hasStudioOverride(config);
362
+ writeFileSync(paths.kongPath, buildKongDeclarative({
363
+ unifiedGateway: true,
364
+ ...(studioHostDev && {
365
+ studioServiceUrl: COMPOSE_STUDIO_HOST_URL,
366
+ studioStripPath: false,
367
+ }),
368
+ }), "utf8");
369
+ return paths;
370
+ }
371
+ export function runDockerCompose(composePath, args, projectRoot = process.cwd(), composeProject, options) {
372
+ const envFile = resolve(projectRoot, ".env");
373
+ const composeArgs = ["compose"];
374
+ if (options?.quiet) {
375
+ composeArgs.push("--progress", "quiet");
376
+ }
377
+ // Per-project name isolates containers/volumes/network so multiple Supatype
378
+ // projects on one machine never share a database (default would be the
379
+ // ".supatype/self-host" dir name, identical for every project).
380
+ if (composeProject)
381
+ composeArgs.push("-p", composeProject);
382
+ // Resolve ${VAR} in compose.yml from the project root .env (not .supatype/self-host/).
383
+ composeArgs.push("--project-directory", projectRoot);
384
+ composeArgs.push("-f", composePath);
385
+ if (existsSync(envFile)) {
386
+ composeArgs.push("--env-file", envFile);
387
+ }
388
+ composeArgs.push(...args);
389
+ const env = options?.quiet
390
+ ? { ...process.env, COMPOSE_PROGRESS: "quiet" }
391
+ : process.env;
392
+ const result = spawnSync("docker", composeArgs, { stdio: "inherit", cwd: projectRoot, env });
393
+ return result.status ?? 1;
394
+ }
395
+ /** Compose project name for a Supatype project — isolates docker state per project. */
396
+ export function composeProjectName(projectName) {
397
+ const slug = projectName.toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
398
+ return `supatype-${slug || "project"}`;
399
+ }
400
+ //# sourceMappingURL=self-host-compose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-host-compose.js","sourceRoot":"","sources":["../src/self-host-compose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Provision storage buckets declared in a schema AST via the storage server API.
3
+ *
4
+ * The storage server is the authority on bucket existence — going through the API
5
+ * ensures it creates any backing resources (directories, S3 buckets, etc.).
6
+ * Buckets already registered return 409 Conflict, which is treated as success.
7
+ */
8
+ export interface BucketSpec {
9
+ id: string;
10
+ public: boolean;
11
+ allowed_mime_types?: string[] | null;
12
+ file_size_limit?: number | null;
13
+ access_mode?: "public" | "private" | "custom";
14
+ s3_bucket_policy?: string | null;
15
+ }
16
+ /**
17
+ * Ensure all declared buckets exist in the storage server.
18
+ *
19
+ * @param storageApiUrl Base URL of the storage API, e.g. "http://localhost:54321/storage/v1"
20
+ * @param serviceRoleKey A service_role JWT for the storage server
21
+ * @param buckets Buckets to provision (from the resolved AST)
22
+ */
23
+ export declare function provisionBuckets(storageApiUrl: string, serviceRoleKey: string, buckets: BucketSpec[]): Promise<void>;
24
+ //# sourceMappingURL=storage-provision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-provision.d.ts","sourceRoot":"","sources":["../src/storage-provision.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,CAAA;IACf,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACpC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,WAAW,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAA;IAC7C,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,UAAU,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Provision storage buckets declared in a schema AST via the storage server API.
3
+ *
4
+ * The storage server is the authority on bucket existence — going through the API
5
+ * ensures it creates any backing resources (directories, S3 buckets, etc.).
6
+ * Buckets already registered return 409 Conflict, which is treated as success.
7
+ */
8
+ /**
9
+ * Ensure all declared buckets exist in the storage server.
10
+ *
11
+ * @param storageApiUrl Base URL of the storage API, e.g. "http://localhost:54321/storage/v1"
12
+ * @param serviceRoleKey A service_role JWT for the storage server
13
+ * @param buckets Buckets to provision (from the resolved AST)
14
+ */
15
+ export async function provisionBuckets(storageApiUrl, serviceRoleKey, buckets) {
16
+ const base = storageApiUrl.replace(/\/$/, "");
17
+ const headers = {
18
+ "Authorization": `Bearer ${serviceRoleKey}`,
19
+ "Content-Type": "application/json",
20
+ };
21
+ for (const bucket of buckets) {
22
+ const body = JSON.stringify({
23
+ id: bucket.id,
24
+ name: bucket.id,
25
+ public: bucket.public,
26
+ ...(bucket.allowed_mime_types != null && { allowed_mime_types: bucket.allowed_mime_types }),
27
+ ...(bucket.file_size_limit != null && { file_size_limit: bucket.file_size_limit }),
28
+ ...(bucket.access_mode != null && { access_mode: bucket.access_mode }),
29
+ ...(bucket.s3_bucket_policy != null &&
30
+ bucket.s3_bucket_policy !== "" && { s3_bucket_policy: bucket.s3_bucket_policy }),
31
+ });
32
+ const res = await fetch(`${base}/bucket`, { method: "POST", headers, body })
33
+ .catch(() => null);
34
+ if (res === null)
35
+ continue; // server not reachable — skip silently
36
+ if (res.status === 409)
37
+ continue; // already exists — fine
38
+ if (!res.ok) {
39
+ const msg = await res.text().catch(() => res.statusText);
40
+ console.warn(`[storage] Failed to provision bucket "${bucket.id}": ${msg}`);
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=storage-provision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-provision.js","sourceRoot":"","sources":["../src/storage-provision.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,aAAqB,EACrB,cAAsB,EACtB,OAAqB;IAErB,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG;QACd,eAAe,EAAE,UAAU,cAAc,EAAE;QAC3C,cAAc,EAAE,kBAAkB;KACnC,CAAA;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,EAAE;YACf,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,CAAC,MAAM,CAAC,kBAAkB,IAAI,IAAI,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC3F,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;YAClF,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;YACtE,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,IAAI;gBACjC,MAAM,CAAC,gBAAgB,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC;SACnF,CAAC,CAAA;QAEF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;aACzE,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAEpB,IAAI,GAAG,KAAK,IAAI;YAAE,SAAQ,CAAC,uCAAuC;QAClE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,SAAQ,CAAC,wBAAwB;QACzD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACxD,OAAO,CAAC,IAAI,CAAC,yCAAyC,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,CAAA;QAC7E,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { SupatypeProjectConfig } from "./project-config.js";
2
+ export declare const DEFAULT_STUDIO_ADMIN_ROLES: readonly ["admin", "supatype_admin"];
3
+ /** Studio admin roles from `supatype.config.ts` `admin.roles` or defaults. */
4
+ export declare function studioAdminRoles(cfg: SupatypeProjectConfig): string[];
5
+ /** Merge `adminRoles` into engine admin-config JSON for Studio and supatype-server. */
6
+ export declare function withAdminRoles(admin: unknown, cfg: SupatypeProjectConfig): Record<string, unknown>;
7
+ //# sourceMappingURL=studio-admin-roles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-admin-roles.d.ts","sourceRoot":"","sources":["../src/studio-admin-roles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,eAAO,MAAM,0BAA0B,sCAAuC,CAAA;AAE9E,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAIrE;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGlG"}