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
@@ -1,87 +0,0 @@
1
- // Bun.build plugin: strips server-only code from client bundles
2
- // - Removes export function loader() and its body
3
- // - Replaces server-only modules (gorsee/db) with empty stubs
4
-
5
- import type { BunPlugin } from "bun"
6
- import { transformServerCalls } from "./rpc-transform.ts"
7
-
8
- const SERVER_ONLY_MODULES = ["gorsee/db", "gorsee/log"]
9
-
10
- // Modules that need a lightweight client stub instead of full server code
11
- const SERVER_STUB_MODULES: Record<string, string> = {
12
- "gorsee/server": `export function server(fn) { return fn; }
13
- export function middleware(fn) { return fn; }`,
14
- }
15
-
16
- // Regex to strip `export async function loader` or `export function loader`
17
- // Handles multi-line function bodies by counting braces
18
- function stripLoader(source: string): string {
19
- const loaderRe = /export\s+(async\s+)?function\s+loader\s*\([^)]*\)\s*(\{)/g
20
- const match = loaderRe.exec(source)
21
- if (!match) return source
22
-
23
- const start = match.index
24
- let braces = 1
25
- let i = loaderRe.lastIndex
26
-
27
- while (i < source.length && braces > 0) {
28
- if (source[i] === "{") braces++
29
- else if (source[i] === "}") braces--
30
- i++
31
- }
32
-
33
- return source.slice(0, start) + source.slice(i)
34
- }
35
-
36
- // Pre-compiled regexes for import stripping
37
- const SERVER_IMPORT_REGEXES = SERVER_ONLY_MODULES.map(
38
- (mod) => new RegExp(`import\\s+.*?from\\s+["']${mod.replace("/", "\\/")}["'];?\\n?`, "g")
39
- )
40
-
41
- function stripUnusedServerImports(source: string): string {
42
- for (const re of SERVER_IMPORT_REGEXES) {
43
- re.lastIndex = 0
44
- source = source.replace(re, "")
45
- }
46
- return source
47
- }
48
-
49
- export const serverStripPlugin: BunPlugin = {
50
- name: "gorsee-server-strip",
51
- setup(build) {
52
- // Replace server-only modules with empty exports
53
- for (const mod of SERVER_ONLY_MODULES) {
54
- build.onResolve({ filter: new RegExp(`^${mod.replace("/", "\\/")}$`) }, () => ({
55
- path: mod,
56
- namespace: "gorsee-empty",
57
- }))
58
- }
59
-
60
- build.onLoad({ filter: /.*/, namespace: "gorsee-empty" }, () => ({
61
- contents: "export default {}",
62
- loader: "js",
63
- }))
64
-
65
- // Replace server modules with lightweight client stubs
66
- for (const mod of Object.keys(SERVER_STUB_MODULES)) {
67
- build.onResolve({ filter: new RegExp(`^${mod.replace("/", "\\/")}$`) }, () => ({
68
- path: mod,
69
- namespace: "gorsee-stub",
70
- }))
71
- }
72
-
73
- build.onLoad({ filter: /.*/, namespace: "gorsee-stub" }, (args) => ({
74
- contents: SERVER_STUB_MODULES[args.path] ?? "export default {}",
75
- loader: "js",
76
- }))
77
-
78
- // Strip loader + transform RPC calls in route files
79
- build.onLoad({ filter: /routes\/.*\.tsx?$/ }, async (args) => {
80
- let source = await Bun.file(args.path).text()
81
- source = stripLoader(source)
82
- source = stripUnusedServerImports(source)
83
- source = transformServerCalls(source, args.path)
84
- return { contents: source, loader: args.path.endsWith(".tsx") ? "tsx" : "ts" }
85
- })
86
- },
87
- }
package/src/build/ssg.ts DELETED
@@ -1,70 +0,0 @@
1
- // Static Site Generation -- pre-renders pages at build time
2
- // Routes with `export const prerender = true` are rendered to static HTML
3
-
4
- import { createRouter } from "../router/scanner.ts"
5
- import { createContext } from "../server/middleware.ts"
6
- import { renderPageDocument, resolvePageRoute } from "../server/page-render.ts"
7
- import { wrapHTML, type HTMLWrapOptions } from "../server/html-shell.ts"
8
- import { join } from "node:path"
9
- import { mkdir, writeFile } from "node:fs/promises"
10
-
11
- export interface SSGResult {
12
- pages: Map<string, string> // path → HTML content
13
- errors: string[]
14
- }
15
-
16
- interface SSGOptions {
17
- routesDir: string
18
- outDir: string
19
- wrapHTML?: (body: string, options?: HTMLWrapOptions) => string
20
- }
21
-
22
- export async function generateStaticPages(options: SSGOptions): Promise<SSGResult> {
23
- const { routesDir, outDir, wrapHTML } = options
24
- const routes = await createRouter(routesDir)
25
- const pages = new Map<string, string>()
26
- const errors: string[] = []
27
-
28
- for (const route of routes) {
29
- if (route.isDynamic) continue
30
-
31
- try {
32
- const mod = await import(route.filePath)
33
-
34
- // Skip routes that don't opt-in to prerendering
35
- if (!mod.prerender) continue
36
-
37
- const fakeRequest = new Request(`http://localhost${route.path}`)
38
- const ctx = createContext(fakeRequest, {})
39
- const match = { route, params: {} }
40
- const resolved = await resolvePageRoute(mod, match, ctx)
41
- if (!resolved) continue
42
-
43
- const rendered = renderPageDocument(resolved.pageComponent, ctx, {}, resolved.loaderData)
44
- const renderHTML = wrapHTML ?? defaultWrapHTML
45
- const html = renderHTML(rendered.html, {
46
- title: rendered.title,
47
- loaderData: resolved.loaderData,
48
- headElements: rendered.headElements,
49
- cssFiles: resolved.cssFiles,
50
- })
51
-
52
- // Write file
53
- const outPath = route.path === "/"
54
- ? join(outDir, "index.html")
55
- : join(outDir, route.path, "index.html")
56
- await mkdir(join(outPath, ".."), { recursive: true })
57
- await writeFile(outPath, html)
58
-
59
- pages.set(route.path, outPath)
60
- } catch (err) {
61
- errors.push(`${route.path}: ${err instanceof Error ? err.message : String(err)}`)
62
- }
63
- }
64
-
65
- return { pages, errors }
66
- }
67
-
68
- function defaultWrapHTML(body: string, options: HTMLWrapOptions = {}): string {
69
- return wrapHTML(body, undefined, options)
70
- }
@@ -1,58 +0,0 @@
1
- // Bun plugin that resolves "gorsee/*" imports to framework source
2
- // and transforms JSX in route files to use our runtime
3
-
4
- import { plugin } from "bun"
5
- import { resolve } from "node:path"
6
-
7
- // Framework root — where gorsee source lives
8
- const FRAMEWORK_ROOT = resolve(import.meta.dir, "..")
9
-
10
- const EXPORT_MAP: Record<string, string> = {
11
- "gorsee": resolve(FRAMEWORK_ROOT, "index.ts"),
12
- "gorsee/compat": resolve(FRAMEWORK_ROOT, "index.ts"),
13
- "gorsee/client": resolve(FRAMEWORK_ROOT, "client.ts"),
14
- "gorsee/reactive": resolve(FRAMEWORK_ROOT, "reactive/index.ts"),
15
- "gorsee/server": resolve(FRAMEWORK_ROOT, "server-entry.ts"),
16
- "gorsee/types": resolve(FRAMEWORK_ROOT, "types/index.ts"),
17
- "gorsee/db": resolve(FRAMEWORK_ROOT, "db/index.ts"),
18
- "gorsee/router": resolve(FRAMEWORK_ROOT, "router/index.ts"),
19
- "gorsee/log": resolve(FRAMEWORK_ROOT, "log/index.ts"),
20
- "gorsee/unsafe": resolve(FRAMEWORK_ROOT, "unsafe/index.ts"),
21
- "gorsee/runtime": resolve(FRAMEWORK_ROOT, "runtime/index.ts"),
22
- "gorsee/security": resolve(FRAMEWORK_ROOT, "security/index.ts"),
23
- "gorsee/jsx-runtime": resolve(FRAMEWORK_ROOT, "jsx-runtime.ts"),
24
- "gorsee/jsx-dev-runtime": resolve(FRAMEWORK_ROOT, "jsx-runtime.ts"),
25
- "gorsee/testing": resolve(FRAMEWORK_ROOT, "testing/index.ts"),
26
- "gorsee/i18n": resolve(FRAMEWORK_ROOT, "i18n/index.ts"),
27
- "gorsee/env": resolve(FRAMEWORK_ROOT, "env/index.ts"),
28
- "gorsee/auth": resolve(FRAMEWORK_ROOT, "auth/index.ts"),
29
- "gorsee/routes": resolve(FRAMEWORK_ROOT, "runtime/typed-routes.ts"),
30
- "gorsee/cli/cmd-create": resolve(FRAMEWORK_ROOT, "cli/cmd-create.ts"),
31
- "gorsee/plugins": resolve(FRAMEWORK_ROOT, "plugins/index.ts"),
32
- "gorsee/plugins/drizzle": resolve(FRAMEWORK_ROOT, "plugins/drizzle.ts"),
33
- "gorsee/plugins/prisma": resolve(FRAMEWORK_ROOT, "plugins/prisma.ts"),
34
- "gorsee/plugins/tailwind": resolve(FRAMEWORK_ROOT, "plugins/tailwind.ts"),
35
- "gorsee/plugins/lucia": resolve(FRAMEWORK_ROOT, "plugins/lucia.ts"),
36
- "gorsee/plugins/s3": resolve(FRAMEWORK_ROOT, "plugins/s3.ts"),
37
- "gorsee/plugins/resend": resolve(FRAMEWORK_ROOT, "plugins/resend.ts"),
38
- "gorsee/plugins/stripe": resolve(FRAMEWORK_ROOT, "plugins/stripe.ts"),
39
- "gorsee/deploy": resolve(FRAMEWORK_ROOT, "deploy/index.ts"),
40
- }
41
-
42
- export function resolveFrameworkImport(specifier: string): string | undefined {
43
- return EXPORT_MAP[specifier]
44
- }
45
-
46
- plugin({
47
- name: "gorsee-resolve",
48
- setup(build) {
49
- // Resolve gorsee/* imports
50
- build.onResolve({ filter: /^gorsee(\/.*)?$/ }, (args) => {
51
- const mapped = resolveFrameworkImport(args.path)
52
- if (mapped) {
53
- return { path: mapped }
54
- }
55
- return undefined
56
- })
57
- },
58
- })
@@ -1,153 +0,0 @@
1
- // gorsee build -- production build
2
- // Bundles client JS, minifies, generates asset hashes
3
-
4
- import { join } from "node:path"
5
- import { mkdir, rm, writeFile, readdir, stat, watch } from "node:fs/promises"
6
- import { createRouter } from "../router/scanner.ts"
7
- import { buildClientBundles } from "../build/client.ts"
8
- import { generateStaticPages } from "../build/ssg.ts"
9
- import { createBuildManifest } from "../build/manifest.ts"
10
- import { createHash } from "node:crypto"
11
- import { wrapHTML } from "../server/html-shell.ts"
12
- import { createProjectContext, type RuntimeOptions } from "../runtime/project.ts"
13
-
14
- async function hashFile(path: string): Promise<string> {
15
- const content = await Bun.file(path).arrayBuffer()
16
- return createHash("sha256").update(new Uint8Array(content)).digest("hex").slice(0, 8)
17
- }
18
-
19
- async function getAllFiles(dir: string): Promise<string[]> {
20
- const files: string[] = []
21
- try {
22
- const entries = await readdir(dir, { withFileTypes: true })
23
- for (const entry of entries) {
24
- const full = join(dir, entry.name)
25
- if (entry.isDirectory()) {
26
- files.push(...await getAllFiles(full))
27
- } else {
28
- files.push(full)
29
- }
30
- }
31
- } catch {}
32
- return files
33
- }
34
-
35
- export interface BuildCommandOptions extends RuntimeOptions {
36
- minify?: boolean
37
- sourcemap?: boolean
38
- }
39
-
40
- export async function buildProject(options: BuildCommandOptions = {}) {
41
- const { cwd, paths } = createProjectContext(options)
42
- const startTime = performance.now()
43
- console.log("\n Gorsee Build\n")
44
-
45
- await rm(paths.distDir, { recursive: true, force: true })
46
- await mkdir(paths.clientDir, { recursive: true })
47
- await mkdir(paths.serverDir, { recursive: true })
48
-
49
- // 1. Scan routes
50
- const routes = await createRouter(paths.routesDir)
51
- console.log(` [1/5] Found ${routes.length} route(s)`)
52
-
53
- // 2. Build client bundles (minified)
54
- const build = await buildClientBundles(routes, cwd, {
55
- minify: options.minify ?? true,
56
- sourcemap: options.sourcemap ?? true,
57
- })
58
- console.log(` [2/5] Client bundles built (${build.entryMap.size} entries)`)
59
-
60
- // 3. Hash and copy client files to dist
61
- const clientSrc = join(paths.gorseeDir, "client")
62
- const clientFiles = await getAllFiles(clientSrc)
63
- const hashMap = new Map<string, string>()
64
-
65
- for (const file of clientFiles) {
66
- const rel = file.slice(clientSrc.length + 1)
67
- const hash = await hashFile(file)
68
- const ext = rel.lastIndexOf(".")
69
- const hashed = ext > 0 ? `${rel.slice(0, ext)}.${hash}${rel.slice(ext)}` : `${rel}.${hash}`
70
- const dest = join(paths.clientDir, hashed)
71
- await mkdir(join(dest, ".."), { recursive: true })
72
- await Bun.write(dest, Bun.file(file))
73
- hashMap.set(rel, hashed)
74
- }
75
- console.log(` [3/5] Assets hashed (${hashMap.size} files)`)
76
-
77
- // 4. Generate manifest
78
- const manifest = await createBuildManifest(routes, build.entryMap, hashMap)
79
-
80
- await writeFile(join(paths.distDir, "manifest.json"), JSON.stringify(manifest, null, 2))
81
- console.log(` [4/5] Manifest generated`)
82
-
83
- // 5. Static Site Generation (prerender pages with `export const prerender = true`)
84
- const ssgResult = await generateStaticPages({
85
- routesDir: paths.routesDir,
86
- outDir: join(paths.distDir, "static"),
87
- wrapHTML: (body, options = {}) => wrapHTML(body, undefined, options),
88
- })
89
- const finalManifest = ssgResult.pages.size > 0
90
- ? await createBuildManifest(routes, build.entryMap, hashMap, ssgResult.pages.keys())
91
- : manifest
92
- if (ssgResult.pages.size > 0) {
93
- await writeFile(join(paths.distDir, "manifest.json"), JSON.stringify(finalManifest, null, 2))
94
- }
95
- if (ssgResult.errors.length > 0) {
96
- for (const err of ssgResult.errors) console.error(` SSG error: ${err}`)
97
- }
98
- console.log(` [5/5] SSG: ${ssgResult.pages.size} page(s) pre-rendered`)
99
-
100
- // Stats
101
- let totalSize = 0
102
- for (const file of await getAllFiles(paths.clientDir)) {
103
- const s = await stat(file)
104
- totalSize += s.size
105
- }
106
-
107
- const elapsed = ((performance.now() - startTime) / 1000).toFixed(2)
108
- console.log()
109
- console.log(` Output: dist/`)
110
- console.log(` Client size: ${(totalSize / 1024).toFixed(1)} KB`)
111
- console.log(` Built in ${elapsed}s`)
112
- console.log()
113
- }
114
-
115
- export async function watchBuildProject(options: BuildCommandOptions = {}) {
116
- const { paths } = createProjectContext(options)
117
-
118
- console.log("\n Gorsee Build --watch\n")
119
- console.log(" Performing initial build...")
120
- await buildProject(options)
121
-
122
- let building = false
123
- let queued = false
124
-
125
- async function rebuild() {
126
- if (building) { queued = true; return }
127
- building = true
128
- try {
129
- const start = performance.now()
130
- await buildProject(options)
131
- const ms = (performance.now() - start).toFixed(0)
132
- console.log(` Rebuilt in ${ms}ms`)
133
- } catch (err) {
134
- console.error(" Build error:", err)
135
- } finally {
136
- building = false
137
- if (queued) { queued = false; await rebuild() }
138
- }
139
- }
140
-
141
- console.log(" Watching for changes...")
142
- const watcher = watch(paths.routesDir, { recursive: true })
143
- for await (const _event of watcher) {
144
- await rebuild()
145
- }
146
- }
147
-
148
- export async function runBuild(args: string[], options: BuildCommandOptions = {}) {
149
- if (args.includes("--watch")) {
150
- return watchBuildProject(options)
151
- }
152
- return buildProject(options)
153
- }
@@ -1,239 +0,0 @@
1
- // gorsee check -- validate project structure, types, and safety
2
-
3
- import { join, relative } from "node:path"
4
- import { readdir, stat, readFile } from "node:fs/promises"
5
- import { createRouter } from "../router/scanner.ts"
6
- import { createProjectContext, type RuntimeOptions } from "../runtime/project.ts"
7
-
8
- interface CheckResult {
9
- errors: CheckIssue[]
10
- warnings: CheckIssue[]
11
- info: string[]
12
- }
13
-
14
- interface CheckIssue {
15
- code: string
16
- file: string
17
- line?: number
18
- message: string
19
- fix?: string
20
- }
21
-
22
- const MAX_FILE_LINES = 500
23
-
24
- export type { CheckResult, CheckIssue }
25
-
26
- async function getAllTsFiles(dir: string): Promise<string[]> {
27
- const files: string[] = []
28
- let entries: string[]
29
- try {
30
- entries = await readdir(dir)
31
- } catch {
32
- return files
33
- }
34
-
35
- for (const entry of entries) {
36
- if (entry === "node_modules" || entry === "dist" || entry === ".git") continue
37
- const fullPath = join(dir, entry)
38
- const s = await stat(fullPath)
39
- if (s.isDirectory()) {
40
- files.push(...(await getAllTsFiles(fullPath)))
41
- } else if (entry.endsWith(".ts") || entry.endsWith(".tsx")) {
42
- files.push(fullPath)
43
- }
44
- }
45
- return files
46
- }
47
-
48
- async function checkFileSize(file: string, cwd: string): Promise<CheckIssue[]> {
49
- const issues: CheckIssue[] = []
50
- const content = await readFile(file, "utf-8")
51
- const lines = content.split("\n").length
52
- const rel = relative(cwd, file)
53
-
54
- if (lines > MAX_FILE_LINES) {
55
- issues.push({
56
- code: "E901",
57
- file: rel,
58
- message: `File has ${lines} lines (limit: ${MAX_FILE_LINES}). Must split before merge.`,
59
- fix: "Extract logic into focused modules by responsibility",
60
- })
61
- } else if (lines > 300) {
62
- issues.push({
63
- code: "W901",
64
- file: rel,
65
- message: `File has ${lines} lines (warning threshold: 300). Plan to split.`,
66
- fix: "Consider extracting into separate modules",
67
- })
68
- }
69
-
70
- return issues
71
- }
72
-
73
- async function checkUnsafePatterns(file: string, cwd: string): Promise<CheckIssue[]> {
74
- const issues: CheckIssue[] = []
75
- const content = await readFile(file, "utf-8")
76
- const lines = content.split("\n")
77
- const rel = relative(cwd, file)
78
-
79
- for (let i = 0; i < lines.length; i++) {
80
- const line = lines[i]!
81
- const lineNum = i + 1
82
-
83
- // Check for string concatenation in SQL-like contexts
84
- if (line.match(/db\.(get|all|run)\s*\(\s*`/) && !line.includes("SafeSQL")) {
85
- issues.push({
86
- code: "E001",
87
- file: rel,
88
- line: lineNum,
89
- message: "Raw template literal in database query (SQL injection risk)",
90
- fix: "Use SafeSQL`...` tagged template: db.get(SafeSQL`SELECT ...`)",
91
- })
92
- }
93
-
94
- // Check for string concat in db calls
95
- if (line.match(/db\.(get|all|run)\s*\(\s*["']/) || line.match(/db\.(get|all|run)\s*\([^S]*\+/)) {
96
- issues.push({
97
- code: "E001",
98
- file: rel,
99
- line: lineNum,
100
- message: "String concatenation in database query (SQL injection risk)",
101
- fix: "Use SafeSQL`...` tagged template with parameterized values",
102
- })
103
- }
104
-
105
- // Check for innerHTML usage
106
- if (line.includes(".innerHTML") && !line.includes("unsafeHTML")) {
107
- issues.push({
108
- code: "E002",
109
- file: rel,
110
- line: lineNum,
111
- message: "Direct innerHTML assignment (XSS risk)",
112
- fix: "Use SafeHTML`...` or sanitize() from gorsee/types",
113
- })
114
- }
115
- }
116
-
117
- return issues
118
- }
119
-
120
- async function checkProjectStructure(cwd: string): Promise<CheckIssue[]> {
121
- const issues: CheckIssue[] = []
122
-
123
- // Check routes/ exists
124
- try {
125
- await stat(join(cwd, "routes"))
126
- } catch {
127
- issues.push({
128
- code: "E902",
129
- file: ".",
130
- message: "Missing routes/ directory",
131
- fix: "Create routes/ directory with at least routes/index.ts",
132
- })
133
- }
134
-
135
- // Check app.config.ts exists
136
- try {
137
- await stat(join(cwd, "app.config.ts"))
138
- } catch {
139
- issues.push({
140
- code: "W902",
141
- file: ".",
142
- message: "Missing app.config.ts",
143
- fix: "Create app.config.ts with project configuration",
144
- })
145
- }
146
-
147
- return issues
148
- }
149
-
150
- export interface CheckCommandOptions extends RuntimeOptions {
151
- runTypeScript?: boolean
152
- }
153
-
154
- export async function checkProject(options: CheckCommandOptions = {}): Promise<CheckResult> {
155
- const { cwd, paths } = createProjectContext(options)
156
- const runTypeScript = options.runTypeScript ?? true
157
- const result: CheckResult = { errors: [], warnings: [], info: [] }
158
-
159
- const structIssues = await checkProjectStructure(cwd)
160
- for (const issue of structIssues) {
161
- if (issue.code.startsWith("E")) result.errors.push(issue)
162
- else result.warnings.push(issue)
163
- }
164
-
165
- try {
166
- const routes = await createRouter(paths.routesDir)
167
- result.info.push(`Found ${routes.length} route(s)`)
168
- } catch {
169
- result.info.push("Could not scan routes")
170
- }
171
-
172
- const files = await getAllTsFiles(paths.routesDir)
173
- files.push(...(await getAllTsFiles(paths.sharedDir)))
174
- files.push(...(await getAllTsFiles(paths.middlewareDir)))
175
-
176
- for (const file of files) {
177
- const sizeIssues = await checkFileSize(file, cwd)
178
- const safetyIssues = await checkUnsafePatterns(file, cwd)
179
- for (const issue of [...sizeIssues, ...safetyIssues]) {
180
- if (issue.code.startsWith("E")) result.errors.push(issue)
181
- else result.warnings.push(issue)
182
- }
183
- }
184
-
185
- if (runTypeScript) {
186
- const tsc = Bun.spawn(["bun", "x", "tsc", "--noEmit"], {
187
- cwd,
188
- stdout: "pipe",
189
- stderr: "pipe",
190
- })
191
- const tscExit = await tsc.exited
192
- if (tscExit !== 0) {
193
- const stderr = await new Response(tsc.stderr).text()
194
- result.errors.push({
195
- code: "TSC",
196
- file: ".",
197
- message: `TypeScript errors:\n${stderr.trim()}`,
198
- })
199
- } else {
200
- result.info.push("TypeScript: no errors")
201
- }
202
- }
203
-
204
- return result
205
- }
206
-
207
- /** @deprecated Use checkProject() for programmatic access. */
208
- export async function runCheck(_args: string[], options: CheckCommandOptions = {}) {
209
- console.log("\n Gorsee Check\n")
210
- if (options.runTypeScript ?? true) {
211
- console.log(" Running TypeScript check...")
212
- }
213
- const result = await checkProject(options)
214
-
215
- // Report
216
- for (const info of result.info) {
217
- console.log(` [info] ${info}`)
218
- }
219
- for (const warn of result.warnings) {
220
- const loc = warn.line ? `${warn.file}:${warn.line}` : warn.file
221
- console.log(` [warn] ${warn.code} ${loc}: ${warn.message}`)
222
- if (warn.fix) console.log(` Fix: ${warn.fix}`)
223
- }
224
- for (const err of result.errors) {
225
- const loc = err.line ? `${err.file}:${err.line}` : err.file
226
- console.log(` [ERROR] ${err.code} ${loc}: ${err.message}`)
227
- if (err.fix) console.log(` Fix: ${err.fix}`)
228
- }
229
-
230
- console.log()
231
- if (result.errors.length === 0) {
232
- console.log(` Result: PASS (${result.warnings.length} warning(s))`)
233
- } else {
234
- console.log(` Result: FAIL (${result.errors.length} error(s), ${result.warnings.length} warning(s))`)
235
- }
236
- console.log()
237
-
238
- process.exit(result.errors.length > 0 ? 1 : 0)
239
- }