gorsee 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (532) hide show
  1. package/README.md +261 -213
  2. package/dist-pkg/ai/artifact-lifecycle.d.ts +25 -0
  3. package/dist-pkg/ai/artifact-lifecycle.js +98 -0
  4. package/dist-pkg/ai/bridge.d.ts +26 -0
  5. package/dist-pkg/ai/bridge.js +82 -0
  6. package/dist-pkg/ai/bundle.d.ts +46 -0
  7. package/dist-pkg/ai/bundle.js +247 -0
  8. package/dist-pkg/ai/contracts.d.ts +1 -0
  9. package/dist-pkg/ai/contracts.js +1 -0
  10. package/dist-pkg/ai/ide.d.ts +37 -0
  11. package/dist-pkg/ai/ide.js +56 -0
  12. package/dist-pkg/ai/index.d.ts +85 -0
  13. package/dist-pkg/ai/index.js +267 -0
  14. package/dist-pkg/ai/json.d.ts +6 -0
  15. package/dist-pkg/ai/json.js +14 -0
  16. package/dist-pkg/ai/mcp.d.ts +28 -0
  17. package/dist-pkg/ai/mcp.js +152 -0
  18. package/dist-pkg/ai/session-pack.d.ts +28 -0
  19. package/dist-pkg/ai/session-pack.js +57 -0
  20. package/dist-pkg/ai/store.d.ts +67 -0
  21. package/dist-pkg/ai/store.js +174 -0
  22. package/dist-pkg/ai/summary.d.ts +57 -0
  23. package/dist-pkg/ai/summary.js +148 -0
  24. package/dist-pkg/ai/watch.d.ts +15 -0
  25. package/dist-pkg/ai/watch.js +66 -0
  26. package/dist-pkg/auth/action-tokens.d.ts +50 -0
  27. package/dist-pkg/auth/action-tokens.js +79 -0
  28. package/dist-pkg/auth/index.d.ts +70 -0
  29. package/dist-pkg/auth/index.js +199 -0
  30. package/dist-pkg/auth/redis-session-store.d.ts +7 -0
  31. package/dist-pkg/auth/redis-session-store.js +42 -0
  32. package/dist-pkg/auth/signing.d.ts +4 -0
  33. package/dist-pkg/auth/signing.js +33 -0
  34. package/dist-pkg/auth/sqlite-session-store.d.ts +12 -0
  35. package/dist-pkg/auth/sqlite-session-store.js +83 -0
  36. package/dist-pkg/auth/store-utils.d.ts +2 -0
  37. package/dist-pkg/auth/store-utils.js +20 -0
  38. package/dist-pkg/bin/gorsee.js +2 -0
  39. package/dist-pkg/build/backends/experimental-rolldown.d.ts +6 -0
  40. package/dist-pkg/build/backends/experimental-rolldown.js +9 -0
  41. package/dist-pkg/build/backends/register.d.ts +7 -0
  42. package/dist-pkg/build/backends/register.js +24 -0
  43. package/dist-pkg/build/backends/rolldown.d.ts +16 -0
  44. package/dist-pkg/build/backends/rolldown.js +176 -0
  45. package/dist-pkg/build/client-backend.d.ts +31 -0
  46. package/dist-pkg/build/client-backend.js +97 -0
  47. package/dist-pkg/build/client.d.ts +12 -0
  48. package/dist-pkg/build/client.js +93 -0
  49. package/dist-pkg/build/css-modules.d.ts +10 -0
  50. package/dist-pkg/build/css-modules.js +51 -0
  51. package/dist-pkg/build/devalue-parse.d.ts +1 -0
  52. package/dist-pkg/build/devalue-parse.js +1 -0
  53. package/dist-pkg/build/diagnostics.d.ts +20 -0
  54. package/dist-pkg/build/diagnostics.js +35 -0
  55. package/dist-pkg/build/fixtures.d.ts +7 -0
  56. package/dist-pkg/build/fixtures.js +60 -0
  57. package/dist-pkg/build/framework-imports.d.ts +4 -0
  58. package/dist-pkg/build/framework-imports.js +58 -0
  59. package/dist-pkg/build/init.d.ts +1 -0
  60. package/dist-pkg/build/init.js +6 -0
  61. package/dist-pkg/build/manifest.d.ts +3 -0
  62. package/dist-pkg/build/manifest.js +23 -0
  63. package/dist-pkg/build/parity.d.ts +32 -0
  64. package/dist-pkg/build/parity.js +71 -0
  65. package/dist-pkg/build/plugin.d.ts +11 -0
  66. package/dist-pkg/build/plugin.js +8 -0
  67. package/dist-pkg/build/readiness.d.ts +11 -0
  68. package/dist-pkg/build/readiness.js +18 -0
  69. package/dist-pkg/build/route-client-transform.d.ts +17 -0
  70. package/dist-pkg/build/route-client-transform.js +48 -0
  71. package/dist-pkg/build/route-metadata.d.ts +6 -0
  72. package/dist-pkg/build/route-metadata.js +8 -0
  73. package/dist-pkg/build/rpc-transform.d.ts +1 -0
  74. package/dist-pkg/build/rpc-transform.js +44 -0
  75. package/dist-pkg/build/server-bundle.d.ts +4 -0
  76. package/dist-pkg/build/server-bundle.js +261 -0
  77. package/dist-pkg/build/server-strip.d.ts +2 -0
  78. package/dist-pkg/build/server-strip.js +32 -0
  79. package/dist-pkg/build/ssg.d.ts +12 -0
  80. package/dist-pkg/build/ssg.js +36 -0
  81. package/dist-pkg/cli/bun-plugin.d.ts +2 -0
  82. package/dist-pkg/cli/bun-plugin.js +14 -0
  83. package/dist-pkg/cli/canonical-import-rewrite.d.ts +18 -0
  84. package/dist-pkg/cli/canonical-import-rewrite.js +94 -0
  85. package/dist-pkg/cli/canonical-imports.d.ts +8 -0
  86. package/dist-pkg/cli/canonical-imports.js +131 -0
  87. package/dist-pkg/cli/check-ast.d.ts +20 -0
  88. package/dist-pkg/cli/check-ast.js +126 -0
  89. package/dist-pkg/cli/cmd-ai.d.ts +4 -0
  90. package/dist-pkg/cli/cmd-ai.js +290 -0
  91. package/dist-pkg/cli/cmd-build.d.ts +12 -0
  92. package/dist-pkg/cli/cmd-build.js +198 -0
  93. package/dist-pkg/cli/cmd-check.d.ts +25 -0
  94. package/dist-pkg/cli/cmd-check.js +573 -0
  95. package/dist-pkg/cli/cmd-create.d.ts +6 -0
  96. package/dist-pkg/cli/cmd-create.js +600 -0
  97. package/dist-pkg/cli/cmd-deploy.d.ts +6 -0
  98. package/dist-pkg/cli/cmd-deploy.js +381 -0
  99. package/dist-pkg/cli/cmd-dev.d.ts +5 -0
  100. package/dist-pkg/cli/cmd-dev.js +5 -0
  101. package/dist-pkg/cli/cmd-docs.d.ts +50 -0
  102. package/dist-pkg/cli/cmd-docs.js +122 -0
  103. package/dist-pkg/cli/cmd-generate.d.ts +12 -0
  104. package/dist-pkg/cli/cmd-generate.js +320 -0
  105. package/dist-pkg/cli/cmd-migrate.d.ts +7 -0
  106. package/dist-pkg/cli/cmd-migrate.js +42 -0
  107. package/dist-pkg/cli/cmd-routes.d.ts +6 -0
  108. package/dist-pkg/cli/cmd-routes.js +24 -0
  109. package/dist-pkg/cli/cmd-start.d.ts +13 -0
  110. package/dist-pkg/cli/cmd-start.js +32 -0
  111. package/dist-pkg/cli/cmd-test.d.ts +20 -0
  112. package/dist-pkg/cli/cmd-test.js +103 -0
  113. package/dist-pkg/cli/cmd-typegen.d.ts +7 -0
  114. package/dist-pkg/cli/cmd-typegen.js +66 -0
  115. package/dist-pkg/cli/cmd-upgrade.d.ts +38 -0
  116. package/dist-pkg/cli/cmd-upgrade.js +232 -0
  117. package/dist-pkg/cli/context.d.ts +4 -0
  118. package/dist-pkg/cli/context.js +4 -0
  119. package/dist-pkg/cli/framework-md.d.ts +1 -0
  120. package/dist-pkg/cli/framework-md.js +391 -0
  121. package/dist-pkg/cli/index.d.ts +6 -0
  122. package/dist-pkg/cli/index.js +106 -0
  123. package/dist-pkg/cli/release-version.d.ts +2 -0
  124. package/dist-pkg/cli/release-version.js +33 -0
  125. package/dist-pkg/client.d.ts +16 -0
  126. package/dist-pkg/client.js +71 -0
  127. package/dist-pkg/compat.d.ts +1 -0
  128. package/dist-pkg/compat.js +1 -0
  129. package/dist-pkg/compiler/analysis-backend.d.ts +20 -0
  130. package/dist-pkg/compiler/analysis-backend.js +164 -0
  131. package/dist-pkg/compiler/backends/experimental-oxc.d.ts +6 -0
  132. package/dist-pkg/compiler/backends/experimental-oxc.js +9 -0
  133. package/dist-pkg/compiler/backends/oxc.d.ts +16 -0
  134. package/dist-pkg/compiler/backends/oxc.js +198 -0
  135. package/dist-pkg/compiler/backends/register.d.ts +7 -0
  136. package/dist-pkg/compiler/backends/register.js +22 -0
  137. package/dist-pkg/compiler/fixtures.d.ts +2 -0
  138. package/dist-pkg/compiler/fixtures.js +118 -0
  139. package/dist-pkg/compiler/init.d.ts +1 -0
  140. package/dist-pkg/compiler/init.js +6 -0
  141. package/dist-pkg/compiler/module-analysis.d.ts +13 -0
  142. package/dist-pkg/compiler/module-analysis.js +50 -0
  143. package/dist-pkg/compiler/parity.d.ts +35 -0
  144. package/dist-pkg/compiler/parity.js +89 -0
  145. package/dist-pkg/compiler/readiness.d.ts +11 -0
  146. package/dist-pkg/compiler/readiness.js +18 -0
  147. package/dist-pkg/compiler/route-facts.d.ts +34 -0
  148. package/dist-pkg/compiler/route-facts.js +75 -0
  149. package/dist-pkg/content/index.d.ts +27 -0
  150. package/dist-pkg/content/index.js +287 -0
  151. package/dist-pkg/db/index.d.ts +3 -0
  152. package/dist-pkg/db/index.js +6 -0
  153. package/dist-pkg/db/migrate.d.ts +7 -0
  154. package/dist-pkg/db/migrate.js +53 -0
  155. package/dist-pkg/db/postgres.d.ts +29 -0
  156. package/dist-pkg/db/postgres.js +59 -0
  157. package/dist-pkg/db/sqlite.d.ts +10 -0
  158. package/dist-pkg/db/sqlite.js +22 -0
  159. package/dist-pkg/deploy/cloudflare.d.ts +8 -0
  160. package/{src/deploy/cloudflare.ts → dist-pkg/deploy/cloudflare.js} +24 -26
  161. package/dist-pkg/deploy/conformance.d.ts +21 -0
  162. package/dist-pkg/deploy/conformance.js +98 -0
  163. package/dist-pkg/deploy/dockerfile.d.ts +3 -0
  164. package/{src/deploy/dockerfile.ts → dist-pkg/deploy/dockerfile.js} +8 -10
  165. package/dist-pkg/deploy/fly.d.ts +3 -0
  166. package/{src/deploy/fly.ts → dist-pkg/deploy/fly.js} +11 -12
  167. package/dist-pkg/deploy/index.d.ts +6 -0
  168. package/dist-pkg/deploy/index.js +26 -0
  169. package/dist-pkg/deploy/netlify.d.ts +2 -0
  170. package/{src/deploy/netlify.ts → dist-pkg/deploy/netlify.js} +17 -11
  171. package/dist-pkg/deploy/runtime.d.ts +2 -0
  172. package/dist-pkg/deploy/runtime.js +3 -0
  173. package/dist-pkg/deploy/vercel.d.ts +22 -0
  174. package/dist-pkg/deploy/vercel.js +53 -0
  175. package/dist-pkg/dev/error-overlay.d.ts +1 -0
  176. package/{src/dev/error-overlay.ts → dist-pkg/dev/error-overlay.js} +13 -23
  177. package/dist-pkg/dev/hmr.d.ts +30 -0
  178. package/dist-pkg/dev/hmr.js +86 -0
  179. package/dist-pkg/dev/partial-handler.d.ts +9 -0
  180. package/dist-pkg/dev/partial-handler.js +24 -0
  181. package/dist-pkg/dev/request-handler.d.ts +30 -0
  182. package/dist-pkg/dev/request-handler.js +67 -0
  183. package/dist-pkg/dev/watcher.d.ts +6 -0
  184. package/dist-pkg/dev/watcher.js +34 -0
  185. package/dist-pkg/dev.d.ts +11 -0
  186. package/dist-pkg/dev.js +268 -0
  187. package/dist-pkg/env/index.d.ts +3 -0
  188. package/dist-pkg/env/index.js +57 -0
  189. package/dist-pkg/errors/catalog.d.ts +9 -0
  190. package/{src/errors/catalog.ts → dist-pkg/errors/catalog.js} +8 -24
  191. package/dist-pkg/errors/formatter.d.ts +22 -0
  192. package/dist-pkg/errors/formatter.js +43 -0
  193. package/dist-pkg/errors/index.d.ts +2 -0
  194. package/dist-pkg/errors/index.js +2 -0
  195. package/dist-pkg/forms/action.d.ts +15 -0
  196. package/dist-pkg/forms/action.js +20 -0
  197. package/dist-pkg/forms/index.d.ts +4 -0
  198. package/dist-pkg/forms/index.js +12 -0
  199. package/dist-pkg/i18n/index.d.ts +61 -0
  200. package/dist-pkg/i18n/index.js +147 -0
  201. package/dist-pkg/index-client.d.ts +1 -0
  202. package/dist-pkg/index-client.js +1 -0
  203. package/dist-pkg/index.d.ts +32 -0
  204. package/dist-pkg/index.js +79 -0
  205. package/dist-pkg/jsx-runtime-client.d.ts +8 -0
  206. package/dist-pkg/jsx-runtime-client.js +1 -0
  207. package/dist-pkg/jsx-runtime.d.ts +13 -0
  208. package/dist-pkg/jsx-runtime.js +5 -0
  209. package/dist-pkg/jsx-types-html.d.ts +221 -0
  210. package/dist-pkg/jsx-types-html.js +0 -0
  211. package/dist-pkg/log/index.d.ts +8 -0
  212. package/dist-pkg/log/index.js +55 -0
  213. package/dist-pkg/plugins/drizzle.d.ts +16 -0
  214. package/dist-pkg/plugins/drizzle.js +50 -0
  215. package/dist-pkg/plugins/index.d.ts +62 -0
  216. package/dist-pkg/plugins/index.js +147 -0
  217. package/dist-pkg/plugins/lucia.d.ts +26 -0
  218. package/dist-pkg/plugins/lucia.js +63 -0
  219. package/dist-pkg/plugins/prisma.d.ts +14 -0
  220. package/dist-pkg/plugins/prisma.js +57 -0
  221. package/dist-pkg/plugins/resend.d.ts +21 -0
  222. package/dist-pkg/plugins/resend.js +45 -0
  223. package/dist-pkg/plugins/s3.d.ts +18 -0
  224. package/dist-pkg/plugins/s3.js +63 -0
  225. package/dist-pkg/plugins/stripe.d.ts +32 -0
  226. package/dist-pkg/plugins/stripe.js +69 -0
  227. package/dist-pkg/plugins/tailwind.d.ts +15 -0
  228. package/dist-pkg/plugins/tailwind.js +58 -0
  229. package/dist-pkg/prod.d.ts +21 -0
  230. package/dist-pkg/prod.js +347 -0
  231. package/dist-pkg/reactive/computed.d.ts +3 -0
  232. package/dist-pkg/reactive/computed.js +15 -0
  233. package/dist-pkg/reactive/data.d.ts +25 -0
  234. package/dist-pkg/reactive/data.js +56 -0
  235. package/dist-pkg/reactive/diagnostics.d.ts +100 -0
  236. package/dist-pkg/reactive/diagnostics.js +363 -0
  237. package/dist-pkg/reactive/effect.d.ts +3 -0
  238. package/dist-pkg/reactive/effect.js +6 -0
  239. package/dist-pkg/reactive/index.d.ts +9 -0
  240. package/dist-pkg/reactive/index.js +18 -0
  241. package/dist-pkg/reactive/live.d.ts +15 -0
  242. package/dist-pkg/reactive/live.js +58 -0
  243. package/dist-pkg/reactive/optimistic.d.ts +20 -0
  244. package/dist-pkg/reactive/optimistic.js +54 -0
  245. package/dist-pkg/reactive/resource.d.ts +25 -0
  246. package/dist-pkg/reactive/resource.js +97 -0
  247. package/dist-pkg/reactive/signal.d.ts +4 -0
  248. package/dist-pkg/reactive/signal.js +17 -0
  249. package/dist-pkg/reactive/store.d.ts +6 -0
  250. package/dist-pkg/reactive/store.js +19 -0
  251. package/dist-pkg/router/index.d.ts +2 -0
  252. package/dist-pkg/router/index.js +2 -0
  253. package/dist-pkg/router/matcher.d.ts +7 -0
  254. package/dist-pkg/router/matcher.js +40 -0
  255. package/dist-pkg/router/scanner.d.ts +14 -0
  256. package/dist-pkg/router/scanner.js +141 -0
  257. package/dist-pkg/routes/index.d.ts +1 -0
  258. package/dist-pkg/routes/index.js +10 -0
  259. package/dist-pkg/runtime/app-config.d.ts +26 -0
  260. package/dist-pkg/runtime/app-config.js +69 -0
  261. package/dist-pkg/runtime/client.d.ts +3 -0
  262. package/dist-pkg/runtime/client.js +31 -0
  263. package/dist-pkg/runtime/devtools.d.ts +64 -0
  264. package/dist-pkg/runtime/devtools.js +132 -0
  265. package/dist-pkg/runtime/error-boundary.d.ts +6 -0
  266. package/dist-pkg/runtime/error-boundary.js +17 -0
  267. package/dist-pkg/runtime/event-replay.d.ts +3 -0
  268. package/{src/runtime/event-replay.ts → dist-pkg/runtime/event-replay.js} +7 -22
  269. package/dist-pkg/runtime/event-source.d.ts +7 -0
  270. package/dist-pkg/runtime/event-source.js +24 -0
  271. package/dist-pkg/runtime/form.d.ts +24 -0
  272. package/dist-pkg/runtime/form.js +59 -0
  273. package/dist-pkg/runtime/head.d.ts +7 -0
  274. package/dist-pkg/runtime/head.js +90 -0
  275. package/dist-pkg/runtime/html-escape.d.ts +7 -0
  276. package/dist-pkg/runtime/html-escape.js +39 -0
  277. package/dist-pkg/runtime/hydration.d.ts +15 -0
  278. package/dist-pkg/runtime/hydration.js +103 -0
  279. package/dist-pkg/runtime/image.d.ts +49 -0
  280. package/dist-pkg/runtime/image.js +144 -0
  281. package/dist-pkg/runtime/index.d.ts +17 -0
  282. package/dist-pkg/runtime/index.js +59 -0
  283. package/dist-pkg/runtime/island-hydrator.d.ts +12 -0
  284. package/dist-pkg/runtime/island-hydrator.js +49 -0
  285. package/dist-pkg/runtime/island.d.ts +19 -0
  286. package/dist-pkg/runtime/island.js +36 -0
  287. package/dist-pkg/runtime/jsx-runtime.d.ts +12 -0
  288. package/dist-pkg/runtime/jsx-runtime.js +173 -0
  289. package/dist-pkg/runtime/link.d.ts +16 -0
  290. package/dist-pkg/runtime/link.js +47 -0
  291. package/dist-pkg/runtime/project.d.ts +37 -0
  292. package/dist-pkg/runtime/project.js +36 -0
  293. package/dist-pkg/runtime/renderable.d.ts +6 -0
  294. package/dist-pkg/runtime/renderable.js +0 -0
  295. package/dist-pkg/runtime/router.d.ts +47 -0
  296. package/dist-pkg/runtime/router.js +476 -0
  297. package/dist-pkg/runtime/server.d.ts +8 -0
  298. package/dist-pkg/runtime/server.js +71 -0
  299. package/dist-pkg/runtime/stream.d.ts +29 -0
  300. package/dist-pkg/runtime/stream.js +106 -0
  301. package/dist-pkg/runtime/suspense.d.ts +6 -0
  302. package/dist-pkg/runtime/suspense.js +16 -0
  303. package/dist-pkg/runtime/typed-routes.d.ts +24 -0
  304. package/dist-pkg/runtime/typed-routes.js +77 -0
  305. package/dist-pkg/runtime/validated-form.d.ts +40 -0
  306. package/dist-pkg/runtime/validated-form.js +120 -0
  307. package/dist-pkg/security/cors.d.ts +10 -0
  308. package/dist-pkg/security/cors.js +56 -0
  309. package/dist-pkg/security/csrf.d.ts +9 -0
  310. package/dist-pkg/security/csrf.js +53 -0
  311. package/dist-pkg/security/headers.d.ts +11 -0
  312. package/dist-pkg/security/headers.js +31 -0
  313. package/dist-pkg/security/index.d.ts +5 -0
  314. package/dist-pkg/security/index.js +5 -0
  315. package/dist-pkg/security/rate-limit.d.ts +10 -0
  316. package/dist-pkg/security/rate-limit.js +49 -0
  317. package/dist-pkg/security/redis-rate-limit.d.ts +14 -0
  318. package/dist-pkg/security/redis-rate-limit.js +23 -0
  319. package/dist-pkg/server/action.d.ts +21 -0
  320. package/dist-pkg/server/action.js +64 -0
  321. package/dist-pkg/server/cache-utils.d.ts +2 -0
  322. package/dist-pkg/server/cache-utils.js +26 -0
  323. package/dist-pkg/server/cache.d.ts +33 -0
  324. package/dist-pkg/server/cache.js +236 -0
  325. package/dist-pkg/server/compress.d.ts +2 -0
  326. package/dist-pkg/server/compress.js +49 -0
  327. package/dist-pkg/server/endpoint-execution.d.ts +28 -0
  328. package/dist-pkg/server/endpoint-execution.js +37 -0
  329. package/dist-pkg/server/etag.d.ts +3 -0
  330. package/dist-pkg/server/etag.js +18 -0
  331. package/dist-pkg/server/guard.d.ts +16 -0
  332. package/dist-pkg/server/guard.js +45 -0
  333. package/dist-pkg/server/html-shell.d.ts +12 -0
  334. package/dist-pkg/server/html-shell.js +52 -0
  335. package/dist-pkg/server/index.d.ts +36 -0
  336. package/dist-pkg/server/index.js +170 -0
  337. package/dist-pkg/server/jobs.d.ts +41 -0
  338. package/dist-pkg/server/jobs.js +81 -0
  339. package/dist-pkg/server/manifest.d.ts +19 -0
  340. package/dist-pkg/server/manifest.js +36 -0
  341. package/dist-pkg/server/middleware.d.ts +39 -0
  342. package/dist-pkg/server/middleware.js +122 -0
  343. package/dist-pkg/server/mime.d.ts +1 -0
  344. package/{src/server/mime.ts → dist-pkg/server/mime.js} +6 -17
  345. package/dist-pkg/server/not-found.d.ts +6 -0
  346. package/dist-pkg/server/not-found.js +24 -0
  347. package/dist-pkg/server/page-render.d.ts +29 -0
  348. package/dist-pkg/server/page-render.js +67 -0
  349. package/dist-pkg/server/partial-navigation.d.ts +4 -0
  350. package/dist-pkg/server/partial-navigation.js +16 -0
  351. package/dist-pkg/server/pipe.d.ts +9 -0
  352. package/dist-pkg/server/pipe.js +32 -0
  353. package/dist-pkg/server/redis-cache-store.d.ts +10 -0
  354. package/dist-pkg/server/redis-cache-store.js +73 -0
  355. package/dist-pkg/server/redis-client.d.ts +37 -0
  356. package/dist-pkg/server/redis-client.js +37 -0
  357. package/dist-pkg/server/request-policy.d.ts +55 -0
  358. package/dist-pkg/server/request-policy.js +216 -0
  359. package/dist-pkg/server/request-preflight.d.ts +23 -0
  360. package/dist-pkg/server/request-preflight.js +45 -0
  361. package/dist-pkg/server/request-security-policy.d.ts +17 -0
  362. package/dist-pkg/server/request-security-policy.js +34 -0
  363. package/dist-pkg/server/request-surface.d.ts +8 -0
  364. package/dist-pkg/server/request-surface.js +19 -0
  365. package/dist-pkg/server/route-request.d.ts +31 -0
  366. package/dist-pkg/server/route-request.js +112 -0
  367. package/dist-pkg/server/route-response.d.ts +22 -0
  368. package/dist-pkg/server/route-response.js +58 -0
  369. package/dist-pkg/server/rpc-hash.d.ts +2 -0
  370. package/dist-pkg/server/rpc-hash.js +7 -0
  371. package/dist-pkg/server/rpc-protocol.d.ts +22 -0
  372. package/dist-pkg/server/rpc-protocol.js +28 -0
  373. package/dist-pkg/server/rpc-utils.d.ts +2 -0
  374. package/dist-pkg/server/rpc-utils.js +26 -0
  375. package/dist-pkg/server/rpc.d.ts +20 -0
  376. package/dist-pkg/server/rpc.js +147 -0
  377. package/dist-pkg/server/runtime-dispatch.d.ts +19 -0
  378. package/dist-pkg/server/runtime-dispatch.js +67 -0
  379. package/dist-pkg/server/server-execution.d.ts +22 -0
  380. package/dist-pkg/server/server-execution.js +53 -0
  381. package/dist-pkg/server/sqlite-cache-store.d.ts +13 -0
  382. package/dist-pkg/server/sqlite-cache-store.js +88 -0
  383. package/dist-pkg/server/sse.d.ts +9 -0
  384. package/dist-pkg/server/sse.js +34 -0
  385. package/dist-pkg/server/static-file.d.ts +9 -0
  386. package/dist-pkg/server/static-file.js +43 -0
  387. package/dist-pkg/server/ws.d.ts +18 -0
  388. package/dist-pkg/server/ws.js +40 -0
  389. package/dist-pkg/server-entry.d.ts +19 -0
  390. package/dist-pkg/server-entry.js +93 -0
  391. package/dist-pkg/testing/index.d.ts +98 -0
  392. package/dist-pkg/testing/index.js +254 -0
  393. package/dist-pkg/types/index.d.ts +4 -0
  394. package/dist-pkg/types/index.js +4 -0
  395. package/dist-pkg/types/safe-html.d.ts +7 -0
  396. package/dist-pkg/types/safe-html.js +19 -0
  397. package/dist-pkg/types/safe-sql.d.ts +8 -0
  398. package/dist-pkg/types/safe-sql.js +14 -0
  399. package/dist-pkg/types/safe-url.d.ts +7 -0
  400. package/dist-pkg/types/safe-url.js +20 -0
  401. package/dist-pkg/types/user-input.d.ts +9 -0
  402. package/dist-pkg/types/user-input.js +3 -0
  403. package/dist-pkg/unsafe/index.d.ts +12 -0
  404. package/dist-pkg/unsafe/index.js +6 -0
  405. package/package.json +102 -44
  406. package/bin/gorsee.js +0 -14
  407. package/src/auth/index.ts +0 -178
  408. package/src/auth/redis-session-store.ts +0 -46
  409. package/src/auth/sqlite-session-store.ts +0 -98
  410. package/src/auth/store-utils.ts +0 -21
  411. package/src/build/client.ts +0 -139
  412. package/src/build/css-modules.ts +0 -69
  413. package/src/build/devalue-parse.ts +0 -2
  414. package/src/build/manifest.ts +0 -34
  415. package/src/build/route-metadata.ts +0 -12
  416. package/src/build/rpc-transform.ts +0 -62
  417. package/src/build/server-strip.ts +0 -87
  418. package/src/build/ssg.ts +0 -70
  419. package/src/cli/bun-plugin.ts +0 -58
  420. package/src/cli/cmd-build.ts +0 -153
  421. package/src/cli/cmd-check.ts +0 -239
  422. package/src/cli/cmd-create.ts +0 -328
  423. package/src/cli/cmd-deploy.ts +0 -149
  424. package/src/cli/cmd-dev.ts +0 -13
  425. package/src/cli/cmd-docs.ts +0 -152
  426. package/src/cli/cmd-generate.ts +0 -155
  427. package/src/cli/cmd-migrate.ts +0 -53
  428. package/src/cli/cmd-routes.ts +0 -36
  429. package/src/cli/cmd-start.ts +0 -30
  430. package/src/cli/cmd-test.ts +0 -129
  431. package/src/cli/cmd-typegen.ts +0 -93
  432. package/src/cli/cmd-upgrade.ts +0 -143
  433. package/src/cli/context.ts +0 -12
  434. package/src/cli/framework-md.ts +0 -223
  435. package/src/cli/index.ts +0 -107
  436. package/src/client.ts +0 -26
  437. package/src/db/index.ts +0 -2
  438. package/src/db/migrate.ts +0 -89
  439. package/src/db/sqlite.ts +0 -40
  440. package/src/deploy/index.ts +0 -31
  441. package/src/deploy/vercel.ts +0 -94
  442. package/src/dev/hmr.ts +0 -31
  443. package/src/dev/partial-handler.ts +0 -52
  444. package/src/dev/request-handler.ts +0 -127
  445. package/src/dev/watcher.ts +0 -48
  446. package/src/dev.ts +0 -208
  447. package/src/env/index.ts +0 -74
  448. package/src/errors/formatter.ts +0 -63
  449. package/src/errors/index.ts +0 -2
  450. package/src/i18n/index.ts +0 -72
  451. package/src/index-client.ts +0 -4
  452. package/src/index.ts +0 -43
  453. package/src/jsx-runtime-client.ts +0 -13
  454. package/src/jsx-runtime.ts +0 -20
  455. package/src/jsx-types-html.ts +0 -242
  456. package/src/log/index.ts +0 -44
  457. package/src/plugins/drizzle.ts +0 -84
  458. package/src/plugins/index.ts +0 -86
  459. package/src/plugins/lucia.ts +0 -111
  460. package/src/plugins/prisma.ts +0 -85
  461. package/src/plugins/resend.ts +0 -78
  462. package/src/plugins/s3.ts +0 -102
  463. package/src/plugins/stripe.ts +0 -133
  464. package/src/plugins/tailwind.ts +0 -92
  465. package/src/prod.ts +0 -252
  466. package/src/reactive/computed.ts +0 -7
  467. package/src/reactive/effect.ts +0 -7
  468. package/src/reactive/index.ts +0 -7
  469. package/src/reactive/live.ts +0 -97
  470. package/src/reactive/optimistic.ts +0 -83
  471. package/src/reactive/resource.ts +0 -138
  472. package/src/reactive/signal.ts +0 -20
  473. package/src/reactive/store.ts +0 -36
  474. package/src/router/index.ts +0 -2
  475. package/src/router/matcher.ts +0 -53
  476. package/src/router/scanner.ts +0 -206
  477. package/src/runtime/client.ts +0 -28
  478. package/src/runtime/error-boundary.ts +0 -35
  479. package/src/runtime/form.ts +0 -49
  480. package/src/runtime/head.ts +0 -113
  481. package/src/runtime/html-escape.ts +0 -30
  482. package/src/runtime/hydration.ts +0 -95
  483. package/src/runtime/image.ts +0 -48
  484. package/src/runtime/index.ts +0 -12
  485. package/src/runtime/island-hydrator.ts +0 -84
  486. package/src/runtime/island.ts +0 -88
  487. package/src/runtime/jsx-runtime.ts +0 -167
  488. package/src/runtime/link.ts +0 -45
  489. package/src/runtime/project.ts +0 -73
  490. package/src/runtime/router.ts +0 -224
  491. package/src/runtime/server.ts +0 -102
  492. package/src/runtime/stream.ts +0 -182
  493. package/src/runtime/suspense.ts +0 -37
  494. package/src/runtime/typed-routes.ts +0 -26
  495. package/src/runtime/validated-form.ts +0 -106
  496. package/src/security/cors.ts +0 -80
  497. package/src/security/csrf.ts +0 -85
  498. package/src/security/headers.ts +0 -50
  499. package/src/security/index.ts +0 -4
  500. package/src/security/rate-limit.ts +0 -80
  501. package/src/server/action.ts +0 -48
  502. package/src/server/cache-utils.ts +0 -23
  503. package/src/server/cache.ts +0 -125
  504. package/src/server/compress.ts +0 -60
  505. package/src/server/etag.ts +0 -23
  506. package/src/server/guard.ts +0 -69
  507. package/src/server/html-shell.ts +0 -69
  508. package/src/server/index.ts +0 -57
  509. package/src/server/manifest.ts +0 -36
  510. package/src/server/middleware.ts +0 -159
  511. package/src/server/not-found.ts +0 -35
  512. package/src/server/page-render.ts +0 -123
  513. package/src/server/pipe.ts +0 -46
  514. package/src/server/redis-cache-store.ts +0 -87
  515. package/src/server/redis-client.ts +0 -71
  516. package/src/server/request-preflight.ts +0 -45
  517. package/src/server/route-request.ts +0 -72
  518. package/src/server/rpc-hash.ts +0 -17
  519. package/src/server/rpc-utils.ts +0 -27
  520. package/src/server/rpc.ts +0 -177
  521. package/src/server/sqlite-cache-store.ts +0 -109
  522. package/src/server/sse.ts +0 -96
  523. package/src/server/static-file.ts +0 -63
  524. package/src/server/ws.ts +0 -56
  525. package/src/server-entry.ts +0 -36
  526. package/src/testing/index.ts +0 -74
  527. package/src/types/index.ts +0 -4
  528. package/src/types/safe-html.ts +0 -32
  529. package/src/types/safe-sql.ts +0 -28
  530. package/src/types/safe-url.ts +0 -40
  531. package/src/types/user-input.ts +0 -12
  532. package/src/unsafe/index.ts +0 -18
@@ -0,0 +1,17 @@
1
+ import { signal as alienSignal } from "alien-signals";
2
+ import { trackSignalCreated, trackSignalRead, trackSignalWrite } from "./diagnostics.js";
3
+ import { GORSEE_SIGNAL_MARKER } from "../runtime/html-escape.js";
4
+ export function createSignal(initialValue, options = {}) {
5
+ const s = alienSignal(initialValue), nodeId = trackSignalCreated(options.label), getter = () => {
6
+ trackSignalRead(nodeId, options.label);
7
+ return s();
8
+ };
9
+ getter[GORSEE_SIGNAL_MARKER] = !0;
10
+ return [getter, (value) => {
11
+ trackSignalWrite(nodeId, options.label);
12
+ if (typeof value === "function")
13
+ s(value(s()));
14
+ else
15
+ s(value);
16
+ }];
17
+ }
@@ -0,0 +1,6 @@
1
+ import { type SignalGetter } from "./signal.js";
2
+ export type Store<T extends Record<string, unknown>> = {
3
+ readonly [K in keyof T]: SignalGetter<T[K]>;
4
+ };
5
+ export type SetStore<T extends Record<string, unknown>> = <K extends keyof T>(key: K, value: T[K] | ((prev: T[K]) => T[K])) => void;
6
+ export declare function createStore<T extends Record<string, unknown>>(initialValue: T): [Store<T>, SetStore<T>];
@@ -0,0 +1,19 @@
1
+ import { createSignal } from "./signal.js";
2
+ export function createStore(initialValue) {
3
+ const signals = new Map;
4
+ for (const key of Object.keys(initialValue))
5
+ signals.set(key, createSignal(initialValue[key]));
6
+ return [new Proxy({}, {
7
+ get(_target, prop) {
8
+ const entry = signals.get(prop);
9
+ if (!entry)
10
+ return;
11
+ return entry[0];
12
+ }
13
+ }), (key, value) => {
14
+ const entry = signals.get(key);
15
+ if (!entry)
16
+ return;
17
+ entry[1](value);
18
+ }];
19
+ }
@@ -0,0 +1,2 @@
1
+ export { createRouter, type Route } from "./scanner.js";
2
+ export { matchRoute, buildStaticMap, type MatchResult } from "./matcher.js";
@@ -0,0 +1,2 @@
1
+ export { createRouter } from "./scanner.js";
2
+ export { matchRoute, buildStaticMap } from "./matcher.js";
@@ -0,0 +1,7 @@
1
+ import type { Route } from "./scanner.js";
2
+ export interface MatchResult {
3
+ route: Route;
4
+ params: Record<string, string>;
5
+ }
6
+ export declare function buildStaticMap(routes: Route[]): Map<string, Route>;
7
+ export declare function matchRoute(routes: Route[], pathname: string, staticMap?: Map<string, Route>): MatchResult | null;
@@ -0,0 +1,40 @@
1
+ export function buildStaticMap(routes) {
2
+ const map = new Map;
3
+ for (const route of routes)
4
+ if (!route.isDynamic)
5
+ map.set(route.path, route);
6
+ return map;
7
+ }
8
+ export function matchRoute(routes, pathname, staticMap) {
9
+ const normalized = normalizePathname(pathname);
10
+ if (staticMap) {
11
+ const staticRoute = staticMap.get(normalized);
12
+ if (staticRoute)
13
+ return { route: staticRoute, params: {} };
14
+ }
15
+ for (const route of routes) {
16
+ if (!route.isDynamic && staticMap)
17
+ continue;
18
+ const match = route.pattern.exec(normalized);
19
+ if (!match)
20
+ continue;
21
+ const params = {};
22
+ for (let i = 0;i < route.params.length; i++) {
23
+ const value = match[i + 1];
24
+ if (value !== void 0)
25
+ try {
26
+ params[route.params[i]] = decodeURIComponent(value);
27
+ } catch {
28
+ params[route.params[i]] = value;
29
+ }
30
+ }
31
+ return { route, params };
32
+ }
33
+ return null;
34
+ }
35
+ function normalizePathname(pathname) {
36
+ const normalized = pathname.replace(/\\/g, "/").replace(/\/{2,}/g, "/");
37
+ if (normalized === "/")
38
+ return "/";
39
+ return normalized.replace(/\/+$/, "") || "/";
40
+ }
@@ -0,0 +1,14 @@
1
+ export interface Route {
2
+ path: string;
3
+ pattern: RegExp;
4
+ filePath: string;
5
+ isDynamic: boolean;
6
+ params: string[];
7
+ layoutPath: string | null;
8
+ layoutPaths: string[];
9
+ middlewarePath: string | null;
10
+ middlewarePaths: string[];
11
+ errorPath: string | null;
12
+ loadingPath: string | null;
13
+ }
14
+ export declare function createRouter(routesDir: string): Promise<Route[]>;
@@ -0,0 +1,141 @@
1
+ import { readdir, stat } from "node:fs/promises";
2
+ import { join, extname, basename } from "node:path";
3
+ const ROUTE_EXTENSIONS = new Set([".tsx", ".ts", ".jsx", ".js", ".mjs"]), IGNORED_PREFIXES = ["_"];
4
+ function fileToRoutePath(relativePath) {
5
+ let route = relativePath.replace(/\\/g, "/").replace(/\.(tsx?|jsx?)$/, "");
6
+ if (route === "index" || route.endsWith("/index"))
7
+ route = route.slice(0, -5) || "/";
8
+ if (!route.startsWith("/"))
9
+ route = "/" + route;
10
+ if (route.length > 1 && route.endsWith("/"))
11
+ route = route.slice(0, -1);
12
+ return route;
13
+ }
14
+ function routeToPattern(routePath) {
15
+ const params = [], finalRegex = routePath.split("/").map((segment) => {
16
+ if (!segment)
17
+ return "";
18
+ if (segment.startsWith("[...") && segment.endsWith("]")) {
19
+ const param = segment.slice(4, -1);
20
+ params.push(param);
21
+ return "(?:/(.+))?";
22
+ }
23
+ if (segment.startsWith("[") && segment.endsWith("]")) {
24
+ const param = segment.slice(1, -1);
25
+ params.push(param);
26
+ return "/([^/]+)";
27
+ }
28
+ return "/" + segment.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
29
+ }).join("") || "/";
30
+ return {
31
+ pattern: new RegExp(`^${finalRegex}$`),
32
+ params
33
+ };
34
+ }
35
+ async function scanDirectory(dir, basePath, routes, parent) {
36
+ const layouts = new Map(parent?.layouts), middlewares = new Map(parent?.middlewares);
37
+ let entries;
38
+ try {
39
+ entries = await readdir(dir);
40
+ } catch {
41
+ return { layouts, middlewares, errors: new Map, loadings: new Map };
42
+ }
43
+ entries.sort((a, b) => a.localeCompare(b));
44
+ const errors = new Map(parent?.errors), loadings = new Map(parent?.loadings);
45
+ for (const entry of entries) {
46
+ const fullPath = join(dir, entry), name = basename(entry, extname(entry));
47
+ if (name === "_layout")
48
+ layouts.set(basePath || "/", fullPath);
49
+ if (name === "_middleware")
50
+ middlewares.set(basePath || "/", fullPath);
51
+ if (name === "_error")
52
+ errors.set(basePath || "/", fullPath);
53
+ if (name === "_loading")
54
+ loadings.set(basePath || "/", fullPath);
55
+ }
56
+ for (const entry of entries) {
57
+ const fullPath = join(dir, entry), entryStat = await stat(fullPath), name = basename(entry, extname(entry));
58
+ if (entryStat.isDirectory()) {
59
+ const subPath = entry.startsWith("(") && entry.endsWith(")") ? basePath : basePath ? `${basePath}/${entry}` : entry, sub = await scanDirectory(fullPath, subPath, routes, { layouts, middlewares, errors, loadings });
60
+ for (const [k, v] of sub.layouts)
61
+ layouts.set(k, v);
62
+ for (const [k, v] of sub.middlewares)
63
+ middlewares.set(k, v);
64
+ for (const [k, v] of sub.errors)
65
+ errors.set(k, v);
66
+ for (const [k, v] of sub.loadings)
67
+ loadings.set(k, v);
68
+ continue;
69
+ }
70
+ if (!ROUTE_EXTENSIONS.has(extname(entry)))
71
+ continue;
72
+ if (IGNORED_PREFIXES.some((p) => name.startsWith(p)))
73
+ continue;
74
+ const relPath = basePath ? `${basePath}/${entry}` : entry, routePath = fileToRoutePath(relPath), { pattern, params } = routeToPattern(routePath), middlewarePaths = [], segments = (basePath || "/").split("/").filter(Boolean), dirs = ["/"];
75
+ for (let i = 0;i < segments.length; i++)
76
+ dirs.push(segments.slice(0, i + 1).join("/"));
77
+ for (const d of dirs) {
78
+ const mwPath = middlewares.get(d);
79
+ if (mwPath)
80
+ middlewarePaths.push(mwPath);
81
+ }
82
+ const layoutPaths = [];
83
+ for (const d of dirs) {
84
+ const lPath = layouts.get(d);
85
+ if (lPath)
86
+ layoutPaths.push(lPath);
87
+ }
88
+ let loadingPath = null;
89
+ for (let i = dirs.length - 1;i >= 0; i--) {
90
+ const lp = loadings.get(dirs[i]);
91
+ if (lp) {
92
+ loadingPath = lp;
93
+ break;
94
+ }
95
+ }
96
+ let errorPath = null;
97
+ for (let i = dirs.length - 1;i >= 0; i--) {
98
+ const ep = errors.get(dirs[i]);
99
+ if (ep) {
100
+ errorPath = ep;
101
+ break;
102
+ }
103
+ }
104
+ routes.push({
105
+ path: routePath,
106
+ pattern,
107
+ filePath: fullPath,
108
+ isDynamic: params.length > 0,
109
+ params,
110
+ layoutPath: layoutPaths[layoutPaths.length - 1] ?? null,
111
+ layoutPaths,
112
+ middlewarePath: middlewarePaths[middlewarePaths.length - 1] ?? null,
113
+ middlewarePaths,
114
+ errorPath,
115
+ loadingPath
116
+ });
117
+ }
118
+ return { layouts, middlewares, errors, loadings };
119
+ }
120
+ export async function createRouter(routesDir) {
121
+ const routes = [];
122
+ await scanDirectory(routesDir, "", routes);
123
+ routes.sort((a, b) => {
124
+ if (a.isDynamic !== b.isDynamic)
125
+ return a.isDynamic ? 1 : -1;
126
+ const aCatchAll = a.path.includes("[..."), bCatchAll = b.path.includes("[...");
127
+ if (aCatchAll !== bCatchAll)
128
+ return aCatchAll ? 1 : -1;
129
+ return a.path.localeCompare(b.path);
130
+ });
131
+ const seen = new Map;
132
+ for (const route of routes) {
133
+ const existing = seen.get(route.path);
134
+ if (existing)
135
+ throw Error(`Duplicate route path detected: ${route.path}
136
+ - ${existing}
137
+ - ${route.filePath}`);
138
+ seen.set(route.path, route.filePath);
139
+ }
140
+ return routes;
141
+ }
@@ -0,0 +1 @@
1
+ export { typedLink, typedNavigate, typedPrefetch, resolveTypedRouteTarget, buildSearchParams, buildTypedPath, createTypedRoute, extractRouteParamKeys, type TypedRouteDefinition, type TypedRouteOptions, type TypedRouteParams, type TypedRouteSearchValue, type TypedRouteTarget, } from "../runtime/typed-routes.js";
@@ -0,0 +1,10 @@
1
+ export {
2
+ typedLink,
3
+ typedNavigate,
4
+ typedPrefetch,
5
+ resolveTypedRouteTarget,
6
+ buildSearchParams,
7
+ buildTypedPath,
8
+ createTypedRoute,
9
+ extractRouteParamKeys
10
+ } from "../runtime/typed-routes.js";
@@ -0,0 +1,26 @@
1
+ import type { MiddlewareFn } from "../server/middleware.js";
2
+ import { type AIObservabilityConfig } from "../ai/index.js";
3
+ export interface AppConfig {
4
+ ai?: AIObservabilityConfig;
5
+ security?: {
6
+ origin?: string;
7
+ hosts?: string[];
8
+ proxy?: {
9
+ preset?: ProxyPreset;
10
+ trustForwardedHeaders?: boolean;
11
+ trustedForwardedHops?: number;
12
+ };
13
+ rpc?: {
14
+ middlewares?: MiddlewareFn[];
15
+ };
16
+ };
17
+ }
18
+ export type ProxyPreset = "none" | "reverse-proxy" | "vercel" | "netlify" | "fly" | "cloudflare";
19
+ export declare function loadAppConfig(cwd: string, explicitPath?: string): Promise<AppConfig>;
20
+ export declare function resolveRPCMiddlewares(config: AppConfig, explicitMiddlewares?: MiddlewareFn[]): MiddlewareFn[] | undefined;
21
+ export declare function resolveAIConfig(cwd: string, config: AppConfig, explicitConfig?: AIObservabilityConfig): AIObservabilityConfig | undefined;
22
+ export declare function resolveTrustedOrigin(config: AppConfig, env?: NodeJS.ProcessEnv): string | undefined;
23
+ export declare function resolveTrustForwardedHeaders(config: AppConfig): boolean;
24
+ export declare function resolveTrustedForwardedHops(config: AppConfig): number;
25
+ export declare function resolveTrustedHosts(config: AppConfig): string[];
26
+ export declare function resolveProxyPreset(config: AppConfig): ProxyPreset;
@@ -0,0 +1,69 @@
1
+ import { stat } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { resolveAIObservabilityConfig } from "../ai/index.js";
5
+ export async function loadAppConfig(cwd, explicitPath) {
6
+ const candidatePaths = explicitPath ? [explicitPath] : [
7
+ join(cwd, "app.config.ts"),
8
+ join(cwd, "app.config.js"),
9
+ join(cwd, "app.config.mjs")
10
+ ];
11
+ for (const configPath of candidatePaths)
12
+ try {
13
+ const configStat = await stat(configPath);
14
+ return (await import(`${pathToFileURL(configPath).href}?t=${configStat.mtimeMs}`)).default ?? {};
15
+ } catch {
16
+ continue;
17
+ }
18
+ return {};
19
+ }
20
+ export function resolveRPCMiddlewares(config, explicitMiddlewares) {
21
+ if (explicitMiddlewares && explicitMiddlewares.length > 0)
22
+ return explicitMiddlewares;
23
+ const configMiddlewares = config.security?.rpc?.middlewares;
24
+ return configMiddlewares && configMiddlewares.length > 0 ? configMiddlewares : void 0;
25
+ }
26
+ export function resolveAIConfig(cwd, config, explicitConfig) {
27
+ const merged = {
28
+ ...config.ai ?? {},
29
+ ...explicitConfig ?? {}
30
+ };
31
+ if (Object.keys(merged).length === 0)
32
+ return;
33
+ return resolveAIObservabilityConfig(cwd, merged);
34
+ }
35
+ export function resolveTrustedOrigin(config, env = process.env) {
36
+ return config.security?.origin ?? env.APP_ORIGIN;
37
+ }
38
+ export function resolveTrustForwardedHeaders(config) {
39
+ const explicit = config.security?.proxy?.trustForwardedHeaders;
40
+ if (typeof explicit === "boolean")
41
+ return explicit;
42
+ return getProxyPresetDefaults(resolveProxyPreset(config)).trustForwardedHeaders;
43
+ }
44
+ export function resolveTrustedForwardedHops(config) {
45
+ const hops = config.security?.proxy?.trustedForwardedHops;
46
+ if (typeof hops === "number" && Number.isFinite(hops) && hops > 0)
47
+ return Math.floor(hops);
48
+ return getProxyPresetDefaults(resolveProxyPreset(config)).trustedForwardedHops;
49
+ }
50
+ export function resolveTrustedHosts(config) {
51
+ return config.security?.hosts ?? [];
52
+ }
53
+ export function resolveProxyPreset(config) {
54
+ return config.security?.proxy?.preset ?? "none";
55
+ }
56
+ function getProxyPresetDefaults(preset) {
57
+ switch (preset) {
58
+ case "reverse-proxy":
59
+ case "vercel":
60
+ case "netlify":
61
+ case "fly":
62
+ return { trustForwardedHeaders: !0, trustedForwardedHops: 1 };
63
+ case "cloudflare":
64
+ return { trustForwardedHeaders: !1, trustedForwardedHops: 0 };
65
+ case "none":
66
+ default:
67
+ return { trustForwardedHeaders: !1, trustedForwardedHops: 1 };
68
+ }
69
+ }
@@ -0,0 +1,3 @@
1
+ import type { GorseeNode } from "./jsx-runtime.js";
2
+ export declare function render(component: () => GorseeNode, container: Element): void;
3
+ export declare function hydrate(component: () => GorseeNode, container: Element): void;
@@ -0,0 +1,31 @@
1
+ import { jsx } from "./jsx-runtime.js";
2
+ import { enterHydration, exitHydration } from "./hydration.js";
3
+ import { replayEvents } from "./event-replay.js";
4
+ import { isRenderableThunk } from "./html-escape.js";
5
+ function isVNodeLike(value) {
6
+ return typeof value === "object" && value !== null && "type" in value && "props" in value;
7
+ }
8
+ function insertResult(container, result) {
9
+ if (result instanceof Node)
10
+ container.appendChild(result);
11
+ else if (typeof result === "object" && result !== null && isVNodeLike(result))
12
+ container.appendChild(jsx(result.type, result.props));
13
+ else if (Array.isArray(result))
14
+ for (const child of result)
15
+ insertResult(container, child);
16
+ else if (isRenderableThunk(result))
17
+ insertResult(container, result());
18
+ else if (result != null && typeof result !== "boolean")
19
+ container.appendChild(document.createTextNode(String(result)));
20
+ }
21
+ export function render(component, container) {
22
+ container.replaceChildren();
23
+ insertResult(container, component());
24
+ }
25
+ export function hydrate(component, container) {
26
+ enterHydration(container);
27
+ component();
28
+ if (exitHydration().recoverableMismatch)
29
+ render(component, container);
30
+ replayEvents(container);
31
+ }
@@ -0,0 +1,64 @@
1
+ import { type HydrationDiagnostics } from "./hydration.js";
2
+ import { type RouterNavigationDiagnostics } from "./router.js";
3
+ import { REACTIVE_TRACE_SCHEMA_VERSION, type ReactiveDiagnosticEvent, type ReactiveDiagnosticsSnapshot, type ReactiveTraceArtifact } from "../reactive/diagnostics.js";
4
+ export declare const RUNTIME_DEVTOOLS_SCHEMA_VERSION: 1;
5
+ export interface RuntimeDevtoolsRouteEntry {
6
+ path: string;
7
+ methods: string[];
8
+ isApi: boolean;
9
+ hasLoader: boolean;
10
+ hasMiddleware: boolean;
11
+ title?: string;
12
+ }
13
+ export interface RuntimeDevtoolsRouteSummary {
14
+ total: number;
15
+ pages: number;
16
+ apis: number;
17
+ loaders: number;
18
+ middleware: number;
19
+ }
20
+ export interface RuntimeDevtoolsTopNode {
21
+ id: number;
22
+ kind: ReactiveTraceArtifact["nodes"][number]["kind"];
23
+ label?: string;
24
+ score: number;
25
+ reads: number;
26
+ writes: number;
27
+ runs: number;
28
+ invalidations: number;
29
+ }
30
+ export interface RuntimeDevtoolsSummary {
31
+ navigationState: "idle" | "navigating";
32
+ activeRoute: string;
33
+ hydrationState: "stable" | "recovering";
34
+ mismatchCount: number;
35
+ topReactiveNode: string | null;
36
+ recentReactiveEventKinds: string[];
37
+ }
38
+ export interface RuntimeDevtoolsSnapshot {
39
+ schemaVersion: typeof RUNTIME_DEVTOOLS_SCHEMA_VERSION;
40
+ generatedAt: string;
41
+ reactiveTraceSchemaVersion: typeof REACTIVE_TRACE_SCHEMA_VERSION;
42
+ navigation: RouterNavigationDiagnostics;
43
+ hydration: HydrationDiagnostics;
44
+ reactive: {
45
+ snapshot: ReactiveDiagnosticsSnapshot;
46
+ topNodes: RuntimeDevtoolsTopNode[];
47
+ recentEvents: ReactiveDiagnosticEvent[];
48
+ trace?: ReactiveTraceArtifact;
49
+ };
50
+ routes?: {
51
+ summary: RuntimeDevtoolsRouteSummary;
52
+ entries: RuntimeDevtoolsRouteEntry[];
53
+ };
54
+ summary: RuntimeDevtoolsSummary;
55
+ }
56
+ export interface RuntimeDevtoolsOptions {
57
+ includeTrace?: boolean;
58
+ maxReactiveEvents?: number;
59
+ maxTopNodes?: number;
60
+ routes?: RuntimeDevtoolsRouteEntry[];
61
+ }
62
+ export declare function createRuntimeDevtoolsSnapshot(options?: RuntimeDevtoolsOptions): RuntimeDevtoolsSnapshot;
63
+ export declare function renderRuntimeDevtoolsHTML(snapshot: RuntimeDevtoolsSnapshot): string;
64
+ export declare function renderRuntimeDevtoolsOverlay(snapshot: RuntimeDevtoolsSnapshot, nonce?: string): string;
@@ -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;