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,144 @@
1
+ const DEFAULT_IMAGE_CONFIG = {
2
+ widths: [320, 640, 960, 1200, 1600, 2048],
3
+ formats: ["webp"],
4
+ quality: 75,
5
+ fit: "cover"
6
+ };
7
+ function isRemoteSource(src) {
8
+ return /^https?:\/\//.test(src);
9
+ }
10
+ function matchesRemotePattern(url, pattern) {
11
+ if (pattern.protocol && url.protocol !== pattern.protocol)
12
+ return !1;
13
+ if (pattern.hostname !== url.hostname)
14
+ return !1;
15
+ if (!pattern.pathname)
16
+ return !0;
17
+ if (pattern.pathname.endsWith("/**")) {
18
+ const prefix = pattern.pathname.slice(0, -3);
19
+ return url.pathname.startsWith(prefix);
20
+ }
21
+ if (pattern.pathname.endsWith("/*")) {
22
+ const prefix = pattern.pathname.slice(0, -1);
23
+ return url.pathname.startsWith(prefix) && !url.pathname.slice(prefix.length).includes("/");
24
+ }
25
+ return url.pathname === pattern.pathname;
26
+ }
27
+ export function isAllowedRemoteImage(src, patterns = []) {
28
+ if (!isRemoteSource(src))
29
+ return !0;
30
+ const url = new URL(src);
31
+ return patterns.some((pattern) => matchesRemotePattern(url, pattern));
32
+ }
33
+ export function defaultImageLoader(params) {
34
+ const search = new URLSearchParams({
35
+ src: params.src,
36
+ w: String(params.width),
37
+ q: String(params.quality)
38
+ });
39
+ if (params.format)
40
+ search.set("fm", params.format);
41
+ return `/_gorsee/image?${search.toString()}`;
42
+ }
43
+ export function getImageCandidateWidths(width, widths = DEFAULT_IMAGE_CONFIG.widths) {
44
+ if (!width)
45
+ return [...widths];
46
+ const candidates = widths.filter((candidate) => candidate <= width * 2);
47
+ if (!candidates.includes(width))
48
+ candidates.push(width);
49
+ return [...new Set(candidates)].sort((a, b) => a - b);
50
+ }
51
+ export function buildImageSrcSet(src, width, quality, loader, format, widths = DEFAULT_IMAGE_CONFIG.widths) {
52
+ const candidates = getImageCandidateWidths(width, widths);
53
+ if (candidates.length === 0)
54
+ return;
55
+ return candidates.map((candidate) => `${loader({ src, width: candidate, quality, format })} ${candidate}w`).join(", ");
56
+ }
57
+ function buildPlaceholderStyle(props) {
58
+ if (props.placeholder !== "blur" || !props.blurDataURL)
59
+ return;
60
+ return {
61
+ backgroundImage: `url("${props.blurDataURL}")`,
62
+ backgroundSize: "cover",
63
+ backgroundPosition: "center"
64
+ };
65
+ }
66
+ function resolveImageConfig(props) {
67
+ const config = props.config ?? {};
68
+ return {
69
+ widths: config.widths ?? DEFAULT_IMAGE_CONFIG.widths,
70
+ formats: config.formats ?? DEFAULT_IMAGE_CONFIG.formats,
71
+ quality: props.quality ?? config.quality ?? DEFAULT_IMAGE_CONFIG.quality,
72
+ fit: props.fit ?? config.fit ?? DEFAULT_IMAGE_CONFIG.fit,
73
+ loader: config.loader,
74
+ remotePatterns: config.remotePatterns
75
+ };
76
+ }
77
+ export function getImageProps(props) {
78
+ const {
79
+ src,
80
+ alt,
81
+ width,
82
+ height,
83
+ loading: loadingProp,
84
+ priority,
85
+ sizes,
86
+ format,
87
+ formats,
88
+ optimize = !0,
89
+ placeholder,
90
+ blurDataURL,
91
+ config,
92
+ style,
93
+ ...rest
94
+ } = props, resolved = resolveImageConfig(props), loading = priority ? "eager" : loadingProp ?? "lazy", fetchpriority = priority ? "high" : void 0, decoding = priority ? "sync" : "async", loader = resolved.loader ?? defaultImageLoader;
95
+ if (isRemoteSource(src) && !isAllowedRemoteImage(src, resolved.remotePatterns ?? []))
96
+ throw Error(`Remote image source is not allowed: ${src}`);
97
+ const shouldOptimize = optimize && Boolean(width), primaryFormat = format ?? formats?.[0] ?? resolved.formats[0], optimizedSrc = shouldOptimize ? loader({ src, width, quality: resolved.quality, format: primaryFormat }) : src, srcSet = shouldOptimize ? buildImageSrcSet(src, width, resolved.quality, loader, primaryFormat, resolved.widths) : void 0, imgProps = {
98
+ src: optimizedSrc,
99
+ alt,
100
+ loading,
101
+ decoding,
102
+ ...rest
103
+ };
104
+ if (width !== void 0)
105
+ imgProps.width = String(width);
106
+ if (height !== void 0)
107
+ imgProps.height = String(height);
108
+ if (sizes)
109
+ imgProps.sizes = sizes;
110
+ if (fetchpriority)
111
+ imgProps.fetchpriority = fetchpriority;
112
+ if (srcSet)
113
+ imgProps.srcset = srcSet;
114
+ const placeholderStyle = buildPlaceholderStyle({ ...props, placeholder, blurDataURL }), mergedStyle = {
115
+ ...typeof style === "object" && style !== null ? style : {},
116
+ ...placeholderStyle ?? {},
117
+ ...shouldOptimize ? { "object-fit": resolved.fit } : {}
118
+ };
119
+ if (Object.keys(mergedStyle).length > 0)
120
+ imgProps.style = mergedStyle;
121
+ return imgProps;
122
+ }
123
+ export function Image(props) {
124
+ const resolved = resolveImageConfig(props), requestedFormats = props.formats ?? resolved.formats, primaryFormat = props.format ?? requestedFormats[0];
125
+ if (props.optimize === !1 || !props.width || requestedFormats.length <= 1)
126
+ return { type: "img", props: getImageProps({ ...props, format: primaryFormat }) };
127
+ const loader = resolved.loader ?? defaultImageLoader;
128
+ return {
129
+ type: "picture",
130
+ props: {
131
+ children: [
132
+ ...requestedFormats.slice(0, -1).map((candidateFormat) => ({
133
+ type: "source",
134
+ props: {
135
+ type: `image/${candidateFormat}`,
136
+ srcset: buildImageSrcSet(props.src, props.width, resolved.quality, loader, candidateFormat, resolved.widths),
137
+ sizes: props.sizes
138
+ }
139
+ })),
140
+ { type: "img", props: getImageProps({ ...props, format: primaryFormat }) }
141
+ ]
142
+ }
143
+ };
144
+ }
@@ -0,0 +1,17 @@
1
+ export { Suspense } from "./suspense.js";
2
+ export { render, hydrate } from "./client.js";
3
+ export { enterHydration, exitHydration, isHydrating, getHydrationMismatches, getHydrationDiagnostics, resetHydrationDiagnostics, } from "./hydration.js";
4
+ export { renderToString, ssrJsx, ssrJsxs } from "./server.js";
5
+ export { renderToStream, StreamSuspense, streamJsx, streamJsxs } from "./stream.js";
6
+ export { EVENT_REPLAY_SCRIPT, replayEvents, stopEventCapture } from "./event-replay.js";
7
+ export { Link } from "./link.js";
8
+ export { Head } from "./head.js";
9
+ export { navigate, onNavigate, beforeNavigate, getCurrentPath, getRouterNavigationDiagnostics, prefetch, initRouter, setLoadingElement, } from "./router.js";
10
+ export { RUNTIME_DEVTOOLS_SCHEMA_VERSION, createRuntimeDevtoolsSnapshot, renderRuntimeDevtoolsHTML, renderRuntimeDevtoolsOverlay, type RuntimeDevtoolsOptions, type RuntimeDevtoolsRouteEntry, type RuntimeDevtoolsRouteSummary, type RuntimeDevtoolsSnapshot, type RuntimeDevtoolsSummary, type RuntimeDevtoolsTopNode, } from "./devtools.js";
11
+ export { useFormAction, type FormActionResult, type FormState, type FormSubmitOptions } from "./form.js";
12
+ export { Image, getImageProps, buildImageSrcSet, getImageCandidateWidths, isAllowedRemoteImage, defaultImageLoader, type ImageProps, type ImageLoader, type ImageLoaderParams, type ImageRuntimeConfig, type ImageRemotePattern, type ImageFormat, } from "./image.js";
13
+ export { typedLink, typedNavigate, typedPrefetch, buildSearchParams, buildTypedPath, createTypedRoute, extractRouteParamKeys, } from "./typed-routes.js";
14
+ export { defineForm, validateForm, validateAction, toFieldErrors, fieldAttrs, type FormField, type FormSchema, type ValidationResult, type ActionValidationResult, type ValidationError, } from "./validated-form.js";
15
+ export { island, isIsland } from "./island.js";
16
+ export { hydrateIslands, registerIsland } from "./island-hydrator.js";
17
+ export { createEventSource, type EventSourceSignal } from "./event-source.js";
@@ -0,0 +1,59 @@
1
+ export { Suspense } from "./suspense.js";
2
+ export { render, hydrate } from "./client.js";
3
+ export {
4
+ enterHydration,
5
+ exitHydration,
6
+ isHydrating,
7
+ getHydrationMismatches,
8
+ getHydrationDiagnostics,
9
+ resetHydrationDiagnostics
10
+ } from "./hydration.js";
11
+ export { renderToString, ssrJsx, ssrJsxs } from "./server.js";
12
+ export { renderToStream, StreamSuspense, streamJsx, streamJsxs } from "./stream.js";
13
+ export { EVENT_REPLAY_SCRIPT, replayEvents, stopEventCapture } from "./event-replay.js";
14
+ export { Link } from "./link.js";
15
+ export { Head } from "./head.js";
16
+ export {
17
+ navigate,
18
+ onNavigate,
19
+ beforeNavigate,
20
+ getCurrentPath,
21
+ getRouterNavigationDiagnostics,
22
+ prefetch,
23
+ initRouter,
24
+ setLoadingElement
25
+ } from "./router.js";
26
+ export {
27
+ RUNTIME_DEVTOOLS_SCHEMA_VERSION,
28
+ createRuntimeDevtoolsSnapshot,
29
+ renderRuntimeDevtoolsHTML,
30
+ renderRuntimeDevtoolsOverlay
31
+ } from "./devtools.js";
32
+ export { useFormAction } from "./form.js";
33
+ export {
34
+ Image,
35
+ getImageProps,
36
+ buildImageSrcSet,
37
+ getImageCandidateWidths,
38
+ isAllowedRemoteImage,
39
+ defaultImageLoader
40
+ } from "./image.js";
41
+ export {
42
+ typedLink,
43
+ typedNavigate,
44
+ typedPrefetch,
45
+ buildSearchParams,
46
+ buildTypedPath,
47
+ createTypedRoute,
48
+ extractRouteParamKeys
49
+ } from "./typed-routes.js";
50
+ export {
51
+ defineForm,
52
+ validateForm,
53
+ validateAction,
54
+ toFieldErrors,
55
+ fieldAttrs
56
+ } from "./validated-form.js";
57
+ export { island, isIsland } from "./island.js";
58
+ export { hydrateIslands, registerIsland } from "./island-hydrator.js";
59
+ export { createEventSource } from "./event-source.js";
@@ -0,0 +1,12 @@
1
+ type IslandLoader = () => Promise<{
2
+ default: (props: Record<string, unknown>) => unknown;
3
+ }>;
4
+ /** Register an island component loader by name. */
5
+ export declare function registerIsland(name: string, loader: IslandLoader): void;
6
+ /**
7
+ * Hydrate all island components on the page.
8
+ * Finds all elements with data-island attribute and hydrates each independently.
9
+ * Lazy islands use IntersectionObserver to defer until visible.
10
+ */
11
+ export declare function hydrateIslands(): void;
12
+ export {};
@@ -0,0 +1,74 @@
1
+ import { enterHydration, exitHydration } from "./hydration.js";
2
+ import { replayEvents } from "./event-replay.js";
3
+ const islandRegistry = new Map, hydrationStarted = new WeakSet;
4
+ export function registerIsland(name, loader) {
5
+ islandRegistry.set(name, loader);
6
+ }
7
+ function parseIslandProps(raw) {
8
+ try {
9
+ const parsed = JSON.parse(raw);
10
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed))
11
+ return parsed;
12
+ console.warn(`[gorsee] Island props payload must decode to an object: ${raw}`);
13
+ return {};
14
+ } catch {
15
+ console.warn(`[gorsee] Failed to parse island props: ${raw}`);
16
+ return {};
17
+ }
18
+ }
19
+ async function hydrateOne(el) {
20
+ const name = el.getAttribute("data-island");
21
+ if (!name)
22
+ return;
23
+ const loader = islandRegistry.get(name);
24
+ if (!loader) {
25
+ console.warn(`[gorsee] Island "${name}" not found in registry`);
26
+ return;
27
+ }
28
+ if (hydrationStarted.has(el))
29
+ return;
30
+ hydrationStarted.add(el);
31
+ let enteredHydration = !1;
32
+ try {
33
+ const component = (await loader()).default;
34
+ if (typeof component !== "function") {
35
+ hydrationStarted.delete(el);
36
+ console.warn(`[gorsee] Island "${name}" loader did not return a default component`);
37
+ return;
38
+ }
39
+ const rawProps = el.getAttribute("data-props") ?? "{}", props = parseIslandProps(rawProps);
40
+ enterHydration(el);
41
+ enteredHydration = !0;
42
+ component(props);
43
+ exitHydration();
44
+ enteredHydration = !1;
45
+ replayEvents(el);
46
+ } catch {
47
+ if (enteredHydration)
48
+ exitHydration();
49
+ hydrationStarted.delete(el);
50
+ console.warn(`[gorsee] Island "${name}" hydration failed`);
51
+ }
52
+ }
53
+ export function hydrateIslands() {
54
+ const islands = document.querySelectorAll("[data-island]");
55
+ for (let i = 0;i < islands.length; i++) {
56
+ const el = islands[i];
57
+ if (el.hasAttribute("data-island-lazy") && typeof IntersectionObserver < "u")
58
+ observeLazy(el);
59
+ else
60
+ hydrateOne(el);
61
+ }
62
+ }
63
+ function observeLazy(el) {
64
+ let hydrated = !1;
65
+ const observer = new IntersectionObserver((entries) => {
66
+ for (const entry of entries)
67
+ if (!hydrated && entry.isIntersecting) {
68
+ hydrated = !0;
69
+ observer.unobserve(el);
70
+ hydrateOne(el);
71
+ }
72
+ }, { rootMargin: "200px" });
73
+ observer.observe(el);
74
+ }
@@ -0,0 +1,19 @@
1
+ import type { GorseeRenderable } from "./renderable.js";
2
+ export interface IslandOptions {
3
+ lazy?: boolean;
4
+ }
5
+ export declare const ISLAND_MARKER: unique symbol;
6
+ interface IslandWrapper<P extends Record<string, unknown>> {
7
+ (props: P): GorseeRenderable;
8
+ [ISLAND_MARKER]: true;
9
+ componentName: string;
10
+ originalComponent: (props: P) => GorseeRenderable;
11
+ options: IslandOptions;
12
+ }
13
+ /**
14
+ * Wrap a component as an island -- only this component gets hydrated on the client.
15
+ * Static surrounding content stays as server-rendered HTML with zero JS.
16
+ */
17
+ export declare function island<P extends Record<string, unknown>>(component: (props: P) => GorseeRenderable, options?: IslandOptions): IslandWrapper<P>;
18
+ export declare function isIsland(fn: unknown): fn is IslandWrapper<Record<string, unknown>>;
19
+ export {};
@@ -0,0 +1,36 @@
1
+ export const ISLAND_MARKER = Symbol("gorsee-island");
2
+ function escapePropsForAttr(json) {
3
+ return json.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
4
+ }
5
+ export function island(component, options = {}) {
6
+ const name = component.name || "Anonymous", wrapper = function islandWrapper(props) {
7
+ const propsWithoutChildren = extractSerializableProps(props), serialized = escapePropsForAttr(JSON.stringify(propsWithoutChildren)), attrs = {
8
+ "data-island": name,
9
+ "data-props": serialized,
10
+ children: component(props)
11
+ };
12
+ if (options.lazy)
13
+ attrs["data-island-lazy"] = "true";
14
+ return { type: "div", props: attrs };
15
+ };
16
+ wrapper[ISLAND_MARKER] = !0;
17
+ wrapper.componentName = name;
18
+ wrapper.originalComponent = component;
19
+ wrapper.options = options;
20
+ return wrapper;
21
+ }
22
+ function extractSerializableProps(props) {
23
+ const result = {};
24
+ for (const key in props) {
25
+ if (key === "children")
26
+ continue;
27
+ const val = props[key];
28
+ if (typeof val === "function" || typeof val === "symbol")
29
+ continue;
30
+ result[key] = val;
31
+ }
32
+ return result;
33
+ }
34
+ export function isIsland(fn) {
35
+ return typeof fn === "function" && ISLAND_MARKER in fn;
36
+ }
@@ -0,0 +1,12 @@
1
+ import type { GorseeRenderable } from "./renderable.js";
2
+ export type GorseeNode = Node | string | number | boolean | null | undefined | GorseeNode[];
3
+ export type Component = (props: Record<string, unknown>) => GorseeRenderable;
4
+ export declare const Fragment: unique symbol;
5
+ export interface JSXElement {
6
+ type: string | Component | symbol;
7
+ props: Record<string, unknown>;
8
+ children: unknown[];
9
+ }
10
+ export declare function jsx(type: string | Component | symbol, props: Record<string, unknown> | null): Node | DocumentFragment;
11
+ export declare const jsxs: typeof jsx;
12
+ export declare const jsxDEV: typeof jsx;
@@ -0,0 +1,176 @@
1
+ import { createEffect } from "../reactive/effect.js";
2
+ import { isHydrating, claimElement, claimText, pushCursor, popCursor } from "./hydration.js";
3
+ import { isRenderableThunk, isSignal } from "./html-escape.js";
4
+ export const Fragment = Symbol("Fragment");
5
+ function isVNodeLike(value) {
6
+ return typeof value === "object" && value !== null && "type" in value && "props" in value;
7
+ }
8
+ function renderVNodeLike(vnode) {
9
+ return jsx(vnode.type, vnode.props);
10
+ }
11
+ function createTextNode(value) {
12
+ return document.createTextNode(String(value ?? ""));
13
+ }
14
+ function bindProperty(el, key, value) {
15
+ if (key === "children" || key === "ref")
16
+ return;
17
+ if (key.startsWith("on:")) {
18
+ el.addEventListener(key.slice(3), value);
19
+ return;
20
+ }
21
+ if (key === "className" || key === "class") {
22
+ if (isSignal(value))
23
+ createEffect(() => {
24
+ el.className = String(value());
25
+ });
26
+ else if (!isHydrating())
27
+ el.className = String(value ?? "");
28
+ return;
29
+ }
30
+ if (key === "style" && typeof value === "object" && value !== null) {
31
+ const styles = value;
32
+ for (const [prop, val] of Object.entries(styles))
33
+ if (isSignal(val)) {
34
+ const p = prop;
35
+ createEffect(() => {
36
+ el.style.setProperty(p, String(val()));
37
+ });
38
+ } else if (!isHydrating())
39
+ el.style.setProperty(prop, String(val));
40
+ return;
41
+ }
42
+ if (isSignal(value))
43
+ createEffect(() => {
44
+ el.setAttribute(key, String(value()));
45
+ });
46
+ else if (!isHydrating()) {
47
+ if (typeof value === "boolean")
48
+ if (value)
49
+ el.setAttribute(key, "");
50
+ else
51
+ el.removeAttribute(key);
52
+ else if (value != null)
53
+ el.setAttribute(key, String(value));
54
+ }
55
+ }
56
+ function hydrateChild(parent, child) {
57
+ if (child == null || typeof child === "boolean")
58
+ return;
59
+ if (Array.isArray(child)) {
60
+ for (const c of child)
61
+ hydrateChild(parent, c);
62
+ return;
63
+ }
64
+ if (isVNodeLike(child)) {
65
+ renderVNodeLike(child);
66
+ return;
67
+ }
68
+ if (typeof child === "function" && isSignal(child)) {
69
+ const textNode = claimText(String(child() ?? "")) ?? createTextNode(child());
70
+ if (!textNode.parentNode)
71
+ parent.appendChild(textNode);
72
+ createEffect(() => {
73
+ textNode.textContent = String(child() ?? "");
74
+ });
75
+ return;
76
+ }
77
+ if (isRenderableThunk(child)) {
78
+ hydrateChild(parent, child());
79
+ return;
80
+ }
81
+ if (typeof child === "object" && child instanceof Node)
82
+ return;
83
+ const textNode = claimText(String(child ?? "")) ?? createTextNode(child);
84
+ if (!textNode.parentNode)
85
+ parent.appendChild(textNode);
86
+ }
87
+ function insertChild(parent, child) {
88
+ if (child == null || typeof child === "boolean")
89
+ return;
90
+ if (Array.isArray(child)) {
91
+ for (const c of child)
92
+ insertChild(parent, c);
93
+ return;
94
+ }
95
+ if (isVNodeLike(child)) {
96
+ parent.appendChild(renderVNodeLike(child));
97
+ return;
98
+ }
99
+ if (child instanceof Node) {
100
+ parent.appendChild(child);
101
+ return;
102
+ }
103
+ if (isSignal(child)) {
104
+ const textNode = createTextNode(child());
105
+ parent.appendChild(textNode);
106
+ createEffect(() => {
107
+ textNode.textContent = String(child() ?? "");
108
+ });
109
+ return;
110
+ }
111
+ if (isRenderableThunk(child)) {
112
+ insertChild(parent, child());
113
+ return;
114
+ }
115
+ parent.appendChild(createTextNode(child));
116
+ }
117
+ export function jsx(type, props) {
118
+ const allProps = props ?? {}, children = allProps.children, hydrating = isHydrating();
119
+ if (typeof type === "symbol") {
120
+ if (hydrating) {
121
+ if (children != null)
122
+ hydrateChild(document.createDocumentFragment(), children);
123
+ return document.createDocumentFragment();
124
+ }
125
+ const frag = document.createDocumentFragment();
126
+ if (children != null)
127
+ insertChild(frag, children);
128
+ return frag;
129
+ }
130
+ if (typeof type === "function") {
131
+ const result = type(allProps);
132
+ if (result instanceof Node)
133
+ return result;
134
+ if (isVNodeLike(result))
135
+ return renderVNodeLike(result);
136
+ if (isRenderableThunk(result)) {
137
+ const resolved = result();
138
+ if (hydrating) {
139
+ hydrateChild(document.createDocumentFragment(), resolved);
140
+ return document.createDocumentFragment();
141
+ }
142
+ const wrapper = document.createDocumentFragment();
143
+ insertChild(wrapper, resolved);
144
+ return wrapper;
145
+ }
146
+ if (hydrating) {
147
+ hydrateChild(document.createDocumentFragment(), result);
148
+ return document.createDocumentFragment();
149
+ }
150
+ const wrapper = document.createDocumentFragment();
151
+ insertChild(wrapper, result);
152
+ return wrapper;
153
+ }
154
+ if (hydrating) {
155
+ const el = claimElement(type);
156
+ if (el) {
157
+ for (const [key, value] of Object.entries(allProps))
158
+ if (key !== "children")
159
+ bindProperty(el, key, value);
160
+ if (children != null) {
161
+ pushCursor(el);
162
+ hydrateChild(el, children);
163
+ popCursor();
164
+ }
165
+ return el;
166
+ }
167
+ }
168
+ const el = document.createElement(type);
169
+ for (const [key, value] of Object.entries(allProps))
170
+ if (key !== "children")
171
+ bindProperty(el, key, value);
172
+ if (children != null)
173
+ insertChild(el, children);
174
+ return el;
175
+ }
176
+ export const jsxs = jsx, jsxDEV = jsx;
@@ -0,0 +1,16 @@
1
+ import { type TypedRouteDefinition, type TypedRouteOptions, type TypedRouteParams } from "./typed-routes.js";
2
+ import type { GorseeRenderable } from "./renderable.js";
3
+ export interface LinkProps {
4
+ href: string | TypedRouteDefinition;
5
+ params?: TypedRouteParams;
6
+ search?: TypedRouteOptions["search"];
7
+ hash?: string;
8
+ children?: unknown;
9
+ class?: string;
10
+ className?: string;
11
+ prefetch?: boolean | "hover" | "viewport";
12
+ replace?: boolean;
13
+ target?: string;
14
+ [key: string]: unknown;
15
+ }
16
+ export declare function Link(props: LinkProps): GorseeRenderable;
@@ -0,0 +1,47 @@
1
+ import { navigate, prefetch } from "./router.js";
2
+ import { resolveTypedRouteTarget } from "./typed-routes.js";
3
+ function composeEventHandlers(first, second) {
4
+ if (!first)
5
+ return second;
6
+ if (!second)
7
+ return first;
8
+ return (event) => {
9
+ first(event);
10
+ second(event);
11
+ };
12
+ }
13
+ export function Link(props) {
14
+ const { href, params, search, hash, prefetch: prefetchMode, replace, children, ...rest } = props, resolvedHref = resolveTypedRouteTarget(href, { params, search, hash }), restProps = { ...rest }, onClick = restProps["on:click"], onMouseOver = restProps["on:mouseover"], onFocus = restProps["on:focus"];
15
+ delete restProps["on:click"];
16
+ delete restProps["on:mouseover"];
17
+ delete restProps["on:focus"];
18
+ delete restProps["data-g-prefetch"];
19
+ if (prefetchMode === !0 && typeof window < "u")
20
+ prefetch(resolvedHref);
21
+ const hoverPrefetchHandler = prefetchMode === "hover" ? () => prefetch(resolvedHref) : void 0;
22
+ return {
23
+ type: "a",
24
+ props: {
25
+ href: resolvedHref,
26
+ ...restProps,
27
+ ...prefetchMode === "viewport" ? { "data-g-prefetch": "viewport" } : {},
28
+ "on:click": (e) => {
29
+ if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0)
30
+ return;
31
+ const target = e.currentTarget?.target;
32
+ if (target && target !== "_self")
33
+ return;
34
+ e.preventDefault();
35
+ if (replace)
36
+ history.replaceState({ gorsee: !0 }, "", resolvedHref);
37
+ navigate(resolvedHref, !replace);
38
+ onClick?.(e);
39
+ },
40
+ ...prefetchMode === "hover" ? {
41
+ "on:mouseover": composeEventHandlers(onMouseOver, hoverPrefetchHandler),
42
+ "on:focus": composeEventHandlers(onFocus, hoverPrefetchHandler)
43
+ } : {},
44
+ children
45
+ }
46
+ };
47
+ }
@@ -0,0 +1,37 @@
1
+ export interface ProjectPathOverrides extends Partial<ProjectPaths> {
2
+ }
3
+ export interface RuntimeOptions {
4
+ cwd?: string;
5
+ env?: NodeJS.ProcessEnv;
6
+ pathOverrides?: ProjectPathOverrides;
7
+ }
8
+ export interface ProjectPaths {
9
+ cwd: string;
10
+ routesDir: string;
11
+ publicDir: string;
12
+ distDir: string;
13
+ clientDir: string;
14
+ serverDir: string;
15
+ gorseeDir: string;
16
+ sharedDir: string;
17
+ middlewareDir: string;
18
+ migrationsDir: string;
19
+ docsDir: string;
20
+ dataFile: string;
21
+ appConfigFile: string;
22
+ }
23
+ export interface ProjectContext {
24
+ cwd: string;
25
+ env: NodeJS.ProcessEnv;
26
+ paths: ProjectPaths;
27
+ }
28
+ export interface RuntimeEnvConfig {
29
+ port: number;
30
+ logLevel: "info" | "debug";
31
+ rateLimit: number;
32
+ rateWindow: string;
33
+ isProduction: boolean;
34
+ }
35
+ export declare function resolveProjectPaths(cwd: string, overrides?: ProjectPathOverrides): ProjectPaths;
36
+ export declare function createProjectContext(options?: RuntimeOptions): ProjectContext;
37
+ export declare function resolveRuntimeEnv(env: NodeJS.ProcessEnv): RuntimeEnvConfig;