gorsee 0.2.4 → 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 +101 -45
  406. package/bin/gorsee.js +0 -2
  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,476 @@
1
+ import { hydrate } from "./client.js";
2
+ let currentPath = "";
3
+ const subscribers = [], beforeNavigateHooks = [];
4
+ let navigating = !1, loadingElement = null, activeNavigationController = null, latestNavigationToken = 0, pendingPopScrollY = null, activeNavigationUrl = null, activeNavigationPushState = !0, lastFocusedPreserveKey = null, currentRouteScript = null;
5
+ export function createHTMLFragment(html) {
6
+ const template = document.createElement("template");
7
+ template.innerHTML = html;
8
+ return template.content;
9
+ }
10
+ export function replaceHTMLFragment(container, html) {
11
+ const fragment = createHTMLFragment(html);
12
+ container.replaceChildren(...Array.from(fragment.childNodes));
13
+ }
14
+ function getPreserveKey(element) {
15
+ if (!element)
16
+ return null;
17
+ const preserveKey = element.getAttribute("data-g-preserve-key");
18
+ if (preserveKey)
19
+ return preserveKey;
20
+ if ("name" in element && typeof element.name === "string" && element.name)
21
+ return element.name;
22
+ if ("id" in element && typeof element.id === "string" && element.id)
23
+ return element.id;
24
+ return null;
25
+ }
26
+ function isCheckableInput(element) {
27
+ return "type" in element && element.type === "checkbox";
28
+ }
29
+ function isFormControlElement(element) {
30
+ if (!element)
31
+ return !1;
32
+ const tagName = element.tagName?.toLowerCase();
33
+ return tagName === "input" || tagName === "textarea" || tagName === "select";
34
+ }
35
+ function getFocusablePreserveKey(element) {
36
+ if (!element)
37
+ return null;
38
+ if (element.getAttribute("data-g-preserve-key"))
39
+ return getPreserveKey(element);
40
+ if (isFormControlElement(element))
41
+ return getPreserveKey(element);
42
+ return null;
43
+ }
44
+ function getControlSelector(key) {
45
+ return `[data-g-preserve-key="${key}"], [name="${key}"], #${key}`;
46
+ }
47
+ function focusPreservedTarget(target) {
48
+ const focusable = target, runFocus = () => {
49
+ if (focusable.isConnected === !1)
50
+ return !1;
51
+ if (typeof focusable.focus === "function")
52
+ focusable.focus?.();
53
+ else if (typeof HTMLElement < "u" && target instanceof HTMLElement)
54
+ HTMLElement.prototype.focus.call(target);
55
+ if (typeof document > "u" || !("activeElement" in document))
56
+ return !1;
57
+ return document.activeElement === target;
58
+ };
59
+ if (runFocus())
60
+ return;
61
+ const retryDelays = [0, 16, 48, 96, 160];
62
+ for (const delayMs of retryDelays)
63
+ setTimeout(() => {
64
+ if (typeof document < "u" && "activeElement" in document && document.activeElement === target)
65
+ return;
66
+ runFocus();
67
+ }, delayMs);
68
+ if (typeof requestAnimationFrame === "function")
69
+ requestAnimationFrame(() => {
70
+ if (typeof document < "u" && "activeElement" in document && document.activeElement === target)
71
+ return;
72
+ runFocus();
73
+ });
74
+ }
75
+ function schedulePostNavigationFocusRestore(container, snapshot) {
76
+ const focusKey = snapshot.focusKey ?? snapshot.controls[0]?.key;
77
+ if (!focusKey)
78
+ return;
79
+ const selector = getControlSelector(focusKey), commit = () => {
80
+ const target = container.querySelector(selector);
81
+ if (!target)
82
+ return;
83
+ focusPreservedTarget(target);
84
+ lastFocusedPreserveKey = focusKey;
85
+ };
86
+ commit();
87
+ if (typeof requestAnimationFrame === "function")
88
+ requestAnimationFrame(() => commit());
89
+ setTimeout(() => commit(), 32);
90
+ }
91
+ export function captureNavigationSnapshot(container) {
92
+ const controls = [], activeFocusKey = typeof container.contains === "function" && container.contains(document.activeElement) ? getFocusablePreserveKey(document.activeElement) ?? void 0 : void 0, formControls = typeof container.querySelectorAll === "function" ? container.querySelectorAll("input, textarea, select") : [];
93
+ for (const control of formControls) {
94
+ const key = getPreserveKey(control);
95
+ if (!key)
96
+ continue;
97
+ if (isCheckableInput(control)) {
98
+ controls.push({ key, mode: "checked", value: control.checked });
99
+ continue;
100
+ }
101
+ if ("value" in control && typeof control.value === "string")
102
+ controls.push({ key, mode: "value", value: control.value });
103
+ }
104
+ return { focusKey: activeFocusKey ?? lastFocusedPreserveKey ?? controls[0]?.key, controls };
105
+ }
106
+ export function restoreNavigationSnapshot(container, snapshot) {
107
+ for (const controlState of snapshot.controls) {
108
+ const control = container.querySelector(getControlSelector(controlState.key));
109
+ if (!control)
110
+ continue;
111
+ if (controlState.mode === "checked" && "checked" in control) {
112
+ control.checked = controlState.value === !0;
113
+ continue;
114
+ }
115
+ if (controlState.mode === "value" && "value" in control && typeof controlState.value === "string")
116
+ control.value = controlState.value;
117
+ }
118
+ const focusKey = snapshot.focusKey ?? snapshot.controls[0]?.key;
119
+ if (focusKey) {
120
+ const focusTarget = container.querySelector(getControlSelector(focusKey));
121
+ if (focusTarget) {
122
+ focusPreservedTarget(focusTarget);
123
+ lastFocusedPreserveKey = focusKey;
124
+ }
125
+ }
126
+ }
127
+ function readCurrentScrollY() {
128
+ if (typeof window > "u")
129
+ return 0;
130
+ if (typeof window.scrollY === "number")
131
+ return window.scrollY;
132
+ const windowWithPageOffset = window;
133
+ if (typeof windowWithPageOffset.pageYOffset === "number")
134
+ return windowWithPageOffset.pageYOffset;
135
+ return 0;
136
+ }
137
+ function rememberCurrentHistoryScroll(url) {
138
+ if (typeof history > "u" || typeof history.replaceState !== "function")
139
+ return;
140
+ const currentState = typeof history.state === "object" && history.state !== null ? history.state : {};
141
+ history.replaceState({
142
+ ...currentState,
143
+ gorsee: !0,
144
+ gorseeScrollY: readCurrentScrollY()
145
+ }, "", url);
146
+ }
147
+ function applyNavigationScroll(pushState) {
148
+ if (pushState) {
149
+ window.scrollTo(0, 0);
150
+ return;
151
+ }
152
+ if (pendingPopScrollY !== null) {
153
+ window.scrollTo(0, pendingPopScrollY);
154
+ pendingPopScrollY = null;
155
+ }
156
+ }
157
+ export function setLoadingElement(el) {
158
+ loadingElement = el;
159
+ }
160
+ function showLoading() {
161
+ if (loadingElement) {
162
+ loadingElement.style.display = "";
163
+ loadingElement.removeAttribute("hidden");
164
+ }
165
+ }
166
+ function hideLoading() {
167
+ if (loadingElement)
168
+ loadingElement.style.display = "none";
169
+ }
170
+ export function onNavigate(fn) {
171
+ subscribers.push(fn);
172
+ return () => {
173
+ const i = subscribers.indexOf(fn);
174
+ if (i >= 0)
175
+ subscribers.splice(i, 1);
176
+ };
177
+ }
178
+ export function beforeNavigate(fn) {
179
+ beforeNavigateHooks.push(fn);
180
+ return () => {
181
+ const i = beforeNavigateHooks.indexOf(fn);
182
+ if (i >= 0)
183
+ beforeNavigateHooks.splice(i, 1);
184
+ };
185
+ }
186
+ export function getCurrentPath() {
187
+ return currentPath;
188
+ }
189
+ export function getRouterNavigationDiagnostics() {
190
+ return {
191
+ currentPath,
192
+ navigating,
193
+ pendingPopScrollY,
194
+ latestNavigationToken,
195
+ activeNavigation: activeNavigationController && activeNavigationUrl ? { url: activeNavigationUrl, pushState: activeNavigationPushState } : null
196
+ };
197
+ }
198
+ async function fetchPage(url, signal) {
199
+ const res = await fetch(url, {
200
+ headers: {
201
+ Accept: "application/json",
202
+ "X-Gorsee-Navigate": "partial"
203
+ },
204
+ signal
205
+ });
206
+ if (!res.ok)
207
+ throw Error(`Navigation failed: ${res.status}`);
208
+ return res.json();
209
+ }
210
+ function updateHead(result) {
211
+ if (result.title)
212
+ document.title = result.title;
213
+ document.querySelectorAll("link[data-g-route-css]").forEach((el) => el.remove());
214
+ if (result.css)
215
+ for (const href of result.css) {
216
+ const link = document.createElement("link");
217
+ link.rel = "stylesheet";
218
+ link.href = href;
219
+ link.dataset.gRouteCss = "";
220
+ document.head.appendChild(link);
221
+ }
222
+ }
223
+ function updateDataScript(result) {
224
+ let dataEl = document.getElementById("__GORSEE_DATA__");
225
+ if (result.data !== void 0) {
226
+ if (!dataEl) {
227
+ const script = document.createElement("script");
228
+ script.id = "__GORSEE_DATA__";
229
+ script.type = "application/json";
230
+ document.body.appendChild(script);
231
+ dataEl = script;
232
+ }
233
+ dataEl.textContent = JSON.stringify(result.data);
234
+ } else if (dataEl)
235
+ dataEl.remove();
236
+ if (result.params)
237
+ globalThis.__GORSEE_PARAMS__ = result.params;
238
+ }
239
+ function normalizeRouteScript(script) {
240
+ if (!script)
241
+ return null;
242
+ try {
243
+ return new URL(script, location.origin).pathname;
244
+ } catch {
245
+ return script;
246
+ }
247
+ }
248
+ export function setCurrentRouteScript(script) {
249
+ currentRouteScript = normalizeRouteScript(script);
250
+ globalThis.__GORSEE_ROUTE_SCRIPT__ = currentRouteScript;
251
+ }
252
+ async function navigateInternal(url, pushState, force = !1) {
253
+ if (!force && url === currentPath)
254
+ return;
255
+ for (const hook of beforeNavigateHooks)
256
+ try {
257
+ if (hook(url) === !1)
258
+ return;
259
+ } catch {
260
+ return;
261
+ }
262
+ const container = document.getElementById("app"), snapshot = container ? captureNavigationSnapshot(container) : { controls: [] };
263
+ if (pushState)
264
+ rememberCurrentHistoryScroll(currentPath || location.pathname + location.search);
265
+ activeNavigationController?.abort();
266
+ const controller = new AbortController;
267
+ activeNavigationController = controller;
268
+ activeNavigationUrl = url;
269
+ activeNavigationPushState = pushState;
270
+ const navigationToken = ++latestNavigationToken;
271
+ navigating = !0;
272
+ showLoading();
273
+ try {
274
+ const result = await fetchPage(url, controller.signal);
275
+ if (controller.signal.aborted || navigationToken !== latestNavigationToken)
276
+ return;
277
+ if (!container)
278
+ return;
279
+ replaceHTMLFragment(container, result.html);
280
+ updateHead(result);
281
+ updateDataScript(result);
282
+ if (result.script)
283
+ setCurrentRouteScript(result.script);
284
+ restoreNavigationSnapshot(container, snapshot);
285
+ if (pushState)
286
+ history.pushState({ gorsee: !0 }, "", url);
287
+ currentPath = url;
288
+ if (result.script) {
289
+ globalThis.__GORSEE_SUPPRESS_ENTRY_BOOTSTRAP__ = !0;
290
+ let mod;
291
+ try {
292
+ mod = await import(result.script);
293
+ } finally {
294
+ globalThis.__GORSEE_SUPPRESS_ENTRY_BOOTSTRAP__ = !1;
295
+ }
296
+ if (controller.signal.aborted || navigationToken !== latestNavigationToken)
297
+ return;
298
+ const renderRoute = mod.default;
299
+ if (renderRoute && typeof renderRoute === "function") {
300
+ const data = result.data ?? {}, params = result.params ?? {};
301
+ hydrate(() => renderRoute({ data, params }), container);
302
+ restoreNavigationSnapshot(container, snapshot);
303
+ }
304
+ }
305
+ applyNavigationScroll(pushState);
306
+ for (const fn of subscribers)
307
+ fn(url);
308
+ observeViewportPrefetchAnchors(container);
309
+ schedulePostNavigationFocusRestore(container, snapshot);
310
+ } catch (error) {
311
+ if (controller.signal.aborted)
312
+ return;
313
+ throw error;
314
+ } finally {
315
+ if (activeNavigationController === controller) {
316
+ activeNavigationController = null;
317
+ activeNavigationUrl = null;
318
+ activeNavigationPushState = !0;
319
+ hideLoading();
320
+ navigating = !1;
321
+ }
322
+ }
323
+ }
324
+ export async function navigate(url, pushState = !0) {
325
+ await navigateInternal(url, pushState, !1);
326
+ }
327
+ export async function refreshCurrentRoute() {
328
+ const target = currentPath || readLocationPath();
329
+ if (!target)
330
+ return;
331
+ await navigateInternal(target, !1, !0);
332
+ }
333
+ function refreshStylesheets(timestamp) {
334
+ const links = document.querySelectorAll?.('link[rel="stylesheet"]') ?? [];
335
+ for (const link of links) {
336
+ if (!("href" in link) || typeof link.href !== "string")
337
+ continue;
338
+ try {
339
+ const nextURL = new URL(link.href, location.origin);
340
+ if (nextURL.origin !== location.origin)
341
+ continue;
342
+ nextURL.searchParams.set("gorsee-hmr", String(timestamp));
343
+ link.href = nextURL.toString();
344
+ } catch {}
345
+ }
346
+ }
347
+ function currentPathMatchesRoute(routePath) {
348
+ return (readLocationPath().split("?")[0] ?? readLocationPath()) === routePath;
349
+ }
350
+ function hmrTouchesCurrentRoute(update) {
351
+ if (update.refreshCurrentRoute)
352
+ return !0;
353
+ if (update.entryScripts?.length && currentRouteScript)
354
+ return update.entryScripts.some((script) => normalizeRouteScript(script) === currentRouteScript);
355
+ if (update.routePaths?.length)
356
+ return update.routePaths.some((routePath) => currentPathMatchesRoute(routePath));
357
+ return !1;
358
+ }
359
+ export async function applyHMRUpdate(update) {
360
+ if (!update || typeof update.kind !== "string") {
361
+ location.reload();
362
+ return;
363
+ }
364
+ if (update.kind === "full-reload") {
365
+ location.reload();
366
+ return;
367
+ }
368
+ if (update.kind === "css-update")
369
+ refreshStylesheets(update.timestamp);
370
+ if (!hmrTouchesCurrentRoute(update))
371
+ return;
372
+ await refreshCurrentRoute();
373
+ }
374
+ const prefetchCache = new Set, observedViewportPrefetchAnchors = new WeakSet;
375
+ let viewportPrefetchObserver = null;
376
+ export function prefetch(url) {
377
+ if (prefetchCache.has(url))
378
+ return;
379
+ prefetchCache.add(url);
380
+ const link = document.createElement("link");
381
+ link.rel = "prefetch";
382
+ link.href = url;
383
+ link.setAttribute("as", "fetch");
384
+ link.setAttribute("crossorigin", "");
385
+ document.head.appendChild(link);
386
+ }
387
+ function ensureViewportPrefetchObserver() {
388
+ if (viewportPrefetchObserver)
389
+ return viewportPrefetchObserver;
390
+ if (typeof IntersectionObserver > "u")
391
+ return null;
392
+ viewportPrefetchObserver = new IntersectionObserver((entries) => {
393
+ for (const entry of entries) {
394
+ if (!entry.isIntersecting)
395
+ continue;
396
+ const target = entry.target;
397
+ prefetch(target.pathname + target.search);
398
+ viewportPrefetchObserver?.unobserve(target);
399
+ }
400
+ }, {
401
+ rootMargin: "200px"
402
+ });
403
+ return viewportPrefetchObserver;
404
+ }
405
+ function observeViewportPrefetchAnchors(root = document) {
406
+ const observer = ensureViewportPrefetchObserver();
407
+ if (!observer || typeof root.querySelectorAll !== "function")
408
+ return;
409
+ const anchors = root.querySelectorAll('a[data-g-prefetch="viewport"][href]');
410
+ for (const anchor of anchors) {
411
+ if (!anchor || typeof anchor !== "object" || observedViewportPrefetchAnchors.has(anchor))
412
+ continue;
413
+ observedViewportPrefetchAnchors.add(anchor);
414
+ observer.observe(anchor);
415
+ }
416
+ }
417
+ function shouldHandleClick(e, anchor) {
418
+ if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey)
419
+ return !1;
420
+ if (e.button !== 0)
421
+ return !1;
422
+ if (anchor.target && anchor.target !== "_self")
423
+ return !1;
424
+ if (anchor.origin !== location.origin)
425
+ return !1;
426
+ if (anchor.hasAttribute("download"))
427
+ return !1;
428
+ if (anchor.pathname === location.pathname && anchor.hash)
429
+ return !1;
430
+ return !0;
431
+ }
432
+ function readLocationPath() {
433
+ return `${location.pathname}${location.search}`;
434
+ }
435
+ export function initRouter() {
436
+ currentPath = readLocationPath();
437
+ setCurrentRouteScript(globalThis.__GORSEE_ROUTE_SCRIPT__);
438
+ globalThis.__gorseeHandleHMR = (update) => {
439
+ applyHMRUpdate(update);
440
+ };
441
+ if (typeof history.replaceState === "function") {
442
+ const currentState = typeof history.state === "object" && history.state !== null ? history.state : {};
443
+ history.replaceState({
444
+ ...currentState,
445
+ gorsee: !0,
446
+ gorseeScrollY: readCurrentScrollY()
447
+ }, "", readLocationPath());
448
+ }
449
+ document.addEventListener("click", (e) => {
450
+ const anchor = e.target.closest?.("a[href]");
451
+ if (!anchor)
452
+ return;
453
+ if (anchor.dataset.gNoRouter !== void 0)
454
+ return;
455
+ if (shouldHandleClick(e, anchor)) {
456
+ e.preventDefault();
457
+ navigate(anchor.pathname + anchor.search);
458
+ }
459
+ });
460
+ document.addEventListener("focusin", (e) => {
461
+ const target = e.target, container = document.getElementById("app");
462
+ if (!target || !container || !container.contains(target))
463
+ return;
464
+ const key = getFocusablePreserveKey(target);
465
+ if (key)
466
+ lastFocusedPreserveKey = key;
467
+ });
468
+ window.addEventListener("popstate", (e) => {
469
+ const nextPath = readLocationPath();
470
+ if (e.state?.gorsee || currentPath !== nextPath) {
471
+ pendingPopScrollY = typeof e.state?.gorseeScrollY === "number" ? e.state.gorseeScrollY : 0;
472
+ navigate(nextPath, !1);
473
+ }
474
+ });
475
+ observeViewportPrefetchAnchors(document);
476
+ }
@@ -0,0 +1,8 @@
1
+ import type { Component } from "./jsx-runtime.js";
2
+ export type VNode = {
3
+ type: string | Component | symbol;
4
+ props: Record<string, unknown>;
5
+ };
6
+ export declare function ssrJsx(type: string | Component | symbol, props: Record<string, unknown> | null): VNode;
7
+ export declare const ssrJsxs: typeof ssrJsx;
8
+ export declare function renderToString(root: unknown): string;
@@ -0,0 +1,71 @@
1
+ import { escapeHTML, escapeAttr, isRenderableThunk, VOID_ELEMENTS, resolveValue } from "./html-escape.js";
2
+ function renderChild(child) {
3
+ if (child == null || typeof child === "boolean")
4
+ return "";
5
+ if (Array.isArray(child)) {
6
+ let s = "";
7
+ for (let i = 0;i < child.length; i++)
8
+ s += renderChild(child[i]);
9
+ return s;
10
+ }
11
+ if (typeof child === "object" && child !== null && "type" in child)
12
+ return renderVNode(child);
13
+ if (isRenderableThunk(child))
14
+ return renderChild(child());
15
+ const resolved = resolveValue(child);
16
+ if (resolved == null || typeof resolved === "boolean")
17
+ return "";
18
+ return escapeHTML(String(resolved));
19
+ }
20
+ function renderAttrs(props) {
21
+ let result = "";
22
+ for (const key in props) {
23
+ if (key === "children" || key === "ref" || key.startsWith("on:"))
24
+ continue;
25
+ const value = resolveValue(props[key]);
26
+ if (key === "className" || key === "class") {
27
+ if (value != null)
28
+ result += ` class="${escapeAttr(String(value))}"`;
29
+ continue;
30
+ }
31
+ if (key === "style" && typeof value === "object" && value !== null) {
32
+ let styles = "";
33
+ for (const p in value) {
34
+ if (styles)
35
+ styles += "; ";
36
+ const sv = resolveValue(value[p]);
37
+ if (sv != null)
38
+ styles += `${p}: ${sv}`;
39
+ }
40
+ result += ` style="${escapeAttr(styles)}"`;
41
+ continue;
42
+ }
43
+ if (typeof value === "boolean") {
44
+ if (value)
45
+ result += ` ${key}`;
46
+ } else if (value != null)
47
+ result += ` ${key}="${escapeAttr(String(value))}"`;
48
+ }
49
+ return result;
50
+ }
51
+ function renderVNode(vnode) {
52
+ const { type, props } = vnode;
53
+ if (typeof type === "symbol")
54
+ return renderChild(props.children);
55
+ if (typeof type === "function") {
56
+ const result = type(props);
57
+ return renderChild(result);
58
+ }
59
+ const tag = type, attrs = renderAttrs(props);
60
+ if (VOID_ELEMENTS.has(tag))
61
+ return `<${tag}${attrs} />`;
62
+ const children = renderChild(props.children);
63
+ return `<${tag}${attrs}>${children}</${tag}>`;
64
+ }
65
+ export function ssrJsx(type, props) {
66
+ return { type, props: props ?? {} };
67
+ }
68
+ export const ssrJsxs = ssrJsx;
69
+ export function renderToString(root) {
70
+ return renderChild(root);
71
+ }
@@ -0,0 +1,29 @@
1
+ import type { Component } from "./jsx-runtime.js";
2
+ interface SuspenseSlot {
3
+ id: string;
4
+ fallback: unknown;
5
+ children: unknown;
6
+ resolve: () => Promise<unknown>;
7
+ }
8
+ interface StreamContext {
9
+ suspenseSlots: SuspenseSlot[];
10
+ nextId: number;
11
+ }
12
+ interface VNode {
13
+ type: string | Component | symbol;
14
+ props: Record<string, unknown>;
15
+ __gorsee_suspense?: boolean;
16
+ }
17
+ export declare function streamJsx(type: string | Component | symbol, props: Record<string, unknown> | null): VNode;
18
+ export declare const streamJsxs: typeof streamJsx;
19
+ export declare function StreamSuspense(props: {
20
+ fallback: unknown;
21
+ children: unknown;
22
+ __streamCtx?: StreamContext;
23
+ }): VNode;
24
+ export declare function buildStreamChunkScript(slotId: string, html: string): string;
25
+ export interface StreamOptions {
26
+ shell?: (body: string) => string;
27
+ }
28
+ export declare function renderToStream(root: unknown, options?: StreamOptions): ReadableStream<Uint8Array>;
29
+ export {};
@@ -0,0 +1,106 @@
1
+ import { escapeHTML, escapeAttr, VOID_ELEMENTS, resolveValue } from "./html-escape.js";
2
+ export function streamJsx(type, props) {
3
+ return { type, props: props ?? {} };
4
+ }
5
+ export const streamJsxs = streamJsx;
6
+ export function StreamSuspense(props) {
7
+ const node = streamJsx("gorsee-suspense", {
8
+ fallback: props.fallback,
9
+ children: props.children
10
+ });
11
+ node.__gorsee_suspense = !0;
12
+ return node;
13
+ }
14
+ function renderAttrs(props) {
15
+ const parts = [];
16
+ for (const [key, rawValue] of Object.entries(props)) {
17
+ if (key === "children" || key === "ref" || key === "fallback" || key.startsWith("on:"))
18
+ continue;
19
+ const value = resolveValue(rawValue);
20
+ if (key === "className" || key === "class") {
21
+ if (value != null)
22
+ parts.push(` class="${escapeAttr(String(value))}"`);
23
+ } else if (typeof value === "boolean") {
24
+ if (value)
25
+ parts.push(` ${key}`);
26
+ } else if (value != null)
27
+ parts.push(` ${key}="${escapeAttr(String(value))}"`);
28
+ }
29
+ return parts.join("");
30
+ }
31
+ function renderShellNode(node, ctx) {
32
+ if (node == null || typeof node === "boolean")
33
+ return "";
34
+ if (Array.isArray(node))
35
+ return node.map((n) => renderShellNode(n, ctx)).join("");
36
+ if (typeof node === "object" && node !== null && "type" in node) {
37
+ const vnode = node;
38
+ if (vnode.__gorsee_suspense) {
39
+ const id = `s${ctx.nextId++}`, fallbackHtml = renderShellNode(vnode.props.fallback, ctx);
40
+ ctx.suspenseSlots.push({
41
+ id,
42
+ fallback: vnode.props.fallback,
43
+ children: vnode.props.children,
44
+ resolve: async () => {
45
+ const children = vnode.props.children;
46
+ if (typeof children === "function")
47
+ return await children();
48
+ return children;
49
+ }
50
+ });
51
+ return `<div data-g-suspense="${id}">${fallbackHtml}</div>`;
52
+ }
53
+ if (typeof vnode.type === "symbol")
54
+ return renderShellNode(vnode.props.children, ctx);
55
+ if (typeof vnode.type === "function") {
56
+ const result = vnode.type(vnode.props);
57
+ return renderShellNode(result, ctx);
58
+ }
59
+ const tag = vnode.type, attrs = renderAttrs(vnode.props);
60
+ if (VOID_ELEMENTS.has(tag))
61
+ return `<${tag}${attrs} />`;
62
+ const children = renderShellNode(vnode.props.children, ctx);
63
+ return `<${tag}${attrs}>${children}</${tag}>`;
64
+ }
65
+ const resolved = resolveValue(node);
66
+ if (resolved == null || typeof resolved === "boolean")
67
+ return "";
68
+ return escapeHTML(String(resolved));
69
+ }
70
+ export function buildStreamChunkScript(slotId, html) {
71
+ return [
72
+ `<template data-g-chunk="${slotId}">${html}</template>`,
73
+ "<script>",
74
+ "(function(){",
75
+ ` var t=document.querySelector('[data-g-chunk="${slotId}"]');`,
76
+ ` var s=document.querySelector('[data-g-suspense="${slotId}"]');`,
77
+ " if(t&&s){var f=t.content.cloneNode(true);s.replaceChildren(...Array.from(f.childNodes));t.remove();s.removeAttribute('data-g-suspense')}",
78
+ "})();",
79
+ "</script>"
80
+ ].join("");
81
+ }
82
+ const defaultShell = (body) => `<!DOCTYPE html>
83
+ <html lang="en">
84
+ <head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Gorsee App</title></head>
85
+ <body><div id="app">${body}</div>`, STREAM_TAIL = "</body></html>";
86
+ export function renderToStream(root, options) {
87
+ const shell = options?.shell ?? defaultShell, encoder = new TextEncoder, ctx = { suspenseSlots: [], nextId: 0 };
88
+ return new ReadableStream({
89
+ async start(controller) {
90
+ const shellHtml = renderShellNode(root, ctx);
91
+ controller.enqueue(encoder.encode(shell(shellHtml)));
92
+ const promises = ctx.suspenseSlots.map(async (slot) => {
93
+ try {
94
+ const resolved = await slot.resolve(), html = renderShellNode(resolved, ctx), script = buildStreamChunkScript(slot.id, html);
95
+ controller.enqueue(encoder.encode(script));
96
+ } catch (err) {
97
+ const message = err instanceof Error ? err.message : String(err), errorHtml = `<div class="error">Error: ${escapeHTML(message)}</div>`, script = buildStreamChunkScript(slot.id, errorHtml);
98
+ controller.enqueue(encoder.encode(script));
99
+ }
100
+ });
101
+ await Promise.all(promises);
102
+ controller.enqueue(encoder.encode(STREAM_TAIL));
103
+ controller.close();
104
+ }
105
+ });
106
+ }
@@ -0,0 +1,6 @@
1
+ import type { GorseeRenderable } from "./renderable.js";
2
+ export interface SuspenseProps {
3
+ fallback: GorseeRenderable;
4
+ children: GorseeRenderable;
5
+ }
6
+ export declare function Suspense(props: SuspenseProps): GorseeRenderable;