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,50 @@
1
+ import { definePlugin } from "./index.js";
2
+ let drizzleInstance = null;
3
+ export function getDrizzle() {
4
+ if (!drizzleInstance)
5
+ throw Error("Drizzle not initialized. Did you register drizzlePlugin?");
6
+ return drizzleInstance;
7
+ }
8
+ export function drizzleMiddleware(instance) {
9
+ return async (ctx, next) => {
10
+ ctx.locals.db = instance;
11
+ return next();
12
+ };
13
+ }
14
+ export function generateDrizzleConfig(config) {
15
+ const dbCredentials = config.dialect === "sqlite" ? `{ url: "${config.connectionUrl ?? "./data.db"}" }` : `{ connectionString: "${config.connectionUrl ?? ""}" }`;
16
+ return `import { defineConfig } from "drizzle-kit"
17
+
18
+ export default defineConfig({
19
+ schema: "${config.schema}",
20
+ out: "${config.out}",
21
+ dialect: "${config.dialect}",
22
+ dbCredentials: ${dbCredentials},
23
+ })
24
+ `;
25
+ }
26
+ export function drizzlePlugin(config) {
27
+ return definePlugin({
28
+ name: "gorsee-drizzle",
29
+ capabilities: ["db"],
30
+ async setup(app) {
31
+ if (config.dialect === "sqlite") {
32
+ const { Database } = await import("bun:sqlite"), db = new Database(config.connectionUrl ?? "./data.db");
33
+ db.exec("PRAGMA journal_mode=WAL");
34
+ try {
35
+ const { drizzle } = await import("drizzle-orm/bun-sqlite");
36
+ drizzleInstance = drizzle(db);
37
+ } catch {
38
+ drizzleInstance = db;
39
+ }
40
+ } else
41
+ drizzleInstance = { dialect: config.dialect, url: config.connectionUrl };
42
+ app.addMiddleware(drizzleMiddleware(drizzleInstance));
43
+ },
44
+ async teardown() {
45
+ if (drizzleInstance && typeof drizzleInstance.close === "function")
46
+ drizzleInstance.close();
47
+ drizzleInstance = null;
48
+ }
49
+ });
50
+ }
@@ -0,0 +1,62 @@
1
+ import type { MiddlewareFn, Context } from "../server/middleware.js";
2
+ import type { BuildRuntimeTarget, FrameworkBuildPlugin } from "../build/plugin.js";
3
+ export { defineBuildPlugin, resolveBuildPluginsForTarget, type BuildRuntimeTarget, type FrameworkBuildPlugin, } from "../build/plugin.js";
4
+ export type PluginPhase = "runtime" | "dev" | "build" | "test";
5
+ export type PluginCapability = "middleware" | "routes" | "build" | "runtime" | "dev" | "test" | "auth" | "db" | "storage" | "payments" | "email" | "styling";
6
+ export interface PluginConfigValidationIssue {
7
+ path: string;
8
+ message: string;
9
+ }
10
+ export interface PluginLifecycleContext extends PluginContext {
11
+ phase: PluginPhase;
12
+ plugin: PluginDescriptor;
13
+ }
14
+ export interface PluginLifecycle {
15
+ runtime?: (app: PluginLifecycleContext) => void | Promise<void>;
16
+ dev?: (app: PluginLifecycleContext) => void | Promise<void>;
17
+ build?: (app: PluginLifecycleContext) => void | Promise<void>;
18
+ test?: (app: PluginLifecycleContext) => void | Promise<void>;
19
+ }
20
+ export interface GorseePlugin {
21
+ name: string;
22
+ version?: string;
23
+ capabilities?: PluginCapability[];
24
+ dependsOn?: string[];
25
+ order?: {
26
+ before?: string[];
27
+ after?: string[];
28
+ };
29
+ configSchema?: (config: Record<string, unknown>) => PluginConfigValidationIssue[] | void;
30
+ setup?: (app: PluginContext) => void | Promise<void>;
31
+ middleware?: MiddlewareFn;
32
+ buildPlugins?: () => FrameworkBuildPlugin[];
33
+ teardown?: () => void | Promise<void>;
34
+ lifecycle?: PluginLifecycle;
35
+ }
36
+ export interface PluginDescriptor {
37
+ name: string;
38
+ version?: string;
39
+ capabilities: PluginCapability[];
40
+ dependsOn: string[];
41
+ before: string[];
42
+ after: string[];
43
+ }
44
+ export interface PluginContext {
45
+ addMiddleware(mw: MiddlewareFn): void;
46
+ addRoute(path: string, handler: (ctx: Context) => Promise<Response>): void;
47
+ config: Record<string, unknown>;
48
+ getConfig?<T extends Record<string, unknown> = Record<string, unknown>>(): T;
49
+ }
50
+ export declare function definePlugin<T extends GorseePlugin>(plugin: T): T;
51
+ export interface PluginRunner {
52
+ register(plugin: GorseePlugin): void;
53
+ setupAll(): Promise<void>;
54
+ runPhase(phase: PluginPhase): Promise<void>;
55
+ teardownAll(): Promise<void>;
56
+ getMiddlewares(): MiddlewareFn[];
57
+ getBuildPlugins(target?: BuildRuntimeTarget): FrameworkBuildPlugin[];
58
+ getRoutes(): Map<string, (ctx: Context) => Promise<Response>>;
59
+ getPluginDescriptors(): PluginDescriptor[];
60
+ getCapabilities(): PluginCapability[];
61
+ }
62
+ export declare function createPluginRunner(config?: Record<string, unknown>): PluginRunner;
@@ -0,0 +1,147 @@
1
+ export {
2
+ defineBuildPlugin,
3
+ resolveBuildPluginsForTarget
4
+ } from "../build/plugin.js";
5
+ export function definePlugin(plugin) {
6
+ return plugin;
7
+ }
8
+ function normalizeCapabilities(plugin) {
9
+ const capabilities = new Set(plugin.capabilities ?? []);
10
+ if (plugin.middleware)
11
+ capabilities.add("middleware");
12
+ if (plugin.buildPlugins)
13
+ capabilities.add("build");
14
+ if (plugin.lifecycle?.build)
15
+ capabilities.add("build");
16
+ if (plugin.lifecycle?.dev)
17
+ capabilities.add("dev");
18
+ if (plugin.lifecycle?.runtime || plugin.setup)
19
+ capabilities.add("runtime");
20
+ if (plugin.lifecycle?.test)
21
+ capabilities.add("test");
22
+ return [...capabilities].sort();
23
+ }
24
+ function describePlugin(plugin) {
25
+ return {
26
+ name: plugin.name,
27
+ version: plugin.version,
28
+ capabilities: normalizeCapabilities(plugin),
29
+ dependsOn: [...plugin.dependsOn ?? []],
30
+ before: [...plugin.order?.before ?? []],
31
+ after: [...plugin.order?.after ?? []]
32
+ };
33
+ }
34
+ function validatePluginConfig(plugin, config) {
35
+ const issues = plugin.configSchema?.(config) ?? [];
36
+ if (!issues.length)
37
+ return;
38
+ const rendered = issues.map((issue) => `${issue.path}: ${issue.message}`).join("; ");
39
+ throw Error(`Plugin "${plugin.name}" config validation failed: ${rendered}`);
40
+ }
41
+ function sortPlugins(plugins) {
42
+ const byName = new Map(plugins.map((plugin) => [plugin.name, plugin])), edges = new Map, incoming = new Map;
43
+ for (const plugin of plugins) {
44
+ edges.set(plugin.name, new Set);
45
+ incoming.set(plugin.name, 0);
46
+ }
47
+ function addEdge(from, to) {
48
+ if (!byName.has(from) || !byName.has(to) || from === to)
49
+ return;
50
+ const targets = edges.get(from);
51
+ if (targets.has(to))
52
+ return;
53
+ targets.add(to);
54
+ incoming.set(to, (incoming.get(to) ?? 0) + 1);
55
+ }
56
+ for (const plugin of plugins) {
57
+ for (const dependency of plugin.dependsOn ?? []) {
58
+ if (!byName.has(dependency))
59
+ throw Error(`Plugin "${plugin.name}" depends on missing plugin "${dependency}"`);
60
+ addEdge(dependency, plugin.name);
61
+ }
62
+ for (const after of plugin.order?.after ?? []) {
63
+ if (!byName.has(after))
64
+ throw Error(`Plugin "${plugin.name}" declares unknown order.after target "${after}"`);
65
+ addEdge(after, plugin.name);
66
+ }
67
+ for (const before of plugin.order?.before ?? []) {
68
+ if (!byName.has(before))
69
+ throw Error(`Plugin "${plugin.name}" declares unknown order.before target "${before}"`);
70
+ addEdge(plugin.name, before);
71
+ }
72
+ }
73
+ const queue = [...plugins].filter((plugin) => (incoming.get(plugin.name) ?? 0) === 0).sort((left, right) => left.name.localeCompare(right.name)), ordered = [];
74
+ while (queue.length > 0) {
75
+ const plugin = queue.shift();
76
+ ordered.push(plugin);
77
+ for (const target of edges.get(plugin.name) ?? []) {
78
+ incoming.set(target, (incoming.get(target) ?? 1) - 1);
79
+ if ((incoming.get(target) ?? 0) === 0) {
80
+ queue.push(byName.get(target));
81
+ queue.sort((left, right) => left.name.localeCompare(right.name));
82
+ }
83
+ }
84
+ }
85
+ if (ordered.length !== plugins.length)
86
+ throw Error("Plugin ordering contains a cycle.");
87
+ return ordered;
88
+ }
89
+ export function createPluginRunner(config = {}) {
90
+ const plugins = [], middlewares = [], routes = new Map, pluginCtx = {
91
+ addMiddleware: (mw) => middlewares.push(mw),
92
+ addRoute: (path, handler) => routes.set(path, handler),
93
+ config,
94
+ getConfig() {
95
+ return config;
96
+ }
97
+ };
98
+ async function runPluginPhase(plugin, phase) {
99
+ const descriptor = describePlugin(plugin), ctx = { ...pluginCtx, phase, plugin: descriptor };
100
+ if (phase === "runtime" && plugin.setup)
101
+ await plugin.setup(pluginCtx);
102
+ const hook = plugin.lifecycle?.[phase];
103
+ if (hook)
104
+ await hook(ctx);
105
+ }
106
+ function getOrderedPlugins() {
107
+ return sortPlugins(plugins);
108
+ }
109
+ return {
110
+ register(plugin) {
111
+ if (plugins.some((entry) => entry.name === plugin.name))
112
+ throw Error(`Plugin "${plugin.name}" is already registered.`);
113
+ validatePluginConfig(plugin, config);
114
+ plugins.push(plugin);
115
+ if (plugin.middleware)
116
+ middlewares.push(plugin.middleware);
117
+ },
118
+ async setupAll() {
119
+ for (const plugin of getOrderedPlugins())
120
+ await runPluginPhase(plugin, "runtime");
121
+ },
122
+ async runPhase(phase) {
123
+ for (const plugin of getOrderedPlugins())
124
+ await runPluginPhase(plugin, phase);
125
+ },
126
+ async teardownAll() {
127
+ for (const plugin of [...getOrderedPlugins()].reverse())
128
+ if (plugin.teardown)
129
+ await plugin.teardown();
130
+ },
131
+ getMiddlewares: () => [...middlewares],
132
+ getBuildPlugins(_target) {
133
+ const result = [];
134
+ for (const plugin of getOrderedPlugins())
135
+ if (plugin.buildPlugins)
136
+ result.push(...plugin.buildPlugins());
137
+ return result;
138
+ },
139
+ getRoutes: () => new Map(routes),
140
+ getPluginDescriptors() {
141
+ return getOrderedPlugins().map((plugin) => describePlugin(plugin));
142
+ },
143
+ getCapabilities() {
144
+ return [...new Set(getOrderedPlugins().flatMap((plugin) => describePlugin(plugin).capabilities))].sort();
145
+ }
146
+ };
147
+ }
@@ -0,0 +1,26 @@
1
+ import type { Context } from "../server/middleware.js";
2
+ import type { GorseePlugin } from "./index.js";
3
+ export interface LuciaPluginConfig {
4
+ adapter: "sqlite" | "prisma" | "drizzle";
5
+ sessionTable?: string;
6
+ userTable?: string;
7
+ }
8
+ interface LuciaInstance {
9
+ validateSession(sessionId: string): Promise<{
10
+ session: unknown;
11
+ user: unknown;
12
+ } | null>;
13
+ createSession(userId: string, attributes?: Record<string, unknown>): Promise<{
14
+ id: string;
15
+ }>;
16
+ invalidateSession(sessionId: string): Promise<void>;
17
+ }
18
+ /** Returns the Lucia instance (available after setup) */
19
+ export declare function getLucia(): LuciaInstance;
20
+ /** Extracts current session from context (set by middleware) */
21
+ export declare function getSession(ctx: Context): unknown | null;
22
+ /** Extracts current user from context (set by middleware) */
23
+ export declare function getUser(ctx: Context): unknown | null;
24
+ /** Creates a Lucia auth integration plugin */
25
+ export declare function luciaPlugin(config: LuciaPluginConfig): GorseePlugin;
26
+ export {};
@@ -0,0 +1,63 @@
1
+ import { definePlugin } from "./index.js";
2
+ let luciaInstance = null;
3
+ export function getLucia() {
4
+ if (!luciaInstance)
5
+ throw Error("Lucia not initialized. Did you register luciaPlugin?");
6
+ return luciaInstance;
7
+ }
8
+ export function getSession(ctx) {
9
+ return ctx.locals.session ?? null;
10
+ }
11
+ export function getUser(ctx) {
12
+ return ctx.locals.user ?? null;
13
+ }
14
+ function createSessionMiddleware() {
15
+ return async (ctx, next) => {
16
+ ctx.locals.session = null;
17
+ ctx.locals.user = null;
18
+ const sessionId = ctx.cookies.get("auth_session") ?? ctx.request.headers.get("Authorization")?.replace("Bearer ", "") ?? null;
19
+ if (sessionId && luciaInstance)
20
+ try {
21
+ const result = await luciaInstance.validateSession(sessionId);
22
+ if (result) {
23
+ ctx.locals.session = result.session;
24
+ ctx.locals.user = result.user;
25
+ }
26
+ } catch {}
27
+ return next();
28
+ };
29
+ }
30
+ export function luciaPlugin(config) {
31
+ return definePlugin({
32
+ name: "gorsee-lucia",
33
+ capabilities: ["auth"],
34
+ async setup() {
35
+ try {
36
+ const { Lucia } = await import("lucia");
37
+ let adapter;
38
+ if (config.adapter === "sqlite") {
39
+ const { BunSQLiteAdapter } = await import("@lucia-auth/adapter-sqlite"), { Database } = await import("bun:sqlite"), db = new Database("./data.db");
40
+ adapter = new BunSQLiteAdapter(db, {
41
+ session: config.sessionTable ?? "session",
42
+ user: config.userTable ?? "user"
43
+ });
44
+ } else if (config.adapter === "prisma") {
45
+ const { PrismaAdapter } = await import("@lucia-auth/adapter-prisma"), { PrismaClient } = await import("@prisma/client");
46
+ adapter = new PrismaAdapter(new PrismaClient, {
47
+ session: config.sessionTable ?? "session",
48
+ user: config.userTable ?? "user"
49
+ });
50
+ } else
51
+ adapter = null;
52
+ if (adapter)
53
+ luciaInstance = new Lucia(adapter);
54
+ } catch {
55
+ luciaInstance = null;
56
+ }
57
+ },
58
+ middleware: createSessionMiddleware(),
59
+ async teardown() {
60
+ luciaInstance = null;
61
+ }
62
+ });
63
+ }
@@ -0,0 +1,14 @@
1
+ import type { MiddlewareFn } from "../server/middleware.js";
2
+ import type { GorseePlugin } from "./index.js";
3
+ export interface PrismaPluginConfig {
4
+ schemaPath?: string;
5
+ datasourceUrl?: string;
6
+ }
7
+ /** Returns the current Prisma client (available after setup) */
8
+ export declare function getPrisma<T = unknown>(): T;
9
+ /** Middleware that attaches prisma to ctx.locals.prisma */
10
+ export declare function prismaMiddleware(client: unknown): MiddlewareFn;
11
+ /** Generates a basic schema.prisma content string */
12
+ export declare function generatePrismaSchema(config: PrismaPluginConfig): string;
13
+ /** Creates a Prisma integration plugin */
14
+ export declare function prismaPlugin(config?: PrismaPluginConfig): GorseePlugin;
@@ -0,0 +1,57 @@
1
+ import { definePlugin } from "./index.js";
2
+ let prismaClient = null;
3
+ export function getPrisma() {
4
+ if (!prismaClient)
5
+ throw Error("Prisma not initialized. Did you register prismaPlugin?");
6
+ return prismaClient;
7
+ }
8
+ export function prismaMiddleware(client) {
9
+ return async (ctx, next) => {
10
+ ctx.locals.prisma = client;
11
+ return next();
12
+ };
13
+ }
14
+ export function generatePrismaSchema(config) {
15
+ const url = config.datasourceUrl ?? "file:./dev.db";
16
+ return `generator client {
17
+ provider = "prisma-client-js"
18
+ }
19
+
20
+ datasource db {
21
+ provider = "${url.startsWith("file:") ? "sqlite" : url.startsWith("postgres") ? "postgresql" : "mysql"}"
22
+ url = "${url}"
23
+ }
24
+
25
+ // Add your models below
26
+ // model User {
27
+ // id Int @id @default(autoincrement())
28
+ // email String @unique
29
+ // name String?
30
+ // }
31
+ `;
32
+ }
33
+ export function prismaPlugin(config = {}) {
34
+ return definePlugin({
35
+ name: "gorsee-prisma",
36
+ capabilities: ["db"],
37
+ async setup(app) {
38
+ try {
39
+ const { PrismaClient } = await import("@prisma/client");
40
+ prismaClient = new PrismaClient({
41
+ datasourceUrl: config.datasourceUrl
42
+ });
43
+ } catch {
44
+ prismaClient = {
45
+ _placeholder: !0,
46
+ _message: "Run `bunx prisma generate` to create the client"
47
+ };
48
+ }
49
+ app.addMiddleware(prismaMiddleware(prismaClient));
50
+ },
51
+ async teardown() {
52
+ if (prismaClient && typeof prismaClient.$disconnect === "function")
53
+ await prismaClient.$disconnect();
54
+ prismaClient = null;
55
+ }
56
+ });
57
+ }
@@ -0,0 +1,21 @@
1
+ import type { GorseePlugin } from "./index.js";
2
+ export interface ResendPluginConfig {
3
+ apiKey: string;
4
+ from?: string;
5
+ }
6
+ export interface SendEmailOptions {
7
+ to: string | string[];
8
+ subject: string;
9
+ html?: string;
10
+ text?: string;
11
+ from?: string;
12
+ }
13
+ export interface Mailer {
14
+ send(options: SendEmailOptions): Promise<{
15
+ id: string;
16
+ }>;
17
+ }
18
+ /** Returns the mailer instance (available after setup) */
19
+ export declare function getMailer(): Mailer;
20
+ /** Creates a Resend email plugin */
21
+ export declare function resendPlugin(config: ResendPluginConfig): GorseePlugin;
@@ -0,0 +1,45 @@
1
+ import { definePlugin } from "./index.js";
2
+ const RESEND_API = "https://api.resend.com";
3
+ let mailerInstance = null;
4
+ export function getMailer() {
5
+ if (!mailerInstance)
6
+ throw Error("Resend not initialized. Did you register resendPlugin?");
7
+ return mailerInstance;
8
+ }
9
+ function createMailer(config) {
10
+ return {
11
+ async send(options) {
12
+ const body = {
13
+ from: options.from ?? config.from ?? "onboarding@resend.dev",
14
+ to: Array.isArray(options.to) ? options.to : [options.to],
15
+ subject: options.subject,
16
+ ...options.html ? { html: options.html } : {},
17
+ ...options.text ? { text: options.text } : {}
18
+ }, res = await fetch(`${RESEND_API}/emails`, {
19
+ method: "POST",
20
+ headers: {
21
+ Authorization: `Bearer ${config.apiKey}`,
22
+ "Content-Type": "application/json"
23
+ },
24
+ body: JSON.stringify(body)
25
+ });
26
+ if (!res.ok) {
27
+ const err = await res.text();
28
+ throw Error(`Resend API error (${res.status}): ${err}`);
29
+ }
30
+ return await res.json();
31
+ }
32
+ };
33
+ }
34
+ export function resendPlugin(config) {
35
+ return definePlugin({
36
+ name: "gorsee-resend",
37
+ capabilities: ["email"],
38
+ async setup() {
39
+ mailerInstance = createMailer(config);
40
+ },
41
+ async teardown() {
42
+ mailerInstance = null;
43
+ }
44
+ });
45
+ }
@@ -0,0 +1,18 @@
1
+ import type { GorseePlugin } from "./index.js";
2
+ export interface S3PluginConfig {
3
+ bucket: string;
4
+ region?: string;
5
+ endpoint?: string;
6
+ accessKeyId?: string;
7
+ secretAccessKey?: string;
8
+ }
9
+ export interface StorageClient {
10
+ upload(key: string, body: ArrayBuffer | ReadableStream | string, contentType?: string): Promise<string>;
11
+ download(key: string): Promise<Response>;
12
+ delete(key: string): Promise<void>;
13
+ list(prefix?: string): Promise<string[]>;
14
+ }
15
+ /** Returns the storage client (available after setup) */
16
+ export declare function getStorage(): StorageClient;
17
+ /** Creates an S3-compatible storage plugin */
18
+ export declare function s3Plugin(config: S3PluginConfig): GorseePlugin;
@@ -0,0 +1,63 @@
1
+ import { definePlugin } from "./index.js";
2
+ let storageClient = null;
3
+ export function getStorage() {
4
+ if (!storageClient)
5
+ throw Error("S3 not initialized. Did you register s3Plugin?");
6
+ return storageClient;
7
+ }
8
+ function buildEndpoint(config) {
9
+ if (config.endpoint)
10
+ return config.endpoint.replace(/\/$/, "");
11
+ const region = config.region ?? "us-east-1";
12
+ return `https://${config.bucket}.s3.${region}.amazonaws.com`;
13
+ }
14
+ function createStorageClient(config) {
15
+ const baseUrl = buildEndpoint(config), headers = {};
16
+ if (config.accessKeyId)
17
+ headers["x-amz-access-key"] = config.accessKeyId;
18
+ return {
19
+ async upload(key, body, contentType) {
20
+ const url = `${baseUrl}/${encodeURIComponent(key)}`, ct = contentType ?? "application/octet-stream", fetchBody = body instanceof ArrayBuffer ? new Blob([body], { type: ct }) : body, res = await fetch(url, {
21
+ method: "PUT",
22
+ headers: { ...headers, "Content-Type": ct },
23
+ body: fetchBody
24
+ });
25
+ if (!res.ok)
26
+ throw Error(`S3 upload failed: ${res.status} ${res.statusText}`);
27
+ return url;
28
+ },
29
+ async download(key) {
30
+ const url = `${baseUrl}/${encodeURIComponent(key)}`, res = await fetch(url, { headers });
31
+ if (!res.ok)
32
+ throw Error(`S3 download failed: ${res.status} ${res.statusText}`);
33
+ return res;
34
+ },
35
+ async delete(key) {
36
+ const url = `${baseUrl}/${encodeURIComponent(key)}`, res = await fetch(url, { method: "DELETE", headers });
37
+ if (!res.ok)
38
+ throw Error(`S3 delete failed: ${res.status} ${res.statusText}`);
39
+ },
40
+ async list(prefix) {
41
+ const params = prefix ? `?list-type=2&prefix=${encodeURIComponent(prefix)}` : "?list-type=2", res = await fetch(`${baseUrl}${params}`, { headers });
42
+ if (!res.ok)
43
+ throw Error(`S3 list failed: ${res.status} ${res.statusText}`);
44
+ const xml = await res.text(), keys = [], regex = /<Key>([^<]+)<\/Key>/g;
45
+ let match;
46
+ while ((match = regex.exec(xml)) !== null)
47
+ keys.push(match[1]);
48
+ return keys;
49
+ }
50
+ };
51
+ }
52
+ export function s3Plugin(config) {
53
+ return definePlugin({
54
+ name: "gorsee-s3",
55
+ capabilities: ["storage"],
56
+ async setup() {
57
+ storageClient = createStorageClient(config);
58
+ },
59
+ async teardown() {
60
+ storageClient = null;
61
+ }
62
+ });
63
+ }
@@ -0,0 +1,32 @@
1
+ import type { GorseePlugin } from "./index.js";
2
+ export interface StripePluginConfig {
3
+ secretKey: string;
4
+ webhookSecret?: string;
5
+ }
6
+ export interface CheckoutSessionOptions {
7
+ lineItems: Array<{
8
+ price: string;
9
+ quantity: number;
10
+ }>;
11
+ mode?: "payment" | "subscription";
12
+ successUrl: string;
13
+ cancelUrl: string;
14
+ }
15
+ export interface StripeEvent {
16
+ id: string;
17
+ type: string;
18
+ data: {
19
+ object: Record<string, unknown>;
20
+ };
21
+ }
22
+ export interface StripeClient {
23
+ createCheckoutSession(options: CheckoutSessionOptions): Promise<{
24
+ url: string;
25
+ id: string;
26
+ }>;
27
+ verifyWebhook(request: Request): Promise<StripeEvent>;
28
+ }
29
+ /** Returns the Stripe client (available after setup) */
30
+ export declare function getStripe(): StripeClient;
31
+ /** Creates a Stripe payments plugin */
32
+ export declare function stripePlugin(config: StripePluginConfig): GorseePlugin;
@@ -0,0 +1,69 @@
1
+ import { definePlugin } from "./index.js";
2
+ const STRIPE_API = "https://api.stripe.com/v1";
3
+ let stripeClient = null;
4
+ export function getStripe() {
5
+ if (!stripeClient)
6
+ throw Error("Stripe not initialized. Did you register stripePlugin?");
7
+ return stripeClient;
8
+ }
9
+ function createStripeClient(config) {
10
+ const authHeader = `Basic ${btoa(config.secretKey + ":")}`;
11
+ return {
12
+ async createCheckoutSession(options) {
13
+ const params = new URLSearchParams;
14
+ params.set("mode", options.mode ?? "payment");
15
+ params.set("success_url", options.successUrl);
16
+ params.set("cancel_url", options.cancelUrl);
17
+ options.lineItems.forEach((item, i) => {
18
+ params.set(`line_items[${i}][price]`, item.price);
19
+ params.set(`line_items[${i}][quantity]`, String(item.quantity));
20
+ });
21
+ const res = await fetch(`${STRIPE_API}/checkout/sessions`, {
22
+ method: "POST",
23
+ headers: { Authorization: authHeader, "Content-Type": "application/x-www-form-urlencoded" },
24
+ body: params.toString()
25
+ });
26
+ if (!res.ok) {
27
+ const err = await res.text();
28
+ throw Error(`Stripe API error (${res.status}): ${err}`);
29
+ }
30
+ const data = await res.json();
31
+ return { url: data.url, id: data.id };
32
+ },
33
+ async verifyWebhook(request) {
34
+ const body = await request.text(), sig = request.headers.get("stripe-signature") ?? "";
35
+ if (!config.webhookSecret)
36
+ throw Error("Webhook secret not configured");
37
+ const encoder = new TextEncoder, timestamp = sig.split(",").find((s) => s.startsWith("t="))?.slice(2) ?? "", v1Sig = sig.split(",").find((s) => s.startsWith("v1="))?.slice(3) ?? "", payload = `${timestamp}.${body}`, key = await crypto.subtle.importKey("raw", encoder.encode(config.webhookSecret), { name: "HMAC", hash: "SHA-256" }, !1, ["sign"]), signature = await crypto.subtle.sign("HMAC", key, encoder.encode(payload));
38
+ if (Array.from(new Uint8Array(signature)).map((b) => b.toString(16).padStart(2, "0")).join("") !== v1Sig)
39
+ throw Error("Invalid webhook signature");
40
+ return JSON.parse(body);
41
+ }
42
+ };
43
+ }
44
+ export function stripePlugin(config) {
45
+ const capabilities = ["payments"];
46
+ if (config.webhookSecret)
47
+ capabilities.push("routes");
48
+ return definePlugin({
49
+ name: "gorsee-stripe",
50
+ capabilities,
51
+ async setup(app) {
52
+ stripeClient = createStripeClient(config);
53
+ if (config.webhookSecret)
54
+ app.addRoute("/api/stripe/webhook", async (ctx) => {
55
+ try {
56
+ const event = await stripeClient.verifyWebhook(ctx.request);
57
+ return new Response(JSON.stringify({ received: !0, type: event.type }), {
58
+ headers: { "Content-Type": "application/json" }
59
+ });
60
+ } catch (err) {
61
+ return new Response(JSON.stringify({ error: String(err) }), { status: 400 });
62
+ }
63
+ });
64
+ },
65
+ async teardown() {
66
+ stripeClient = null;
67
+ }
68
+ });
69
+ }