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,67 @@
1
+ import { log } from "../log/index.js";
2
+ import {
3
+ createClientScriptPath
4
+ } from "../server/page-render.js";
5
+ import { handleRouteRequest } from "../server/route-request.js";
6
+ import {
7
+ renderRouteErrorBoundaryResponse,
8
+ renderRoutePageResponse,
9
+ renderRoutePartialResponse
10
+ } from "../server/route-response.js";
11
+ async function renderPageRoute(opts) {
12
+ const { match, request, nonce, start, clientBuild, ctx, resolved } = opts, clientScript = createClientScriptPath(clientBuild.entryMap.get(match.route.path)), response = await renderRoutePageResponse({
13
+ match,
14
+ ctx,
15
+ resolved,
16
+ clientScript,
17
+ nonce,
18
+ secHeaders: opts.secHeaders,
19
+ wrapHTML: opts.wrapHTML
20
+ }), elapsed = (performance.now() - start).toFixed(1);
21
+ log.info("request", {
22
+ method: request.method,
23
+ path: match.route.path,
24
+ status: response.status,
25
+ ms: elapsed,
26
+ mode: resolved.renderMode === "stream" ? "stream" : "async"
27
+ });
28
+ return response;
29
+ }
30
+ async function renderPartialRoute(opts) {
31
+ const { match, clientBuild, ctx, resolved } = opts, clientScript = createClientScriptPath(clientBuild.entryMap.get(match.route.path));
32
+ return renderRoutePartialResponse({
33
+ match,
34
+ ctx,
35
+ resolved,
36
+ clientScript,
37
+ secHeaders: opts.secHeaders
38
+ });
39
+ }
40
+ export async function handlePageRequest(opts) {
41
+ const { match, request } = opts;
42
+ return handleRouteRequest({
43
+ match,
44
+ request,
45
+ trace: opts.trace,
46
+ trustedOrigin: opts.trustedOrigin,
47
+ trustForwardedHeaders: opts.trustForwardedHeaders,
48
+ securityPolicy: opts.securityPolicy,
49
+ onPartialRequest: async ({ ctx, resolved }) => renderPartialRoute({ ...opts, ctx, resolved }),
50
+ onPageRequest: async ({ ctx, resolved }) => renderPageRoute({ ...opts, ctx, resolved }),
51
+ onRouteError: async (err) => {
52
+ if (match.route.errorPath) {
53
+ const errObj = err instanceof Error ? err : Error(String(err));
54
+ return renderErrorBoundary(match.route.errorPath, errObj, opts);
55
+ }
56
+ throw err;
57
+ }
58
+ });
59
+ }
60
+ async function renderErrorBoundary(errorPath, error, opts) {
61
+ return renderRouteErrorBoundaryResponse(errorPath, error, {
62
+ match: opts.match,
63
+ nonce: opts.nonce,
64
+ secHeaders: opts.secHeaders,
65
+ wrapHTML: opts.wrapHTML
66
+ });
67
+ }
@@ -0,0 +1,6 @@
1
+ export interface WatcherOptions {
2
+ dirs: string[];
3
+ onChange: (path: string) => void;
4
+ debounceMs?: number;
5
+ }
6
+ export declare function startWatcher(options: WatcherOptions): () => void;
@@ -0,0 +1,34 @@
1
+ import { watch } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { log } from "../log/index.js";
4
+ export function startWatcher(options) {
5
+ const { dirs, onChange, debounceMs = 100 } = options, watchers = [];
6
+ let timer = null, pendingPath = "";
7
+ function handle(filename, dir) {
8
+ if (!filename)
9
+ return;
10
+ if (!filename.match(/\.(tsx?|jsx?|css)$/))
11
+ return;
12
+ pendingPath = join(dir, filename);
13
+ if (timer)
14
+ clearTimeout(timer);
15
+ timer = setTimeout(() => {
16
+ log.info("file changed", { file: pendingPath });
17
+ onChange(pendingPath);
18
+ timer = null;
19
+ }, debounceMs);
20
+ }
21
+ for (const dir of dirs)
22
+ try {
23
+ const w = watch(dir, { recursive: !0 }, (_event, filename) => {
24
+ handle(filename, dir);
25
+ });
26
+ watchers.push(w);
27
+ } catch {}
28
+ return () => {
29
+ for (const w of watchers)
30
+ w.close();
31
+ if (timer)
32
+ clearTimeout(timer);
33
+ };
34
+ }
@@ -0,0 +1,11 @@
1
+ import { type RuntimeOptions } from "./runtime/project.js";
2
+ import type { MiddlewareFn } from "./server/middleware.js";
3
+ import { type AIObservabilityConfig } from "./ai/index.js";
4
+ interface StartDevServerOptions extends RuntimeOptions {
5
+ port?: number;
6
+ rpcMiddlewares?: MiddlewareFn[];
7
+ ai?: AIObservabilityConfig;
8
+ }
9
+ export declare function startDevServer(options?: StartDevServerOptions): Promise<Bun.Server<undefined>>;
10
+ export declare function isAllowedHMROrigin(request: Request, trustedOrigin?: string): boolean;
11
+ export {};
@@ -0,0 +1,268 @@
1
+ import { createRouter, matchRoute, buildStaticMap } from "./router/index.js";
2
+ import { __resetRPCState } from "./server/rpc.js";
3
+ import { securityHeaders } from "./security/headers.js";
4
+ import { createRateLimiter } from "./security/rate-limit.js";
5
+ import { EVENT_REPLAY_SCRIPT } from "./runtime/event-replay.js";
6
+ import { log, setLogLevel } from "./log/index.js";
7
+ import { buildClientBundles } from "./build/client.js";
8
+ import { HMR_CLIENT_SCRIPT, addHMRClient, createHMRUpdate, removeHMRClient, notifyHMRUpdate } from "./dev/hmr.js";
9
+ import { startWatcher } from "./dev/watcher.js";
10
+ import { renderErrorOverlay } from "./dev/error-overlay.js";
11
+ import { handlePageRequest } from "./dev/request-handler.js";
12
+ import { loadEnv } from "./env/index.js";
13
+ import { generateNonce, wrapHTML } from "./server/html-shell.js";
14
+ import { renderNotFoundPage } from "./server/not-found.js";
15
+ import { createRateLimitResponse, handleRPCWithHeaders } from "./server/request-preflight.js";
16
+ import { createRequestSecurityPolicy, validateRequestSecurityPolicy } from "./server/request-security-policy.js";
17
+ import { dispatchRuntimeRequestPlan } from "./server/runtime-dispatch.js";
18
+ import { createRuntimeRequestPlan } from "./server/request-surface.js";
19
+ import { servePrefixedStaticFile, serveStaticFile } from "./server/static-file.js";
20
+ import { resolveRequestExecutionPolicy, resolveRequestMetadata } from "./server/request-policy.js";
21
+ import { join } from "node:path";
22
+ import { createProjectContext, resolveRuntimeEnv } from "./runtime/project.js";
23
+ import {
24
+ loadAppConfig,
25
+ resolveAIConfig,
26
+ resolveRPCMiddlewares,
27
+ resolveTrustedHosts,
28
+ resolveTrustedForwardedHops,
29
+ resolveTrustedOrigin,
30
+ resolveTrustForwardedHeaders
31
+ } from "./runtime/app-config.js";
32
+ import {
33
+ configureAIObservability,
34
+ createTraceIds,
35
+ emitAIEvent
36
+ } from "./ai/index.js";
37
+ async function tryServeStatic(publicDir, pathname) {
38
+ if (pathname === "/")
39
+ return null;
40
+ return serveStaticFile(publicDir, pathname.slice(1));
41
+ }
42
+ async function tryServeClientBundle(clientDir, pathname) {
43
+ return servePrefixedStaticFile(pathname, "/_gorsee/", clientDir, {
44
+ contentType: "application/javascript"
45
+ });
46
+ }
47
+ async function render404Page(routesDir, nonce) {
48
+ return renderNotFoundPage(routesDir, nonce, {
49
+ bodyPrefix: [EVENT_REPLAY_SCRIPT.replace("<script", `<script nonce="${nonce}"`)],
50
+ bodySuffix: [HMR_CLIENT_SCRIPT.replace("<script", `<script nonce="${nonce}"`)]
51
+ });
52
+ }
53
+ function createDevHTMLWrapper(body, nonce, options) {
54
+ const eventReplay = EVENT_REPLAY_SCRIPT.replace("<script", `<script nonce="${nonce}"`), hmrScript = HMR_CLIENT_SCRIPT.replace("<script", `<script nonce="${nonce}"`);
55
+ return wrapHTML(body, nonce, {
56
+ ...options,
57
+ bodyPrefix: [...options?.bodyPrefix ?? [], eventReplay],
58
+ bodySuffix: [...options?.bodySuffix ?? [], hmrScript]
59
+ });
60
+ }
61
+ async function createDevRuntimeState(cwd) {
62
+ const { paths } = createProjectContext({ cwd });
63
+ return {
64
+ cwd,
65
+ routesDir: paths.routesDir,
66
+ publicDir: paths.publicDir,
67
+ clientDir: join(paths.gorseeDir, "client"),
68
+ rateLimiter: createRateLimiter(200, "1m"),
69
+ routes: [],
70
+ staticMap: new Map,
71
+ clientBuild: { entryMap: new Map }
72
+ };
73
+ }
74
+ async function rebuildClient(state, buildState) {
75
+ if (buildState.inProgress) {
76
+ buildState.queued = !0;
77
+ return;
78
+ }
79
+ buildState.inProgress = !0;
80
+ try {
81
+ __resetRPCState();
82
+ state.routes = await createRouter(state.routesDir);
83
+ state.staticMap = buildStaticMap(state.routes);
84
+ state.clientBuild = await buildClientBundles(state.routes, state.cwd);
85
+ log.info("client build complete", { routes: state.clientBuild.entryMap.size });
86
+ } catch (err) {
87
+ log.error("client build failed", { error: String(err) });
88
+ } finally {
89
+ buildState.inProgress = !1;
90
+ if (buildState.queued) {
91
+ buildState.queued = !1;
92
+ await rebuildClient(state, buildState);
93
+ }
94
+ }
95
+ }
96
+ export async function startDevServer(options = {}) {
97
+ const runtime = createProjectContext(options), cwd = runtime.cwd, state = await createDevRuntimeState(cwd), buildState = { inProgress: !1, queued: !1 };
98
+ await loadEnv(cwd);
99
+ const appConfig = await loadAppConfig(cwd), rpcMiddlewares = resolveRPCMiddlewares(appConfig, options.rpcMiddlewares), trustForwardedHeaders = resolveTrustForwardedHeaders(appConfig), trustedForwardedHops = resolveTrustedForwardedHops(appConfig);
100
+ configureAIObservability(resolveAIConfig(cwd, appConfig, options.ai));
101
+ const envConfig = resolveRuntimeEnv(process.env), port = options.port ?? envConfig.port, trustedOrigin = resolveTrustedOrigin(appConfig, process.env) ?? `http://localhost:${port}`, requestSecurityPolicy = createRequestSecurityPolicy({
102
+ trustedOrigin,
103
+ trustForwardedHeaders,
104
+ trustedForwardedHops,
105
+ trustedHosts: resolveTrustedHosts(appConfig)
106
+ });
107
+ setLogLevel(envConfig.logLevel);
108
+ log.info("scanning routes", { dir: state.routesDir });
109
+ state.routes = await createRouter(state.routesDir);
110
+ state.staticMap = buildStaticMap(state.routes);
111
+ for (const route of state.routes)
112
+ log.info("route registered", { path: route.path, file: route.filePath });
113
+ await rebuildClient(state, buildState);
114
+ startWatcher({
115
+ dirs: [state.routesDir, runtime.paths.sharedDir, runtime.paths.middlewareDir],
116
+ onChange: async (changedPath) => {
117
+ await rebuildClient(state, buildState);
118
+ notifyHMRUpdate(createHMRUpdate({
119
+ changedPath,
120
+ routesDir: state.routesDir,
121
+ sharedDir: runtime.paths.sharedDir,
122
+ middlewareDir: runtime.paths.middlewareDir,
123
+ routes: state.routes,
124
+ clientBuild: state.clientBuild
125
+ }));
126
+ }
127
+ });
128
+ const server = Bun.serve({
129
+ port,
130
+ async fetch(request, server) {
131
+ const pathname = new URL(request.url).pathname, trace = createTraceIds(), startTs = performance.now();
132
+ await emitAIEvent({
133
+ kind: "request.start",
134
+ severity: "info",
135
+ source: "dev",
136
+ message: "incoming dev request",
137
+ requestId: trace.requestId,
138
+ traceId: trace.traceId,
139
+ spanId: trace.spanId,
140
+ data: { method: request.method, pathname }
141
+ });
142
+ const ip = server.requestIP(request)?.address ?? "unknown", rateLimitResponse = await createRateLimitResponse(state.rateLimiter, ip);
143
+ if (rateLimitResponse)
144
+ return rateLimitResponse;
145
+ const start = performance.now(), nonce = generateNonce(), secHeaders = securityHeaders({}, nonce), match = matchRoute(state.routes, pathname, state.staticMap), requestPlan = createRuntimeRequestPlan({
146
+ pathname,
147
+ hasRouteMatch: Boolean(match),
148
+ allowHMR: !0
149
+ });
150
+ if (requestPlan[0] === "hmr") {
151
+ const hmrPolicy = resolveRequestExecutionPolicy("rpc"), hmrMetadata = resolveRequestMetadata(request, {
152
+ trustedOrigin: requestSecurityPolicy.trustedOrigin,
153
+ trustForwardedHeaders: requestSecurityPolicy.trustForwardedHeaders,
154
+ kind: "rpc",
155
+ visibility: "internal"
156
+ }), violation = validateRequestSecurityPolicy(hmrMetadata, hmrPolicy, requestSecurityPolicy);
157
+ if (violation)
158
+ return violation;
159
+ if (server.upgrade(request))
160
+ return new Response(null, { status: 101 });
161
+ return new Response("WebSocket upgrade failed", { status: 400 });
162
+ }
163
+ const dispatch = await dispatchRuntimeRequestPlan({
164
+ plan: requestPlan.filter((surface) => surface !== "hmr"),
165
+ pathname,
166
+ request,
167
+ trace,
168
+ startTs,
169
+ source: "dev",
170
+ route: match?.route.path,
171
+ handlers: {
172
+ rpc: async () => handleRPCWithHeaders(request, secHeaders, {
173
+ middlewares: rpcMiddlewares,
174
+ securityPolicy: requestSecurityPolicy
175
+ }),
176
+ bundle: async () => tryServeClientBundle(state.clientDir, pathname),
177
+ static: async () => tryServeStatic(state.publicDir, pathname),
178
+ route: async () => {
179
+ if (!match)
180
+ return null;
181
+ await emitAIEvent({
182
+ kind: "route.match",
183
+ severity: "info",
184
+ source: "dev",
185
+ message: "route matched",
186
+ requestId: trace.requestId,
187
+ traceId: trace.traceId,
188
+ spanId: trace.spanId,
189
+ route: match.route.path,
190
+ data: { pathname, file: match.route.filePath }
191
+ });
192
+ try {
193
+ return await handlePageRequest({
194
+ match,
195
+ request,
196
+ nonce,
197
+ start,
198
+ trace,
199
+ trustedOrigin,
200
+ clientBuild: state.clientBuild,
201
+ secHeaders,
202
+ wrapHTML: createDevHTMLWrapper,
203
+ trustForwardedHeaders,
204
+ securityPolicy: requestSecurityPolicy
205
+ });
206
+ } catch (err) {
207
+ const errObj = err instanceof Error ? err : Error(String(err));
208
+ log.error("request error", { path: pathname, error: errObj.message });
209
+ await emitAIEvent({
210
+ kind: "request.error",
211
+ severity: "error",
212
+ source: "dev",
213
+ message: errObj.message,
214
+ requestId: trace.requestId,
215
+ traceId: trace.traceId,
216
+ spanId: trace.spanId,
217
+ route: match.route.path,
218
+ durationMs: Number((performance.now() - startTs).toFixed(2)),
219
+ data: { method: request.method, pathname, error: errObj.message }
220
+ });
221
+ return new Response(renderErrorOverlay(errObj, nonce), {
222
+ status: 500,
223
+ headers: { "Content-Type": "text/html", ...secHeaders }
224
+ });
225
+ }
226
+ },
227
+ "not-found": async () => {
228
+ if (match)
229
+ return null;
230
+ const notFoundHtml = await render404Page(state.routesDir, nonce);
231
+ return new Response(notFoundHtml, {
232
+ status: 404,
233
+ headers: { "Content-Type": "text/html", ...secHeaders }
234
+ });
235
+ }
236
+ }
237
+ });
238
+ if (dispatch)
239
+ return dispatch.response;
240
+ throw Error(`Unhandled request plan for ${pathname}`);
241
+ },
242
+ websocket: {
243
+ open(ws) {
244
+ addHMRClient(ws);
245
+ },
246
+ close(ws) {
247
+ removeHMRClient(ws);
248
+ },
249
+ message() {}
250
+ }
251
+ });
252
+ log.info("dev server started", { url: `http://localhost:${server.port}` });
253
+ return server;
254
+ }
255
+ export function isAllowedHMROrigin(request, trustedOrigin) {
256
+ const securityPolicy = createRequestSecurityPolicy({ trustedOrigin }), metadata = resolveRequestMetadata(request, {
257
+ trustedOrigin: securityPolicy.trustedOrigin,
258
+ kind: "rpc",
259
+ visibility: "internal",
260
+ trustForwardedHeaders: securityPolicy.trustForwardedHeaders
261
+ });
262
+ return validateRequestSecurityPolicy(metadata, resolveRequestExecutionPolicy("rpc"), securityPolicy) === null;
263
+ }
264
+ if (import.meta.main)
265
+ startDevServer().catch((err) => {
266
+ console.error("Failed to start dev server:", err);
267
+ process.exit(1);
268
+ });
@@ -0,0 +1,3 @@
1
+ export declare function loadEnv(cwd: string): Promise<void>;
2
+ export declare function getPublicEnv(): Record<string, string>;
3
+ export declare function env(key: string, defaultValue?: string): string;
@@ -0,0 +1,57 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ function parseEnvFile(content) {
4
+ const result = {};
5
+ for (const line of content.split(`
6
+ `)) {
7
+ const trimmed = line.trim();
8
+ if (!trimmed || trimmed.startsWith("#"))
9
+ continue;
10
+ const eqIndex = trimmed.indexOf("=");
11
+ if (eqIndex < 0)
12
+ continue;
13
+ const key = trimmed.slice(0, eqIndex).trim();
14
+ let value = trimmed.slice(eqIndex + 1).trim();
15
+ if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'"))
16
+ value = value.slice(1, -1);
17
+ result[key] = value;
18
+ }
19
+ return result;
20
+ }
21
+ async function loadFile(path) {
22
+ try {
23
+ const content = await readFile(path, "utf-8");
24
+ return parseEnvFile(content);
25
+ } catch {
26
+ return {};
27
+ }
28
+ }
29
+ export async function loadEnv(cwd) {
30
+ const mode = "development", files = [
31
+ join(cwd, ".env"),
32
+ join(cwd, `.env.${mode}`),
33
+ join(cwd, ".env.local")
34
+ ];
35
+ for (const file of files) {
36
+ const vars = await loadFile(file);
37
+ for (const [key, value] of Object.entries(vars))
38
+ if (process.env[key] === void 0)
39
+ process.env[key] = value;
40
+ }
41
+ }
42
+ export function getPublicEnv() {
43
+ const result = {};
44
+ for (const [key, value] of Object.entries(process.env))
45
+ if (key.startsWith("PUBLIC_") && value !== void 0)
46
+ result[key] = value;
47
+ return result;
48
+ }
49
+ export function env(key, defaultValue) {
50
+ const value = process.env[key];
51
+ if (value === void 0) {
52
+ if (defaultValue !== void 0)
53
+ return defaultValue;
54
+ throw Error(`[GORSEE] Missing required environment variable: ${key}`);
55
+ }
56
+ return value;
57
+ }
@@ -0,0 +1,9 @@
1
+ export type ErrorCode = "E001" | "E002" | "E003" | "E004" | "E005" | "E101" | "E102" | "E103" | "E201" | "E202" | "E301" | "E302" | "E401" | "E402" | "E501" | "E502" | "E901" | "E902";
2
+ interface ErrorEntry {
3
+ code: ErrorCode;
4
+ title: string;
5
+ description: string;
6
+ fix: string;
7
+ }
8
+ export declare const ERROR_CATALOG: Record<string, ErrorEntry>;
9
+ export {};
@@ -1,48 +1,32 @@
1
- export type ErrorCode =
2
- | "E001" | "E002" | "E003" | "E004" | "E005" // type safety
3
- | "E101" | "E102" | "E103" // server functions
4
- | "E201" | "E202" // routing
5
- | "E301" | "E302" // reactivity
6
- | "E401" | "E402" // SSR/hydration
7
- | "E501" | "E502" // security
8
- | "E901" | "E902" // project structure
9
-
10
- interface ErrorEntry {
11
- code: ErrorCode
12
- title: string
13
- description: string
14
- fix: string
15
- }
16
-
17
- export const ERROR_CATALOG: Record<string, ErrorEntry> = {
1
+ export const ERROR_CATALOG = {
18
2
  E001: {
19
3
  code: "E001",
20
4
  title: "SafeSQL violation",
21
5
  description: "Raw string passed to database query instead of SafeSQL tagged template",
22
- fix: "Use SafeSQL`...` tagged template literal with parameterized values",
6
+ fix: "Use SafeSQL`...` tagged template literal with parameterized values"
23
7
  },
24
8
  E002: {
25
9
  code: "E002",
26
10
  title: "SafeHTML violation",
27
11
  description: "Unsanitized string used in HTML context",
28
- fix: "Use sanitize() or SafeHTML`...` tagged template literal",
12
+ fix: "Use sanitize() or SafeHTML`...` tagged template literal"
29
13
  },
30
14
  E003: {
31
15
  code: "E003",
32
16
  title: "Server function closure capture",
33
17
  description: "server() function captures a client-side variable",
34
- fix: "Pass the value as a function argument instead of capturing it from outer scope",
18
+ fix: "Pass the value as a function argument instead of capturing it from outer scope"
35
19
  },
36
20
  E004: {
37
21
  code: "E004",
38
22
  title: "Invalid URL",
39
23
  description: "String is not a valid URL",
40
- fix: "Provide a valid URL with http:, https:, or mailto: protocol",
24
+ fix: "Provide a valid URL with http:, https:, or mailto: protocol"
41
25
  },
42
26
  E005: {
43
27
  code: "E005",
44
28
  title: "Disallowed URL protocol",
45
29
  description: "URL uses a protocol that is not allowed (potential open redirect)",
46
- fix: "Use http:, https:, or mailto: protocol",
47
- },
48
- }
30
+ fix: "Use http:, https:, or mailto: protocol"
31
+ }
32
+ };
@@ -0,0 +1,22 @@
1
+ import { type ErrorCode } from "./catalog.js";
2
+ export declare class GorseeError extends Error {
3
+ readonly code: ErrorCode;
4
+ readonly filePath?: string;
5
+ readonly line?: number;
6
+ constructor(code: ErrorCode, details?: {
7
+ filePath?: string;
8
+ line?: number;
9
+ extra?: string;
10
+ });
11
+ }
12
+ export interface FormattedError {
13
+ human: string;
14
+ json: {
15
+ code: ErrorCode;
16
+ title: string;
17
+ file?: string;
18
+ line?: number;
19
+ fix: string;
20
+ };
21
+ }
22
+ export declare function formatError(err: GorseeError): FormattedError;
@@ -0,0 +1,43 @@
1
+ import { ERROR_CATALOG } from "./catalog.js";
2
+
3
+ export class GorseeError extends Error {
4
+ code;
5
+ filePath;
6
+ line;
7
+ constructor(code, details) {
8
+ const title = ERROR_CATALOG[code]?.title ?? "Unknown error";
9
+ super(`[GORSEE ${code}] ${title}${details?.extra ? `: ${details.extra}` : ""}`);
10
+ this.code = code;
11
+ this.filePath = details?.filePath;
12
+ this.line = details?.line;
13
+ }
14
+ }
15
+ export function formatError(err) {
16
+ const entry = ERROR_CATALOG[err.code], location = err.filePath ? `
17
+ ${err.filePath}${err.line ? `:${err.line}` : ""}` : "";
18
+ return {
19
+ human: [
20
+ `GORSEE ${err.code}: ${entry?.title ?? "Unknown"}`,
21
+ location,
22
+ `
23
+ What: ${entry?.description ?? err.message}`,
24
+ ` Fix: ${entry?.fix ?? "See documentation"}`,
25
+ `
26
+ AI context (copy entire block):`,
27
+ ` +${"\u2500".repeat(45)}`,
28
+ " | Framework: Gorsee.js",
29
+ ` | Error: ${err.code} - ${entry?.title}`,
30
+ err.filePath ? ` | File: ${err.filePath}${err.line ? `:${err.line}` : ""}` : null,
31
+ ` | Fix: ${entry?.fix}`,
32
+ ` +${"\u2500".repeat(45)}`
33
+ ].filter(Boolean).join(`
34
+ `),
35
+ json: {
36
+ code: err.code,
37
+ title: entry?.title ?? "Unknown",
38
+ file: err.filePath,
39
+ line: err.line,
40
+ fix: entry?.fix ?? "See documentation"
41
+ }
42
+ };
43
+ }
@@ -0,0 +1,2 @@
1
+ export { GorseeError, formatError } from "./formatter.js";
2
+ export { ERROR_CATALOG, type ErrorCode } from "./catalog.js";
@@ -0,0 +1,2 @@
1
+ export { GorseeError, formatError } from "./formatter.js";
2
+ export { ERROR_CATALOG } from "./catalog.js";
@@ -0,0 +1,15 @@
1
+ import { type ActionFn, type ActionReturn, type ActionResult } from "../server/action.js";
2
+ import type { Context } from "../server/middleware.js";
3
+ import { type ActionValidationResult, type FormSchema } from "../runtime/validated-form.js";
4
+ export interface FormActionContext<TData extends Record<string, unknown>> {
5
+ ctx: Context;
6
+ data: TData;
7
+ values: Record<string, string>;
8
+ validation: ActionValidationResult<TData>;
9
+ }
10
+ export interface DefineFormActionOptions {
11
+ invalidMessage?: string;
12
+ invalidStatus?: number;
13
+ }
14
+ export declare function defineFormAction<TData extends Record<string, unknown>, TResult = unknown>(schema: FormSchema<TData>, handler: (input: FormActionContext<TData>) => Promise<ActionReturn<TResult>>, options?: DefineFormActionOptions): ActionFn<TResult>;
15
+ export type { ActionResult };
@@ -0,0 +1,20 @@
1
+ import { actionFailure, defineAction } from "../server/action.js";
2
+ import { validateAction } from "../runtime/validated-form.js";
3
+ export function defineFormAction(schema, handler, options = {}) {
4
+ return defineAction(async (ctx) => {
5
+ const validation = await validateAction(ctx.request, schema);
6
+ if (!validation.valid || !validation.data)
7
+ return actionFailure(options.invalidMessage ?? "Validation failed", {
8
+ status: options.invalidStatus ?? 400,
9
+ fieldErrors: validation.fieldErrors,
10
+ formErrors: validation.formErrors,
11
+ values: validation.values
12
+ });
13
+ return handler({
14
+ ctx,
15
+ data: validation.data,
16
+ values: validation.values,
17
+ validation
18
+ });
19
+ });
20
+ }
@@ -0,0 +1,4 @@
1
+ export { useFormAction, type FormActionResult, type FormState, type FormSubmitOptions } from "../runtime/form.js";
2
+ export { actionFailure, actionSuccess, type ActionResult } from "../server/action.js";
3
+ export { defineFormAction, type DefineFormActionOptions, type FormActionContext, } from "./action.js";
4
+ export { defineForm, validateForm, validateAction, toFieldErrors, fieldAttrs, type FormField, type FormSchema, type ValidationResult, type ActionValidationResult, type ValidationError, } from "../runtime/validated-form.js";
@@ -0,0 +1,12 @@
1
+ export { useFormAction } from "../runtime/form.js";
2
+ export { actionFailure, actionSuccess } from "../server/action.js";
3
+ export {
4
+ defineFormAction
5
+ } from "./action.js";
6
+ export {
7
+ defineForm,
8
+ validateForm,
9
+ validateAction,
10
+ toFieldErrors,
11
+ fieldAttrs
12
+ } from "../runtime/validated-form.js";