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,132 @@
1
+ import { escapeHTML } from "./html-escape.js";
2
+ import { getHydrationDiagnostics } from "./hydration.js";
3
+ import { getRouterNavigationDiagnostics } from "./router.js";
4
+ import {
5
+ getReactiveTraceArtifact,
6
+ REACTIVE_TRACE_SCHEMA_VERSION
7
+ } from "../reactive/diagnostics.js";
8
+ export const RUNTIME_DEVTOOLS_SCHEMA_VERSION = 1;
9
+ function sortTopNodes(trace, limit) {
10
+ return trace.nodes.map((node) => ({
11
+ id: node.id,
12
+ kind: node.kind,
13
+ label: node.label,
14
+ score: node.reads + node.writes + node.runs + node.invalidations,
15
+ reads: node.reads,
16
+ writes: node.writes,
17
+ runs: node.runs,
18
+ invalidations: node.invalidations
19
+ })).sort((left, right) => right.score - left.score || right.runs - left.runs || left.id - right.id).slice(0, Math.max(1, limit));
20
+ }
21
+ function summarizeRoutes(entries) {
22
+ return {
23
+ total: entries.length,
24
+ pages: entries.filter((entry) => !entry.isApi).length,
25
+ apis: entries.filter((entry) => entry.isApi).length,
26
+ loaders: entries.filter((entry) => entry.hasLoader).length,
27
+ middleware: entries.filter((entry) => entry.hasMiddleware).length
28
+ };
29
+ }
30
+ function summarizeSnapshot(navigation, hydration, topNodes, recentEvents) {
31
+ return {
32
+ navigationState: navigation.navigating ? "navigating" : "idle",
33
+ activeRoute: navigation.activeNavigation?.url ?? navigation.currentPath,
34
+ hydrationState: hydration.recoverableMismatch ? "recovering" : "stable",
35
+ mismatchCount: hydration.mismatches,
36
+ topReactiveNode: topNodes[0]?.label ?? topNodes[0]?.kind ?? null,
37
+ recentReactiveEventKinds: recentEvents.slice(-5).map((event) => event.kind)
38
+ };
39
+ }
40
+ export function createRuntimeDevtoolsSnapshot(options = {}) {
41
+ const trace = getReactiveTraceArtifact(), maxReactiveEvents = Math.max(1, options.maxReactiveEvents ?? 20), topNodes = sortTopNodes(trace, options.maxTopNodes ?? 5), recentEvents = trace.events.slice(-maxReactiveEvents), navigation = getRouterNavigationDiagnostics(), hydration = getHydrationDiagnostics(), routes = options.routes ? {
42
+ summary: summarizeRoutes(options.routes),
43
+ entries: [...options.routes]
44
+ } : void 0;
45
+ return {
46
+ schemaVersion: RUNTIME_DEVTOOLS_SCHEMA_VERSION,
47
+ generatedAt: new Date().toISOString(),
48
+ reactiveTraceSchemaVersion: REACTIVE_TRACE_SCHEMA_VERSION,
49
+ navigation,
50
+ hydration,
51
+ reactive: {
52
+ snapshot: trace.snapshot,
53
+ topNodes,
54
+ recentEvents,
55
+ trace: options.includeTrace ? trace : void 0
56
+ },
57
+ routes,
58
+ summary: summarizeSnapshot(navigation, hydration, topNodes, recentEvents)
59
+ };
60
+ }
61
+ function renderKeyValueGrid(entries) {
62
+ return `<div class="g-devtools-grid">${entries.map((entry) => `<div class="g-devtools-card"><div class="g-devtools-key">${escapeHTML(entry.key)}</div><div class="g-devtools-value">${escapeHTML(entry.value)}</div></div>`).join("")}</div>`;
63
+ }
64
+ export function renderRuntimeDevtoolsHTML(snapshot) {
65
+ const routeSummary = snapshot.routes ? renderKeyValueGrid([
66
+ { key: "Routes", value: String(snapshot.routes.summary.total) },
67
+ { key: "Pages", value: String(snapshot.routes.summary.pages) },
68
+ { key: "API", value: String(snapshot.routes.summary.apis) },
69
+ { key: "Loaders", value: String(snapshot.routes.summary.loaders) },
70
+ { key: "Middleware", value: String(snapshot.routes.summary.middleware) }
71
+ ]) : "", topNodes = snapshot.reactive.topNodes.length > 0 ? snapshot.reactive.topNodes.map((node) => `<tr><td>${escapeHTML(node.label ?? `#${node.id}`)}</td><td>${escapeHTML(node.kind)}</td><td>${node.score}</td><td>${node.runs}</td><td>${node.invalidations}</td></tr>`).join("") : '<tr><td colspan="5">No reactive activity captured</td></tr>', recentEvents = snapshot.reactive.recentEvents.length > 0 ? snapshot.reactive.recentEvents.map((event) => `<tr><td>${event.seq}</td><td>${escapeHTML(event.kind)}</td><td>${escapeHTML(event.label ?? "-")}</td><td>${escapeHTML(event.reason ?? event.detail ?? "-")}</td></tr>`).join("") : '<tr><td colspan="4">No reactive events captured</td></tr>', routeRows = snapshot.routes?.entries.length ? snapshot.routes.entries.map((route) => `<tr><td>${escapeHTML(route.path)}</td><td>${escapeHTML(route.methods.join(", ") || "GET")}</td><td>${route.isApi ? "API" : "Page"}</td><td>${route.hasLoader ? "Yes" : "-"}</td><td>${route.hasMiddleware ? "Yes" : "-"}</td></tr>`).join("") : "";
72
+ return `<div class="g-devtools">
73
+ <style>
74
+ .g-devtools{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:linear-gradient(180deg,#0f172a,#111827);color:#e5eefb;padding:24px;border-radius:18px}
75
+ .g-devtools h1,.g-devtools h2{margin:0 0 12px}
76
+ .g-devtools p{margin:0 0 12px;color:#b7c3d9}
77
+ .g-devtools-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin:12px 0 20px}
78
+ .g-devtools-card{background:#172033;border:1px solid #30415f;border-radius:12px;padding:12px}
79
+ .g-devtools-key{font-size:11px;text-transform:uppercase;color:#8ea3c7;margin-bottom:6px}
80
+ .g-devtools-value{font-size:18px;font-weight:700}
81
+ .g-devtools-table{width:100%;border-collapse:collapse;margin-top:12px}
82
+ .g-devtools-table th,.g-devtools-table td{padding:10px;border-bottom:1px solid #24324d;text-align:left;vertical-align:top}
83
+ .g-devtools-pill{display:inline-block;padding:4px 8px;border-radius:999px;background:#1d4ed833;color:#93c5fd;font-size:12px}
84
+ .g-devtools-section{margin-top:22px}
85
+ </style>
86
+ <h1>Gorsee Runtime Inspector</h1>
87
+ <p>Path: ${escapeHTML(snapshot.summary.activeRoute || "/")} | Navigation: ${escapeHTML(snapshot.summary.navigationState)} | Hydration: ${escapeHTML(snapshot.summary.hydrationState)}</p>
88
+ ${renderKeyValueGrid([
89
+ { key: "Hydration mismatches", value: String(snapshot.hydration.mismatches) },
90
+ { key: "Signals", value: String(snapshot.reactive.snapshot.signalsCreated) },
91
+ { key: "Computeds", value: String(snapshot.reactive.snapshot.computedCreated) },
92
+ { key: "Effects", value: String(snapshot.reactive.snapshot.effectCreated) },
93
+ { key: "Resources", value: String(snapshot.reactive.snapshot.resourcesCreated) },
94
+ { key: "Mutations", value: String(snapshot.reactive.snapshot.mutationsCreated) }
95
+ ])}
96
+ ${routeSummary}
97
+ <div class="g-devtools-section">
98
+ <h2>Top Reactive Nodes</h2>
99
+ <table class="g-devtools-table">
100
+ <thead><tr><th>Label</th><th>Kind</th><th>Score</th><th>Runs</th><th>Invalidations</th></tr></thead>
101
+ <tbody>${topNodes}</tbody>
102
+ </table>
103
+ </div>
104
+ <div class="g-devtools-section">
105
+ <h2>Recent Reactive Events</h2>
106
+ <table class="g-devtools-table">
107
+ <thead><tr><th>#</th><th>Kind</th><th>Label</th><th>Reason</th></tr></thead>
108
+ <tbody>${recentEvents}</tbody>
109
+ </table>
110
+ </div>
111
+ ${routeRows ? `<div class="g-devtools-section">
112
+ <h2>Route Tree</h2>
113
+ <table class="g-devtools-table">
114
+ <thead><tr><th>Path</th><th>Methods</th><th>Type</th><th>Loader</th><th>Middleware</th></tr></thead>
115
+ <tbody>${routeRows}</tbody>
116
+ </table>
117
+ </div>` : ""}
118
+ </div>`;
119
+ }
120
+ export function renderRuntimeDevtoolsOverlay(snapshot, nonce = "") {
121
+ return `<!DOCTYPE html>
122
+ <html>
123
+ <head>
124
+ <meta charset="UTF-8" />
125
+ <title>Gorsee Runtime Inspector</title>
126
+ </head>
127
+ <body>
128
+ ${nonce ? `<script nonce="${escapeHTML(nonce)}"></script>` : ""}
129
+ ${renderRuntimeDevtoolsHTML(snapshot)}
130
+ </body>
131
+ </html>`;
132
+ }
@@ -0,0 +1,6 @@
1
+ import type { GorseeRenderable } from "./renderable.js";
2
+ export interface ErrorBoundaryProps {
3
+ fallback: GorseeRenderable | ((error: Error) => GorseeRenderable);
4
+ children: GorseeRenderable;
5
+ }
6
+ export declare function ErrorBoundary(props: ErrorBoundaryProps): GorseeRenderable;
@@ -0,0 +1,17 @@
1
+ import { createSignal } from "../reactive/signal.js";
2
+ export function ErrorBoundary(props) {
3
+ const [error, setError] = createSignal(null);
4
+ try {
5
+ const children = typeof props.children === "function" ? props.children() : props.children;
6
+ return () => {
7
+ const err = error();
8
+ if (err)
9
+ return typeof props.fallback === "function" ? props.fallback(err) : props.fallback;
10
+ return children;
11
+ };
12
+ } catch (err) {
13
+ const errObj = err instanceof Error ? err : Error(String(err));
14
+ setError(errObj);
15
+ return typeof props.fallback === "function" ? props.fallback(errObj) : props.fallback;
16
+ }
17
+ }
@@ -0,0 +1,3 @@
1
+ export declare const EVENT_REPLAY_SCRIPT = "<script data-g-event-replay>\n(function(){\n var Q=[];\n var E=[\"click\",\"input\",\"change\",\"submit\",\"keydown\",\"keyup\",\"focusin\",\"focusout\"];\n function capture(e){\n Q.push({type:e.type,target:e.target,timeStamp:e.timeStamp,\n detail:e.type===\"input\"?e.target.value:undefined,\n key:e.key||undefined});\n if(e.type===\"submit\")e.preventDefault();\n }\n E.forEach(function(t){document.addEventListener(t,capture,{capture:true})});\n window.__gorsee_events={\n queue:Q,\n stop:function(){E.forEach(function(t){document.removeEventListener(t,capture,{capture:true})})},\n replay:function(root){\n this.stop();\n Q.forEach(function(ev){\n if(ev.target&&root.contains(ev.target)){\n ev.target.dispatchEvent(new Event(ev.type,{bubbles:true}));\n }\n });\n Q.length=0;\n }\n };\n})();\n</script>";
2
+ export declare function replayEvents(root: Element): void;
3
+ export declare function stopEventCapture(): void;
@@ -1,9 +1,3 @@
1
- // Event Replay -- captures user interactions before hydration completes
2
- // Inspired by Angular's JSAction / Google Wiz
3
- //
4
- // This generates a small inline <script> (~400 bytes minified)
5
- // that should be placed before any app content in the HTML.
6
-
7
1
  export const EVENT_REPLAY_SCRIPT = `<script data-g-event-replay>
8
2
  (function(){
9
3
  var Q=[];
@@ -29,22 +23,26 @@ export const EVENT_REPLAY_SCRIPT = `<script data-g-event-replay>
29
23
  }
30
24
  };
31
25
  })();
32
- </script>`
33
-
34
- interface GorseeEventReplay {
35
- queue: unknown[]
36
- stop(): void
37
- replay(root: Element): void
26
+ </script>`;
27
+ function getEventReplay() {
28
+ const value = globalThis.__gorsee_events;
29
+ if (!value || typeof value !== "object")
30
+ return;
31
+ return value;
38
32
  }
39
-
40
- function getEventReplay(): GorseeEventReplay | undefined {
41
- return (globalThis as Record<string, unknown>).__gorsee_events as GorseeEventReplay | undefined
33
+ export function replayEvents(root) {
34
+ const replay = getEventReplay()?.replay;
35
+ if (typeof replay !== "function")
36
+ return;
37
+ try {
38
+ replay(root);
39
+ } catch {}
42
40
  }
43
-
44
- export function replayEvents(root: Element): void {
45
- getEventReplay()?.replay(root)
46
- }
47
-
48
- export function stopEventCapture(): void {
49
- getEventReplay()?.stop()
41
+ export function stopEventCapture() {
42
+ const stop = getEventReplay()?.stop;
43
+ if (typeof stop !== "function")
44
+ return;
45
+ try {
46
+ stop();
47
+ } catch {}
50
48
  }
@@ -0,0 +1,7 @@
1
+ import { type SignalGetter } from "../reactive/signal.js";
2
+ export interface EventSourceSignal<T> {
3
+ readonly value: SignalGetter<T>;
4
+ readonly connected: SignalGetter<boolean>;
5
+ close: () => void;
6
+ }
7
+ export declare function createEventSource<T>(url: string, event: string, initialValue: T): EventSourceSignal<T>;
@@ -0,0 +1,24 @@
1
+ import { createSignal } from "../reactive/signal.js";
2
+ export function createEventSource(url, event, initialValue) {
3
+ const [value, setValue] = createSignal(initialValue), [connected, setConnected] = createSignal(!1);
4
+ if (typeof globalThis.EventSource > "u")
5
+ return { value, connected, close: () => {} };
6
+ const source = new EventSource(url);
7
+ source.addEventListener("open", () => {
8
+ setConnected(!0);
9
+ });
10
+ source.addEventListener(event, (e) => {
11
+ try {
12
+ const parsed = JSON.parse(String(e.data));
13
+ setValue(parsed);
14
+ } catch {}
15
+ });
16
+ source.addEventListener("error", () => {
17
+ setConnected(!1);
18
+ });
19
+ function close() {
20
+ source.close();
21
+ setConnected(!1);
22
+ }
23
+ return { value, connected, close };
24
+ }
@@ -0,0 +1,24 @@
1
+ import { type SignalGetter } from "../reactive/signal.js";
2
+ export interface FormActionResult<T = unknown> {
3
+ ok?: boolean;
4
+ status?: number;
5
+ data?: T;
6
+ error?: string;
7
+ fieldErrors?: Record<string, string[]>;
8
+ formErrors?: string[];
9
+ values?: Record<string, string>;
10
+ }
11
+ export interface FormSubmitOptions<T = unknown> {
12
+ optimisticData?: T;
13
+ }
14
+ export interface FormState<T = unknown> {
15
+ submitting: SignalGetter<boolean>;
16
+ status: SignalGetter<"idle" | "submitting" | "success" | "error">;
17
+ error: SignalGetter<string | undefined>;
18
+ formErrors: SignalGetter<string[]>;
19
+ fieldErrors: SignalGetter<Record<string, string[]>>;
20
+ data: SignalGetter<T | undefined>;
21
+ submit: (formData: FormData | Record<string, string>, options?: FormSubmitOptions<T>) => Promise<FormActionResult<T>>;
22
+ reset: () => void;
23
+ }
24
+ export declare function useFormAction<T = unknown>(actionUrl?: string): FormState<T>;
@@ -0,0 +1,65 @@
1
+ import { createSignal } from "../reactive/signal.js";
2
+ function isPlainFormActionResult(value) {
3
+ return typeof value === "object" && value !== null && !Array.isArray(value);
4
+ }
5
+ function normalizeFormInput(input) {
6
+ return input instanceof FormData ? input : new URLSearchParams(input);
7
+ }
8
+ export function useFormAction(actionUrl) {
9
+ const [submitting, setSubmitting] = createSignal(!1), [status, setStatus] = createSignal("idle"), [error, setError] = createSignal(void 0), [formErrors, setFormErrors] = createSignal([]), [fieldErrors, setFieldErrors] = createSignal({}), [data, setData] = createSignal(void 0);
10
+ function reset() {
11
+ setSubmitting(!1);
12
+ setStatus("idle");
13
+ setError(void 0);
14
+ setFormErrors([]);
15
+ setFieldErrors({});
16
+ setData(void 0);
17
+ }
18
+ async function submit(input, options = {}) {
19
+ setSubmitting(!0);
20
+ setStatus("submitting");
21
+ setError(void 0);
22
+ setFormErrors([]);
23
+ setFieldErrors({});
24
+ if (options.optimisticData !== void 0)
25
+ setData(() => options.optimisticData);
26
+ try {
27
+ const url = actionUrl ?? location.pathname, res = await fetch(url, {
28
+ method: "POST",
29
+ body: normalizeFormInput(input),
30
+ headers: {
31
+ Accept: "application/json"
32
+ }
33
+ }), decoded = await res.json();
34
+ if (!isPlainFormActionResult(decoded))
35
+ throw Error("Malformed form action response");
36
+ const rawResult = decoded, result = {
37
+ ok: rawResult.ok ?? res.ok,
38
+ status: rawResult.status ?? res.status,
39
+ data: rawResult.data,
40
+ error: rawResult.error,
41
+ fieldErrors: rawResult.fieldErrors,
42
+ formErrors: rawResult.formErrors,
43
+ values: rawResult.values
44
+ };
45
+ if (result.ok === !1 || result.error || result.formErrors && result.formErrors.length > 0 || result.fieldErrors && Object.keys(result.fieldErrors).length > 0) {
46
+ setStatus("error");
47
+ setError(result.error);
48
+ setFormErrors(result.formErrors ?? []);
49
+ setFieldErrors(result.fieldErrors ?? {});
50
+ return result;
51
+ }
52
+ setStatus("success");
53
+ setData(() => result.data);
54
+ return result;
55
+ } catch (err) {
56
+ const message = err instanceof Error ? err.message : String(err);
57
+ setStatus("error");
58
+ setError(message);
59
+ return { ok: !1, status: 500, error: message };
60
+ } finally {
61
+ setSubmitting(!1);
62
+ }
63
+ }
64
+ return { submitting, status, error, formErrors, fieldErrors, data, submit, reset };
65
+ }
@@ -0,0 +1,7 @@
1
+ interface HeadProps {
2
+ children?: unknown;
3
+ }
4
+ export declare function resetServerHead(): void;
5
+ export declare function getServerHead(): string[];
6
+ export declare function Head(props: HeadProps): null;
7
+ export {};
@@ -0,0 +1,90 @@
1
+ let serverHeadElements = [];
2
+ export function resetServerHead() {
3
+ serverHeadElements = [];
4
+ }
5
+ export function getServerHead() {
6
+ return serverHeadElements;
7
+ }
8
+ export function Head(props) {
9
+ const children = props.children;
10
+ if (!children)
11
+ return null;
12
+ if (typeof document < "u")
13
+ applyClientHead(children);
14
+ else
15
+ collectServerHead(children);
16
+ return null;
17
+ }
18
+ function isVNode(v) {
19
+ return typeof v === "object" && v !== null && "type" in v && "props" in v;
20
+ }
21
+ function collectServerHead(children) {
22
+ if (Array.isArray(children)) {
23
+ for (const child of children)
24
+ collectServerHead(child);
25
+ return;
26
+ }
27
+ if (!isVNode(children))
28
+ return;
29
+ const { type, props } = children;
30
+ if (type === "title" && props.children) {
31
+ serverHeadElements.push(`<title>${String(props.children)}</title>`);
32
+ return;
33
+ }
34
+ let tag = `<${type}`;
35
+ for (const [key, value] of Object.entries(props)) {
36
+ if (key === "children")
37
+ continue;
38
+ if (value != null)
39
+ tag += ` ${key}="${String(value)}"`;
40
+ }
41
+ if (props.children)
42
+ tag += `>${String(props.children)}</${type}>`;
43
+ else
44
+ tag += " />";
45
+ serverHeadElements.push(tag);
46
+ }
47
+ function applyClientHead(children) {
48
+ if (Array.isArray(children)) {
49
+ for (const child of children)
50
+ applyClientHead(child);
51
+ return;
52
+ }
53
+ if (!isVNode(children))
54
+ return;
55
+ const { type, props } = children;
56
+ if (type === "title") {
57
+ document.title = String(props.children ?? "");
58
+ return;
59
+ }
60
+ if (type === "meta") {
61
+ const name = props.name ?? props.property;
62
+ if (name) {
63
+ const existing = document.querySelector(`meta[name="${name}"], meta[property="${name}"]`);
64
+ if (existing) {
65
+ existing.setAttribute("content", String(props.content ?? ""));
66
+ return;
67
+ }
68
+ }
69
+ const meta = document.createElement("meta");
70
+ for (const [key, value] of Object.entries(props)) {
71
+ if (key === "children")
72
+ continue;
73
+ if (value != null)
74
+ meta.setAttribute(key, String(value));
75
+ }
76
+ document.head.appendChild(meta);
77
+ return;
78
+ }
79
+ if (type === "link") {
80
+ const el = document.createElement("link");
81
+ for (const [key, value] of Object.entries(props)) {
82
+ if (key === "children")
83
+ continue;
84
+ if (value != null)
85
+ el.setAttribute(key, String(value));
86
+ }
87
+ el.dataset.gHead = "";
88
+ document.head.appendChild(el);
89
+ }
90
+ }
@@ -0,0 +1,7 @@
1
+ export declare const GORSEE_SIGNAL_MARKER = "__gorseeSignal";
2
+ export declare function escapeHTML(value: string): string;
3
+ export declare function escapeAttr(value: string): string;
4
+ export declare const VOID_ELEMENTS: Set<string>;
5
+ export declare function isSignal(value: unknown): value is () => unknown;
6
+ export declare function isRenderableThunk(value: unknown): value is () => unknown;
7
+ export declare function resolveValue(value: unknown): unknown;
@@ -0,0 +1,39 @@
1
+ const HTML_ESCAPE_RE = /[&<>"']/g, ATTR_ESCAPE_RE = /["&]/g, HTML_ESCAPES = {
2
+ "&": "&amp;",
3
+ "<": "&lt;",
4
+ ">": "&gt;",
5
+ '"': "&quot;",
6
+ "'": "&#x27;"
7
+ };
8
+ export const GORSEE_SIGNAL_MARKER = "__gorseeSignal";
9
+ export function escapeHTML(value) {
10
+ return value.replace(HTML_ESCAPE_RE, (ch) => HTML_ESCAPES[ch] ?? ch);
11
+ }
12
+ export function escapeAttr(value) {
13
+ return value.replace(ATTR_ESCAPE_RE, (ch) => HTML_ESCAPES[ch] ?? ch);
14
+ }
15
+ export const VOID_ELEMENTS = new Set([
16
+ "area",
17
+ "base",
18
+ "br",
19
+ "col",
20
+ "embed",
21
+ "hr",
22
+ "img",
23
+ "input",
24
+ "link",
25
+ "meta",
26
+ "param",
27
+ "source",
28
+ "track",
29
+ "wbr"
30
+ ]);
31
+ export function isSignal(value) {
32
+ return typeof value === "function" && value[GORSEE_SIGNAL_MARKER] === !0;
33
+ }
34
+ export function isRenderableThunk(value) {
35
+ return typeof value === "function" && value.length === 0 && !isSignal(value);
36
+ }
37
+ export function resolveValue(value) {
38
+ return isSignal(value) ? value() : value;
39
+ }
@@ -0,0 +1,15 @@
1
+ export interface HydrationDiagnostics {
2
+ active: boolean;
3
+ mismatches: number;
4
+ recoverableMismatch: boolean;
5
+ }
6
+ export declare function isHydrating(): boolean;
7
+ export declare function getHydrationMismatches(): number;
8
+ export declare function getHydrationDiagnostics(): HydrationDiagnostics;
9
+ export declare function resetHydrationDiagnostics(): void;
10
+ export declare function enterHydration(root: Element): void;
11
+ export declare function exitHydration(): HydrationDiagnostics;
12
+ export declare function claimElement(expectedTag?: string): Element | null;
13
+ export declare function claimText(expectedText?: string): Text | null;
14
+ export declare function pushCursor(parent: Node): void;
15
+ export declare function popCursor(): void;
@@ -0,0 +1,103 @@
1
+ const stack = [];
2
+ let active = !1, mismatches = 0;
3
+ export function isHydrating() {
4
+ return active;
5
+ }
6
+ export function getHydrationMismatches() {
7
+ return mismatches;
8
+ }
9
+ export function getHydrationDiagnostics() {
10
+ return { active, mismatches, recoverableMismatch: mismatches > 0 };
11
+ }
12
+ export function resetHydrationDiagnostics() {
13
+ mismatches = 0;
14
+ }
15
+ export function enterHydration(root) {
16
+ active = !0;
17
+ mismatches = 0;
18
+ stack.length = 0;
19
+ stack.push({ parent: root, index: 0 });
20
+ }
21
+ export function exitHydration() {
22
+ for (const cursor of stack)
23
+ mismatches += countRemainingMeaningfulNodes(cursor);
24
+ active = !1;
25
+ stack.length = 0;
26
+ if (mismatches > 0 && typeof console < "u")
27
+ console.warn(`[gorsee] Hydration completed with ${mismatches} mismatch(es). Server and client HTML may differ.`);
28
+ return getHydrationDiagnostics();
29
+ }
30
+ export function claimElement(expectedTag) {
31
+ const cursor = stack[stack.length - 1];
32
+ if (!cursor)
33
+ return null;
34
+ while (cursor.index < cursor.parent.childNodes.length) {
35
+ const node = cursor.parent.childNodes[cursor.index];
36
+ if (node.nodeType === 1) {
37
+ if (expectedTag && node.tagName.toLowerCase() !== expectedTag.toLowerCase()) {
38
+ mismatches++;
39
+ return null;
40
+ }
41
+ cursor.index++;
42
+ return node;
43
+ }
44
+ if (node.nodeType === 3 && node.textContent?.trim() === "") {
45
+ cursor.index++;
46
+ continue;
47
+ }
48
+ if (node.nodeType === 8) {
49
+ cursor.index++;
50
+ continue;
51
+ }
52
+ break;
53
+ }
54
+ return null;
55
+ }
56
+ export function claimText(expectedText) {
57
+ const cursor = stack[stack.length - 1];
58
+ if (!cursor)
59
+ return null;
60
+ while (cursor.index < cursor.parent.childNodes.length) {
61
+ const node = cursor.parent.childNodes[cursor.index];
62
+ if (node.nodeType === 3) {
63
+ cursor.index++;
64
+ const textNode = node;
65
+ if (expectedText !== void 0) {
66
+ const currentText = textNode.textContent ?? "";
67
+ if (currentText !== expectedText)
68
+ if (currentText.startsWith(expectedText) && expectedText.length < currentText.length) {
69
+ textNode.splitText(expectedText.length);
70
+ textNode.textContent = expectedText;
71
+ } else {
72
+ textNode.textContent = expectedText;
73
+ mismatches++;
74
+ }
75
+ }
76
+ return textNode;
77
+ }
78
+ if (node.nodeType === 8) {
79
+ cursor.index++;
80
+ continue;
81
+ }
82
+ break;
83
+ }
84
+ return null;
85
+ }
86
+ export function pushCursor(parent) {
87
+ stack.push({ parent, index: 0 });
88
+ }
89
+ export function popCursor() {
90
+ stack.pop();
91
+ }
92
+ function countRemainingMeaningfulNodes(cursor) {
93
+ let count = 0;
94
+ for (let i = cursor.index;i < cursor.parent.childNodes.length; i++) {
95
+ const node = cursor.parent.childNodes[i];
96
+ if (node.nodeType === 8)
97
+ continue;
98
+ if (node.nodeType === 3 && node.textContent?.trim() === "")
99
+ continue;
100
+ count++;
101
+ }
102
+ return count;
103
+ }
@@ -0,0 +1,49 @@
1
+ import type { GorseeRenderable } from "./renderable.js";
2
+ export type ImageFormat = "avif" | "webp" | "jpeg" | "png";
3
+ export type ImageFit = "cover" | "contain" | "fill" | "inside" | "outside";
4
+ export interface ImageRemotePattern {
5
+ protocol?: "http:" | "https:";
6
+ hostname: string;
7
+ pathname?: string;
8
+ }
9
+ export interface ImageLoaderParams {
10
+ src: string;
11
+ width: number;
12
+ quality: number;
13
+ format?: ImageFormat;
14
+ }
15
+ export type ImageLoader = (params: ImageLoaderParams) => string;
16
+ export interface ImageRuntimeConfig {
17
+ widths?: number[];
18
+ formats?: ImageFormat[];
19
+ quality?: number;
20
+ fit?: ImageFit;
21
+ loader?: ImageLoader;
22
+ remotePatterns?: ImageRemotePattern[];
23
+ }
24
+ export interface ImageProps {
25
+ src: string;
26
+ alt: string;
27
+ width?: number;
28
+ height?: number;
29
+ loading?: "lazy" | "eager";
30
+ priority?: boolean;
31
+ sizes?: string;
32
+ quality?: number;
33
+ fit?: ImageFit;
34
+ format?: ImageFormat;
35
+ formats?: ImageFormat[];
36
+ optimize?: boolean;
37
+ placeholder?: "empty" | "blur";
38
+ blurDataURL?: string;
39
+ class?: string;
40
+ className?: string;
41
+ config?: ImageRuntimeConfig;
42
+ [key: string]: unknown;
43
+ }
44
+ export declare function isAllowedRemoteImage(src: string, patterns?: ImageRemotePattern[]): boolean;
45
+ export declare function defaultImageLoader(params: ImageLoaderParams): string;
46
+ export declare function getImageCandidateWidths(width: number | undefined, widths?: number[]): number[];
47
+ export declare function buildImageSrcSet(src: string, width: number | undefined, quality: number, loader: ImageLoader, format?: ImageFormat, widths?: number[]): string | undefined;
48
+ export declare function getImageProps(props: ImageProps): Record<string, unknown>;
49
+ export declare function Image(props: ImageProps): GorseeRenderable;