gorsee 0.2.4 → 0.2.6

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 +283 -212
  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 +173 -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} +44 -28
  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 +53 -0
  215. package/dist-pkg/plugins/index.d.ts +62 -0
  216. package/dist-pkg/plugins/index.js +159 -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 +60 -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 +70 -0
  243. package/dist-pkg/reactive/optimistic.d.ts +20 -0
  244. package/dist-pkg/reactive/optimistic.js +67 -0
  245. package/dist-pkg/reactive/resource.d.ts +25 -0
  246. package/dist-pkg/reactive/resource.js +153 -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 +42 -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} +20 -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 +65 -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 +74 -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 +176 -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 +487 -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 +77 -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 +83 -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 +127 -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 +27 -0
  347. package/dist-pkg/server/page-render.d.ts +29 -0
  348. package/dist-pkg/server/page-render.js +70 -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 +46 -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 +61 -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 +257 -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 +110 -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,36 @@
1
+ import { join } from "node:path";
2
+ export function resolveProjectPaths(cwd, overrides = {}) {
3
+ const gorseeDir = join(cwd, ".gorsee"), distDir = join(cwd, "dist");
4
+ return { ...{
5
+ cwd,
6
+ routesDir: join(cwd, "routes"),
7
+ publicDir: join(cwd, "public"),
8
+ distDir,
9
+ clientDir: join(distDir, "client"),
10
+ serverDir: join(distDir, "server"),
11
+ gorseeDir,
12
+ sharedDir: join(cwd, "shared"),
13
+ middlewareDir: join(cwd, "middleware"),
14
+ migrationsDir: join(cwd, "migrations"),
15
+ docsDir: join(cwd, "docs"),
16
+ dataFile: join(cwd, "data.sqlite"),
17
+ appConfigFile: join(cwd, "app.config.ts")
18
+ }, ...overrides, cwd };
19
+ }
20
+ export function createProjectContext(options = {}) {
21
+ const cwd = options.cwd ?? process.cwd();
22
+ return {
23
+ cwd,
24
+ env: options.env ?? process.env,
25
+ paths: resolveProjectPaths(cwd, options.pathOverrides)
26
+ };
27
+ }
28
+ export function resolveRuntimeEnv(env) {
29
+ return {
30
+ port: Number(env.PORT || "3000"),
31
+ logLevel: env.LOG_LEVEL === "debug" ? "debug" : "info",
32
+ rateLimit: Number(env.RATE_LIMIT) || 1000,
33
+ rateWindow: env.RATE_WINDOW || "1m",
34
+ isProduction: env.NODE_ENV === "production"
35
+ };
36
+ }
@@ -0,0 +1,6 @@
1
+ export type GorseePrimitive = string | number | boolean | null | undefined;
2
+ export type GorseeVNodeLike = {
3
+ type: string | symbol | ((props: Record<string, unknown>) => GorseeRenderable);
4
+ props: Record<string, unknown>;
5
+ };
6
+ export type GorseeRenderable = Node | DocumentFragment | GorseePrimitive | GorseeVNodeLike | GorseeRenderable[] | (() => unknown);
File without changes
@@ -0,0 +1,47 @@
1
+ type NavigateCallback = (url: string) => void;
2
+ type BeforeNavigateCallback = (url: string) => boolean | void;
3
+ type PreservedControlState = {
4
+ key: string;
5
+ mode: "value" | "checked";
6
+ value: string | boolean;
7
+ };
8
+ type HMRUpdate = {
9
+ kind: "full-reload" | "route-refresh" | "css-update";
10
+ changedPath: string;
11
+ timestamp: number;
12
+ reason?: string;
13
+ routePaths?: string[];
14
+ entryScripts?: string[];
15
+ refreshCurrentRoute?: boolean;
16
+ };
17
+ export interface RouterNavigationDiagnostics {
18
+ currentPath: string;
19
+ navigating: boolean;
20
+ pendingPopScrollY: number | null;
21
+ latestNavigationToken: number;
22
+ activeNavigation: {
23
+ url: string;
24
+ pushState: boolean;
25
+ } | null;
26
+ }
27
+ export interface NavigationSnapshot {
28
+ focusKey?: string;
29
+ controls: PreservedControlState[];
30
+ }
31
+ export declare function createHTMLFragment(html: string): DocumentFragment;
32
+ export declare function replaceHTMLFragment(container: Element, html: string): void;
33
+ export declare function captureNavigationSnapshot(container: Element): NavigationSnapshot;
34
+ export declare function restoreNavigationSnapshot(container: Element, snapshot: NavigationSnapshot): void;
35
+ /** Set a loading indicator element to show during navigation */
36
+ export declare function setLoadingElement(el: HTMLElement): void;
37
+ export declare function onNavigate(fn: NavigateCallback): () => void;
38
+ export declare function beforeNavigate(fn: BeforeNavigateCallback): () => void;
39
+ export declare function getCurrentPath(): string;
40
+ export declare function getRouterNavigationDiagnostics(): RouterNavigationDiagnostics;
41
+ export declare function setCurrentRouteScript(script: string | null | undefined): void;
42
+ export declare function navigate(url: string, pushState?: boolean): Promise<void>;
43
+ export declare function refreshCurrentRoute(): Promise<void>;
44
+ export declare function applyHMRUpdate(update: HMRUpdate): Promise<void>;
45
+ export declare function prefetch(url: string): void;
46
+ export declare function initRouter(): void;
47
+ export {};
@@ -0,0 +1,487 @@
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, initializedDocument = null, initializedWindow = 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
+ function normalizePrefetchURL(url) {
377
+ const [withoutHash] = url.split("#", 1);
378
+ return withoutHash || url;
379
+ }
380
+ export function prefetch(url) {
381
+ const normalizedURL = normalizePrefetchURL(url);
382
+ if (prefetchCache.has(normalizedURL))
383
+ return;
384
+ prefetchCache.add(normalizedURL);
385
+ const link = document.createElement("link");
386
+ link.rel = "prefetch";
387
+ link.href = normalizedURL;
388
+ link.setAttribute("as", "fetch");
389
+ link.setAttribute("crossorigin", "");
390
+ document.head.appendChild(link);
391
+ }
392
+ function ensureViewportPrefetchObserver() {
393
+ if (viewportPrefetchObserver)
394
+ return viewportPrefetchObserver;
395
+ if (typeof IntersectionObserver > "u")
396
+ return null;
397
+ viewportPrefetchObserver = new IntersectionObserver((entries) => {
398
+ for (const entry of entries) {
399
+ if (!entry.isIntersecting)
400
+ continue;
401
+ const target = entry.target;
402
+ prefetch(target.pathname + target.search);
403
+ viewportPrefetchObserver?.unobserve(target);
404
+ }
405
+ }, {
406
+ rootMargin: "200px"
407
+ });
408
+ return viewportPrefetchObserver;
409
+ }
410
+ function observeViewportPrefetchAnchors(root = document) {
411
+ const observer = ensureViewportPrefetchObserver();
412
+ if (!observer || typeof root.querySelectorAll !== "function")
413
+ return;
414
+ const anchors = root.querySelectorAll('a[data-g-prefetch="viewport"][href]');
415
+ for (const anchor of anchors) {
416
+ if (!anchor || typeof anchor !== "object" || observedViewportPrefetchAnchors.has(anchor))
417
+ continue;
418
+ observedViewportPrefetchAnchors.add(anchor);
419
+ observer.observe(anchor);
420
+ }
421
+ }
422
+ function shouldHandleClick(e, anchor) {
423
+ if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey)
424
+ return !1;
425
+ if (e.button !== 0)
426
+ return !1;
427
+ if (anchor.target && anchor.target !== "_self")
428
+ return !1;
429
+ if (anchor.origin !== location.origin)
430
+ return !1;
431
+ if (anchor.hasAttribute("download"))
432
+ return !1;
433
+ if (anchor.pathname === location.pathname && anchor.search === location.search && anchor.hash)
434
+ return !1;
435
+ return !0;
436
+ }
437
+ function readLocationPath() {
438
+ return `${location.pathname}${location.search}`;
439
+ }
440
+ export function initRouter() {
441
+ currentPath = readLocationPath();
442
+ setCurrentRouteScript(globalThis.__GORSEE_ROUTE_SCRIPT__);
443
+ globalThis.__gorseeHandleHMR = (update) => {
444
+ applyHMRUpdate(update);
445
+ };
446
+ if (typeof history.replaceState === "function") {
447
+ const currentState = typeof history.state === "object" && history.state !== null ? history.state : {};
448
+ history.replaceState({
449
+ ...currentState,
450
+ gorsee: !0,
451
+ gorseeScrollY: readCurrentScrollY()
452
+ }, "", readLocationPath());
453
+ }
454
+ if (initializedDocument !== document) {
455
+ initializedDocument = document;
456
+ document.addEventListener("click", (e) => {
457
+ const anchor = e.target.closest?.("a[href]");
458
+ if (!anchor)
459
+ return;
460
+ if (anchor.dataset.gNoRouter !== void 0)
461
+ return;
462
+ if (shouldHandleClick(e, anchor)) {
463
+ e.preventDefault();
464
+ navigate(anchor.pathname + anchor.search);
465
+ }
466
+ });
467
+ document.addEventListener("focusin", (e) => {
468
+ const target = e.target, container = document.getElementById("app");
469
+ if (!target || !container || !container.contains(target))
470
+ return;
471
+ const key = getFocusablePreserveKey(target);
472
+ if (key)
473
+ lastFocusedPreserveKey = key;
474
+ });
475
+ }
476
+ if (initializedWindow !== window) {
477
+ initializedWindow = window;
478
+ window.addEventListener("popstate", (e) => {
479
+ const nextPath = readLocationPath();
480
+ if (e.state?.gorsee || currentPath !== nextPath) {
481
+ pendingPopScrollY = typeof e.state?.gorseeScrollY === "number" ? e.state.gorseeScrollY : 0;
482
+ navigate(nextPath, !1);
483
+ }
484
+ });
485
+ }
486
+ observeViewportPrefetchAnchors(document);
487
+ }
@@ -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 {};