@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,4 @@
1
+
2
+ > @supatype/cli@0.1.0-alpha.10 build /home/runner/work/supatype/supatype/packages/cli
3
+ > tsc --project tsconfig.json && node --input-type=module -e "import{cpSync,mkdirSync}from'node:fs';const a='dist/assets';mkdirSync(a,{recursive:true});cpSync('assets/supatype-logo-wordmark.ascii.txt',a+'/supatype-logo-wordmark.ascii.txt')"
4
+
@@ -0,0 +1,221 @@
1
+
2
+ > @supatype/cli@0.1.0-alpha.10 test /home/runner/work/supatype/supatype/packages/cli
3
+ > vitest run
4
+
5
+
6
+  RUN  v4.0.18 /home/runner/work/supatype/supatype/packages/cli
7
+
8
+ ✓ tests/type-extractor.test.ts (34 tests) 160ms
9
+ ✓ tests/runtime-contract.test.ts (29 tests) 138ms
10
+ stdout | tests/init.test.ts > scaffold() > creates all expected files
11
+  created package.json
12
+ created supatype.config.ts
13
+ created schema/index.ts
14
+ created .env
15
+ created seed.ts
16
+ created seeds/.gitkeep
17
+ created public/.gitkeep
18
+ created .gitignore
19
+
20
+ stdout | tests/init.test.ts > scaffold() > supatype.config.ts embeds the project name and exports defineConfig
21
+  created package.json
22
+ created supatype.config.ts
23
+ created schema/index.ts
24
+ created .env
25
+ created seed.ts
26
+ created seeds/.gitkeep
27
+ created public/.gitkeep
28
+ created .gitignore
29
+
30
+ stdout | tests/init.test.ts > scaffold() > package.json includes @supatype/cli and @supatype/types
31
+  created package.json
32
+ created supatype.config.ts
33
+ created schema/index.ts
34
+ created .env
35
+ created seed.ts
36
+ created seeds/.gitkeep
37
+ created public/.gitkeep
38
+ created .gitignore
39
+
40
+ stdout | tests/init.test.ts > scaffold() > skips package.json when it already exists
41
+  skipped package.json (already exists)
42
+ created supatype.config.ts
43
+ created schema/index.ts
44
+ created .env
45
+ created seed.ts
46
+ created seeds/.gitkeep
47
+ created public/.gitkeep
48
+ created .gitignore
49
+
50
+ stdout | tests/init.test.ts > scaffold() > supatype.config.ts documents self-host workflow
51
+  created package.json
52
+ created supatype.config.ts
53
+ created schema/index.ts
54
+ created .env
55
+ created seed.ts
56
+ created seeds/.gitkeep
57
+ created public/.gitkeep
58
+ created .gitignore
59
+
60
+ stdout | tests/init.test.ts > scaffold() > .env contains DATABASE_URL, JWT_SECRET, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB
61
+  created package.json
62
+ created supatype.config.ts
63
+ created schema/index.ts
64
+ created .env
65
+ created seed.ts
66
+ created seeds/.gitkeep
67
+ created public/.gitkeep
68
+ created .gitignore
69
+
70
+ stdout | tests/init.test.ts > scaffold() > .env contains ANON_KEY, SERVICE_ROLE_KEY, and SITE_URL placeholders
71
+  created package.json
72
+ created supatype.config.ts
73
+ created schema/index.ts
74
+ created .env
75
+ created seed.ts
76
+ created seeds/.gitkeep
77
+ created public/.gitkeep
78
+ created .gitignore
79
+
80
+ stdout | tests/init.test.ts > scaffold() > schema/index.ts exports a User model using RFC v2 Model<>
81
+  created package.json
82
+ created supatype.config.ts
83
+ created schema/index.ts
84
+ created .env
85
+ created seed.ts
86
+ created seeds/.gitkeep
87
+ created public/.gitkeep
88
+ created .gitignore
89
+
90
+ stdout | tests/init.test.ts > scaffold() > .gitignore excludes .env, node_modules, and engine binary
91
+  created package.json
92
+ created supatype.config.ts
93
+ created schema/index.ts
94
+ created .env
95
+ created seed.ts
96
+ created seeds/.gitkeep
97
+ created public/.gitkeep
98
+ created .gitignore
99
+
100
+ stdout | tests/init.test.ts > scaffold() > seed.ts references the project name
101
+  created package.json
102
+ created supatype.config.ts
103
+ created schema/index.ts
104
+ created .env
105
+ created seed.ts
106
+ created seeds/.gitkeep
107
+ created public/.gitkeep
108
+ created .gitignore
109
+
110
+ stdout | tests/init.test.ts > scaffold() > different project names produce different config bodies
111
+  created package.json
112
+ created supatype.config.ts
113
+ created schema/index.ts
114
+ created .env
115
+ created seed.ts
116
+ created seeds/.gitkeep
117
+ created public/.gitkeep
118
+ created .gitignore
119
+ created package.json
120
+ created supatype.config.ts
121
+ created schema/index.ts
122
+ created .env
123
+ created seed.ts
124
+ created seeds/.gitkeep
125
+ created public/.gitkeep
126
+ created .gitignore
127
+
128
+ ✓ tests/init.test.ts (11 tests) 41ms
129
+
130
+
131
+
132
+
133
+ ✓ tests/dev-ui.test.ts (15 tests) 70ms
134
+
135
+ ✓ tests/pull-utils.test.ts (49 tests) 13ms
136
+ ✓ tests/config.test.ts (16 tests) 4238ms
137
+ ✓ loads a valid supatype.config.ts (plain export default, no package imports)  637ms
138
+ ✓ normalizes shorthand schema string to { path, pg_schema }  539ms
139
+ ✓ loads a supatype.config.js (plain ESM)  475ms
140
+ ✓ loads config without a versions section (latest by default)  499ms
141
+ ✓ prefers supatype.config.ts over supatype.config.js when both exist  489ms
142
+ ✓ supports optional output field in config  561ms
143
+ ✓ merges supatype.local.config.ts over base  1027ms
144
+ ✓ tests/binary-cache-cloud-overrides.test.ts (11 tests) 16ms
145
+ ✓ tests/cached-artifact-format.test.ts (7 tests) 13ms
146
+ ✓ tests/tsx-runner.test.ts (7 tests) 2794ms
147
+ ✓ evaluates a simple expression and returns stdout  374ms
148
+ ✓ evaluates TypeScript syntax (type annotations)  390ms
149
+ ✓ can serialize a JSON object to stdout  383ms
150
+ ✓ returns non-zero exit code on syntax error  402ms
151
+ ✓ returns non-zero exit code on runtime error  381ms
152
+ ✓ captures stderr separately from stdout  371ms
153
+ ✓ runs a .ts file and returns its stdout  487ms
154
+ ✓ tests/augmentation-generator.test.ts (3 tests) 18ms
155
+ ✓ tests/type-resolver.test.ts (2 tests) 14ms
156
+ ✓ tests/engine-push-output.test.ts (7 tests) 6ms
157
+ ✓ tests/ensure-binary.test.ts (2 tests) 7ms
158
+ stdout | tests/app-command.test.ts > supatype app add --static > sets app.mode=static and static_dir in supatype.config.ts
159
+  created package.json
160
+ created supatype.config.ts
161
+ created schema/index.ts
162
+ created .env
163
+ created seed.ts
164
+ created seeds/.gitkeep
165
+ created public/.gitkeep
166
+ created .gitignore
167
+
168
+ stdout | tests/app-command.test.ts > supatype app add --static > creates the static directory when missing
169
+  created package.json
170
+ created supatype.config.ts
171
+ created schema/index.ts
172
+ created .env
173
+ created seed.ts
174
+ created seeds/.gitkeep
175
+ created public/.gitkeep
176
+ created .gitignore
177
+
178
+ ✓ tests/app-command.test.ts (2 tests) 2250ms
179
+ ✓ sets app.mode=static and static_dir in supatype.config.ts  1094ms
180
+ ✓ creates the static directory when missing  1154ms
181
+ ✓ tests/normalize-admin-config.test.ts (1 test) 9ms
182
+ ✓ tests/docker-postgres.test.ts (5 tests) 5ms
183
+ ✓ tests/proxy-dev-app.test.ts (3 tests) 4ms
184
+ ✓ tests/keys.test.ts (11 tests) 12151ms
185
+ ✓ exits 0 with --secret  1059ms
186
+ ✓ outputs ANON_KEY= line  1070ms
187
+ ✓ outputs SERVICE_ROLE_KEY= line  1056ms
188
+ ✓ ANON_KEY is a valid three-part JWT  1107ms
189
+ ✓ SERVICE_ROLE_KEY payload has role: service_role  1014ms
190
+ ✓ JWT has exp in the future  993ms
191
+ ✓ --exp-years changes the expiry window  2075ms
192
+ ✓ reads JWT_SECRET from environment variable  959ms
193
+ ✓ reads JWT_SECRET from .env file  925ms
194
+ ✓ exits non-zero when no secret is available  1047ms
195
+ ✓ keys --help shows --secret and --exp-years options  837ms
196
+ ✓ tests/studio-admin-roles.test.ts (3 tests) 6ms
197
+ ✓ tests/release-pins.test.ts (2 tests) 3ms
198
+ ✓ tests/seed-discover.test.ts (2 tests) 20ms
199
+ ✓ tests/pg-spawn-env.test.ts (2 tests) 4ms
200
+ ✓ tests/postgres-archive-tag.test.ts (1 test) 3ms
201
+ ✓ tests/migrate-from-v1.test.ts (1 test) 13ms
202
+ ✓ tests/cli-help.test.ts (13 tests) 12581ms
203
+ ✓ --help lists all top-level commands  1038ms
204
+ ✓ --version prints a semver string  969ms
205
+ ✓ self-update --help describes the command  972ms
206
+ ✓ init --help describes the init command  918ms
207
+ ✓ push --help describes the push command and --yes flag  981ms
208
+ ✓ diff --help describes the diff command  954ms
209
+ ✓ pull --help describes deprecated pull command  1017ms
210
+ ✓ reset --help shows --yes flag  1000ms
211
+ ✓ app --help describes the app command with add/remove subcommands  1050ms
212
+ ✓ app add --help shows --static and --port options  929ms
213
+ ✓ self-host --help shows compose only (legacy commands hidden)  908ms
214
+ ✓ self-host compose --help shows compose subcommands  987ms
215
+ ✓ unknown command exits non-zero  853ms
216
+
217
+  Test Files  25 passed (25)
218
+  Tests  239 passed (239)
219
+  Start at  20:06:53
220
+  Duration  16.14s (transform 2.52s, setup 0ms, import 8.15s, tests 34.58s, environment 7ms)
221
+
@@ -0,0 +1,4 @@
1
+
2
+ > @supatype/cli@0.1.0-alpha.10 typecheck /home/runner/work/supatype/supatype/packages/cli
3
+ > tsc --project tsconfig.json --noEmit
4
+
@@ -0,0 +1,6 @@
1
+ __
2
+ _______ ______ ____ _/ /___ ______ ___
3
+ / ___/ / / / __ \/ __ `/ __/ / / / __ \/ _ \
4
+ (__ ) /_/ / /_/ / /_/ / /_/ /_/ / /_/ / __/
5
+ /____/\__,_/ .___/\__,_/\__/\__, / .___/\___/
6
+ /_/ /____/_/
@@ -0,0 +1,2 @@
1
+ import { run } from "../src/cli.js"
2
+ run()
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import("../dist/cli.js").then((m) => m.run()).catch((e) => {
3
+ console.error(e?.message ?? e)
4
+ process.exit(1)
5
+ })
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Framework auto-detection and build configuration.
3
+ * Inspects package.json to determine the framework, then resolves
4
+ * build command, output directory, and SPA mode defaults.
5
+ */
6
+ import type { AppConfig, AppFramework } from "../config.js";
7
+ export interface ResolvedAppConfig {
8
+ framework: AppFramework;
9
+ directory: string;
10
+ buildCommand: string;
11
+ outputDirectory: string;
12
+ spa: boolean;
13
+ env: Record<string, string>;
14
+ headers: Record<string, string>;
15
+ }
16
+ /**
17
+ * Detect the framework from package.json dependencies.
18
+ */
19
+ export declare function detectFramework(appDir: string): AppFramework | undefined;
20
+ /**
21
+ * Detect if the project is a monorepo.
22
+ */
23
+ export declare function detectMonorepo(cwd: string): {
24
+ isMonorepo: boolean;
25
+ tool?: string;
26
+ };
27
+ /**
28
+ * Detect package manager from lockfiles.
29
+ */
30
+ export declare function detectPackageManager(dir: string): "npm" | "pnpm" | "yarn";
31
+ /**
32
+ * Resolve the full app configuration from user config + auto-detection.
33
+ */
34
+ export declare function resolveAppConfig(appConfig: AppConfig | undefined, cwd: string): ResolvedAppConfig;
35
+ /**
36
+ * Validate that the framework is configured for static output.
37
+ * Returns an error message if SSR mode is detected.
38
+ */
39
+ export declare function validateStaticMode(framework: AppFramework, appDir: string): string | null;
40
+ /**
41
+ * Validate the build output.
42
+ */
43
+ export declare function validateBuildOutput(outputDir: string, maxSizeMb: number): string | null;
44
+ //# sourceMappingURL=framework.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../src/app/framework.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3D,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,YAAY,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,GAAG,EAAE,OAAO,CAAA;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AA6BD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAmBxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAKlF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAIzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,GAAG,EAAE,MAAM,GACV,iBAAiB,CAwCnB;AASD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgDzF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBvF"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Framework auto-detection and build configuration.
3
+ * Inspects package.json to determine the framework, then resolves
4
+ * build command, output directory, and SPA mode defaults.
5
+ */
6
+ import { existsSync, readFileSync } from "node:fs";
7
+ import { join, resolve } from "node:path";
8
+ const FRAMEWORK_DEFAULTS = {
9
+ nextjs: { buildCommand: "next build", outputDirectory: "out", spa: false },
10
+ astro: { buildCommand: "astro build", outputDirectory: "dist", spa: false },
11
+ vite: { buildCommand: "vite build", outputDirectory: "dist", spa: true },
12
+ "remix-spa": { buildCommand: "remix vite:build", outputDirectory: "build/client", spa: true },
13
+ sveltekit: { buildCommand: "vite build", outputDirectory: "build", spa: false },
14
+ nuxt: { buildCommand: "nuxt generate", outputDirectory: "dist", spa: false },
15
+ static: { buildCommand: "", outputDirectory: ".", spa: false },
16
+ };
17
+ // Maps package.json dependency names to framework identifiers
18
+ const FRAMEWORK_DETECTION = [
19
+ { dep: "next", framework: "nextjs" },
20
+ { dep: "astro", framework: "astro" },
21
+ { dep: "@remix-run/react", framework: "remix-spa" },
22
+ { dep: "@sveltejs/kit", framework: "sveltekit" },
23
+ { dep: "nuxt", framework: "nuxt" },
24
+ // Vite last — many frameworks use Vite under the hood
25
+ { dep: "vite", framework: "vite" },
26
+ ];
27
+ /**
28
+ * Detect the framework from package.json dependencies.
29
+ */
30
+ export function detectFramework(appDir) {
31
+ const pkgPath = join(appDir, "package.json");
32
+ if (!existsSync(pkgPath))
33
+ return undefined;
34
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
35
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
36
+ for (const { dep, framework } of FRAMEWORK_DETECTION) {
37
+ if (dep in allDeps)
38
+ return framework;
39
+ }
40
+ // Check for plain HTML
41
+ if (existsSync(join(appDir, "index.html")))
42
+ return "static";
43
+ return undefined;
44
+ }
45
+ /**
46
+ * Detect if the project is a monorepo.
47
+ */
48
+ export function detectMonorepo(cwd) {
49
+ if (existsSync(join(cwd, "turbo.json")))
50
+ return { isMonorepo: true, tool: "turbo" };
51
+ if (existsSync(join(cwd, "pnpm-workspace.yaml")))
52
+ return { isMonorepo: true, tool: "pnpm" };
53
+ if (existsSync(join(cwd, "nx.json")))
54
+ return { isMonorepo: true, tool: "nx" };
55
+ return { isMonorepo: false };
56
+ }
57
+ /**
58
+ * Detect package manager from lockfiles.
59
+ */
60
+ export function detectPackageManager(dir) {
61
+ if (existsSync(join(dir, "pnpm-lock.yaml")))
62
+ return "pnpm";
63
+ if (existsSync(join(dir, "yarn.lock")))
64
+ return "yarn";
65
+ return "npm";
66
+ }
67
+ /**
68
+ * Resolve the full app configuration from user config + auto-detection.
69
+ */
70
+ export function resolveAppConfig(appConfig, cwd) {
71
+ const directory = resolve(cwd, appConfig?.directory || ".");
72
+ // Framework detection
73
+ let framework = appConfig?.framework;
74
+ if (!framework) {
75
+ framework = detectFramework(directory);
76
+ if (!framework) {
77
+ throw new Error("Could not detect frontend framework.\n" +
78
+ "Set app.framework in supatype.config.ts, or ensure package.json is present.");
79
+ }
80
+ }
81
+ const defaults = FRAMEWORK_DEFAULTS[framework];
82
+ // Build command
83
+ let buildCommand = appConfig?.buildCommand || defaults.buildCommand;
84
+ const mono = detectMonorepo(cwd);
85
+ if (mono.isMonorepo && mono.tool === "turbo" && !appConfig?.buildCommand) {
86
+ // In a Turborepo, run build via turbo from workspace root
87
+ const appDirRelative = appConfig?.directory || ".";
88
+ if (appDirRelative !== ".") {
89
+ const pkgName = getPackageName(directory);
90
+ if (pkgName) {
91
+ buildCommand = `turbo run build --filter=${pkgName}`;
92
+ }
93
+ }
94
+ }
95
+ return {
96
+ framework,
97
+ directory,
98
+ buildCommand,
99
+ outputDirectory: resolve(directory, appConfig?.outputDirectory || defaults.outputDirectory),
100
+ spa: appConfig?.spa ?? defaults.spa,
101
+ env: appConfig?.env ?? {},
102
+ headers: appConfig?.headers ?? {},
103
+ };
104
+ }
105
+ function getPackageName(dir) {
106
+ const pkgPath = join(dir, "package.json");
107
+ if (!existsSync(pkgPath))
108
+ return undefined;
109
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
110
+ return pkg.name;
111
+ }
112
+ /**
113
+ * Validate that the framework is configured for static output.
114
+ * Returns an error message if SSR mode is detected.
115
+ */
116
+ export function validateStaticMode(framework, appDir) {
117
+ if (framework === "nextjs") {
118
+ // Check for output: 'export' in next.config.js/mjs/ts
119
+ for (const name of ["next.config.js", "next.config.mjs", "next.config.ts"]) {
120
+ const configPath = join(appDir, name);
121
+ if (existsSync(configPath)) {
122
+ const content = readFileSync(configPath, "utf8");
123
+ if (!content.includes("export")) {
124
+ return ("Supatype currently supports Next.js static export only.\n" +
125
+ "Add `output: 'export'` to your next.config.js,\n" +
126
+ "or deploy your frontend to Vercel for SSR support.");
127
+ }
128
+ }
129
+ }
130
+ }
131
+ if (framework === "astro") {
132
+ const configPath = join(appDir, "astro.config.mjs");
133
+ if (existsSync(configPath)) {
134
+ const content = readFileSync(configPath, "utf8");
135
+ if (content.includes("output: 'server'") || content.includes("output: \"server\"")) {
136
+ return ("Supatype currently supports Astro static sites only.\n" +
137
+ "Remove `output: 'server'` from astro.config.mjs,\n" +
138
+ "or deploy your frontend separately for SSR support.");
139
+ }
140
+ }
141
+ }
142
+ if (framework === "sveltekit") {
143
+ const pkgPath = join(appDir, "package.json");
144
+ if (existsSync(pkgPath)) {
145
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
146
+ if (!pkg.devDependencies?.["@sveltejs/adapter-static"]) {
147
+ return ("Supatype requires @sveltejs/adapter-static for SvelteKit.\n" +
148
+ "Install it: npm install -D @sveltejs/adapter-static");
149
+ }
150
+ }
151
+ }
152
+ return null;
153
+ }
154
+ /**
155
+ * Validate the build output.
156
+ */
157
+ export function validateBuildOutput(outputDir, maxSizeMb) {
158
+ if (!existsSync(outputDir)) {
159
+ return `Build output directory not found: ${outputDir}`;
160
+ }
161
+ // Check for at least one HTML file
162
+ const hasHtml = findHtmlFile(outputDir);
163
+ if (!hasHtml) {
164
+ return `No HTML files found in build output: ${outputDir}`;
165
+ }
166
+ // Check total size
167
+ const sizeMb = getDirSizeMb(outputDir);
168
+ if (sizeMb > maxSizeMb) {
169
+ return `Build output ${sizeMb.toFixed(1)}MB exceeds limit of ${maxSizeMb}MB`;
170
+ }
171
+ if (sizeMb > 500) {
172
+ console.warn(`Warning: Build output is ${sizeMb.toFixed(1)}MB. This may include unoptimised assets or node_modules.`);
173
+ }
174
+ return null;
175
+ }
176
+ function findHtmlFile(dir) {
177
+ const { readdirSync, statSync } = require("node:fs");
178
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
179
+ if (entry.isFile() && entry.name.endsWith(".html"))
180
+ return true;
181
+ if (entry.isDirectory()) {
182
+ if (findHtmlFile(join(dir, entry.name)))
183
+ return true;
184
+ }
185
+ }
186
+ return false;
187
+ }
188
+ function getDirSizeMb(dir) {
189
+ const { readdirSync, statSync } = require("node:fs");
190
+ let size = 0;
191
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
192
+ const path = join(dir, entry.name);
193
+ if (entry.isFile())
194
+ size += statSync(path).size;
195
+ else if (entry.isDirectory())
196
+ size += getDirSizeMb(path) * 1024 * 1024;
197
+ }
198
+ return size / (1024 * 1024);
199
+ }
200
+ //# sourceMappingURL=framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework.js","sourceRoot":"","sources":["../../src/app/framework.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmBzC,MAAM,kBAAkB,GAA4C;IAClE,MAAM,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;IAC1E,KAAK,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE;IAC3E,IAAI,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IACxE,WAAW,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE;IAC7F,SAAS,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE;IAC/E,IAAI,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE;IAC5E,MAAM,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;CAC/D,CAAA;AAED,8DAA8D;AAC9D,MAAM,mBAAmB,GAAoD;IAC3E,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE;IACpC,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE;IACpC,EAAE,GAAG,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE;IACnD,EAAE,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE;IAChD,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;IAClC,sDAAsD;IACtD,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;CACnC,CAAA;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC5C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAA;IAE1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAGnD,CAAA;IAED,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAA;IAE/D,KAAK,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,mBAAmB,EAAE,CAAC;QACrD,IAAI,GAAG,IAAI,OAAO;YAAE,OAAO,SAAS,CAAA;IACtC,CAAC;IAED,uBAAuB;IACvB,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAA;IAE3D,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IACnF,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAC3F,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAC7E,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,MAAM,CAAA;IAC1D,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,MAAM,CAAA;IACrD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAgC,EAChC,GAAW;IAEX,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,IAAI,GAAG,CAAC,CAAA;IAE3D,sBAAsB;IACtB,IAAI,SAAS,GAAG,SAAS,EAAE,SAAS,CAAA;IACpC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,wCAAwC;gBACxC,6EAA6E,CAC9E,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAA;IAE9C,gBAAgB;IAChB,IAAI,YAAY,GAAG,SAAS,EAAE,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAA;IACnE,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC;QACzE,0DAA0D;QAC1D,MAAM,cAAc,GAAG,SAAS,EAAE,SAAS,IAAI,GAAG,CAAA;QAClD,IAAI,cAAc,KAAK,GAAG,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;YACzC,IAAI,OAAO,EAAE,CAAC;gBACZ,YAAY,GAAG,4BAA4B,OAAO,EAAE,CAAA;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS;QACT,SAAS;QACT,YAAY;QACZ,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC;QAC3F,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG;QACnC,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE;QACzB,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,EAAE;KAClC,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAA;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAsB,CAAA;IAC1E,OAAO,GAAG,CAAC,IAAI,CAAA;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAuB,EAAE,MAAc;IACxE,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,sDAAsD;QACtD,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,CAAC;YAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACrC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;gBAChD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAChC,OAAO,CACL,2DAA2D;wBAC3D,kDAAkD;wBAClD,oDAAoD,CACrD,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;QACnD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACnF,OAAO,CACL,wDAAwD;oBACxD,oDAAoD;oBACpD,qDAAqD,CACtD,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;QAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAEnD,CAAA;YACD,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC;gBACvD,OAAO,CACL,6DAA6D;oBAC7D,qDAAqD,CACtD,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,SAAiB;IACtE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,qCAAqC,SAAS,EAAE,CAAA;IACzD,CAAC;IAED,mCAAmC;IACnC,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,wCAAwC,SAAS,EAAE,CAAA;IAC5D,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;QACvB,OAAO,gBAAgB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,SAAS,IAAI,CAAA;IAC9E,CAAC;IAED,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CACV,4BAA4B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,0DAA0D,CACxG,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;IAChF,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;QAC/D,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAA;QACtD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;IAChF,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,KAAK,CAAC,MAAM,EAAE;YAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA;aAC1C,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;IACxE,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;AAC7B,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Spawn the frontend dev server during `supatype dev` when app.mode is proxy.
3
+ */
4
+ import { ProcessManager } from "../process-manager.js";
5
+ import { type SupatypeProjectConfig } from "../project-config.js";
6
+ /** package.json script name to run (only when app.mode is proxy). */
7
+ export declare function resolveProxyDevScript(config: SupatypeProjectConfig): string | null;
8
+ /**
9
+ * Start the configured package.json script for proxy dev.
10
+ * Returns null when not in proxy mode or when the script is missing.
11
+ */
12
+ export declare function startProxyDevApp(cwd: string, config: SupatypeProjectConfig, pidDir: string): ProcessManager | null;
13
+ //# sourceMappingURL=proxy-dev-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-dev-app.d.ts","sourceRoot":"","sources":["../../src/app/proxy-dev-app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAIxF,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,GAAG,IAAI,CAIlF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,qBAAqB,EAC7B,MAAM,EAAE,MAAM,GACb,cAAc,GAAG,IAAI,CAuCvB"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Spawn the frontend dev server during `supatype dev` when app.mode is proxy.
3
+ */
4
+ import { existsSync, readFileSync } from "node:fs";
5
+ import { join } from "node:path";
6
+ import { detectPackageManager } from "./framework.js";
7
+ import { appendDevTaskLog } from "../dev-session.js";
8
+ import { ProcessManager } from "../process-manager.js";
9
+ import { projectRootFromConfig } from "../project-config.js";
10
+ const DEFAULT_PROXY_DEV_SCRIPT = "start";
11
+ /** package.json script name to run (only when app.mode is proxy). */
12
+ export function resolveProxyDevScript(config) {
13
+ if (config.app?.mode !== "proxy")
14
+ return null;
15
+ const script = config.app.start?.trim();
16
+ return script && script.length > 0 ? script : DEFAULT_PROXY_DEV_SCRIPT;
17
+ }
18
+ /**
19
+ * Start the configured package.json script for proxy dev.
20
+ * Returns null when not in proxy mode or when the script is missing.
21
+ */
22
+ export function startProxyDevApp(cwd, config, pidDir) {
23
+ const script = resolveProxyDevScript(config);
24
+ if (!script)
25
+ return null;
26
+ const appDir = projectRootFromConfig(config, cwd);
27
+ const pkgPath = join(appDir, "package.json");
28
+ if (!existsSync(pkgPath)) {
29
+ console.warn(`[supatype] app.mode=proxy but no package.json at ${appDir}; skipping dev app`);
30
+ return null;
31
+ }
32
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
33
+ if (!pkg.scripts?.[script]) {
34
+ console.warn(`[supatype] app.mode=proxy: package.json has no "${script}" script.\n` +
35
+ ` Add "scripts.${script}" or set app.start in supatype.config.ts`);
36
+ return null;
37
+ }
38
+ const pm = detectPackageManager(appDir);
39
+ const bin = pm;
40
+ const args = pm === "yarn" ? [script] : ["run", script];
41
+ // pnpm/npm/yarn are .cmd shims on Windows — spawn via shell so PATH resolution works.
42
+ const useShell = process.platform === "win32";
43
+ appendDevTaskLog("app", "app", `Proxy mode: running ${bin} ${args.join(" ")} (${appDir})`);
44
+ const manager = new ProcessManager(bin, args, {
45
+ label: "app",
46
+ pidDir,
47
+ cwd: appDir,
48
+ colour: "\x1b[33m",
49
+ shell: useShell,
50
+ });
51
+ manager.start();
52
+ return manager;
53
+ }
54
+ //# sourceMappingURL=proxy-dev-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-dev-app.js","sourceRoot":"","sources":["../../src/app/proxy-dev-app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAA8B,MAAM,sBAAsB,CAAA;AAExF,MAAM,wBAAwB,GAAG,OAAO,CAAA;AAExC,qEAAqE;AACrE,MAAM,UAAU,qBAAqB,CAAC,MAA6B;IACjE,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;IACvC,OAAO,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAA;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAW,EACX,MAA6B,EAC7B,MAAc;IAEd,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAExB,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC5C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,oDAAoD,MAAM,oBAAoB,CAAC,CAAA;QAC5F,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAEnD,CAAA;IACD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CACV,mDAAmD,MAAM,aAAa;YACpE,kBAAkB,MAAM,0CAA0C,CACrE,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;IACvC,MAAM,GAAG,GAAG,EAAE,CAAA;IACd,MAAM,IAAI,GAAG,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACvD,sFAAsF;IACtF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;IAE7C,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,uBAAuB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,CAAA;IAE1F,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE;QAC5C,KAAK,EAAE,KAAK;QACZ,MAAM;QACN,GAAG,EAAE,MAAM;QACX,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAA;IACF,OAAO,CAAC,KAAK,EAAE,CAAA;IACf,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface UpdateAppConfigInput {
2
+ mode: "none" | "static" | "proxy";
3
+ staticDir?: string;
4
+ upstream?: string;
5
+ }
6
+ export declare function updateAppConfigInProject(cwd: string, input: UpdateAppConfigInput): string;
7
+ //# sourceMappingURL=app-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-config.d.ts","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAQzF"}