gorsee 0.2.3 → 0.2.5

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 (532) hide show
  1. package/README.md +261 -213
  2. package/dist-pkg/ai/artifact-lifecycle.d.ts +25 -0
  3. package/dist-pkg/ai/artifact-lifecycle.js +98 -0
  4. package/dist-pkg/ai/bridge.d.ts +26 -0
  5. package/dist-pkg/ai/bridge.js +82 -0
  6. package/dist-pkg/ai/bundle.d.ts +46 -0
  7. package/dist-pkg/ai/bundle.js +247 -0
  8. package/dist-pkg/ai/contracts.d.ts +1 -0
  9. package/dist-pkg/ai/contracts.js +1 -0
  10. package/dist-pkg/ai/ide.d.ts +37 -0
  11. package/dist-pkg/ai/ide.js +56 -0
  12. package/dist-pkg/ai/index.d.ts +85 -0
  13. package/dist-pkg/ai/index.js +267 -0
  14. package/dist-pkg/ai/json.d.ts +6 -0
  15. package/dist-pkg/ai/json.js +14 -0
  16. package/dist-pkg/ai/mcp.d.ts +28 -0
  17. package/dist-pkg/ai/mcp.js +152 -0
  18. package/dist-pkg/ai/session-pack.d.ts +28 -0
  19. package/dist-pkg/ai/session-pack.js +57 -0
  20. package/dist-pkg/ai/store.d.ts +67 -0
  21. package/dist-pkg/ai/store.js +174 -0
  22. package/dist-pkg/ai/summary.d.ts +57 -0
  23. package/dist-pkg/ai/summary.js +148 -0
  24. package/dist-pkg/ai/watch.d.ts +15 -0
  25. package/dist-pkg/ai/watch.js +66 -0
  26. package/dist-pkg/auth/action-tokens.d.ts +50 -0
  27. package/dist-pkg/auth/action-tokens.js +79 -0
  28. package/dist-pkg/auth/index.d.ts +70 -0
  29. package/dist-pkg/auth/index.js +199 -0
  30. package/dist-pkg/auth/redis-session-store.d.ts +7 -0
  31. package/dist-pkg/auth/redis-session-store.js +42 -0
  32. package/dist-pkg/auth/signing.d.ts +4 -0
  33. package/dist-pkg/auth/signing.js +33 -0
  34. package/dist-pkg/auth/sqlite-session-store.d.ts +12 -0
  35. package/dist-pkg/auth/sqlite-session-store.js +83 -0
  36. package/dist-pkg/auth/store-utils.d.ts +2 -0
  37. package/dist-pkg/auth/store-utils.js +20 -0
  38. package/dist-pkg/bin/gorsee.js +2 -0
  39. package/dist-pkg/build/backends/experimental-rolldown.d.ts +6 -0
  40. package/dist-pkg/build/backends/experimental-rolldown.js +9 -0
  41. package/dist-pkg/build/backends/register.d.ts +7 -0
  42. package/dist-pkg/build/backends/register.js +24 -0
  43. package/dist-pkg/build/backends/rolldown.d.ts +16 -0
  44. package/dist-pkg/build/backends/rolldown.js +176 -0
  45. package/dist-pkg/build/client-backend.d.ts +31 -0
  46. package/dist-pkg/build/client-backend.js +97 -0
  47. package/dist-pkg/build/client.d.ts +12 -0
  48. package/dist-pkg/build/client.js +93 -0
  49. package/dist-pkg/build/css-modules.d.ts +10 -0
  50. package/dist-pkg/build/css-modules.js +51 -0
  51. package/dist-pkg/build/devalue-parse.d.ts +1 -0
  52. package/dist-pkg/build/devalue-parse.js +1 -0
  53. package/dist-pkg/build/diagnostics.d.ts +20 -0
  54. package/dist-pkg/build/diagnostics.js +35 -0
  55. package/dist-pkg/build/fixtures.d.ts +7 -0
  56. package/dist-pkg/build/fixtures.js +60 -0
  57. package/dist-pkg/build/framework-imports.d.ts +4 -0
  58. package/dist-pkg/build/framework-imports.js +58 -0
  59. package/dist-pkg/build/init.d.ts +1 -0
  60. package/dist-pkg/build/init.js +6 -0
  61. package/dist-pkg/build/manifest.d.ts +3 -0
  62. package/dist-pkg/build/manifest.js +23 -0
  63. package/dist-pkg/build/parity.d.ts +32 -0
  64. package/dist-pkg/build/parity.js +71 -0
  65. package/dist-pkg/build/plugin.d.ts +11 -0
  66. package/dist-pkg/build/plugin.js +8 -0
  67. package/dist-pkg/build/readiness.d.ts +11 -0
  68. package/dist-pkg/build/readiness.js +18 -0
  69. package/dist-pkg/build/route-client-transform.d.ts +17 -0
  70. package/dist-pkg/build/route-client-transform.js +48 -0
  71. package/dist-pkg/build/route-metadata.d.ts +6 -0
  72. package/dist-pkg/build/route-metadata.js +8 -0
  73. package/dist-pkg/build/rpc-transform.d.ts +1 -0
  74. package/dist-pkg/build/rpc-transform.js +44 -0
  75. package/dist-pkg/build/server-bundle.d.ts +4 -0
  76. package/dist-pkg/build/server-bundle.js +261 -0
  77. package/dist-pkg/build/server-strip.d.ts +2 -0
  78. package/dist-pkg/build/server-strip.js +32 -0
  79. package/dist-pkg/build/ssg.d.ts +12 -0
  80. package/dist-pkg/build/ssg.js +36 -0
  81. package/dist-pkg/cli/bun-plugin.d.ts +2 -0
  82. package/dist-pkg/cli/bun-plugin.js +14 -0
  83. package/dist-pkg/cli/canonical-import-rewrite.d.ts +18 -0
  84. package/dist-pkg/cli/canonical-import-rewrite.js +94 -0
  85. package/dist-pkg/cli/canonical-imports.d.ts +8 -0
  86. package/dist-pkg/cli/canonical-imports.js +131 -0
  87. package/dist-pkg/cli/check-ast.d.ts +20 -0
  88. package/dist-pkg/cli/check-ast.js +126 -0
  89. package/dist-pkg/cli/cmd-ai.d.ts +4 -0
  90. package/dist-pkg/cli/cmd-ai.js +290 -0
  91. package/dist-pkg/cli/cmd-build.d.ts +12 -0
  92. package/dist-pkg/cli/cmd-build.js +198 -0
  93. package/dist-pkg/cli/cmd-check.d.ts +25 -0
  94. package/dist-pkg/cli/cmd-check.js +573 -0
  95. package/dist-pkg/cli/cmd-create.d.ts +6 -0
  96. package/dist-pkg/cli/cmd-create.js +600 -0
  97. package/dist-pkg/cli/cmd-deploy.d.ts +6 -0
  98. package/dist-pkg/cli/cmd-deploy.js +381 -0
  99. package/dist-pkg/cli/cmd-dev.d.ts +5 -0
  100. package/dist-pkg/cli/cmd-dev.js +5 -0
  101. package/dist-pkg/cli/cmd-docs.d.ts +50 -0
  102. package/dist-pkg/cli/cmd-docs.js +122 -0
  103. package/dist-pkg/cli/cmd-generate.d.ts +12 -0
  104. package/dist-pkg/cli/cmd-generate.js +320 -0
  105. package/dist-pkg/cli/cmd-migrate.d.ts +7 -0
  106. package/dist-pkg/cli/cmd-migrate.js +42 -0
  107. package/dist-pkg/cli/cmd-routes.d.ts +6 -0
  108. package/dist-pkg/cli/cmd-routes.js +24 -0
  109. package/dist-pkg/cli/cmd-start.d.ts +13 -0
  110. package/dist-pkg/cli/cmd-start.js +32 -0
  111. package/dist-pkg/cli/cmd-test.d.ts +20 -0
  112. package/dist-pkg/cli/cmd-test.js +103 -0
  113. package/dist-pkg/cli/cmd-typegen.d.ts +7 -0
  114. package/dist-pkg/cli/cmd-typegen.js +66 -0
  115. package/dist-pkg/cli/cmd-upgrade.d.ts +38 -0
  116. package/dist-pkg/cli/cmd-upgrade.js +232 -0
  117. package/dist-pkg/cli/context.d.ts +4 -0
  118. package/dist-pkg/cli/context.js +4 -0
  119. package/dist-pkg/cli/framework-md.d.ts +1 -0
  120. package/dist-pkg/cli/framework-md.js +391 -0
  121. package/dist-pkg/cli/index.d.ts +6 -0
  122. package/dist-pkg/cli/index.js +106 -0
  123. package/dist-pkg/cli/release-version.d.ts +2 -0
  124. package/dist-pkg/cli/release-version.js +33 -0
  125. package/dist-pkg/client.d.ts +16 -0
  126. package/dist-pkg/client.js +71 -0
  127. package/dist-pkg/compat.d.ts +1 -0
  128. package/dist-pkg/compat.js +1 -0
  129. package/dist-pkg/compiler/analysis-backend.d.ts +20 -0
  130. package/dist-pkg/compiler/analysis-backend.js +164 -0
  131. package/dist-pkg/compiler/backends/experimental-oxc.d.ts +6 -0
  132. package/dist-pkg/compiler/backends/experimental-oxc.js +9 -0
  133. package/dist-pkg/compiler/backends/oxc.d.ts +16 -0
  134. package/dist-pkg/compiler/backends/oxc.js +198 -0
  135. package/dist-pkg/compiler/backends/register.d.ts +7 -0
  136. package/dist-pkg/compiler/backends/register.js +22 -0
  137. package/dist-pkg/compiler/fixtures.d.ts +2 -0
  138. package/dist-pkg/compiler/fixtures.js +118 -0
  139. package/dist-pkg/compiler/init.d.ts +1 -0
  140. package/dist-pkg/compiler/init.js +6 -0
  141. package/dist-pkg/compiler/module-analysis.d.ts +13 -0
  142. package/dist-pkg/compiler/module-analysis.js +50 -0
  143. package/dist-pkg/compiler/parity.d.ts +35 -0
  144. package/dist-pkg/compiler/parity.js +89 -0
  145. package/dist-pkg/compiler/readiness.d.ts +11 -0
  146. package/dist-pkg/compiler/readiness.js +18 -0
  147. package/dist-pkg/compiler/route-facts.d.ts +34 -0
  148. package/dist-pkg/compiler/route-facts.js +75 -0
  149. package/dist-pkg/content/index.d.ts +27 -0
  150. package/dist-pkg/content/index.js +287 -0
  151. package/dist-pkg/db/index.d.ts +3 -0
  152. package/dist-pkg/db/index.js +6 -0
  153. package/dist-pkg/db/migrate.d.ts +7 -0
  154. package/dist-pkg/db/migrate.js +53 -0
  155. package/dist-pkg/db/postgres.d.ts +29 -0
  156. package/dist-pkg/db/postgres.js +59 -0
  157. package/dist-pkg/db/sqlite.d.ts +10 -0
  158. package/dist-pkg/db/sqlite.js +22 -0
  159. package/dist-pkg/deploy/cloudflare.d.ts +8 -0
  160. package/{src/deploy/cloudflare.ts → dist-pkg/deploy/cloudflare.js} +24 -26
  161. package/dist-pkg/deploy/conformance.d.ts +21 -0
  162. package/dist-pkg/deploy/conformance.js +98 -0
  163. package/dist-pkg/deploy/dockerfile.d.ts +3 -0
  164. package/{src/deploy/dockerfile.ts → dist-pkg/deploy/dockerfile.js} +8 -10
  165. package/dist-pkg/deploy/fly.d.ts +3 -0
  166. package/{src/deploy/fly.ts → dist-pkg/deploy/fly.js} +11 -12
  167. package/dist-pkg/deploy/index.d.ts +6 -0
  168. package/dist-pkg/deploy/index.js +26 -0
  169. package/dist-pkg/deploy/netlify.d.ts +2 -0
  170. package/{src/deploy/netlify.ts → dist-pkg/deploy/netlify.js} +17 -11
  171. package/dist-pkg/deploy/runtime.d.ts +2 -0
  172. package/dist-pkg/deploy/runtime.js +3 -0
  173. package/dist-pkg/deploy/vercel.d.ts +22 -0
  174. package/dist-pkg/deploy/vercel.js +53 -0
  175. package/dist-pkg/dev/error-overlay.d.ts +1 -0
  176. package/{src/dev/error-overlay.ts → dist-pkg/dev/error-overlay.js} +13 -23
  177. package/dist-pkg/dev/hmr.d.ts +30 -0
  178. package/dist-pkg/dev/hmr.js +86 -0
  179. package/dist-pkg/dev/partial-handler.d.ts +9 -0
  180. package/dist-pkg/dev/partial-handler.js +24 -0
  181. package/dist-pkg/dev/request-handler.d.ts +30 -0
  182. package/dist-pkg/dev/request-handler.js +67 -0
  183. package/dist-pkg/dev/watcher.d.ts +6 -0
  184. package/dist-pkg/dev/watcher.js +34 -0
  185. package/dist-pkg/dev.d.ts +11 -0
  186. package/dist-pkg/dev.js +268 -0
  187. package/dist-pkg/env/index.d.ts +3 -0
  188. package/dist-pkg/env/index.js +57 -0
  189. package/dist-pkg/errors/catalog.d.ts +9 -0
  190. package/{src/errors/catalog.ts → dist-pkg/errors/catalog.js} +8 -24
  191. package/dist-pkg/errors/formatter.d.ts +22 -0
  192. package/dist-pkg/errors/formatter.js +43 -0
  193. package/dist-pkg/errors/index.d.ts +2 -0
  194. package/dist-pkg/errors/index.js +2 -0
  195. package/dist-pkg/forms/action.d.ts +15 -0
  196. package/dist-pkg/forms/action.js +20 -0
  197. package/dist-pkg/forms/index.d.ts +4 -0
  198. package/dist-pkg/forms/index.js +12 -0
  199. package/dist-pkg/i18n/index.d.ts +61 -0
  200. package/dist-pkg/i18n/index.js +147 -0
  201. package/dist-pkg/index-client.d.ts +1 -0
  202. package/dist-pkg/index-client.js +1 -0
  203. package/dist-pkg/index.d.ts +32 -0
  204. package/dist-pkg/index.js +79 -0
  205. package/dist-pkg/jsx-runtime-client.d.ts +8 -0
  206. package/dist-pkg/jsx-runtime-client.js +1 -0
  207. package/dist-pkg/jsx-runtime.d.ts +13 -0
  208. package/dist-pkg/jsx-runtime.js +5 -0
  209. package/dist-pkg/jsx-types-html.d.ts +221 -0
  210. package/dist-pkg/jsx-types-html.js +0 -0
  211. package/dist-pkg/log/index.d.ts +8 -0
  212. package/dist-pkg/log/index.js +55 -0
  213. package/dist-pkg/plugins/drizzle.d.ts +16 -0
  214. package/dist-pkg/plugins/drizzle.js +50 -0
  215. package/dist-pkg/plugins/index.d.ts +62 -0
  216. package/dist-pkg/plugins/index.js +147 -0
  217. package/dist-pkg/plugins/lucia.d.ts +26 -0
  218. package/dist-pkg/plugins/lucia.js +63 -0
  219. package/dist-pkg/plugins/prisma.d.ts +14 -0
  220. package/dist-pkg/plugins/prisma.js +57 -0
  221. package/dist-pkg/plugins/resend.d.ts +21 -0
  222. package/dist-pkg/plugins/resend.js +45 -0
  223. package/dist-pkg/plugins/s3.d.ts +18 -0
  224. package/dist-pkg/plugins/s3.js +63 -0
  225. package/dist-pkg/plugins/stripe.d.ts +32 -0
  226. package/dist-pkg/plugins/stripe.js +69 -0
  227. package/dist-pkg/plugins/tailwind.d.ts +15 -0
  228. package/dist-pkg/plugins/tailwind.js +58 -0
  229. package/dist-pkg/prod.d.ts +21 -0
  230. package/dist-pkg/prod.js +347 -0
  231. package/dist-pkg/reactive/computed.d.ts +3 -0
  232. package/dist-pkg/reactive/computed.js +15 -0
  233. package/dist-pkg/reactive/data.d.ts +25 -0
  234. package/dist-pkg/reactive/data.js +56 -0
  235. package/dist-pkg/reactive/diagnostics.d.ts +100 -0
  236. package/dist-pkg/reactive/diagnostics.js +363 -0
  237. package/dist-pkg/reactive/effect.d.ts +3 -0
  238. package/dist-pkg/reactive/effect.js +6 -0
  239. package/dist-pkg/reactive/index.d.ts +9 -0
  240. package/dist-pkg/reactive/index.js +18 -0
  241. package/dist-pkg/reactive/live.d.ts +15 -0
  242. package/dist-pkg/reactive/live.js +58 -0
  243. package/dist-pkg/reactive/optimistic.d.ts +20 -0
  244. package/dist-pkg/reactive/optimistic.js +54 -0
  245. package/dist-pkg/reactive/resource.d.ts +25 -0
  246. package/dist-pkg/reactive/resource.js +97 -0
  247. package/dist-pkg/reactive/signal.d.ts +4 -0
  248. package/dist-pkg/reactive/signal.js +17 -0
  249. package/dist-pkg/reactive/store.d.ts +6 -0
  250. package/dist-pkg/reactive/store.js +19 -0
  251. package/dist-pkg/router/index.d.ts +2 -0
  252. package/dist-pkg/router/index.js +2 -0
  253. package/dist-pkg/router/matcher.d.ts +7 -0
  254. package/dist-pkg/router/matcher.js +40 -0
  255. package/dist-pkg/router/scanner.d.ts +14 -0
  256. package/dist-pkg/router/scanner.js +141 -0
  257. package/dist-pkg/routes/index.d.ts +1 -0
  258. package/dist-pkg/routes/index.js +10 -0
  259. package/dist-pkg/runtime/app-config.d.ts +26 -0
  260. package/dist-pkg/runtime/app-config.js +69 -0
  261. package/dist-pkg/runtime/client.d.ts +3 -0
  262. package/dist-pkg/runtime/client.js +31 -0
  263. package/dist-pkg/runtime/devtools.d.ts +64 -0
  264. package/dist-pkg/runtime/devtools.js +132 -0
  265. package/dist-pkg/runtime/error-boundary.d.ts +6 -0
  266. package/dist-pkg/runtime/error-boundary.js +17 -0
  267. package/dist-pkg/runtime/event-replay.d.ts +3 -0
  268. package/{src/runtime/event-replay.ts → dist-pkg/runtime/event-replay.js} +7 -22
  269. package/dist-pkg/runtime/event-source.d.ts +7 -0
  270. package/dist-pkg/runtime/event-source.js +24 -0
  271. package/dist-pkg/runtime/form.d.ts +24 -0
  272. package/dist-pkg/runtime/form.js +59 -0
  273. package/dist-pkg/runtime/head.d.ts +7 -0
  274. package/dist-pkg/runtime/head.js +90 -0
  275. package/dist-pkg/runtime/html-escape.d.ts +7 -0
  276. package/dist-pkg/runtime/html-escape.js +39 -0
  277. package/dist-pkg/runtime/hydration.d.ts +15 -0
  278. package/dist-pkg/runtime/hydration.js +103 -0
  279. package/dist-pkg/runtime/image.d.ts +49 -0
  280. package/dist-pkg/runtime/image.js +144 -0
  281. package/dist-pkg/runtime/index.d.ts +17 -0
  282. package/dist-pkg/runtime/index.js +59 -0
  283. package/dist-pkg/runtime/island-hydrator.d.ts +12 -0
  284. package/dist-pkg/runtime/island-hydrator.js +49 -0
  285. package/dist-pkg/runtime/island.d.ts +19 -0
  286. package/dist-pkg/runtime/island.js +36 -0
  287. package/dist-pkg/runtime/jsx-runtime.d.ts +12 -0
  288. package/dist-pkg/runtime/jsx-runtime.js +173 -0
  289. package/dist-pkg/runtime/link.d.ts +16 -0
  290. package/dist-pkg/runtime/link.js +47 -0
  291. package/dist-pkg/runtime/project.d.ts +37 -0
  292. package/dist-pkg/runtime/project.js +36 -0
  293. package/dist-pkg/runtime/renderable.d.ts +6 -0
  294. package/dist-pkg/runtime/renderable.js +0 -0
  295. package/dist-pkg/runtime/router.d.ts +47 -0
  296. package/dist-pkg/runtime/router.js +476 -0
  297. package/dist-pkg/runtime/server.d.ts +8 -0
  298. package/dist-pkg/runtime/server.js +71 -0
  299. package/dist-pkg/runtime/stream.d.ts +29 -0
  300. package/dist-pkg/runtime/stream.js +106 -0
  301. package/dist-pkg/runtime/suspense.d.ts +6 -0
  302. package/dist-pkg/runtime/suspense.js +16 -0
  303. package/dist-pkg/runtime/typed-routes.d.ts +24 -0
  304. package/dist-pkg/runtime/typed-routes.js +77 -0
  305. package/dist-pkg/runtime/validated-form.d.ts +40 -0
  306. package/dist-pkg/runtime/validated-form.js +120 -0
  307. package/dist-pkg/security/cors.d.ts +10 -0
  308. package/dist-pkg/security/cors.js +56 -0
  309. package/dist-pkg/security/csrf.d.ts +9 -0
  310. package/dist-pkg/security/csrf.js +53 -0
  311. package/dist-pkg/security/headers.d.ts +11 -0
  312. package/dist-pkg/security/headers.js +31 -0
  313. package/dist-pkg/security/index.d.ts +5 -0
  314. package/dist-pkg/security/index.js +5 -0
  315. package/dist-pkg/security/rate-limit.d.ts +10 -0
  316. package/dist-pkg/security/rate-limit.js +49 -0
  317. package/dist-pkg/security/redis-rate-limit.d.ts +14 -0
  318. package/dist-pkg/security/redis-rate-limit.js +23 -0
  319. package/dist-pkg/server/action.d.ts +21 -0
  320. package/dist-pkg/server/action.js +64 -0
  321. package/dist-pkg/server/cache-utils.d.ts +2 -0
  322. package/dist-pkg/server/cache-utils.js +26 -0
  323. package/dist-pkg/server/cache.d.ts +33 -0
  324. package/dist-pkg/server/cache.js +236 -0
  325. package/dist-pkg/server/compress.d.ts +2 -0
  326. package/dist-pkg/server/compress.js +49 -0
  327. package/dist-pkg/server/endpoint-execution.d.ts +28 -0
  328. package/dist-pkg/server/endpoint-execution.js +37 -0
  329. package/dist-pkg/server/etag.d.ts +3 -0
  330. package/dist-pkg/server/etag.js +18 -0
  331. package/dist-pkg/server/guard.d.ts +16 -0
  332. package/dist-pkg/server/guard.js +45 -0
  333. package/dist-pkg/server/html-shell.d.ts +12 -0
  334. package/dist-pkg/server/html-shell.js +52 -0
  335. package/dist-pkg/server/index.d.ts +36 -0
  336. package/dist-pkg/server/index.js +170 -0
  337. package/dist-pkg/server/jobs.d.ts +41 -0
  338. package/dist-pkg/server/jobs.js +81 -0
  339. package/dist-pkg/server/manifest.d.ts +19 -0
  340. package/dist-pkg/server/manifest.js +36 -0
  341. package/dist-pkg/server/middleware.d.ts +39 -0
  342. package/dist-pkg/server/middleware.js +122 -0
  343. package/dist-pkg/server/mime.d.ts +1 -0
  344. package/{src/server/mime.ts → dist-pkg/server/mime.js} +6 -17
  345. package/dist-pkg/server/not-found.d.ts +6 -0
  346. package/dist-pkg/server/not-found.js +24 -0
  347. package/dist-pkg/server/page-render.d.ts +29 -0
  348. package/dist-pkg/server/page-render.js +67 -0
  349. package/dist-pkg/server/partial-navigation.d.ts +4 -0
  350. package/dist-pkg/server/partial-navigation.js +16 -0
  351. package/dist-pkg/server/pipe.d.ts +9 -0
  352. package/dist-pkg/server/pipe.js +32 -0
  353. package/dist-pkg/server/redis-cache-store.d.ts +10 -0
  354. package/dist-pkg/server/redis-cache-store.js +73 -0
  355. package/dist-pkg/server/redis-client.d.ts +37 -0
  356. package/dist-pkg/server/redis-client.js +37 -0
  357. package/dist-pkg/server/request-policy.d.ts +55 -0
  358. package/dist-pkg/server/request-policy.js +216 -0
  359. package/dist-pkg/server/request-preflight.d.ts +23 -0
  360. package/dist-pkg/server/request-preflight.js +45 -0
  361. package/dist-pkg/server/request-security-policy.d.ts +17 -0
  362. package/dist-pkg/server/request-security-policy.js +34 -0
  363. package/dist-pkg/server/request-surface.d.ts +8 -0
  364. package/dist-pkg/server/request-surface.js +19 -0
  365. package/dist-pkg/server/route-request.d.ts +31 -0
  366. package/dist-pkg/server/route-request.js +112 -0
  367. package/dist-pkg/server/route-response.d.ts +22 -0
  368. package/dist-pkg/server/route-response.js +58 -0
  369. package/dist-pkg/server/rpc-hash.d.ts +2 -0
  370. package/dist-pkg/server/rpc-hash.js +7 -0
  371. package/dist-pkg/server/rpc-protocol.d.ts +22 -0
  372. package/dist-pkg/server/rpc-protocol.js +28 -0
  373. package/dist-pkg/server/rpc-utils.d.ts +2 -0
  374. package/dist-pkg/server/rpc-utils.js +26 -0
  375. package/dist-pkg/server/rpc.d.ts +20 -0
  376. package/dist-pkg/server/rpc.js +147 -0
  377. package/dist-pkg/server/runtime-dispatch.d.ts +19 -0
  378. package/dist-pkg/server/runtime-dispatch.js +67 -0
  379. package/dist-pkg/server/server-execution.d.ts +22 -0
  380. package/dist-pkg/server/server-execution.js +53 -0
  381. package/dist-pkg/server/sqlite-cache-store.d.ts +13 -0
  382. package/dist-pkg/server/sqlite-cache-store.js +88 -0
  383. package/dist-pkg/server/sse.d.ts +9 -0
  384. package/dist-pkg/server/sse.js +34 -0
  385. package/dist-pkg/server/static-file.d.ts +9 -0
  386. package/dist-pkg/server/static-file.js +43 -0
  387. package/dist-pkg/server/ws.d.ts +18 -0
  388. package/dist-pkg/server/ws.js +40 -0
  389. package/dist-pkg/server-entry.d.ts +19 -0
  390. package/dist-pkg/server-entry.js +93 -0
  391. package/dist-pkg/testing/index.d.ts +98 -0
  392. package/dist-pkg/testing/index.js +254 -0
  393. package/dist-pkg/types/index.d.ts +4 -0
  394. package/dist-pkg/types/index.js +4 -0
  395. package/dist-pkg/types/safe-html.d.ts +7 -0
  396. package/dist-pkg/types/safe-html.js +19 -0
  397. package/dist-pkg/types/safe-sql.d.ts +8 -0
  398. package/dist-pkg/types/safe-sql.js +14 -0
  399. package/dist-pkg/types/safe-url.d.ts +7 -0
  400. package/dist-pkg/types/safe-url.js +20 -0
  401. package/dist-pkg/types/user-input.d.ts +9 -0
  402. package/dist-pkg/types/user-input.js +3 -0
  403. package/dist-pkg/unsafe/index.d.ts +12 -0
  404. package/dist-pkg/unsafe/index.js +6 -0
  405. package/package.json +102 -44
  406. package/bin/gorsee.js +0 -14
  407. package/src/auth/index.ts +0 -178
  408. package/src/auth/redis-session-store.ts +0 -46
  409. package/src/auth/sqlite-session-store.ts +0 -98
  410. package/src/auth/store-utils.ts +0 -21
  411. package/src/build/client.ts +0 -139
  412. package/src/build/css-modules.ts +0 -69
  413. package/src/build/devalue-parse.ts +0 -2
  414. package/src/build/manifest.ts +0 -34
  415. package/src/build/route-metadata.ts +0 -12
  416. package/src/build/rpc-transform.ts +0 -62
  417. package/src/build/server-strip.ts +0 -87
  418. package/src/build/ssg.ts +0 -70
  419. package/src/cli/bun-plugin.ts +0 -58
  420. package/src/cli/cmd-build.ts +0 -153
  421. package/src/cli/cmd-check.ts +0 -239
  422. package/src/cli/cmd-create.ts +0 -328
  423. package/src/cli/cmd-deploy.ts +0 -149
  424. package/src/cli/cmd-dev.ts +0 -13
  425. package/src/cli/cmd-docs.ts +0 -152
  426. package/src/cli/cmd-generate.ts +0 -155
  427. package/src/cli/cmd-migrate.ts +0 -53
  428. package/src/cli/cmd-routes.ts +0 -36
  429. package/src/cli/cmd-start.ts +0 -30
  430. package/src/cli/cmd-test.ts +0 -129
  431. package/src/cli/cmd-typegen.ts +0 -93
  432. package/src/cli/cmd-upgrade.ts +0 -143
  433. package/src/cli/context.ts +0 -12
  434. package/src/cli/framework-md.ts +0 -223
  435. package/src/cli/index.ts +0 -107
  436. package/src/client.ts +0 -26
  437. package/src/db/index.ts +0 -2
  438. package/src/db/migrate.ts +0 -89
  439. package/src/db/sqlite.ts +0 -40
  440. package/src/deploy/index.ts +0 -31
  441. package/src/deploy/vercel.ts +0 -94
  442. package/src/dev/hmr.ts +0 -31
  443. package/src/dev/partial-handler.ts +0 -52
  444. package/src/dev/request-handler.ts +0 -127
  445. package/src/dev/watcher.ts +0 -48
  446. package/src/dev.ts +0 -208
  447. package/src/env/index.ts +0 -74
  448. package/src/errors/formatter.ts +0 -63
  449. package/src/errors/index.ts +0 -2
  450. package/src/i18n/index.ts +0 -72
  451. package/src/index-client.ts +0 -4
  452. package/src/index.ts +0 -43
  453. package/src/jsx-runtime-client.ts +0 -13
  454. package/src/jsx-runtime.ts +0 -20
  455. package/src/jsx-types-html.ts +0 -242
  456. package/src/log/index.ts +0 -44
  457. package/src/plugins/drizzle.ts +0 -84
  458. package/src/plugins/index.ts +0 -86
  459. package/src/plugins/lucia.ts +0 -111
  460. package/src/plugins/prisma.ts +0 -85
  461. package/src/plugins/resend.ts +0 -78
  462. package/src/plugins/s3.ts +0 -102
  463. package/src/plugins/stripe.ts +0 -133
  464. package/src/plugins/tailwind.ts +0 -92
  465. package/src/prod.ts +0 -252
  466. package/src/reactive/computed.ts +0 -7
  467. package/src/reactive/effect.ts +0 -7
  468. package/src/reactive/index.ts +0 -7
  469. package/src/reactive/live.ts +0 -97
  470. package/src/reactive/optimistic.ts +0 -83
  471. package/src/reactive/resource.ts +0 -138
  472. package/src/reactive/signal.ts +0 -20
  473. package/src/reactive/store.ts +0 -36
  474. package/src/router/index.ts +0 -2
  475. package/src/router/matcher.ts +0 -53
  476. package/src/router/scanner.ts +0 -206
  477. package/src/runtime/client.ts +0 -28
  478. package/src/runtime/error-boundary.ts +0 -35
  479. package/src/runtime/form.ts +0 -49
  480. package/src/runtime/head.ts +0 -113
  481. package/src/runtime/html-escape.ts +0 -30
  482. package/src/runtime/hydration.ts +0 -95
  483. package/src/runtime/image.ts +0 -48
  484. package/src/runtime/index.ts +0 -12
  485. package/src/runtime/island-hydrator.ts +0 -84
  486. package/src/runtime/island.ts +0 -88
  487. package/src/runtime/jsx-runtime.ts +0 -167
  488. package/src/runtime/link.ts +0 -45
  489. package/src/runtime/project.ts +0 -73
  490. package/src/runtime/router.ts +0 -224
  491. package/src/runtime/server.ts +0 -102
  492. package/src/runtime/stream.ts +0 -182
  493. package/src/runtime/suspense.ts +0 -37
  494. package/src/runtime/typed-routes.ts +0 -26
  495. package/src/runtime/validated-form.ts +0 -106
  496. package/src/security/cors.ts +0 -80
  497. package/src/security/csrf.ts +0 -85
  498. package/src/security/headers.ts +0 -50
  499. package/src/security/index.ts +0 -4
  500. package/src/security/rate-limit.ts +0 -80
  501. package/src/server/action.ts +0 -48
  502. package/src/server/cache-utils.ts +0 -23
  503. package/src/server/cache.ts +0 -125
  504. package/src/server/compress.ts +0 -60
  505. package/src/server/etag.ts +0 -23
  506. package/src/server/guard.ts +0 -69
  507. package/src/server/html-shell.ts +0 -69
  508. package/src/server/index.ts +0 -57
  509. package/src/server/manifest.ts +0 -36
  510. package/src/server/middleware.ts +0 -159
  511. package/src/server/not-found.ts +0 -35
  512. package/src/server/page-render.ts +0 -123
  513. package/src/server/pipe.ts +0 -46
  514. package/src/server/redis-cache-store.ts +0 -87
  515. package/src/server/redis-client.ts +0 -71
  516. package/src/server/request-preflight.ts +0 -45
  517. package/src/server/route-request.ts +0 -72
  518. package/src/server/rpc-hash.ts +0 -17
  519. package/src/server/rpc-utils.ts +0 -27
  520. package/src/server/rpc.ts +0 -177
  521. package/src/server/sqlite-cache-store.ts +0 -109
  522. package/src/server/sse.ts +0 -96
  523. package/src/server/static-file.ts +0 -63
  524. package/src/server/ws.ts +0 -56
  525. package/src/server-entry.ts +0 -36
  526. package/src/testing/index.ts +0 -74
  527. package/src/types/index.ts +0 -4
  528. package/src/types/safe-html.ts +0 -32
  529. package/src/types/safe-sql.ts +0 -28
  530. package/src/types/safe-url.ts +0 -40
  531. package/src/types/user-input.ts +0 -12
  532. package/src/unsafe/index.ts +0 -18
@@ -0,0 +1,320 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { createMigration } from "../db/migrate.js";
4
+ import { createProjectContext } from "../runtime/project.js";
5
+ function capitalize(s) {
6
+ return s.charAt(0).toUpperCase() + s.slice(1);
7
+ }
8
+ function singularize(s) {
9
+ if (s.endsWith("ies"))
10
+ return s.slice(0, -3) + "y";
11
+ if (s.endsWith("ses") || s.endsWith("xes") || s.endsWith("zes"))
12
+ return s.slice(0, -2);
13
+ if (s.endsWith("s") && !s.endsWith("ss"))
14
+ return s.slice(0, -1);
15
+ return s;
16
+ }
17
+ function repoImportPath(entity) {
18
+ return `../../shared/${entity}.ts`;
19
+ }
20
+ export function parseGenerateFlags(args) {
21
+ const positional = [];
22
+ let data = null;
23
+ for (let index = 0;index < args.length; index += 1) {
24
+ const arg = args[index];
25
+ if (arg === "--data" && args[index + 1]) {
26
+ const value = args[++index];
27
+ if (value === "memory" || value === "sqlite" || value === "postgres")
28
+ data = value;
29
+ continue;
30
+ }
31
+ positional.push(arg);
32
+ }
33
+ return {
34
+ entity: positional[0] ?? null,
35
+ data
36
+ };
37
+ }
38
+ async function inferGenerateDataMode(cwd) {
39
+ try {
40
+ const appConfig = await readFile(join(cwd, "app.config.ts"), "utf-8");
41
+ if (/driver\s*:\s*"postgres"/.test(appConfig) || /driver\s*:\s*'postgres'/.test(appConfig))
42
+ return "postgres";
43
+ if (/driver\s*:\s*"sqlite"/.test(appConfig) || /driver\s*:\s*'sqlite'/.test(appConfig))
44
+ return "sqlite";
45
+ } catch {}
46
+ return "memory";
47
+ }
48
+ function listRoute(entity, singular) {
49
+ const cap = capitalize(singular), routesName = `${singular}Routes`;
50
+ return `import { Head, Link } from "gorsee/client"
51
+ import { list${cap}s, ${routesName} } from "${repoImportPath(entity)}"
52
+
53
+ export async function load() {
54
+ return { ${entity}: await list${cap}s() }
55
+ }
56
+
57
+ export default function ${capitalize(entity)}ListPage(props: { data: { ${entity}: { id: number; title: string }[] } }) {
58
+ return (
59
+ <div>
60
+ <Head><title>${capitalize(entity)}</title></Head>
61
+ <h1>${capitalize(entity)}</h1>
62
+ <Link href={${routesName}.create}>Create New ${cap}</Link>
63
+ <ul>
64
+ {props.data.${entity}.map((item) => (
65
+ <li>
66
+ <Link href={${routesName}.detail} params={{ id: String(item.id) }}>{item.title}</Link>
67
+ </li>
68
+ ))}
69
+ </ul>
70
+ </div>
71
+ )
72
+ }
73
+ `;
74
+ }
75
+ function detailRoute(entity, singular) {
76
+ const cap = capitalize(singular), routesName = `${singular}Routes`;
77
+ return `import { Head, Link } from "gorsee/client"
78
+ import { get${cap}ById, ${routesName} } from "${repoImportPath(entity)}"
79
+ import type { Context } from "gorsee/server"
80
+
81
+ export async function load(ctx: Context) {
82
+ const id = Number(ctx.params.id)
83
+ const ${singular} = await get${cap}ById(id)
84
+ if (!${singular}) {
85
+ throw new Error("${cap} not found")
86
+ }
87
+ return { ${singular} }
88
+ }
89
+
90
+ export default function ${cap}DetailPage(props: { data: { ${singular}: { id: number; title: string } } }) {
91
+ const item = props.data.${singular}
92
+ return (
93
+ <div>
94
+ <Head><title>{item.title}</title></Head>
95
+ <h1>{item.title}</h1>
96
+ <Link href={${routesName}.list}>Back to ${capitalize(entity)}</Link>
97
+ </div>
98
+ )
99
+ }
100
+ `;
101
+ }
102
+ function newRoute(entity, singular) {
103
+ const cap = capitalize(singular), formName = `${singular}Form`, routesName = `${singular}Routes`;
104
+ return `import { Head, Link } from "gorsee/client"
105
+ import { defineFormAction, fieldAttrs } from "gorsee/forms"
106
+ import { create${cap}, ${formName}, ${routesName} } from "${repoImportPath(entity)}"
107
+
108
+ export const action = defineFormAction(${formName}, async ({ ctx, data }) => {
109
+ await create${cap}(data.title)
110
+ return ctx.redirect(${routesName}.list.build())
111
+ })
112
+
113
+ export default function New${cap}Page() {
114
+ const titleField = ${formName}.fields[0]!
115
+
116
+ return (
117
+ <div>
118
+ <Head><title>New ${cap}</title></Head>
119
+ <h1>New ${cap}</h1>
120
+ <form method="POST">
121
+ <label>
122
+ Title:
123
+ <input {...fieldAttrs(titleField)} />
124
+ </label>
125
+ <button type="submit">Create</button>
126
+ </form>
127
+ <Link href={${routesName}.list}>Cancel</Link>
128
+ </div>
129
+ )
130
+ }
131
+ `;
132
+ }
133
+ function repositorySharedPrelude(entity, singular) {
134
+ const cap = capitalize(singular), routesName = `${singular}Routes`, formName = `${singular}Form`;
135
+ return `import { defineForm } from "gorsee/forms"
136
+ import { createTypedRoute } from "gorsee/routes"
137
+
138
+ export interface ${cap}Record {
139
+ id: number
140
+ title: string
141
+ }
142
+
143
+ export const ${routesName} = {
144
+ list: createTypedRoute("/${entity}"),
145
+ detail: createTypedRoute("/${entity}/[id]"),
146
+ create: createTypedRoute("/${entity}/new"),
147
+ }
148
+
149
+ export const ${formName} = defineForm<{ title: string }>([
150
+ {
151
+ name: "title",
152
+ label: "Title",
153
+ rules: {
154
+ required: true,
155
+ minLength: 2,
156
+ maxLength: 120,
157
+ },
158
+ },
159
+ ])
160
+
161
+ `;
162
+ }
163
+ function repositoryMemoryModule(entity, singular) {
164
+ const cap = capitalize(singular);
165
+ return `${repositorySharedPrelude(entity, singular)}const ${entity}: ${cap}Record[] = [
166
+ { id: 1, title: "First ${cap}" },
167
+ { id: 2, title: "Second ${cap}" },
168
+ ]
169
+
170
+ export async function list${cap}s(): Promise<${cap}Record[]> {
171
+ return ${entity}.map((item) => ({ ...item }))
172
+ }
173
+
174
+ export async function get${cap}ById(id: number): Promise<${cap}Record | undefined> {
175
+ const item = ${entity}.find((entry) => entry.id === id)
176
+ return item ? { ...item } : undefined
177
+ }
178
+
179
+ export async function create${cap}(title: string): Promise<${cap}Record> {
180
+ const next: ${cap}Record = {
181
+ id: ${entity}.length === 0 ? 1 : Math.max(...${entity}.map((item) => item.id)) + 1,
182
+ title,
183
+ }
184
+ ${entity}.push(next)
185
+ return { ...next }
186
+ }
187
+ `;
188
+ }
189
+ function repositorySqliteModule(entity, singular) {
190
+ const cap = capitalize(singular);
191
+ return `${repositorySharedPrelude(entity, singular)}import { createDB } from "gorsee/db"
192
+ import { SafeSQL } from "gorsee/types"
193
+
194
+ const db = createDB(process.env.DATABASE_URL ?? "./data.sqlite")
195
+
196
+ export async function list${cap}s(): Promise<${cap}Record[]> {
197
+ return db.all<${cap}Record>(SafeSQL\`SELECT id, title FROM ${entity} ORDER BY id DESC\`)
198
+ }
199
+
200
+ export async function get${cap}ById(id: number): Promise<${cap}Record | undefined> {
201
+ return db.get<${cap}Record>(SafeSQL\`SELECT id, title FROM ${entity} WHERE id = \${id}\`) ?? undefined
202
+ }
203
+
204
+ export async function create${cap}(title: string): Promise<${cap}Record> {
205
+ db.run(SafeSQL\`INSERT INTO ${entity} (title) VALUES (\${title})\`)
206
+ const created = db.get<${cap}Record>(SafeSQL\`SELECT id, title FROM ${entity} ORDER BY id DESC LIMIT 1\`)
207
+ if (!created) {
208
+ throw new Error("Failed to create ${singular}")
209
+ }
210
+ return created
211
+ }
212
+ `;
213
+ }
214
+ function repositoryPostgresModule(entity, singular) {
215
+ const cap = capitalize(singular);
216
+ return `${repositorySharedPrelude(entity, singular)}import { createPostgresDB, type PostgresPoolLike } from "gorsee/db"
217
+ import { SafeSQL } from "gorsee/types"
218
+
219
+ let postgresPool: PostgresPoolLike | null = null
220
+
221
+ export function configure${cap}Postgres(pool: PostgresPoolLike): void {
222
+ postgresPool = pool
223
+ }
224
+
225
+ function getDB() {
226
+ if (!postgresPool) {
227
+ throw new Error("Postgres pool is not configured. Call configure${cap}Postgres() during server startup.")
228
+ }
229
+ return createPostgresDB(postgresPool)
230
+ }
231
+
232
+ export async function list${cap}s(): Promise<${cap}Record[]> {
233
+ return getDB().all<${cap}Record>(SafeSQL\`SELECT id, title FROM ${entity} ORDER BY id DESC\`)
234
+ }
235
+
236
+ export async function get${cap}ById(id: number): Promise<${cap}Record | undefined> {
237
+ return (await getDB().get<${cap}Record>(SafeSQL\`SELECT id, title FROM ${entity} WHERE id = \${id}\`)) ?? undefined
238
+ }
239
+
240
+ export async function create${cap}(title: string): Promise<${cap}Record> {
241
+ return getDB().transaction(async (db) => {
242
+ await db.run(SafeSQL\`INSERT INTO ${entity} (title) VALUES (\${title})\`)
243
+ const created = await db.get<${cap}Record>(SafeSQL\`SELECT id, title FROM ${entity} ORDER BY id DESC LIMIT 1\`)
244
+ if (!created) {
245
+ throw new Error("Failed to create ${singular}")
246
+ }
247
+ return created
248
+ })
249
+ }
250
+ `;
251
+ }
252
+ function repositoryModule(entity, singular, mode) {
253
+ switch (mode) {
254
+ case "sqlite":
255
+ return repositorySqliteModule(entity, singular);
256
+ case "postgres":
257
+ return repositoryPostgresModule(entity, singular);
258
+ default:
259
+ return repositoryMemoryModule(entity, singular);
260
+ }
261
+ }
262
+ function migrationSQL(entity, mode) {
263
+ if (mode === "postgres")
264
+ return `-- Create ${entity} table
265
+ CREATE TABLE IF NOT EXISTS ${entity} (
266
+ id BIGSERIAL PRIMARY KEY,
267
+ title TEXT NOT NULL,
268
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
269
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
270
+ );
271
+ `;
272
+ return `-- Create ${entity} table
273
+ CREATE TABLE IF NOT EXISTS ${entity} (
274
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
275
+ title TEXT NOT NULL,
276
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
277
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
278
+ );
279
+ `;
280
+ }
281
+ export async function generateCrudScaffold(args, options = {}) {
282
+ const flags = parseGenerateFlags(args), entity = flags.entity;
283
+ if (!entity) {
284
+ console.error("Usage: gorsee generate <entity-name> [--data memory|sqlite|postgres]");
285
+ console.error("Example: gorsee generate posts --data sqlite");
286
+ process.exit(1);
287
+ }
288
+ const { cwd, paths } = createProjectContext(options), dataMode = flags.data ?? await inferGenerateDataMode(cwd), singular = singularize(entity), routeDir = join(paths.routesDir, entity), repoFile = join(paths.sharedDir, `${entity}.ts`);
289
+ console.log(`
290
+ Generating CRUD for: ${entity}`);
291
+ console.log(` Data mode: ${dataMode}
292
+ `);
293
+ await mkdir(routeDir, { recursive: !0 });
294
+ await mkdir(paths.sharedDir, { recursive: !0 });
295
+ await writeFile(join(routeDir, "index.tsx"), listRoute(entity, singular));
296
+ await writeFile(join(routeDir, "[id].tsx"), detailRoute(entity, singular));
297
+ await writeFile(join(routeDir, "new.tsx"), newRoute(entity, singular));
298
+ await writeFile(repoFile, repositoryModule(entity, singular, dataMode));
299
+ const migrationDir = paths.migrationsDir;
300
+ await mkdir(migrationDir, { recursive: !0 });
301
+ const migrationFile = await createMigration(migrationDir, `create_${entity}`), migrationPath = join(migrationDir, migrationFile);
302
+ await writeFile(migrationPath, migrationSQL(entity, dataMode));
303
+ console.log(" Created:");
304
+ console.log(` routes/${entity}/index.tsx -- list page`);
305
+ console.log(` routes/${entity}/[id].tsx -- detail page`);
306
+ console.log(` routes/${entity}/new.tsx -- validated create form`);
307
+ console.log(` shared/${entity}.ts -- ${dataMode} repository + typed routes + form schema`);
308
+ console.log(` migrations/${migrationFile}`);
309
+ console.log();
310
+ if (dataMode === "postgres")
311
+ console.log(` Next: run \`gorsee migrate\` and call \`configure${capitalize(singular)}Postgres(pool)\` during server startup`);
312
+ else if (dataMode === "memory")
313
+ console.log(" Next: run `gorsee migrate` and switch --data sqlite|postgres when wiring a production database");
314
+ else
315
+ console.log(" Next: run `gorsee migrate` to apply the generated table contract");
316
+ console.log();
317
+ }
318
+ export async function runGenerate(args, options = {}) {
319
+ return generateCrudScaffold(args, options);
320
+ }
@@ -0,0 +1,7 @@
1
+ import { type RuntimeOptions } from "../runtime/project.js";
2
+ export interface MigrateCommandOptions extends RuntimeOptions {
3
+ dbPath?: string;
4
+ }
5
+ export declare function runProjectMigrations(args: string[], options?: MigrateCommandOptions): Promise<void>;
6
+ /** @deprecated Use runProjectMigrations() for programmatic access. */
7
+ export declare function runMigrate(args: string[], options?: MigrateCommandOptions): Promise<void>;
@@ -0,0 +1,42 @@
1
+ import { runMigrations, createMigration } from "../db/migrate.js";
2
+ import { createProjectContext } from "../runtime/project.js";
3
+ export async function runProjectMigrations(args, options = {}) {
4
+ const { env, paths } = createProjectContext(options);
5
+ if (args[0] === "create") {
6
+ const name = args[1];
7
+ if (!name) {
8
+ console.error("Usage: gorsee migrate create <migration-name>");
9
+ process.exit(1);
10
+ }
11
+ const filename = await createMigration(paths.migrationsDir, name);
12
+ console.log(`
13
+ Created: migrations/${filename}
14
+ `);
15
+ return;
16
+ }
17
+ const dbPath = options.dbPath ?? env.DATABASE_URL ?? paths.dataFile;
18
+ console.log(`
19
+ Running migrations...
20
+ `);
21
+ const result = await runMigrations(dbPath, paths.migrationsDir);
22
+ if (result.applied.length > 0) {
23
+ console.log(" Applied:");
24
+ for (const m of result.applied)
25
+ console.log(` + ${m}`);
26
+ }
27
+ if (result.skipped.length > 0)
28
+ console.log(` Skipped: ${result.skipped.length} (already applied)`);
29
+ if (result.errors.length > 0) {
30
+ console.log(`
31
+ Errors:`);
32
+ for (const e of result.errors)
33
+ console.error(` ! ${e}`);
34
+ process.exit(1);
35
+ }
36
+ console.log(`
37
+ Done: ${result.applied.length} migration(s) applied
38
+ `);
39
+ }
40
+ export async function runMigrate(args, options = {}) {
41
+ return runProjectMigrations(args, options);
42
+ }
@@ -0,0 +1,6 @@
1
+ import { type RuntimeOptions } from "../runtime/project.js";
2
+ export interface RoutesCommandOptions extends RuntimeOptions {
3
+ }
4
+ export declare function listRoutes(options?: RoutesCommandOptions): Promise<void>;
5
+ /** @deprecated Use listRoutes() for programmatic access. */
6
+ export declare function runRoutes(_args: string[], options?: RoutesCommandOptions): Promise<void>;
@@ -0,0 +1,24 @@
1
+ import { createRouter } from "../router/scanner.js";
2
+ import { createProjectContext } from "../runtime/project.js";
3
+ export async function listRoutes(options = {}) {
4
+ const { cwd, paths } = createProjectContext(options), routes = await createRouter(paths.routesDir);
5
+ if (routes.length === 0) {
6
+ console.log(`
7
+ No routes found in routes/
8
+ `);
9
+ return;
10
+ }
11
+ console.log(`
12
+ Routes:
13
+ `);
14
+ console.log(" " + "Path".padEnd(25) + "File".padEnd(40) + "Params");
15
+ console.log(" " + "-".repeat(70));
16
+ for (const route of routes) {
17
+ const params = route.params.length > 0 ? route.params.join(", ") : "-";
18
+ console.log(" " + route.path.padEnd(25) + route.filePath.replace(cwd + "/", "").padEnd(40) + params);
19
+ }
20
+ console.log();
21
+ }
22
+ export async function runRoutes(_args, options = {}) {
23
+ return listRoutes(options);
24
+ }
@@ -0,0 +1,13 @@
1
+ import { type RuntimeOptions } from "../runtime/project.js";
2
+ export interface StartCommandOptions extends RuntimeOptions {
3
+ port?: number;
4
+ runtime?: "bun" | "node";
5
+ }
6
+ interface StartFlags {
7
+ runtime?: "bun" | "node";
8
+ }
9
+ export declare function parseStartFlags(args: string[]): StartFlags;
10
+ export declare function startBuiltProject(options?: StartCommandOptions): Promise<void>;
11
+ /** @deprecated Use startBuiltProject() for programmatic access. */
12
+ export declare function runStart(args: string[], options?: StartCommandOptions): Promise<void>;
13
+ export {};
@@ -0,0 +1,32 @@
1
+ import { join } from "node:path";
2
+ import { pathToFileURL } from "node:url";
3
+ import { stat } from "node:fs/promises";
4
+ import { createProjectContext } from "../runtime/project.js";
5
+ export function parseStartFlags(args) {
6
+ const flags = {};
7
+ for (let index = 0;index < args.length; index++)
8
+ if (args[index] === "--runtime" && (args[index + 1] === "bun" || args[index + 1] === "node"))
9
+ flags.runtime = args[++index];
10
+ return flags;
11
+ }
12
+ export async function startBuiltProject(options = {}) {
13
+ const { paths } = createProjectContext(options), runtime = options.runtime ?? "bun";
14
+ try {
15
+ await stat(join(paths.distDir, "manifest.json"));
16
+ } catch {
17
+ console.error(`
18
+ Error: No production build found.`);
19
+ console.error(" Run `gorsee build` first.\n");
20
+ process.exit(1);
21
+ }
22
+ const entryFile = runtime === "node" ? "prod-node.js" : "prod.js", prodModule = await import(pathToFileURL(join(paths.distDir, entryFile)).href);
23
+ if (runtime === "node") {
24
+ await prodModule.startNodeProductionServer({ cwd: paths.cwd, port: options.port });
25
+ return;
26
+ }
27
+ await prodModule.startProductionServer({ cwd: paths.cwd, port: options.port });
28
+ }
29
+ export async function runStart(args, options = {}) {
30
+ const flags = parseStartFlags(args);
31
+ return startBuiltProject({ ...options, runtime: flags.runtime ?? options.runtime });
32
+ }
@@ -0,0 +1,20 @@
1
+ import { type RuntimeOptions } from "../runtime/project.js";
2
+ interface TestFlags {
3
+ watch: boolean;
4
+ coverage: boolean;
5
+ filter: string | null;
6
+ e2e: boolean;
7
+ unit: boolean;
8
+ integration: boolean;
9
+ }
10
+ declare function parseFlags(args: string[]): TestFlags;
11
+ declare function findTestFiles(dir: string, pattern: RegExp): Promise<string[]>;
12
+ declare function getTestPattern(flags: TestFlags): RegExp;
13
+ /** Build bun test args from parsed flags */
14
+ export declare function buildTestArgs(flags: TestFlags, files: string[]): string[];
15
+ export interface TestCommandOptions extends RuntimeOptions {
16
+ }
17
+ export declare function runTests(args: string[], options?: TestCommandOptions): Promise<void>;
18
+ /** @deprecated Use runTests() for programmatic access. */
19
+ export declare function runTest(args: string[], options?: TestCommandOptions): Promise<void>;
20
+ export { parseFlags, findTestFiles, getTestPattern };
@@ -0,0 +1,103 @@
1
+ import { readdir, stat } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { createProjectContext } from "../runtime/project.js";
4
+ function parseFlags(args) {
5
+ const flags = {
6
+ watch: !1,
7
+ coverage: !1,
8
+ filter: null,
9
+ e2e: !1,
10
+ unit: !1,
11
+ integration: !1
12
+ };
13
+ for (let i = 0;i < args.length; i++) {
14
+ const arg = args[i];
15
+ if (arg === "--watch")
16
+ flags.watch = !0;
17
+ else if (arg === "--coverage")
18
+ flags.coverage = !0;
19
+ else if (arg === "--filter" && args[i + 1])
20
+ flags.filter = args[++i];
21
+ else if (arg === "--e2e")
22
+ flags.e2e = !0;
23
+ else if (arg === "--unit")
24
+ flags.unit = !0;
25
+ else if (arg === "--integration")
26
+ flags.integration = !0;
27
+ }
28
+ return flags;
29
+ }
30
+ async function findTestFiles(dir, pattern) {
31
+ const results = [];
32
+ let entries;
33
+ try {
34
+ entries = await readdir(dir);
35
+ } catch {
36
+ return results;
37
+ }
38
+ for (const entry of entries) {
39
+ if (entry === "node_modules" || entry === "dist")
40
+ continue;
41
+ const fullPath = join(dir, entry);
42
+ if ((await stat(fullPath)).isDirectory())
43
+ results.push(...await findTestFiles(fullPath, pattern));
44
+ else if (pattern.test(fullPath))
45
+ results.push(fullPath);
46
+ }
47
+ return results;
48
+ }
49
+ function getTestPattern(flags) {
50
+ if (flags.e2e)
51
+ return /(?:\.e2e\.test\.ts$|e2e\/.*\.test\.ts$)/;
52
+ if (flags.integration)
53
+ return /(?:\.integration\.test\.ts$|tests\/integration\/.*\.test\.ts$)/;
54
+ if (flags.unit)
55
+ return /(?:\.unit\.test\.ts$|tests\/unit\/.*\.test\.ts$)/;
56
+ return /\.test\.ts$/;
57
+ }
58
+ export function buildTestArgs(flags, files) {
59
+ const bunArgs = ["test"];
60
+ if (flags.watch)
61
+ bunArgs.push("--watch");
62
+ if (flags.coverage)
63
+ bunArgs.push("--coverage");
64
+ if (flags.filter)
65
+ bunArgs.push("--bail", "--filter", flags.filter);
66
+ bunArgs.push(...files);
67
+ return bunArgs;
68
+ }
69
+ export async function runTests(args, options = {}) {
70
+ const { cwd, env } = createProjectContext(options), flags = parseFlags(args), pattern = getTestPattern(flags), files = await findTestFiles(cwd, pattern);
71
+ if (files.length === 0) {
72
+ const kind = flags.e2e ? "e2e" : flags.integration ? "integration" : flags.unit ? "unit" : "any";
73
+ console.log(`
74
+ No ${kind} test files found.
75
+ `);
76
+ return;
77
+ }
78
+ console.log(`
79
+ Running ${files.length} test file(s)...
80
+ `);
81
+ const bunArgs = buildTestArgs(flags, files), exitCode = await Bun.spawn(["bun", ...bunArgs], {
82
+ cwd,
83
+ stdout: "inherit",
84
+ stderr: "inherit",
85
+ env: {
86
+ ...env,
87
+ NODE_ENV: "test",
88
+ GORSEE_TEST: "1"
89
+ }
90
+ }).exited;
91
+ console.log();
92
+ if (exitCode === 0)
93
+ console.log(` Tests passed (${files.length} file(s))`);
94
+ else {
95
+ console.log(` Tests failed (exit code ${exitCode})`);
96
+ process.exit(exitCode);
97
+ }
98
+ }
99
+ export async function runTest(args, options = {}) {
100
+ return runTests(args, options);
101
+ }
102
+
103
+ export { parseFlags, findTestFiles, getTestPattern };
@@ -0,0 +1,7 @@
1
+ import { type RuntimeOptions } from "../runtime/project.js";
2
+ export interface TypegenCommandOptions extends RuntimeOptions {
3
+ routesDir?: string;
4
+ }
5
+ export declare function generateRouteTypes(args: string[], options?: TypegenCommandOptions): Promise<void>;
6
+ /** @deprecated Use generateRouteTypes() for programmatic access. */
7
+ export declare function runTypegen(args: string[], options?: TypegenCommandOptions): Promise<void>;
@@ -0,0 +1,66 @@
1
+ import { join } from "node:path";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { createRouter } from "../router/index.js";
4
+ import { createProjectContext } from "../runtime/project.js";
5
+ import { initializeCompilerBackends } from "../compiler/init.js";
6
+ import {
7
+ createRouteFactsArtifact,
8
+ getRouteParamsRecord
9
+ } from "../compiler/route-facts.js";
10
+ const OUTPUT_DIR = ".gorsee", TYPES_FILE = "routes.d.ts", FACTS_FILE = "route-facts.json";
11
+ function formatParamsType(params) {
12
+ const entries = Object.entries(params);
13
+ if (entries.length === 0)
14
+ return "{}";
15
+ return `{ ${entries.map(([key, type]) => `${key}: ${type}`).join("; ")} }`;
16
+ }
17
+ function generateDeclaration(routes) {
18
+ const lines = [
19
+ "// Auto-generated by gorsee typegen",
20
+ "// Do not edit manually \u2014 re-run `gorsee typegen` after adding routes",
21
+ "",
22
+ 'declare module "gorsee/routes" {',
23
+ " interface RouteParams {"
24
+ ];
25
+ for (const route of routes) {
26
+ const params = getRouteParamsRecord(route), paramsType = formatParamsType(params);
27
+ lines.push(` "${route.path}": ${paramsType}`);
28
+ }
29
+ lines.push(" }");
30
+ lines.push("");
31
+ lines.push(" type RoutePath = keyof RouteParams");
32
+ lines.push("");
33
+ lines.push(" function typedLink<P extends RoutePath>(path: P, params: RouteParams[P]): string");
34
+ lines.push(" function typedNavigate<P extends RoutePath>(path: P, params: RouteParams[P]): Promise<void>");
35
+ lines.push("}");
36
+ lines.push("");
37
+ return lines.join(`
38
+ `);
39
+ }
40
+ export async function generateRouteTypes(args, options = {}) {
41
+ const { cwd, paths } = createProjectContext(options);
42
+ initializeCompilerBackends(options.env ?? process.env);
43
+ const routesDir = options.routesDir ?? args[0] ?? paths.routesDir;
44
+ console.log(`Scanning routes in: ${routesDir}`);
45
+ const routes = await createRouter(routesDir);
46
+ if (routes.length === 0) {
47
+ console.warn("No routes found. Make sure your routes/ directory exists.");
48
+ return;
49
+ }
50
+ const outputDir = join(cwd, OUTPUT_DIR);
51
+ await mkdir(outputDir, { recursive: !0 });
52
+ const routeFacts = await createRouteFactsArtifact(routes), declaration = generateDeclaration(routeFacts.routes), typesPath = join(outputDir, TYPES_FILE), factsPath = join(outputDir, FACTS_FILE);
53
+ await writeFile(typesPath, declaration, "utf-8");
54
+ await writeFile(factsPath, JSON.stringify(routeFacts, null, 2) + `
55
+ `, "utf-8");
56
+ console.log(`Generated ${typesPath}`);
57
+ console.log(`Generated ${factsPath}`);
58
+ console.log(` ${routes.length} route(s):`);
59
+ for (const route of routes) {
60
+ const params = route.params.length > 0 ? ` [${route.params.join(", ")}]` : "";
61
+ console.log(` ${route.path}${params}`);
62
+ }
63
+ }
64
+ export async function runTypegen(args, options = {}) {
65
+ return generateRouteTypes(args, options);
66
+ }