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,78 +0,0 @@
1
- // Resend email plugin -- uses native fetch, no SDK dependency
2
-
3
- import type { GorseePlugin } from "./index.ts"
4
- import { definePlugin } from "./index.ts"
5
-
6
- export interface ResendPluginConfig {
7
- apiKey: string
8
- from?: string
9
- }
10
-
11
- export interface SendEmailOptions {
12
- to: string | string[]
13
- subject: string
14
- html?: string
15
- text?: string
16
- from?: string
17
- }
18
-
19
- export interface Mailer {
20
- send(options: SendEmailOptions): Promise<{ id: string }>
21
- }
22
-
23
- const RESEND_API = "https://api.resend.com"
24
-
25
- let mailerInstance: Mailer | null = null
26
-
27
- /** Returns the mailer instance (available after setup) */
28
- export function getMailer(): Mailer {
29
- if (!mailerInstance) {
30
- throw new Error("Resend not initialized. Did you register resendPlugin?")
31
- }
32
- return mailerInstance
33
- }
34
-
35
- function createMailer(config: ResendPluginConfig): Mailer {
36
- return {
37
- async send(options: SendEmailOptions): Promise<{ id: string }> {
38
- const body = {
39
- from: options.from ?? config.from ?? "onboarding@resend.dev",
40
- to: Array.isArray(options.to) ? options.to : [options.to],
41
- subject: options.subject,
42
- ...(options.html ? { html: options.html } : {}),
43
- ...(options.text ? { text: options.text } : {}),
44
- }
45
-
46
- const res = await fetch(`${RESEND_API}/emails`, {
47
- method: "POST",
48
- headers: {
49
- Authorization: `Bearer ${config.apiKey}`,
50
- "Content-Type": "application/json",
51
- },
52
- body: JSON.stringify(body),
53
- })
54
-
55
- if (!res.ok) {
56
- const err = await res.text()
57
- throw new Error(`Resend API error (${res.status}): ${err}`)
58
- }
59
-
60
- return (await res.json()) as { id: string }
61
- },
62
- }
63
- }
64
-
65
- /** Creates a Resend email plugin */
66
- export function resendPlugin(config: ResendPluginConfig): GorseePlugin {
67
- return definePlugin({
68
- name: "gorsee-resend",
69
-
70
- async setup() {
71
- mailerInstance = createMailer(config)
72
- },
73
-
74
- async teardown() {
75
- mailerInstance = null
76
- },
77
- })
78
- }
package/src/plugins/s3.ts DELETED
@@ -1,102 +0,0 @@
1
- // S3-compatible object storage plugin -- uses native fetch, no AWS SDK
2
-
3
- import type { GorseePlugin } from "./index.ts"
4
- import { definePlugin } from "./index.ts"
5
-
6
- export interface S3PluginConfig {
7
- bucket: string
8
- region?: string
9
- endpoint?: string
10
- accessKeyId?: string
11
- secretAccessKey?: string
12
- }
13
-
14
- export interface StorageClient {
15
- upload(key: string, body: ArrayBuffer | ReadableStream | string, contentType?: string): Promise<string>
16
- download(key: string): Promise<Response>
17
- delete(key: string): Promise<void>
18
- list(prefix?: string): Promise<string[]>
19
- }
20
-
21
- let storageClient: StorageClient | null = null
22
-
23
- /** Returns the storage client (available after setup) */
24
- export function getStorage(): StorageClient {
25
- if (!storageClient) {
26
- throw new Error("S3 not initialized. Did you register s3Plugin?")
27
- }
28
- return storageClient
29
- }
30
-
31
- function buildEndpoint(config: S3PluginConfig): string {
32
- if (config.endpoint) return config.endpoint.replace(/\/$/, "")
33
- const region = config.region ?? "us-east-1"
34
- return `https://${config.bucket}.s3.${region}.amazonaws.com`
35
- }
36
-
37
- function createStorageClient(config: S3PluginConfig): StorageClient {
38
- const baseUrl = buildEndpoint(config)
39
- const headers: Record<string, string> = {}
40
-
41
- // Basic auth headers (simplified -- production should use AWS Signature V4)
42
- if (config.accessKeyId) {
43
- headers["x-amz-access-key"] = config.accessKeyId
44
- }
45
-
46
- return {
47
- async upload(key: string, body: ArrayBuffer | ReadableStream | string, contentType?: string) {
48
- const url = `${baseUrl}/${encodeURIComponent(key)}`
49
- const ct = contentType ?? "application/octet-stream"
50
- const fetchBody: BodyInit = body instanceof ArrayBuffer
51
- ? new Blob([body], { type: ct })
52
- : body
53
- const res = await fetch(url, {
54
- method: "PUT",
55
- headers: { ...headers, "Content-Type": ct },
56
- body: fetchBody,
57
- })
58
- if (!res.ok) throw new Error(`S3 upload failed: ${res.status} ${res.statusText}`)
59
- return url
60
- },
61
-
62
- async download(key) {
63
- const url = `${baseUrl}/${encodeURIComponent(key)}`
64
- const res = await fetch(url, { headers })
65
- if (!res.ok) throw new Error(`S3 download failed: ${res.status} ${res.statusText}`)
66
- return res
67
- },
68
-
69
- async delete(key) {
70
- const url = `${baseUrl}/${encodeURIComponent(key)}`
71
- const res = await fetch(url, { method: "DELETE", headers })
72
- if (!res.ok) throw new Error(`S3 delete failed: ${res.status} ${res.statusText}`)
73
- },
74
-
75
- async list(prefix) {
76
- const params = prefix ? `?list-type=2&prefix=${encodeURIComponent(prefix)}` : "?list-type=2"
77
- const res = await fetch(`${baseUrl}${params}`, { headers })
78
- if (!res.ok) throw new Error(`S3 list failed: ${res.status} ${res.statusText}`)
79
- const xml = await res.text()
80
- const keys: string[] = []
81
- const regex = /<Key>([^<]+)<\/Key>/g
82
- let match: RegExpExecArray | null
83
- while ((match = regex.exec(xml)) !== null) keys.push(match[1]!)
84
- return keys
85
- },
86
- }
87
- }
88
-
89
- /** Creates an S3-compatible storage plugin */
90
- export function s3Plugin(config: S3PluginConfig): GorseePlugin {
91
- return definePlugin({
92
- name: "gorsee-s3",
93
-
94
- async setup() {
95
- storageClient = createStorageClient(config)
96
- },
97
-
98
- async teardown() {
99
- storageClient = null
100
- },
101
- })
102
- }
@@ -1,133 +0,0 @@
1
- // Stripe payments plugin -- uses native fetch, no stripe SDK dependency
2
-
3
- import type { MiddlewareFn, Context } from "../server/middleware.ts"
4
- import type { GorseePlugin } from "./index.ts"
5
- import { definePlugin } from "./index.ts"
6
-
7
- export interface StripePluginConfig {
8
- secretKey: string
9
- webhookSecret?: string
10
- }
11
-
12
- export interface CheckoutSessionOptions {
13
- lineItems: Array<{ price: string; quantity: number }>
14
- mode?: "payment" | "subscription"
15
- successUrl: string
16
- cancelUrl: string
17
- }
18
-
19
- export interface StripeEvent {
20
- id: string
21
- type: string
22
- data: { object: Record<string, unknown> }
23
- }
24
-
25
- export interface StripeClient {
26
- createCheckoutSession(options: CheckoutSessionOptions): Promise<{ url: string; id: string }>
27
- verifyWebhook(request: Request): Promise<StripeEvent>
28
- }
29
-
30
- const STRIPE_API = "https://api.stripe.com/v1"
31
-
32
- let stripeClient: StripeClient | null = null
33
-
34
- /** Returns the Stripe client (available after setup) */
35
- export function getStripe(): StripeClient {
36
- if (!stripeClient) {
37
- throw new Error("Stripe not initialized. Did you register stripePlugin?")
38
- }
39
- return stripeClient
40
- }
41
-
42
- function createStripeClient(config: StripePluginConfig): StripeClient {
43
- const authHeader = `Basic ${btoa(config.secretKey + ":")}`
44
-
45
- return {
46
- async createCheckoutSession(options) {
47
- const params = new URLSearchParams()
48
- params.set("mode", options.mode ?? "payment")
49
- params.set("success_url", options.successUrl)
50
- params.set("cancel_url", options.cancelUrl)
51
- options.lineItems.forEach((item, i) => {
52
- params.set(`line_items[${i}][price]`, item.price)
53
- params.set(`line_items[${i}][quantity]`, String(item.quantity))
54
- })
55
-
56
- const res = await fetch(`${STRIPE_API}/checkout/sessions`, {
57
- method: "POST",
58
- headers: { Authorization: authHeader, "Content-Type": "application/x-www-form-urlencoded" },
59
- body: params.toString(),
60
- })
61
-
62
- if (!res.ok) {
63
- const err = await res.text()
64
- throw new Error(`Stripe API error (${res.status}): ${err}`)
65
- }
66
-
67
- const data = (await res.json()) as { url: string; id: string }
68
- return { url: data.url, id: data.id }
69
- },
70
-
71
- async verifyWebhook(request: Request) {
72
- const body = await request.text()
73
- const sig = request.headers.get("stripe-signature") ?? ""
74
-
75
- if (!config.webhookSecret) {
76
- throw new Error("Webhook secret not configured")
77
- }
78
-
79
- // Verify signature using HMAC-SHA256
80
- const encoder = new TextEncoder()
81
- const timestamp = sig.split(",").find((s) => s.startsWith("t="))?.slice(2) ?? ""
82
- const v1Sig = sig.split(",").find((s) => s.startsWith("v1="))?.slice(3) ?? ""
83
- const payload = `${timestamp}.${body}`
84
-
85
- const key = await crypto.subtle.importKey(
86
- "raw",
87
- encoder.encode(config.webhookSecret),
88
- { name: "HMAC", hash: "SHA-256" },
89
- false,
90
- ["sign"],
91
- )
92
- const signature = await crypto.subtle.sign("HMAC", key, encoder.encode(payload))
93
- const expected = Array.from(new Uint8Array(signature))
94
- .map((b) => b.toString(16).padStart(2, "0"))
95
- .join("")
96
-
97
- if (expected !== v1Sig) {
98
- throw new Error("Invalid webhook signature")
99
- }
100
-
101
- return JSON.parse(body) as StripeEvent
102
- },
103
- }
104
- }
105
-
106
- /** Creates a Stripe payments plugin */
107
- export function stripePlugin(config: StripePluginConfig): GorseePlugin {
108
- return definePlugin({
109
- name: "gorsee-stripe",
110
-
111
- async setup(app) {
112
- stripeClient = createStripeClient(config)
113
-
114
- // Register webhook route if webhook secret is configured
115
- if (config.webhookSecret) {
116
- app.addRoute("/api/stripe/webhook", async (ctx) => {
117
- try {
118
- const event = await stripeClient!.verifyWebhook(ctx.request)
119
- return new Response(JSON.stringify({ received: true, type: event.type }), {
120
- headers: { "Content-Type": "application/json" },
121
- })
122
- } catch (err) {
123
- return new Response(JSON.stringify({ error: String(err) }), { status: 400 })
124
- }
125
- })
126
- }
127
- },
128
-
129
- async teardown() {
130
- stripeClient = null
131
- },
132
- })
133
- }
@@ -1,92 +0,0 @@
1
- // Tailwind CSS integration plugin -- build pipeline hook
2
-
3
- import type { GorseePlugin } from "./index.ts"
4
- import { definePlugin } from "./index.ts"
5
-
6
- export interface TailwindPluginConfig {
7
- configPath?: string
8
- inputCSS?: string
9
- outputCSS?: string
10
- }
11
-
12
- /** Generates tailwind.config.ts content */
13
- export function generateTailwindConfig(options?: {
14
- content?: string[]
15
- theme?: Record<string, unknown>
16
- }): string {
17
- const content = options?.content ?? [
18
- "./routes/**/*.{tsx,ts}",
19
- "./components/**/*.{tsx,ts}",
20
- ]
21
- const themeStr = options?.theme
22
- ? JSON.stringify(options.theme, null, 4)
23
- : "{}"
24
-
25
- return `/** @type {import('tailwindcss').Config} */
26
- export default {
27
- content: ${JSON.stringify(content, null, 4)},
28
- theme: {
29
- extend: ${themeStr},
30
- },
31
- plugins: [],
32
- }
33
- `
34
- }
35
-
36
- /** Generates base CSS with @tailwind directives */
37
- export function generateTailwindCSS(): string {
38
- return `@tailwind base;
39
- @tailwind components;
40
- @tailwind utilities;
41
- `
42
- }
43
-
44
- /** Creates a Tailwind CSS integration plugin */
45
- export function tailwindPlugin(config: TailwindPluginConfig = {}): GorseePlugin {
46
- const inputCSS = config.inputCSS ?? "./styles/globals.css"
47
- const outputCSS = config.outputCSS ?? "./.gorsee/client/tailwind.css"
48
-
49
- return definePlugin({
50
- name: "gorsee-tailwind",
51
-
52
- async setup() {
53
- // Generate tailwind.config.ts if it doesn't exist
54
- const configPath = config.configPath ?? "./tailwind.config.ts"
55
- const file = Bun.file(configPath)
56
- if (!(await file.exists())) {
57
- await Bun.write(configPath, generateTailwindConfig())
58
- }
59
- },
60
-
61
- buildPlugins() {
62
- return [
63
- {
64
- name: "gorsee-tailwind-transform",
65
- setup(build) {
66
- build.onLoad({ filter: /\.css$/ }, async (args) => {
67
- const source = await Bun.file(args.path).text()
68
-
69
- // If file contains @tailwind directives, process it
70
- if (source.includes("@tailwind")) {
71
- try {
72
- const proc = Bun.spawn(
73
- ["bunx", "tailwindcss", "-i", args.path, "-o", outputCSS, "--minify"],
74
- { stdin: "inherit", stdout: "pipe", stderr: "pipe" },
75
- )
76
- await proc.exited
77
- const processed = await Bun.file(outputCSS).text()
78
- return { contents: processed, loader: "css" }
79
- } catch {
80
- // Fallback: return raw CSS if tailwindcss CLI not available
81
- return { contents: source, loader: "css" }
82
- }
83
- }
84
-
85
- return undefined
86
- })
87
- },
88
- },
89
- ]
90
- },
91
- })
92
- }
package/src/prod.ts DELETED
@@ -1,252 +0,0 @@
1
- // Gorsee.js Production Server
2
- // Serves pre-built client bundles + SSR pages from dist/
3
-
4
- import { createRouter, matchRoute, buildStaticMap } from "./router/index.ts"
5
- import { securityHeaders } from "./security/headers.ts"
6
- import { createRateLimiter } from "./security/rate-limit.ts"
7
- import { renderToStream, streamJsx } from "./runtime/stream.ts"
8
- import { resetServerHead, getServerHead } from "./runtime/head.ts"
9
- import type { MiddlewareFn } from "./server/middleware.ts"
10
- import { compress } from "./server/compress.ts"
11
- import { log, setLogLevel } from "./log/index.ts"
12
- import { loadEnv } from "./env/index.ts"
13
- import { generateNonce, wrapHTML } from "./server/html-shell.ts"
14
- import { renderNotFoundPage } from "./server/not-found.ts"
15
- import { createRateLimitResponse, handleRPCWithHeaders } from "./server/request-preflight.ts"
16
- import {
17
- buildPartialResponsePayload,
18
- createClientScriptPath,
19
- renderPageDocument,
20
- } from "./server/page-render.ts"
21
- import { handleRouteRequest } from "./server/route-request.ts"
22
- import { servePrefixedStaticFile, serveStaticFile } from "./server/static-file.ts"
23
- import {
24
- getClientBundleForRoute,
25
- getPrerenderedHtmlPath,
26
- isPrerenderedRoute,
27
- loadBuildManifest,
28
- } from "./server/manifest.ts"
29
- import { join } from "node:path"
30
- import { createProjectContext, resolveRuntimeEnv, type RuntimeOptions } from "./runtime/project.ts"
31
- // Route type used implicitly via createRouter return
32
-
33
- interface StartProductionServerOptions extends RuntimeOptions {
34
- port?: number
35
- registerSignalHandlers?: boolean
36
- }
37
-
38
- interface ProductionRuntimeState {
39
- cwd: string
40
- routesDir: string
41
- publicDir: string
42
- distDir: string
43
- clientDir: string
44
- manifest: Awaited<ReturnType<typeof loadBuildManifest>>
45
- routes: Awaited<ReturnType<typeof createRouter>>
46
- staticMap: ReturnType<typeof buildStaticMap>
47
- rateLimiter: ReturnType<typeof createRateLimiter>
48
- compressMiddleware: ReturnType<typeof compress>
49
- }
50
-
51
- async function tryServeStatic(
52
- pathname: string,
53
- request: Request,
54
- publicDir: string,
55
- clientDir: string,
56
- secHeaders: Record<string, string>,
57
- ): Promise<Response | null> {
58
- if (pathname === "/") return null
59
- // Client assets from dist/
60
- const bundleResponse = await servePrefixedStaticFile(pathname, "/_gorsee/", clientDir, {
61
- contentType: "application/javascript",
62
- cacheControl: "public, max-age=31536000, immutable",
63
- extraHeaders: secHeaders,
64
- })
65
- if (bundleResponse) return bundleResponse
66
-
67
- // Public files
68
- return serveStaticFile(publicDir, pathname.slice(1), {
69
- request,
70
- etag: true,
71
- cacheControl: "public, max-age=3600",
72
- extraHeaders: secHeaders,
73
- })
74
- }
75
-
76
- async function tryServePrerenderedPage(
77
- pathname: string,
78
- request: Request,
79
- manifest: Awaited<ReturnType<typeof loadBuildManifest>>,
80
- distDir: string,
81
- secHeaders: Record<string, string>,
82
- ): Promise<Response | null> {
83
- if (request.method !== "GET") return null
84
- if (!isPrerenderedRoute(manifest, pathname)) return null
85
-
86
- return serveStaticFile(join(distDir, "static"), getPrerenderedHtmlPath(pathname), {
87
- request,
88
- etag: true,
89
- cacheControl: "public, max-age=3600",
90
- contentType: "text/html; charset=utf-8",
91
- extraHeaders: secHeaders,
92
- })
93
- }
94
-
95
- export async function startProductionServer(options: StartProductionServerOptions = {}) {
96
- const runtime = createProjectContext(options)
97
- const registerSignalHandlers = options.registerSignalHandlers ?? true
98
-
99
- await loadEnv(runtime.cwd)
100
- const envConfig = resolveRuntimeEnv(process.env)
101
- const port = options.port ?? envConfig.port
102
- const fetchHandler = await createProductionFetchHandler({ cwd: runtime.cwd, env: process.env })
103
- log.info("production server starting", { cwd: runtime.cwd })
104
-
105
- const server = Bun.serve({
106
- port,
107
- fetch: fetchHandler,
108
- })
109
-
110
- log.info("production server started", { url: `http://localhost:${server.port}` })
111
-
112
- // Graceful shutdown
113
- if (registerSignalHandlers) {
114
- const shutdown = () => {
115
- log.info("shutting down...")
116
- server.stop(true) // close existing connections gracefully
117
- process.exit(0)
118
- }
119
- process.on("SIGTERM", shutdown)
120
- process.on("SIGINT", shutdown)
121
- }
122
-
123
- return server
124
- }
125
-
126
- export async function createProductionFetchHandler(
127
- options: Pick<StartProductionServerOptions, "cwd" | "env"> = {},
128
- ): Promise<(request: Request, server?: { requestIP(request: Request): { address: string } | null }) => Promise<Response>> {
129
- const state = await loadProductionRuntimeState(options)
130
-
131
- return async (request, server) => {
132
- const url = new URL(request.url)
133
- const pathname = url.pathname
134
-
135
- const ip = server?.requestIP(request)?.address ?? "unknown"
136
- const rateLimitResponse = createRateLimitResponse(state.rateLimiter, ip)
137
- if (rateLimitResponse) return rateLimitResponse
138
-
139
- const nonce = generateNonce()
140
- const secHeaders = securityHeaders({}, nonce)
141
-
142
- const rpcResponse = await handleRPCWithHeaders(request, secHeaders)
143
- if (rpcResponse) return rpcResponse
144
-
145
- const staticResponse = await tryServeStatic(pathname, request, state.publicDir, state.clientDir, secHeaders)
146
- if (staticResponse) return staticResponse
147
-
148
- const prerenderedResponse = await tryServePrerenderedPage(pathname, request, state.manifest, state.distDir, secHeaders)
149
- if (prerenderedResponse) return prerenderedResponse
150
-
151
- const match = matchRoute(state.routes, pathname, state.staticMap)
152
- if (!match) {
153
- return new Response(await renderNotFoundPage(state.routesDir, nonce), {
154
- status: 404,
155
- headers: { "Content-Type": "text/html", ...secHeaders },
156
- })
157
- }
158
-
159
- try {
160
- return await handleRouteRequest({
161
- match,
162
- request,
163
- extraMiddlewares: [state.compressMiddleware satisfies MiddlewareFn],
164
- onPartialRequest: async ({ ctx, resolved }) => {
165
- const { pageComponent, loaderData, cssFiles } = resolved
166
- const rendered = renderPageDocument(pageComponent, ctx, match.params, loaderData)
167
- const clientScript = createClientScriptPath(getClientBundleForRoute(state.manifest, match.route.path))
168
- const partialPayload = buildPartialResponsePayload(
169
- rendered,
170
- loaderData,
171
- match.params,
172
- cssFiles,
173
- clientScript,
174
- )
175
- return new Response(JSON.stringify(partialPayload), {
176
- headers: { "Content-Type": "application/json", ...secHeaders },
177
- })
178
- },
179
- onPageRequest: async ({ ctx, resolved }) => {
180
- const { pageComponent, loaderData, cssFiles, renderMode } = resolved
181
-
182
- const pageProps = { params: match.params, ctx, data: loaderData }
183
- const clientScript = createClientScriptPath(getClientBundleForRoute(state.manifest, match.route.path))
184
-
185
- if (renderMode === "stream") {
186
- resetServerHead()
187
- const vnode = streamJsx(pageComponent as any, pageProps)
188
- const stream = renderToStream(vnode, {
189
- shell: (body: string) => wrapHTML(body, nonce, {
190
- clientScript,
191
- loaderData,
192
- params: match.params,
193
- cssFiles,
194
- headElements: getServerHead(),
195
- }),
196
- })
197
- return new Response(stream, {
198
- headers: { "Content-Type": "text/html", ...secHeaders },
199
- })
200
- }
201
-
202
- const rendered = renderPageDocument(pageComponent, ctx, match.params, loaderData)
203
- const html = wrapHTML(rendered.html, nonce, {
204
- clientScript,
205
- loaderData,
206
- params: match.params,
207
- cssFiles,
208
- headElements: rendered.headElements,
209
- })
210
- return new Response(html, {
211
- headers: { "Content-Type": "text/html", ...secHeaders },
212
- })
213
- },
214
- })
215
- } catch (err) {
216
- const message = err instanceof Error ? err.message : String(err)
217
- log.error("request error", { path: pathname, error: message })
218
- return new Response(wrapHTML("<h1>500</h1><p>Internal Server Error</p>", nonce), {
219
- status: 500,
220
- headers: { "Content-Type": "text/html", ...secHeaders },
221
- })
222
- }
223
- }
224
- }
225
-
226
- async function loadProductionRuntimeState(options: RuntimeOptions = {}): Promise<ProductionRuntimeState> {
227
- const runtime = createProjectContext(options)
228
-
229
- await loadEnv(runtime.cwd)
230
- const envConfig = resolveRuntimeEnv(process.env)
231
- setLogLevel(envConfig.logLevel)
232
-
233
- const manifest = await loadBuildManifest(runtime.paths.distDir)
234
- log.info("loaded manifest", { routes: Object.keys(manifest.routes).length, built: manifest.buildTime })
235
-
236
- const routes = await createRouter(runtime.paths.routesDir)
237
- const staticMap = buildStaticMap(routes)
238
- const rateLimiter = createRateLimiter(envConfig.rateLimit, envConfig.rateWindow)
239
-
240
- return {
241
- cwd: runtime.cwd,
242
- routesDir: runtime.paths.routesDir,
243
- publicDir: runtime.paths.publicDir,
244
- distDir: runtime.paths.distDir,
245
- clientDir: runtime.paths.clientDir,
246
- manifest,
247
- routes,
248
- staticMap,
249
- rateLimiter,
250
- compressMiddleware: compress(),
251
- }
252
- }
@@ -1,7 +0,0 @@
1
- import { computed as alienComputed } from "alien-signals"
2
-
3
- export type ComputedGetter<T> = () => T
4
-
5
- export function createComputed<T>(fn: () => T): ComputedGetter<T> {
6
- return alienComputed(fn)
7
- }
@@ -1,7 +0,0 @@
1
- import { effect as alienEffect } from "alien-signals"
2
-
3
- export type CleanupFn = () => void
4
-
5
- export function createEffect(fn: () => void): CleanupFn {
6
- return alienEffect(fn)
7
- }
@@ -1,7 +0,0 @@
1
- export { createSignal } from "./signal.ts"
2
- export { createComputed } from "./computed.ts"
3
- export { createEffect } from "./effect.ts"
4
- export { createResource, invalidateResource, invalidateAll } from "./resource.ts"
5
- export { createStore } from "./store.ts"
6
- export { createLive, type LiveOptions, type LiveSignal } from "./live.ts"
7
- export { createMutation, type Mutation, type MutationState, type MutationOptions } from "./optimistic.ts"