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,26 @@
1
+ export function createNamespacedCacheStore(store, namespace) {
2
+ const prefix = `${namespace}:`;
3
+ return {
4
+ get: (key) => store.get(prefix + key),
5
+ set: async (key, entry) => {
6
+ await store.set(prefix + key, entry);
7
+ },
8
+ delete: async (key) => {
9
+ await store.delete(prefix + key);
10
+ },
11
+ clear: async () => {
12
+ const keys = await store.keys();
13
+ for await (const key of keys)
14
+ if (key.startsWith(prefix))
15
+ await store.delete(key);
16
+ },
17
+ keys: async function* () {
18
+ const keys = await store.keys();
19
+ for await (const key of keys) {
20
+ if (!key.startsWith(prefix))
21
+ continue;
22
+ yield key.slice(prefix.length);
23
+ }
24
+ }
25
+ };
26
+ }
@@ -0,0 +1,33 @@
1
+ import type { MiddlewareFn } from "./middleware.js";
2
+ export type CacheMode = "private" | "public" | "shared" | "no-store";
3
+ export interface CacheOptions {
4
+ maxAge: number;
5
+ staleWhileRevalidate?: number;
6
+ mode?: CacheMode;
7
+ vary?: string[];
8
+ includeAuthHeaders?: boolean;
9
+ key?: (url: URL) => string;
10
+ store?: CacheStore;
11
+ }
12
+ type Awaitable<T> = T | Promise<T>;
13
+ export interface CacheEntry {
14
+ body: string;
15
+ headers: Record<string, string>;
16
+ status: number;
17
+ createdAt: number;
18
+ revalidating?: boolean;
19
+ }
20
+ export interface CacheStore {
21
+ get(key: string): Awaitable<CacheEntry | undefined>;
22
+ set(key: string, entry: CacheEntry): Awaitable<void>;
23
+ delete(key: string): Awaitable<void>;
24
+ clear(): Awaitable<void>;
25
+ keys(): Awaitable<Iterable<string> | AsyncIterable<string>>;
26
+ }
27
+ export declare function createMemoryCacheStore(): CacheStore;
28
+ export declare function resolveCacheMode(options: CacheOptions): CacheMode;
29
+ export declare function shouldIncludeAuthHeadersForCache(options: CacheOptions, mode?: CacheMode): boolean;
30
+ export declare function routeCache(options: CacheOptions): MiddlewareFn;
31
+ export declare function invalidateCache(path: string): Promise<void>;
32
+ export declare function clearCache(): Promise<void>;
33
+ export {};
@@ -0,0 +1,236 @@
1
+ import { emitAIEvent } from "../ai/index.js";
2
+ export function createMemoryCacheStore() {
3
+ const store = new Map;
4
+ return {
5
+ get: (key) => store.get(key),
6
+ set: (key, entry) => {
7
+ store.set(key, entry);
8
+ },
9
+ delete: (key) => {
10
+ store.delete(key);
11
+ },
12
+ clear: () => {
13
+ store.clear();
14
+ },
15
+ keys: () => store.keys()
16
+ };
17
+ }
18
+ const defaultCacheStore = createMemoryCacheStore(), DEFAULT_AUTH_VARY = ["Cookie", "Authorization"], DEFAULT_SURFACE_VARY = ["Accept", "X-Gorsee-Navigate"];
19
+ export function resolveCacheMode(options) {
20
+ if (options.mode)
21
+ return options.mode;
22
+ if (options.includeAuthHeaders === !1)
23
+ return "public";
24
+ return "private";
25
+ }
26
+ export function shouldIncludeAuthHeadersForCache(options, mode = resolveCacheMode(options)) {
27
+ if (typeof options.includeAuthHeaders === "boolean")
28
+ return options.includeAuthHeaders;
29
+ return mode === "private";
30
+ }
31
+ function buildKey(url, vary, request, customKey) {
32
+ const base = customKey ? customKey(url) : url.pathname + url.search;
33
+ if (vary.length === 0)
34
+ return base;
35
+ const varyParts = vary.map((h) => `${h}=${request.headers.get(h) ?? ""}`).join("&");
36
+ return `${base}?__vary=${varyParts}`;
37
+ }
38
+ export function routeCache(options) {
39
+ const {
40
+ maxAge,
41
+ staleWhileRevalidate = 0,
42
+ vary = [],
43
+ key: customKey,
44
+ store = defaultCacheStore
45
+ } = options, mode = resolveCacheMode(options), includeAuthHeaders = shouldIncludeAuthHeadersForCache(options, mode), normalizedVary = normalizeVaryHeaders([
46
+ ...DEFAULT_SURFACE_VARY,
47
+ ...includeAuthHeaders ? DEFAULT_AUTH_VARY : [],
48
+ ...vary
49
+ ]);
50
+ return async (ctx, next) => {
51
+ if (ctx.request.method !== "GET")
52
+ return next();
53
+ if (mode === "no-store") {
54
+ const response = await next(), headers = new Headers(response.headers);
55
+ headers.set("Cache-Control", "no-store");
56
+ setVaryHeaderObject(headers, normalizedVary);
57
+ return new Response(response.body, {
58
+ status: response.status,
59
+ statusText: response.statusText,
60
+ headers
61
+ });
62
+ }
63
+ const cacheKey = buildKey(ctx.url, normalizedVary, ctx.request, customKey), entry = await store.get(cacheKey), now = Date.now();
64
+ if (entry) {
65
+ const age = (now - entry.createdAt) / 1000;
66
+ if (age < maxAge) {
67
+ emitAIEvent({
68
+ kind: "cache.hit",
69
+ severity: "info",
70
+ source: "runtime",
71
+ message: "cache hit",
72
+ requestId: typeof ctx.locals.requestId === "string" ? ctx.locals.requestId : void 0,
73
+ traceId: typeof ctx.locals.traceId === "string" ? ctx.locals.traceId : void 0,
74
+ spanId: typeof ctx.locals.spanId === "string" ? ctx.locals.spanId : void 0,
75
+ route: ctx.url.pathname,
76
+ data: { cacheKey, ageSeconds: Math.floor(age), mode }
77
+ });
78
+ return new Response(entry.body, {
79
+ status: entry.status,
80
+ headers: withVaryHeaders(entry.headers, normalizedVary, {
81
+ "X-Cache": "HIT",
82
+ Age: String(Math.floor(age))
83
+ })
84
+ });
85
+ }
86
+ if (age < maxAge + staleWhileRevalidate && !entry.revalidating) {
87
+ entry.revalidating = !0;
88
+ emitAIEvent({
89
+ kind: "cache.stale",
90
+ severity: "warn",
91
+ source: "runtime",
92
+ message: "stale cache entry served",
93
+ requestId: typeof ctx.locals.requestId === "string" ? ctx.locals.requestId : void 0,
94
+ traceId: typeof ctx.locals.traceId === "string" ? ctx.locals.traceId : void 0,
95
+ spanId: typeof ctx.locals.spanId === "string" ? ctx.locals.spanId : void 0,
96
+ route: ctx.url.pathname,
97
+ data: { cacheKey, ageSeconds: Math.floor(age), mode }
98
+ });
99
+ revalidate(cacheKey, store, next);
100
+ return new Response(entry.body, {
101
+ status: entry.status,
102
+ headers: withVaryHeaders(entry.headers, normalizedVary, {
103
+ "X-Cache": "STALE",
104
+ Age: String(Math.floor(age))
105
+ })
106
+ });
107
+ }
108
+ }
109
+ emitAIEvent({
110
+ kind: "cache.miss",
111
+ severity: "info",
112
+ source: "runtime",
113
+ message: "cache miss",
114
+ requestId: typeof ctx.locals.requestId === "string" ? ctx.locals.requestId : void 0,
115
+ traceId: typeof ctx.locals.traceId === "string" ? ctx.locals.traceId : void 0,
116
+ spanId: typeof ctx.locals.spanId === "string" ? ctx.locals.spanId : void 0,
117
+ route: ctx.url.pathname,
118
+ data: { cacheKey, mode }
119
+ });
120
+ const response = await next();
121
+ if (response.status === 200 && isCacheableResponse(response, mode)) {
122
+ const body = await response.text(), headers = {};
123
+ response.headers.forEach((v, k) => {
124
+ headers[k] = v;
125
+ });
126
+ setVaryHeader(headers, normalizedVary);
127
+ setCacheControlHeader(headers, mode, maxAge, staleWhileRevalidate);
128
+ await store.set(cacheKey, { body, headers, status: response.status, createdAt: now });
129
+ return new Response(body, {
130
+ status: response.status,
131
+ headers: { ...headers, "X-Cache": "MISS" }
132
+ });
133
+ }
134
+ emitAIEvent({
135
+ kind: "cache.skip",
136
+ severity: "debug",
137
+ source: "runtime",
138
+ message: "response not cached",
139
+ requestId: typeof ctx.locals.requestId === "string" ? ctx.locals.requestId : void 0,
140
+ traceId: typeof ctx.locals.traceId === "string" ? ctx.locals.traceId : void 0,
141
+ spanId: typeof ctx.locals.spanId === "string" ? ctx.locals.spanId : void 0,
142
+ route: ctx.url.pathname,
143
+ data: { cacheKey, status: response.status, mode }
144
+ });
145
+ return response;
146
+ };
147
+ }
148
+ async function revalidate(key, store, next) {
149
+ try {
150
+ const response = await next();
151
+ if (response.status === 200) {
152
+ const body = await response.text(), headers = {};
153
+ response.headers.forEach((v, k) => {
154
+ headers[k] = v;
155
+ });
156
+ await store.set(key, { body, headers, status: response.status, createdAt: Date.now() });
157
+ }
158
+ } catch {
159
+ const entry = await store.get(key);
160
+ if (entry)
161
+ entry.revalidating = !1;
162
+ }
163
+ }
164
+ export async function invalidateCache(path) {
165
+ const keys = await defaultCacheStore.keys();
166
+ for await (const key of keys)
167
+ if (key.startsWith(path))
168
+ await defaultCacheStore.delete(key);
169
+ }
170
+ export async function clearCache() {
171
+ await defaultCacheStore.clear();
172
+ }
173
+ function normalizeVaryHeaders(headers) {
174
+ const seen = new Set, normalized = [];
175
+ for (const header of headers) {
176
+ const trimmed = header.trim();
177
+ if (!trimmed)
178
+ continue;
179
+ const key = trimmed.toLowerCase();
180
+ if (seen.has(key))
181
+ continue;
182
+ seen.add(key);
183
+ normalized.push(canonicalizeHeaderName(trimmed));
184
+ }
185
+ normalized.sort((a, b) => a.localeCompare(b, void 0, { sensitivity: "base" }));
186
+ return normalized;
187
+ }
188
+ function setVaryHeader(headers, vary) {
189
+ if (vary.length === 0)
190
+ return;
191
+ const existing = headers.vary ?? headers.Vary, merged = normalizeVaryHeaders([
192
+ ...existing ? existing.split(",") : [],
193
+ ...vary
194
+ ]);
195
+ headers.Vary = merged.join(", ");
196
+ delete headers.vary;
197
+ }
198
+ function setVaryHeaderObject(headers, vary) {
199
+ if (vary.length === 0)
200
+ return;
201
+ const existing = headers.get("Vary"), merged = normalizeVaryHeaders([
202
+ ...existing ? existing.split(",") : [],
203
+ ...vary
204
+ ]);
205
+ headers.set("Vary", merged.join(", "));
206
+ }
207
+ function withVaryHeaders(headers, vary, extraHeaders) {
208
+ const merged = { ...headers, ...extraHeaders };
209
+ setVaryHeader(merged, vary);
210
+ return merged;
211
+ }
212
+ function isCacheableResponse(response, mode) {
213
+ if (response.headers.has("Set-Cookie"))
214
+ return !1;
215
+ const cacheControl = response.headers.get("Cache-Control")?.toLowerCase() ?? "";
216
+ if (cacheControl.includes("no-store"))
217
+ return !1;
218
+ if (mode === "public" || mode === "shared")
219
+ return !cacheControl.includes("private");
220
+ return !0;
221
+ }
222
+ function setCacheControlHeader(headers, mode, maxAge, staleWhileRevalidate) {
223
+ if (mode === "no-store") {
224
+ headers["Cache-Control"] = "no-store";
225
+ return;
226
+ }
227
+ const directives = [mode === "private" ? "private" : "public", `max-age=${maxAge}`];
228
+ if (mode === "shared")
229
+ directives.push(`s-maxage=${maxAge}`);
230
+ if (staleWhileRevalidate > 0)
231
+ directives.push(`stale-while-revalidate=${staleWhileRevalidate}`);
232
+ headers["Cache-Control"] = directives.join(", ");
233
+ }
234
+ function canonicalizeHeaderName(header) {
235
+ return header.toLowerCase().split("-").map((segment) => segment ? segment[0].toUpperCase() + segment.slice(1) : segment).join("-");
236
+ }
@@ -0,0 +1,2 @@
1
+ import type { MiddlewareFn } from "./middleware.js";
2
+ export declare function compress(): MiddlewareFn;
@@ -0,0 +1,49 @@
1
+ const COMPRESSIBLE_TYPES = new Set([
2
+ "text/html",
3
+ "text/css",
4
+ "text/javascript",
5
+ "application/javascript",
6
+ "application/json",
7
+ "text/xml",
8
+ "application/xml",
9
+ "image/svg+xml"
10
+ ]);
11
+ function isCompressible(contentType) {
12
+ if (!contentType)
13
+ return !1;
14
+ const type = contentType.split(";")[0].trim();
15
+ return COMPRESSIBLE_TYPES.has(type);
16
+ }
17
+ export function compress() {
18
+ return async (_ctx, next) => {
19
+ const response = await next(), contentType = response.headers.get("content-type");
20
+ if (!isCompressible(contentType))
21
+ return response;
22
+ if (response.headers.has("content-encoding"))
23
+ return response;
24
+ if (!response.body)
25
+ return response;
26
+ const acceptEncoding = _ctx.request.headers.get("accept-encoding") ?? "";
27
+ if (acceptEncoding.includes("gzip")) {
28
+ const compressed = response.body.pipeThrough(new CompressionStream("gzip")), headers = new Headers(response.headers);
29
+ headers.set("Content-Encoding", "gzip");
30
+ headers.delete("Content-Length");
31
+ return new Response(compressed, {
32
+ status: response.status,
33
+ statusText: response.statusText,
34
+ headers
35
+ });
36
+ }
37
+ if (acceptEncoding.includes("deflate")) {
38
+ const compressed = response.body.pipeThrough(new CompressionStream("deflate")), headers = new Headers(response.headers);
39
+ headers.set("Content-Encoding", "deflate");
40
+ headers.delete("Content-Length");
41
+ return new Response(compressed, {
42
+ status: response.status,
43
+ statusText: response.statusText,
44
+ headers
45
+ });
46
+ }
47
+ return response;
48
+ };
49
+ }
@@ -0,0 +1,28 @@
1
+ import { type Context, type MiddlewareFn } from "./middleware.js";
2
+ import { type RequestExecutionKind, type RequestExecutionPolicy, type RequestMetadata } from "./request-policy.js";
3
+ import { type RequestSecurityPolicy } from "./request-security-policy.js";
4
+ export interface EndpointExecutionTrace {
5
+ requestId?: string;
6
+ traceId?: string;
7
+ spanId?: string;
8
+ parentSpanId?: string;
9
+ }
10
+ export interface EndpointExecutionContext {
11
+ ctx: Context;
12
+ metadata: RequestMetadata;
13
+ requestPolicy: RequestExecutionPolicy;
14
+ securityPolicy: RequestSecurityPolicy;
15
+ }
16
+ export interface EndpointExecutionOptions {
17
+ request: Request;
18
+ kind: RequestExecutionKind;
19
+ params?: Record<string, string>;
20
+ trustedOrigin?: string;
21
+ trustForwardedHeaders?: boolean;
22
+ trustedForwardedHops?: number;
23
+ securityPolicy?: RequestSecurityPolicy;
24
+ middlewares?: MiddlewareFn[];
25
+ trace?: EndpointExecutionTrace;
26
+ handler: (context: EndpointExecutionContext) => Promise<Response>;
27
+ }
28
+ export declare function executeEndpointRequest(options: EndpointExecutionOptions): Promise<Response>;
@@ -0,0 +1,37 @@
1
+ import { createContext, runMiddlewareChain } from "./middleware.js";
2
+ import {
3
+ attachRequestMetadata,
4
+ resolveRequestExecutionPolicy,
5
+ resolveRequestMetadata,
6
+ validateRequestPolicy
7
+ } from "./request-policy.js";
8
+ import {
9
+ createRequestSecurityPolicy,
10
+ validateRequestSecurityPolicy
11
+ } from "./request-security-policy.js";
12
+ import { createTraceIds } from "../ai/index.js";
13
+ export async function executeEndpointRequest(options) {
14
+ const trace = options.trace?.requestId && options.trace?.traceId && options.trace?.spanId ? options.trace : createTraceIds(options.trace), securityPolicy = options.securityPolicy ?? createRequestSecurityPolicy({
15
+ trustedOrigin: options.trustedOrigin,
16
+ trustForwardedHeaders: options.trustForwardedHeaders,
17
+ trustedForwardedHops: options.trustedForwardedHops
18
+ }), requestPolicy = resolveRequestExecutionPolicy(options.kind), ctx = createContext(options.request, options.params ?? {}, {
19
+ trustedOrigin: securityPolicy.trustedOrigin
20
+ }), metadata = resolveRequestMetadata(options.request, {
21
+ trustedOrigin: securityPolicy.trustedOrigin,
22
+ kind: options.kind,
23
+ visibility: requestPolicy.visibility,
24
+ trustForwardedHeaders: securityPolicy.trustForwardedHeaders,
25
+ trustedForwardedHops: securityPolicy.trustedForwardedHops
26
+ });
27
+ ctx.locals.requestId = trace.requestId;
28
+ ctx.locals.traceId = trace.traceId;
29
+ ctx.locals.spanId = trace.spanId;
30
+ if (trace.parentSpanId)
31
+ ctx.locals.parentSpanId = trace.parentSpanId;
32
+ attachRequestMetadata(ctx.locals, metadata, requestPolicy);
33
+ const violation = validateRequestSecurityPolicy(metadata, requestPolicy, securityPolicy) ?? validateRequestPolicy(metadata, requestPolicy);
34
+ if (violation)
35
+ return violation;
36
+ return runMiddlewareChain(options.middlewares ?? [], ctx, () => options.handler({ ctx, metadata, requestPolicy, securityPolicy }));
37
+ }
@@ -0,0 +1,3 @@
1
+ export declare function generateETag(size: number, mtimeMs: number): string;
2
+ export declare function fileETag(filePath: string): Promise<string | null>;
3
+ export declare function isNotModified(request: Request, etag: string): boolean;
@@ -0,0 +1,18 @@
1
+ import { stat } from "node:fs/promises";
2
+ export function generateETag(size, mtimeMs) {
3
+ return `W/"${size.toString(16)}-${Math.floor(mtimeMs).toString(16)}"`;
4
+ }
5
+ export async function fileETag(filePath) {
6
+ try {
7
+ const s = await stat(filePath);
8
+ return generateETag(s.size, s.mtimeMs);
9
+ } catch {
10
+ return null;
11
+ }
12
+ }
13
+ export function isNotModified(request, etag) {
14
+ const ifNoneMatch = request.headers.get("if-none-match");
15
+ if (!ifNoneMatch)
16
+ return !1;
17
+ return ifNoneMatch.split(",").some((t) => t.trim() === etag);
18
+ }
@@ -0,0 +1,16 @@
1
+ import type { Context, MiddlewareFn } from "./middleware.js";
2
+ type GuardFn = (ctx: Context) => boolean | Promise<boolean>;
3
+ interface GuardOptions {
4
+ onFail?: (ctx: Context) => Response | Promise<Response>;
5
+ }
6
+ /** Create a guard middleware from a predicate */
7
+ export declare function createGuard(check: GuardFn, options?: GuardOptions): MiddlewareFn;
8
+ /** Guard: require authenticated session */
9
+ export declare function requireAuth(loginPath?: string): MiddlewareFn;
10
+ /** Guard: require specific role (reads from session.data.role) */
11
+ export declare function requireRole(role: string, options?: GuardOptions): MiddlewareFn;
12
+ /** Guard: combine multiple guards (all must pass) */
13
+ export declare function allGuards(...guards: MiddlewareFn[]): MiddlewareFn;
14
+ /** Guard: any one guard passing is sufficient */
15
+ export declare function anyGuard(...guards: MiddlewareFn[]): MiddlewareFn;
16
+ export {};
@@ -0,0 +1,45 @@
1
+ const DEFAULT_DENY = (_ctx) => new Response("Forbidden", { status: 403 });
2
+ export function createGuard(check, options) {
3
+ const onFail = options?.onFail ?? DEFAULT_DENY;
4
+ return async (ctx, next) => {
5
+ if (!await check(ctx))
6
+ return onFail(ctx);
7
+ return next();
8
+ };
9
+ }
10
+ export function requireAuth(loginPath = "/login") {
11
+ return createGuard((ctx) => !!ctx.locals.session, { onFail: (ctx) => ctx.redirect(loginPath) });
12
+ }
13
+ export function requireRole(role, options) {
14
+ return createGuard((ctx) => {
15
+ return ctx.locals.session?.data?.role === role;
16
+ }, options);
17
+ }
18
+ export function allGuards(...guards) {
19
+ return async (ctx, next) => {
20
+ for (const guard of guards) {
21
+ let passed = !1;
22
+ const result = await guard(ctx, async () => {
23
+ passed = !0;
24
+ return new Response(null);
25
+ });
26
+ if (!passed)
27
+ return result;
28
+ }
29
+ return next();
30
+ };
31
+ }
32
+ export function anyGuard(...guards) {
33
+ return async (ctx, next) => {
34
+ for (const guard of guards) {
35
+ let passed = !1;
36
+ await guard(ctx, async () => {
37
+ passed = !0;
38
+ return new Response(null);
39
+ });
40
+ if (passed)
41
+ return next();
42
+ }
43
+ return new Response("Forbidden", { status: 403 });
44
+ };
45
+ }
@@ -0,0 +1,12 @@
1
+ export interface HTMLWrapOptions {
2
+ title?: string;
3
+ clientScript?: string;
4
+ loaderData?: unknown;
5
+ params?: Record<string, string>;
6
+ cssFiles?: string[];
7
+ headElements?: string[];
8
+ bodyPrefix?: string[];
9
+ bodySuffix?: string[];
10
+ }
11
+ export declare function generateNonce(): string;
12
+ export declare function wrapHTML(body: string, nonce: string | undefined, options?: HTMLWrapOptions): string;
@@ -0,0 +1,52 @@
1
+ export function generateNonce() {
2
+ const bytes = new Uint8Array(16);
3
+ crypto.getRandomValues(bytes);
4
+ return btoa(String.fromCharCode(...bytes));
5
+ }
6
+ export function wrapHTML(body, nonce, options = {}) {
7
+ const {
8
+ title = "Gorsee App",
9
+ clientScript,
10
+ loaderData,
11
+ params,
12
+ cssFiles = [],
13
+ headElements = [],
14
+ bodyPrefix = [],
15
+ bodySuffix = []
16
+ } = options;
17
+ let dataScript = "";
18
+ if (loaderData !== void 0) {
19
+ const json = JSON.stringify(loaderData).replace(/</g, "\\u003c");
20
+ dataScript = `
21
+ <script id="__GORSEE_DATA__" type="application/json"${renderNonceAttr(nonce)}>${json}</script>`;
22
+ }
23
+ let paramsScript = "";
24
+ if (params && Object.keys(params).length > 0)
25
+ paramsScript = `
26
+ <script${renderNonceAttr(nonce)}>window.__GORSEE_PARAMS__=${JSON.stringify(params)}</script>`;
27
+ const clientTag = clientScript ? `
28
+ <script type="module" src="${clientScript}"${renderNonceAttr(nonce)}></script>` : "";
29
+ return `<!DOCTYPE html>
30
+ <html lang="en">
31
+ <head>
32
+ <meta charset="UTF-8" />
33
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
34
+ <title>${title}</title>
35
+ <link rel="stylesheet" href="/styles.css" />
36
+ ${cssFiles.map((file) => ` <link rel="stylesheet" href="${file}" />`).join(`
37
+ `)}
38
+ ${headElements.join(`
39
+ `)}
40
+ </head>
41
+ <body>
42
+ ${bodyPrefix.join(`
43
+ `)}
44
+ <div id="app">${body}</div>${dataScript}${paramsScript}${clientTag}
45
+ ${bodySuffix.join(`
46
+ `)}
47
+ </body>
48
+ </html>`;
49
+ }
50
+ function renderNonceAttr(nonce) {
51
+ return nonce ? ` nonce="${nonce}"` : "";
52
+ }
@@ -0,0 +1,36 @@
1
+ export { server, handleRPCRequest, __registerRPC, getRPCHandler, createMemoryRPCRegistry, handleRPCRequestWithRegistry, createMemoryRPCRegistry as createRPCRegistry, type RPCHandler, type RPCRegistry, } from "./rpc.js";
2
+ export { RPC_PROTOCOL_VERSION, RPC_CONTENT_TYPE, RPC_ACCEPTED_CONTENT_TYPES, type RPCRequestEnvelope, type RPCSuccessEnvelope, type RPCErrorEnvelope, type RPCResponseEnvelope, } from "./rpc-protocol.js";
3
+ export { handleRPCRequestWithPolicy, handleRPCWithHeaders, type RPCRequestOptions } from "./request-preflight.js";
4
+ export { middleware, createContext, runMiddlewareChain, type Context, type MiddlewareFn, type NextFn, } from "./middleware.js";
5
+ export { defineAction, handleAction, parseFormData, actionSuccess, actionFailure, type ActionFn, type ActionResult, type ActionReturn, } from "./action.js";
6
+ export { joinRoom, leaveRoom, broadcastToRoom, getRoomSize, createWSContext, type WSContext, type WSHandler } from "./ws.js";
7
+ export { compress } from "./compress.js";
8
+ export { getMimeType } from "./mime.js";
9
+ export { fileETag, generateETag, isNotModified } from "./etag.js";
10
+ export { redirect, RedirectError, type CookieOptions } from "./middleware.js";
11
+ export { createSSEStream, type SSEOptions, type SSEStream } from "./sse.js";
12
+ export { createEventSource, type EventSourceSignal } from "../runtime/event-source.js";
13
+ export { routeCache, invalidateCache, clearCache, createMemoryCacheStore, type CacheOptions, type CacheEntry, type CacheStore, } from "./cache.js";
14
+ export { createGuard, requireAuth, requireRole, allGuards, anyGuard } from "./guard.js";
15
+ export { pipe, when, forMethods, forPaths } from "./pipe.js";
16
+ export { createNamespacedCacheStore } from "./cache-utils.js";
17
+ export { createRedisCacheStore } from "./redis-cache-store.js";
18
+ export { createScopedRPCRegistry } from "./rpc-utils.js";
19
+ export { createSQLiteCacheStore } from "./sqlite-cache-store.js";
20
+ export { createMemoryJobQueue, defineJob, type JobContext, type JobDefinition, type JobEnqueueOptions, type JobQueue, type JobRunResult, type EnqueuedJob } from "./jobs.js";
21
+ export { setupI18n, loadLocale, getLocale, getLocales, getDefaultLocale, getFallbackLocales, setLocale, t, plural, negotiateLocale, resolveLocaleFromPath, stripLocalePrefix, withLocalePath, buildHreflangLinks, formatNumber, formatDate, formatRelativeTime, type I18nConfig, type LocaleNegotiationInput, type LocaleNegotiationResult, } from "../i18n/index.js";
22
+ export { loadContentCollection, parseFrontmatter, extractExcerpt, queryContent, getContentEntryBySlug, type ContentCollectionOptions, type ContentEntry, type ContentQueryOptions, } from "../content/index.js";
23
+ export { type RedisLikeClient, type NodeRedisClientLike, type IORedisClientLike, createNodeRedisLikeClient, createIORedisLikeClient, deleteExpiredRedisKeys, } from "./redis-client.js";
24
+ export { createAuth, createMemorySessionStore, createNamespacedSessionStore, createRedisSessionStore, createSQLiteSessionStore, createAuthActionTokenManager, createMemoryAuthActionTokenStore, sessionHasRole, sessionHasPermission, type AuthConfig, type AuthEvent, type AuthEventHandler, type AuthActionTokenClaims, type AuthActionTokenPurpose, type AuthActionTokenReplayStore, type PermissionResolver, type Session, type SessionStore, } from "../auth/index.js";
25
+ export { createDB, createPostgresDB, toPostgresSQL, type DB, type PostgresDB, type PostgresClientLike, type PostgresConnectionLike, type PostgresPoolLike, type PostgresQueryResult, runMigrations, createMigration, type MigrationResult, } from "../db/index.js";
26
+ export { securityHeaders, type SecurityConfig, csrfProtection, createCSRFMiddleware, generateCSRFToken, validateCSRFToken, createRateLimiter, createRedisRateLimiter, parseRateLimitWindow, type RateLimiter, type AsyncRateLimiter, type AsyncRateLimitResult, cors, type CORSOptions, } from "../security/index.js";
27
+ export { env, getPublicEnv, loadEnv } from "../env/index.js";
28
+ export { log, setLogLevel } from "../log/index.js";
29
+ export { GORSEE_AI_CONTEXT_SCHEMA_VERSION, buildAIHealthReport, buildAIContextBundle, buildIDEProjection, configureAIObservability, createAIMCPServer, createAIContextPacket, createAIBridgeHandler, createAIBridgeServer, createIDEProjectionWatcher, createLineReader, emitAIDiagnostic, emitAIEvent, createTraceIds, readAIDiagnosticsSnapshot, readAIEvents, renderAIContextBundleMarkdown, renderAIContextMarkdown, resolveAISessionPackPaths, resolveIDEProjectionPaths, resolveAIStorePaths, resolveAIObservabilityConfig, runWithAITrace, writeAISessionPack, writeIDEProjection, type AIMCPServerOptions, type AIContextPacket, type AIContextBundle, type AIContextSnippet, type AIHealthReport, type AIEvent, type AIEventSeverity, type IDEProjection, type IDEProjectionPaths, type IDEProjectionWatcher, type IDEProjectionWatcherOptions, type AISessionPackConfig, type AISessionPackPaths, type AIStorePaths, type AITraceContext, type AIDiagnostic, type AIObservabilityConfig, type AIBridgeConfig, type AIBridgeServer, type AIBridgeHandler, type AIBridgeServerOptions, type AIBridgeSnapshot, } from "../ai/index.js";
30
+ export { BUILD_MANIFEST_SCHEMA_VERSION, loadBuildManifest, parseBuildManifest, getRouteBuildEntry, getClientBundleForRoute, isPrerenderedRoute, getPrerenderedHtmlPath, type BuildManifest, type BuildManifestRoute, } from "./manifest.js";
31
+ export { attachRequestMetadata, classifyRouteRequest, resolveRequestExecutionPolicy, resolveRequestMetadata, validateRequestPolicy, type RequestExecutionKind, type RequestExecutionPolicy, type RequestAccess, type RequestMetadata, type RequestMutation, type RequestResponseShape, type RouteRequestExecutionKind, type RequestVisibility, } from "./request-policy.js";
32
+ export { createRuntimeRequestPlan, type RuntimeRequestPlanOptions, type RuntimeRequestSurface, } from "./request-surface.js";
33
+ export { dispatchRuntimeRequestPlan, type RuntimeDispatchOptions, type RuntimeDispatchResult, } from "./runtime-dispatch.js";
34
+ export { renderRouteErrorBoundaryResponse, renderRoutePageResponse, renderRoutePartialResponse, } from "./route-response.js";
35
+ export { createRequestSecurityPolicy, validateRequestSecurityPolicy, type RequestSecurityPolicy, type RequestSecurityPolicyOptions, } from "./request-security-policy.js";
36
+ export { executeServerExecution, type ServerExecutionContext, type ServerExecutionKind, type ServerExecutionOptions, } from "./server-execution.js";