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.
- package/README.md +261 -213
- package/dist-pkg/ai/artifact-lifecycle.d.ts +25 -0
- package/dist-pkg/ai/artifact-lifecycle.js +98 -0
- package/dist-pkg/ai/bridge.d.ts +26 -0
- package/dist-pkg/ai/bridge.js +82 -0
- package/dist-pkg/ai/bundle.d.ts +46 -0
- package/dist-pkg/ai/bundle.js +247 -0
- package/dist-pkg/ai/contracts.d.ts +1 -0
- package/dist-pkg/ai/contracts.js +1 -0
- package/dist-pkg/ai/ide.d.ts +37 -0
- package/dist-pkg/ai/ide.js +56 -0
- package/dist-pkg/ai/index.d.ts +85 -0
- package/dist-pkg/ai/index.js +267 -0
- package/dist-pkg/ai/json.d.ts +6 -0
- package/dist-pkg/ai/json.js +14 -0
- package/dist-pkg/ai/mcp.d.ts +28 -0
- package/dist-pkg/ai/mcp.js +152 -0
- package/dist-pkg/ai/session-pack.d.ts +28 -0
- package/dist-pkg/ai/session-pack.js +57 -0
- package/dist-pkg/ai/store.d.ts +67 -0
- package/dist-pkg/ai/store.js +174 -0
- package/dist-pkg/ai/summary.d.ts +57 -0
- package/dist-pkg/ai/summary.js +148 -0
- package/dist-pkg/ai/watch.d.ts +15 -0
- package/dist-pkg/ai/watch.js +66 -0
- package/dist-pkg/auth/action-tokens.d.ts +50 -0
- package/dist-pkg/auth/action-tokens.js +79 -0
- package/dist-pkg/auth/index.d.ts +70 -0
- package/dist-pkg/auth/index.js +199 -0
- package/dist-pkg/auth/redis-session-store.d.ts +7 -0
- package/dist-pkg/auth/redis-session-store.js +42 -0
- package/dist-pkg/auth/signing.d.ts +4 -0
- package/dist-pkg/auth/signing.js +33 -0
- package/dist-pkg/auth/sqlite-session-store.d.ts +12 -0
- package/dist-pkg/auth/sqlite-session-store.js +83 -0
- package/dist-pkg/auth/store-utils.d.ts +2 -0
- package/dist-pkg/auth/store-utils.js +20 -0
- package/dist-pkg/bin/gorsee.js +2 -0
- package/dist-pkg/build/backends/experimental-rolldown.d.ts +6 -0
- package/dist-pkg/build/backends/experimental-rolldown.js +9 -0
- package/dist-pkg/build/backends/register.d.ts +7 -0
- package/dist-pkg/build/backends/register.js +24 -0
- package/dist-pkg/build/backends/rolldown.d.ts +16 -0
- package/dist-pkg/build/backends/rolldown.js +176 -0
- package/dist-pkg/build/client-backend.d.ts +31 -0
- package/dist-pkg/build/client-backend.js +97 -0
- package/dist-pkg/build/client.d.ts +12 -0
- package/dist-pkg/build/client.js +93 -0
- package/dist-pkg/build/css-modules.d.ts +10 -0
- package/dist-pkg/build/css-modules.js +51 -0
- package/dist-pkg/build/devalue-parse.d.ts +1 -0
- package/dist-pkg/build/devalue-parse.js +1 -0
- package/dist-pkg/build/diagnostics.d.ts +20 -0
- package/dist-pkg/build/diagnostics.js +35 -0
- package/dist-pkg/build/fixtures.d.ts +7 -0
- package/dist-pkg/build/fixtures.js +60 -0
- package/dist-pkg/build/framework-imports.d.ts +4 -0
- package/dist-pkg/build/framework-imports.js +58 -0
- package/dist-pkg/build/init.d.ts +1 -0
- package/dist-pkg/build/init.js +6 -0
- package/dist-pkg/build/manifest.d.ts +3 -0
- package/dist-pkg/build/manifest.js +23 -0
- package/dist-pkg/build/parity.d.ts +32 -0
- package/dist-pkg/build/parity.js +71 -0
- package/dist-pkg/build/plugin.d.ts +11 -0
- package/dist-pkg/build/plugin.js +8 -0
- package/dist-pkg/build/readiness.d.ts +11 -0
- package/dist-pkg/build/readiness.js +18 -0
- package/dist-pkg/build/route-client-transform.d.ts +17 -0
- package/dist-pkg/build/route-client-transform.js +48 -0
- package/dist-pkg/build/route-metadata.d.ts +6 -0
- package/dist-pkg/build/route-metadata.js +8 -0
- package/dist-pkg/build/rpc-transform.d.ts +1 -0
- package/dist-pkg/build/rpc-transform.js +44 -0
- package/dist-pkg/build/server-bundle.d.ts +4 -0
- package/dist-pkg/build/server-bundle.js +261 -0
- package/dist-pkg/build/server-strip.d.ts +2 -0
- package/dist-pkg/build/server-strip.js +32 -0
- package/dist-pkg/build/ssg.d.ts +12 -0
- package/dist-pkg/build/ssg.js +36 -0
- package/dist-pkg/cli/bun-plugin.d.ts +2 -0
- package/dist-pkg/cli/bun-plugin.js +14 -0
- package/dist-pkg/cli/canonical-import-rewrite.d.ts +18 -0
- package/dist-pkg/cli/canonical-import-rewrite.js +94 -0
- package/dist-pkg/cli/canonical-imports.d.ts +8 -0
- package/dist-pkg/cli/canonical-imports.js +131 -0
- package/dist-pkg/cli/check-ast.d.ts +20 -0
- package/dist-pkg/cli/check-ast.js +126 -0
- package/dist-pkg/cli/cmd-ai.d.ts +4 -0
- package/dist-pkg/cli/cmd-ai.js +290 -0
- package/dist-pkg/cli/cmd-build.d.ts +12 -0
- package/dist-pkg/cli/cmd-build.js +198 -0
- package/dist-pkg/cli/cmd-check.d.ts +25 -0
- package/dist-pkg/cli/cmd-check.js +573 -0
- package/dist-pkg/cli/cmd-create.d.ts +6 -0
- package/dist-pkg/cli/cmd-create.js +600 -0
- package/dist-pkg/cli/cmd-deploy.d.ts +6 -0
- package/dist-pkg/cli/cmd-deploy.js +381 -0
- package/dist-pkg/cli/cmd-dev.d.ts +5 -0
- package/dist-pkg/cli/cmd-dev.js +5 -0
- package/dist-pkg/cli/cmd-docs.d.ts +50 -0
- package/dist-pkg/cli/cmd-docs.js +122 -0
- package/dist-pkg/cli/cmd-generate.d.ts +12 -0
- package/dist-pkg/cli/cmd-generate.js +320 -0
- package/dist-pkg/cli/cmd-migrate.d.ts +7 -0
- package/dist-pkg/cli/cmd-migrate.js +42 -0
- package/dist-pkg/cli/cmd-routes.d.ts +6 -0
- package/dist-pkg/cli/cmd-routes.js +24 -0
- package/dist-pkg/cli/cmd-start.d.ts +13 -0
- package/dist-pkg/cli/cmd-start.js +32 -0
- package/dist-pkg/cli/cmd-test.d.ts +20 -0
- package/dist-pkg/cli/cmd-test.js +103 -0
- package/dist-pkg/cli/cmd-typegen.d.ts +7 -0
- package/dist-pkg/cli/cmd-typegen.js +66 -0
- package/dist-pkg/cli/cmd-upgrade.d.ts +38 -0
- package/dist-pkg/cli/cmd-upgrade.js +232 -0
- package/dist-pkg/cli/context.d.ts +4 -0
- package/dist-pkg/cli/context.js +4 -0
- package/dist-pkg/cli/framework-md.d.ts +1 -0
- package/dist-pkg/cli/framework-md.js +391 -0
- package/dist-pkg/cli/index.d.ts +6 -0
- package/dist-pkg/cli/index.js +106 -0
- package/dist-pkg/cli/release-version.d.ts +2 -0
- package/dist-pkg/cli/release-version.js +33 -0
- package/dist-pkg/client.d.ts +16 -0
- package/dist-pkg/client.js +71 -0
- package/dist-pkg/compat.d.ts +1 -0
- package/dist-pkg/compat.js +1 -0
- package/dist-pkg/compiler/analysis-backend.d.ts +20 -0
- package/dist-pkg/compiler/analysis-backend.js +164 -0
- package/dist-pkg/compiler/backends/experimental-oxc.d.ts +6 -0
- package/dist-pkg/compiler/backends/experimental-oxc.js +9 -0
- package/dist-pkg/compiler/backends/oxc.d.ts +16 -0
- package/dist-pkg/compiler/backends/oxc.js +198 -0
- package/dist-pkg/compiler/backends/register.d.ts +7 -0
- package/dist-pkg/compiler/backends/register.js +22 -0
- package/dist-pkg/compiler/fixtures.d.ts +2 -0
- package/dist-pkg/compiler/fixtures.js +118 -0
- package/dist-pkg/compiler/init.d.ts +1 -0
- package/dist-pkg/compiler/init.js +6 -0
- package/dist-pkg/compiler/module-analysis.d.ts +13 -0
- package/dist-pkg/compiler/module-analysis.js +50 -0
- package/dist-pkg/compiler/parity.d.ts +35 -0
- package/dist-pkg/compiler/parity.js +89 -0
- package/dist-pkg/compiler/readiness.d.ts +11 -0
- package/dist-pkg/compiler/readiness.js +18 -0
- package/dist-pkg/compiler/route-facts.d.ts +34 -0
- package/dist-pkg/compiler/route-facts.js +75 -0
- package/dist-pkg/content/index.d.ts +27 -0
- package/dist-pkg/content/index.js +287 -0
- package/dist-pkg/db/index.d.ts +3 -0
- package/dist-pkg/db/index.js +6 -0
- package/dist-pkg/db/migrate.d.ts +7 -0
- package/dist-pkg/db/migrate.js +53 -0
- package/dist-pkg/db/postgres.d.ts +29 -0
- package/dist-pkg/db/postgres.js +59 -0
- package/dist-pkg/db/sqlite.d.ts +10 -0
- package/dist-pkg/db/sqlite.js +22 -0
- package/dist-pkg/deploy/cloudflare.d.ts +8 -0
- package/{src/deploy/cloudflare.ts → dist-pkg/deploy/cloudflare.js} +24 -26
- package/dist-pkg/deploy/conformance.d.ts +21 -0
- package/dist-pkg/deploy/conformance.js +98 -0
- package/dist-pkg/deploy/dockerfile.d.ts +3 -0
- package/{src/deploy/dockerfile.ts → dist-pkg/deploy/dockerfile.js} +8 -10
- package/dist-pkg/deploy/fly.d.ts +3 -0
- package/{src/deploy/fly.ts → dist-pkg/deploy/fly.js} +11 -12
- package/dist-pkg/deploy/index.d.ts +6 -0
- package/dist-pkg/deploy/index.js +26 -0
- package/dist-pkg/deploy/netlify.d.ts +2 -0
- package/{src/deploy/netlify.ts → dist-pkg/deploy/netlify.js} +17 -11
- package/dist-pkg/deploy/runtime.d.ts +2 -0
- package/dist-pkg/deploy/runtime.js +3 -0
- package/dist-pkg/deploy/vercel.d.ts +22 -0
- package/dist-pkg/deploy/vercel.js +53 -0
- package/dist-pkg/dev/error-overlay.d.ts +1 -0
- package/{src/dev/error-overlay.ts → dist-pkg/dev/error-overlay.js} +13 -23
- package/dist-pkg/dev/hmr.d.ts +30 -0
- package/dist-pkg/dev/hmr.js +86 -0
- package/dist-pkg/dev/partial-handler.d.ts +9 -0
- package/dist-pkg/dev/partial-handler.js +24 -0
- package/dist-pkg/dev/request-handler.d.ts +30 -0
- package/dist-pkg/dev/request-handler.js +67 -0
- package/dist-pkg/dev/watcher.d.ts +6 -0
- package/dist-pkg/dev/watcher.js +34 -0
- package/dist-pkg/dev.d.ts +11 -0
- package/dist-pkg/dev.js +268 -0
- package/dist-pkg/env/index.d.ts +3 -0
- package/dist-pkg/env/index.js +57 -0
- package/dist-pkg/errors/catalog.d.ts +9 -0
- package/{src/errors/catalog.ts → dist-pkg/errors/catalog.js} +8 -24
- package/dist-pkg/errors/formatter.d.ts +22 -0
- package/dist-pkg/errors/formatter.js +43 -0
- package/dist-pkg/errors/index.d.ts +2 -0
- package/dist-pkg/errors/index.js +2 -0
- package/dist-pkg/forms/action.d.ts +15 -0
- package/dist-pkg/forms/action.js +20 -0
- package/dist-pkg/forms/index.d.ts +4 -0
- package/dist-pkg/forms/index.js +12 -0
- package/dist-pkg/i18n/index.d.ts +61 -0
- package/dist-pkg/i18n/index.js +147 -0
- package/dist-pkg/index-client.d.ts +1 -0
- package/dist-pkg/index-client.js +1 -0
- package/dist-pkg/index.d.ts +32 -0
- package/dist-pkg/index.js +79 -0
- package/dist-pkg/jsx-runtime-client.d.ts +8 -0
- package/dist-pkg/jsx-runtime-client.js +1 -0
- package/dist-pkg/jsx-runtime.d.ts +13 -0
- package/dist-pkg/jsx-runtime.js +5 -0
- package/dist-pkg/jsx-types-html.d.ts +221 -0
- package/dist-pkg/jsx-types-html.js +0 -0
- package/dist-pkg/log/index.d.ts +8 -0
- package/dist-pkg/log/index.js +55 -0
- package/dist-pkg/plugins/drizzle.d.ts +16 -0
- package/dist-pkg/plugins/drizzle.js +50 -0
- package/dist-pkg/plugins/index.d.ts +62 -0
- package/dist-pkg/plugins/index.js +147 -0
- package/dist-pkg/plugins/lucia.d.ts +26 -0
- package/dist-pkg/plugins/lucia.js +63 -0
- package/dist-pkg/plugins/prisma.d.ts +14 -0
- package/dist-pkg/plugins/prisma.js +57 -0
- package/dist-pkg/plugins/resend.d.ts +21 -0
- package/dist-pkg/plugins/resend.js +45 -0
- package/dist-pkg/plugins/s3.d.ts +18 -0
- package/dist-pkg/plugins/s3.js +63 -0
- package/dist-pkg/plugins/stripe.d.ts +32 -0
- package/dist-pkg/plugins/stripe.js +69 -0
- package/dist-pkg/plugins/tailwind.d.ts +15 -0
- package/dist-pkg/plugins/tailwind.js +58 -0
- package/dist-pkg/prod.d.ts +21 -0
- package/dist-pkg/prod.js +347 -0
- package/dist-pkg/reactive/computed.d.ts +3 -0
- package/dist-pkg/reactive/computed.js +15 -0
- package/dist-pkg/reactive/data.d.ts +25 -0
- package/dist-pkg/reactive/data.js +56 -0
- package/dist-pkg/reactive/diagnostics.d.ts +100 -0
- package/dist-pkg/reactive/diagnostics.js +363 -0
- package/dist-pkg/reactive/effect.d.ts +3 -0
- package/dist-pkg/reactive/effect.js +6 -0
- package/dist-pkg/reactive/index.d.ts +9 -0
- package/dist-pkg/reactive/index.js +18 -0
- package/dist-pkg/reactive/live.d.ts +15 -0
- package/dist-pkg/reactive/live.js +58 -0
- package/dist-pkg/reactive/optimistic.d.ts +20 -0
- package/dist-pkg/reactive/optimistic.js +54 -0
- package/dist-pkg/reactive/resource.d.ts +25 -0
- package/dist-pkg/reactive/resource.js +97 -0
- package/dist-pkg/reactive/signal.d.ts +4 -0
- package/dist-pkg/reactive/signal.js +17 -0
- package/dist-pkg/reactive/store.d.ts +6 -0
- package/dist-pkg/reactive/store.js +19 -0
- package/dist-pkg/router/index.d.ts +2 -0
- package/dist-pkg/router/index.js +2 -0
- package/dist-pkg/router/matcher.d.ts +7 -0
- package/dist-pkg/router/matcher.js +40 -0
- package/dist-pkg/router/scanner.d.ts +14 -0
- package/dist-pkg/router/scanner.js +141 -0
- package/dist-pkg/routes/index.d.ts +1 -0
- package/dist-pkg/routes/index.js +10 -0
- package/dist-pkg/runtime/app-config.d.ts +26 -0
- package/dist-pkg/runtime/app-config.js +69 -0
- package/dist-pkg/runtime/client.d.ts +3 -0
- package/dist-pkg/runtime/client.js +31 -0
- package/dist-pkg/runtime/devtools.d.ts +64 -0
- package/dist-pkg/runtime/devtools.js +132 -0
- package/dist-pkg/runtime/error-boundary.d.ts +6 -0
- package/dist-pkg/runtime/error-boundary.js +17 -0
- package/dist-pkg/runtime/event-replay.d.ts +3 -0
- package/{src/runtime/event-replay.ts → dist-pkg/runtime/event-replay.js} +7 -22
- package/dist-pkg/runtime/event-source.d.ts +7 -0
- package/dist-pkg/runtime/event-source.js +24 -0
- package/dist-pkg/runtime/form.d.ts +24 -0
- package/dist-pkg/runtime/form.js +59 -0
- package/dist-pkg/runtime/head.d.ts +7 -0
- package/dist-pkg/runtime/head.js +90 -0
- package/dist-pkg/runtime/html-escape.d.ts +7 -0
- package/dist-pkg/runtime/html-escape.js +39 -0
- package/dist-pkg/runtime/hydration.d.ts +15 -0
- package/dist-pkg/runtime/hydration.js +103 -0
- package/dist-pkg/runtime/image.d.ts +49 -0
- package/dist-pkg/runtime/image.js +144 -0
- package/dist-pkg/runtime/index.d.ts +17 -0
- package/dist-pkg/runtime/index.js +59 -0
- package/dist-pkg/runtime/island-hydrator.d.ts +12 -0
- package/dist-pkg/runtime/island-hydrator.js +49 -0
- package/dist-pkg/runtime/island.d.ts +19 -0
- package/dist-pkg/runtime/island.js +36 -0
- package/dist-pkg/runtime/jsx-runtime.d.ts +12 -0
- package/dist-pkg/runtime/jsx-runtime.js +173 -0
- package/dist-pkg/runtime/link.d.ts +16 -0
- package/dist-pkg/runtime/link.js +47 -0
- package/dist-pkg/runtime/project.d.ts +37 -0
- package/dist-pkg/runtime/project.js +36 -0
- package/dist-pkg/runtime/renderable.d.ts +6 -0
- package/dist-pkg/runtime/renderable.js +0 -0
- package/dist-pkg/runtime/router.d.ts +47 -0
- package/dist-pkg/runtime/router.js +476 -0
- package/dist-pkg/runtime/server.d.ts +8 -0
- package/dist-pkg/runtime/server.js +71 -0
- package/dist-pkg/runtime/stream.d.ts +29 -0
- package/dist-pkg/runtime/stream.js +106 -0
- package/dist-pkg/runtime/suspense.d.ts +6 -0
- package/dist-pkg/runtime/suspense.js +16 -0
- package/dist-pkg/runtime/typed-routes.d.ts +24 -0
- package/dist-pkg/runtime/typed-routes.js +77 -0
- package/dist-pkg/runtime/validated-form.d.ts +40 -0
- package/dist-pkg/runtime/validated-form.js +120 -0
- package/dist-pkg/security/cors.d.ts +10 -0
- package/dist-pkg/security/cors.js +56 -0
- package/dist-pkg/security/csrf.d.ts +9 -0
- package/dist-pkg/security/csrf.js +53 -0
- package/dist-pkg/security/headers.d.ts +11 -0
- package/dist-pkg/security/headers.js +31 -0
- package/dist-pkg/security/index.d.ts +5 -0
- package/dist-pkg/security/index.js +5 -0
- package/dist-pkg/security/rate-limit.d.ts +10 -0
- package/dist-pkg/security/rate-limit.js +49 -0
- package/dist-pkg/security/redis-rate-limit.d.ts +14 -0
- package/dist-pkg/security/redis-rate-limit.js +23 -0
- package/dist-pkg/server/action.d.ts +21 -0
- package/dist-pkg/server/action.js +64 -0
- package/dist-pkg/server/cache-utils.d.ts +2 -0
- package/dist-pkg/server/cache-utils.js +26 -0
- package/dist-pkg/server/cache.d.ts +33 -0
- package/dist-pkg/server/cache.js +236 -0
- package/dist-pkg/server/compress.d.ts +2 -0
- package/dist-pkg/server/compress.js +49 -0
- package/dist-pkg/server/endpoint-execution.d.ts +28 -0
- package/dist-pkg/server/endpoint-execution.js +37 -0
- package/dist-pkg/server/etag.d.ts +3 -0
- package/dist-pkg/server/etag.js +18 -0
- package/dist-pkg/server/guard.d.ts +16 -0
- package/dist-pkg/server/guard.js +45 -0
- package/dist-pkg/server/html-shell.d.ts +12 -0
- package/dist-pkg/server/html-shell.js +52 -0
- package/dist-pkg/server/index.d.ts +36 -0
- package/dist-pkg/server/index.js +170 -0
- package/dist-pkg/server/jobs.d.ts +41 -0
- package/dist-pkg/server/jobs.js +81 -0
- package/dist-pkg/server/manifest.d.ts +19 -0
- package/dist-pkg/server/manifest.js +36 -0
- package/dist-pkg/server/middleware.d.ts +39 -0
- package/dist-pkg/server/middleware.js +122 -0
- package/dist-pkg/server/mime.d.ts +1 -0
- package/{src/server/mime.ts → dist-pkg/server/mime.js} +6 -17
- package/dist-pkg/server/not-found.d.ts +6 -0
- package/dist-pkg/server/not-found.js +24 -0
- package/dist-pkg/server/page-render.d.ts +29 -0
- package/dist-pkg/server/page-render.js +67 -0
- package/dist-pkg/server/partial-navigation.d.ts +4 -0
- package/dist-pkg/server/partial-navigation.js +16 -0
- package/dist-pkg/server/pipe.d.ts +9 -0
- package/dist-pkg/server/pipe.js +32 -0
- package/dist-pkg/server/redis-cache-store.d.ts +10 -0
- package/dist-pkg/server/redis-cache-store.js +73 -0
- package/dist-pkg/server/redis-client.d.ts +37 -0
- package/dist-pkg/server/redis-client.js +37 -0
- package/dist-pkg/server/request-policy.d.ts +55 -0
- package/dist-pkg/server/request-policy.js +216 -0
- package/dist-pkg/server/request-preflight.d.ts +23 -0
- package/dist-pkg/server/request-preflight.js +45 -0
- package/dist-pkg/server/request-security-policy.d.ts +17 -0
- package/dist-pkg/server/request-security-policy.js +34 -0
- package/dist-pkg/server/request-surface.d.ts +8 -0
- package/dist-pkg/server/request-surface.js +19 -0
- package/dist-pkg/server/route-request.d.ts +31 -0
- package/dist-pkg/server/route-request.js +112 -0
- package/dist-pkg/server/route-response.d.ts +22 -0
- package/dist-pkg/server/route-response.js +58 -0
- package/dist-pkg/server/rpc-hash.d.ts +2 -0
- package/dist-pkg/server/rpc-hash.js +7 -0
- package/dist-pkg/server/rpc-protocol.d.ts +22 -0
- package/dist-pkg/server/rpc-protocol.js +28 -0
- package/dist-pkg/server/rpc-utils.d.ts +2 -0
- package/dist-pkg/server/rpc-utils.js +26 -0
- package/dist-pkg/server/rpc.d.ts +20 -0
- package/dist-pkg/server/rpc.js +147 -0
- package/dist-pkg/server/runtime-dispatch.d.ts +19 -0
- package/dist-pkg/server/runtime-dispatch.js +67 -0
- package/dist-pkg/server/server-execution.d.ts +22 -0
- package/dist-pkg/server/server-execution.js +53 -0
- package/dist-pkg/server/sqlite-cache-store.d.ts +13 -0
- package/dist-pkg/server/sqlite-cache-store.js +88 -0
- package/dist-pkg/server/sse.d.ts +9 -0
- package/dist-pkg/server/sse.js +34 -0
- package/dist-pkg/server/static-file.d.ts +9 -0
- package/dist-pkg/server/static-file.js +43 -0
- package/dist-pkg/server/ws.d.ts +18 -0
- package/dist-pkg/server/ws.js +40 -0
- package/dist-pkg/server-entry.d.ts +19 -0
- package/dist-pkg/server-entry.js +93 -0
- package/dist-pkg/testing/index.d.ts +98 -0
- package/dist-pkg/testing/index.js +254 -0
- package/dist-pkg/types/index.d.ts +4 -0
- package/dist-pkg/types/index.js +4 -0
- package/dist-pkg/types/safe-html.d.ts +7 -0
- package/dist-pkg/types/safe-html.js +19 -0
- package/dist-pkg/types/safe-sql.d.ts +8 -0
- package/dist-pkg/types/safe-sql.js +14 -0
- package/dist-pkg/types/safe-url.d.ts +7 -0
- package/dist-pkg/types/safe-url.js +20 -0
- package/dist-pkg/types/user-input.d.ts +9 -0
- package/dist-pkg/types/user-input.js +3 -0
- package/dist-pkg/unsafe/index.d.ts +12 -0
- package/dist-pkg/unsafe/index.js +6 -0
- package/package.json +102 -44
- package/bin/gorsee.js +0 -14
- package/src/auth/index.ts +0 -178
- package/src/auth/redis-session-store.ts +0 -46
- package/src/auth/sqlite-session-store.ts +0 -98
- package/src/auth/store-utils.ts +0 -21
- package/src/build/client.ts +0 -139
- package/src/build/css-modules.ts +0 -69
- package/src/build/devalue-parse.ts +0 -2
- package/src/build/manifest.ts +0 -34
- package/src/build/route-metadata.ts +0 -12
- package/src/build/rpc-transform.ts +0 -62
- package/src/build/server-strip.ts +0 -87
- package/src/build/ssg.ts +0 -70
- package/src/cli/bun-plugin.ts +0 -58
- package/src/cli/cmd-build.ts +0 -153
- package/src/cli/cmd-check.ts +0 -239
- package/src/cli/cmd-create.ts +0 -328
- package/src/cli/cmd-deploy.ts +0 -149
- package/src/cli/cmd-dev.ts +0 -13
- package/src/cli/cmd-docs.ts +0 -152
- package/src/cli/cmd-generate.ts +0 -155
- package/src/cli/cmd-migrate.ts +0 -53
- package/src/cli/cmd-routes.ts +0 -36
- package/src/cli/cmd-start.ts +0 -30
- package/src/cli/cmd-test.ts +0 -129
- package/src/cli/cmd-typegen.ts +0 -93
- package/src/cli/cmd-upgrade.ts +0 -143
- package/src/cli/context.ts +0 -12
- package/src/cli/framework-md.ts +0 -223
- package/src/cli/index.ts +0 -107
- package/src/client.ts +0 -26
- package/src/db/index.ts +0 -2
- package/src/db/migrate.ts +0 -89
- package/src/db/sqlite.ts +0 -40
- package/src/deploy/index.ts +0 -31
- package/src/deploy/vercel.ts +0 -94
- package/src/dev/hmr.ts +0 -31
- package/src/dev/partial-handler.ts +0 -52
- package/src/dev/request-handler.ts +0 -127
- package/src/dev/watcher.ts +0 -48
- package/src/dev.ts +0 -208
- package/src/env/index.ts +0 -74
- package/src/errors/formatter.ts +0 -63
- package/src/errors/index.ts +0 -2
- package/src/i18n/index.ts +0 -72
- package/src/index-client.ts +0 -4
- package/src/index.ts +0 -43
- package/src/jsx-runtime-client.ts +0 -13
- package/src/jsx-runtime.ts +0 -20
- package/src/jsx-types-html.ts +0 -242
- package/src/log/index.ts +0 -44
- package/src/plugins/drizzle.ts +0 -84
- package/src/plugins/index.ts +0 -86
- package/src/plugins/lucia.ts +0 -111
- package/src/plugins/prisma.ts +0 -85
- package/src/plugins/resend.ts +0 -78
- package/src/plugins/s3.ts +0 -102
- package/src/plugins/stripe.ts +0 -133
- package/src/plugins/tailwind.ts +0 -92
- package/src/prod.ts +0 -252
- package/src/reactive/computed.ts +0 -7
- package/src/reactive/effect.ts +0 -7
- package/src/reactive/index.ts +0 -7
- package/src/reactive/live.ts +0 -97
- package/src/reactive/optimistic.ts +0 -83
- package/src/reactive/resource.ts +0 -138
- package/src/reactive/signal.ts +0 -20
- package/src/reactive/store.ts +0 -36
- package/src/router/index.ts +0 -2
- package/src/router/matcher.ts +0 -53
- package/src/router/scanner.ts +0 -206
- package/src/runtime/client.ts +0 -28
- package/src/runtime/error-boundary.ts +0 -35
- package/src/runtime/form.ts +0 -49
- package/src/runtime/head.ts +0 -113
- package/src/runtime/html-escape.ts +0 -30
- package/src/runtime/hydration.ts +0 -95
- package/src/runtime/image.ts +0 -48
- package/src/runtime/index.ts +0 -12
- package/src/runtime/island-hydrator.ts +0 -84
- package/src/runtime/island.ts +0 -88
- package/src/runtime/jsx-runtime.ts +0 -167
- package/src/runtime/link.ts +0 -45
- package/src/runtime/project.ts +0 -73
- package/src/runtime/router.ts +0 -224
- package/src/runtime/server.ts +0 -102
- package/src/runtime/stream.ts +0 -182
- package/src/runtime/suspense.ts +0 -37
- package/src/runtime/typed-routes.ts +0 -26
- package/src/runtime/validated-form.ts +0 -106
- package/src/security/cors.ts +0 -80
- package/src/security/csrf.ts +0 -85
- package/src/security/headers.ts +0 -50
- package/src/security/index.ts +0 -4
- package/src/security/rate-limit.ts +0 -80
- package/src/server/action.ts +0 -48
- package/src/server/cache-utils.ts +0 -23
- package/src/server/cache.ts +0 -125
- package/src/server/compress.ts +0 -60
- package/src/server/etag.ts +0 -23
- package/src/server/guard.ts +0 -69
- package/src/server/html-shell.ts +0 -69
- package/src/server/index.ts +0 -57
- package/src/server/manifest.ts +0 -36
- package/src/server/middleware.ts +0 -159
- package/src/server/not-found.ts +0 -35
- package/src/server/page-render.ts +0 -123
- package/src/server/pipe.ts +0 -46
- package/src/server/redis-cache-store.ts +0 -87
- package/src/server/redis-client.ts +0 -71
- package/src/server/request-preflight.ts +0 -45
- package/src/server/route-request.ts +0 -72
- package/src/server/rpc-hash.ts +0 -17
- package/src/server/rpc-utils.ts +0 -27
- package/src/server/rpc.ts +0 -177
- package/src/server/sqlite-cache-store.ts +0 -109
- package/src/server/sse.ts +0 -96
- package/src/server/static-file.ts +0 -63
- package/src/server/ws.ts +0 -56
- package/src/server-entry.ts +0 -36
- package/src/testing/index.ts +0 -74
- package/src/types/index.ts +0 -4
- package/src/types/safe-html.ts +0 -32
- package/src/types/safe-sql.ts +0 -28
- package/src/types/safe-url.ts +0 -40
- package/src/types/user-input.ts +0 -12
- package/src/unsafe/index.ts +0 -18
package/src/plugins/resend.ts
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
// Resend email plugin -- uses native fetch, no SDK dependency
|
|
2
|
-
|
|
3
|
-
import type { GorseePlugin } from "./index.ts"
|
|
4
|
-
import { definePlugin } from "./index.ts"
|
|
5
|
-
|
|
6
|
-
export interface ResendPluginConfig {
|
|
7
|
-
apiKey: string
|
|
8
|
-
from?: string
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface SendEmailOptions {
|
|
12
|
-
to: string | string[]
|
|
13
|
-
subject: string
|
|
14
|
-
html?: string
|
|
15
|
-
text?: string
|
|
16
|
-
from?: string
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface Mailer {
|
|
20
|
-
send(options: SendEmailOptions): Promise<{ id: string }>
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const RESEND_API = "https://api.resend.com"
|
|
24
|
-
|
|
25
|
-
let mailerInstance: Mailer | null = null
|
|
26
|
-
|
|
27
|
-
/** Returns the mailer instance (available after setup) */
|
|
28
|
-
export function getMailer(): Mailer {
|
|
29
|
-
if (!mailerInstance) {
|
|
30
|
-
throw new Error("Resend not initialized. Did you register resendPlugin?")
|
|
31
|
-
}
|
|
32
|
-
return mailerInstance
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function createMailer(config: ResendPluginConfig): Mailer {
|
|
36
|
-
return {
|
|
37
|
-
async send(options: SendEmailOptions): Promise<{ id: string }> {
|
|
38
|
-
const body = {
|
|
39
|
-
from: options.from ?? config.from ?? "onboarding@resend.dev",
|
|
40
|
-
to: Array.isArray(options.to) ? options.to : [options.to],
|
|
41
|
-
subject: options.subject,
|
|
42
|
-
...(options.html ? { html: options.html } : {}),
|
|
43
|
-
...(options.text ? { text: options.text } : {}),
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const res = await fetch(`${RESEND_API}/emails`, {
|
|
47
|
-
method: "POST",
|
|
48
|
-
headers: {
|
|
49
|
-
Authorization: `Bearer ${config.apiKey}`,
|
|
50
|
-
"Content-Type": "application/json",
|
|
51
|
-
},
|
|
52
|
-
body: JSON.stringify(body),
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
if (!res.ok) {
|
|
56
|
-
const err = await res.text()
|
|
57
|
-
throw new Error(`Resend API error (${res.status}): ${err}`)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return (await res.json()) as { id: string }
|
|
61
|
-
},
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/** Creates a Resend email plugin */
|
|
66
|
-
export function resendPlugin(config: ResendPluginConfig): GorseePlugin {
|
|
67
|
-
return definePlugin({
|
|
68
|
-
name: "gorsee-resend",
|
|
69
|
-
|
|
70
|
-
async setup() {
|
|
71
|
-
mailerInstance = createMailer(config)
|
|
72
|
-
},
|
|
73
|
-
|
|
74
|
-
async teardown() {
|
|
75
|
-
mailerInstance = null
|
|
76
|
-
},
|
|
77
|
-
})
|
|
78
|
-
}
|
package/src/plugins/s3.ts
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
// S3-compatible object storage plugin -- uses native fetch, no AWS SDK
|
|
2
|
-
|
|
3
|
-
import type { GorseePlugin } from "./index.ts"
|
|
4
|
-
import { definePlugin } from "./index.ts"
|
|
5
|
-
|
|
6
|
-
export interface S3PluginConfig {
|
|
7
|
-
bucket: string
|
|
8
|
-
region?: string
|
|
9
|
-
endpoint?: string
|
|
10
|
-
accessKeyId?: string
|
|
11
|
-
secretAccessKey?: string
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface StorageClient {
|
|
15
|
-
upload(key: string, body: ArrayBuffer | ReadableStream | string, contentType?: string): Promise<string>
|
|
16
|
-
download(key: string): Promise<Response>
|
|
17
|
-
delete(key: string): Promise<void>
|
|
18
|
-
list(prefix?: string): Promise<string[]>
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
let storageClient: StorageClient | null = null
|
|
22
|
-
|
|
23
|
-
/** Returns the storage client (available after setup) */
|
|
24
|
-
export function getStorage(): StorageClient {
|
|
25
|
-
if (!storageClient) {
|
|
26
|
-
throw new Error("S3 not initialized. Did you register s3Plugin?")
|
|
27
|
-
}
|
|
28
|
-
return storageClient
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function buildEndpoint(config: S3PluginConfig): string {
|
|
32
|
-
if (config.endpoint) return config.endpoint.replace(/\/$/, "")
|
|
33
|
-
const region = config.region ?? "us-east-1"
|
|
34
|
-
return `https://${config.bucket}.s3.${region}.amazonaws.com`
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function createStorageClient(config: S3PluginConfig): StorageClient {
|
|
38
|
-
const baseUrl = buildEndpoint(config)
|
|
39
|
-
const headers: Record<string, string> = {}
|
|
40
|
-
|
|
41
|
-
// Basic auth headers (simplified -- production should use AWS Signature V4)
|
|
42
|
-
if (config.accessKeyId) {
|
|
43
|
-
headers["x-amz-access-key"] = config.accessKeyId
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return {
|
|
47
|
-
async upload(key: string, body: ArrayBuffer | ReadableStream | string, contentType?: string) {
|
|
48
|
-
const url = `${baseUrl}/${encodeURIComponent(key)}`
|
|
49
|
-
const ct = contentType ?? "application/octet-stream"
|
|
50
|
-
const fetchBody: BodyInit = body instanceof ArrayBuffer
|
|
51
|
-
? new Blob([body], { type: ct })
|
|
52
|
-
: body
|
|
53
|
-
const res = await fetch(url, {
|
|
54
|
-
method: "PUT",
|
|
55
|
-
headers: { ...headers, "Content-Type": ct },
|
|
56
|
-
body: fetchBody,
|
|
57
|
-
})
|
|
58
|
-
if (!res.ok) throw new Error(`S3 upload failed: ${res.status} ${res.statusText}`)
|
|
59
|
-
return url
|
|
60
|
-
},
|
|
61
|
-
|
|
62
|
-
async download(key) {
|
|
63
|
-
const url = `${baseUrl}/${encodeURIComponent(key)}`
|
|
64
|
-
const res = await fetch(url, { headers })
|
|
65
|
-
if (!res.ok) throw new Error(`S3 download failed: ${res.status} ${res.statusText}`)
|
|
66
|
-
return res
|
|
67
|
-
},
|
|
68
|
-
|
|
69
|
-
async delete(key) {
|
|
70
|
-
const url = `${baseUrl}/${encodeURIComponent(key)}`
|
|
71
|
-
const res = await fetch(url, { method: "DELETE", headers })
|
|
72
|
-
if (!res.ok) throw new Error(`S3 delete failed: ${res.status} ${res.statusText}`)
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
async list(prefix) {
|
|
76
|
-
const params = prefix ? `?list-type=2&prefix=${encodeURIComponent(prefix)}` : "?list-type=2"
|
|
77
|
-
const res = await fetch(`${baseUrl}${params}`, { headers })
|
|
78
|
-
if (!res.ok) throw new Error(`S3 list failed: ${res.status} ${res.statusText}`)
|
|
79
|
-
const xml = await res.text()
|
|
80
|
-
const keys: string[] = []
|
|
81
|
-
const regex = /<Key>([^<]+)<\/Key>/g
|
|
82
|
-
let match: RegExpExecArray | null
|
|
83
|
-
while ((match = regex.exec(xml)) !== null) keys.push(match[1]!)
|
|
84
|
-
return keys
|
|
85
|
-
},
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/** Creates an S3-compatible storage plugin */
|
|
90
|
-
export function s3Plugin(config: S3PluginConfig): GorseePlugin {
|
|
91
|
-
return definePlugin({
|
|
92
|
-
name: "gorsee-s3",
|
|
93
|
-
|
|
94
|
-
async setup() {
|
|
95
|
-
storageClient = createStorageClient(config)
|
|
96
|
-
},
|
|
97
|
-
|
|
98
|
-
async teardown() {
|
|
99
|
-
storageClient = null
|
|
100
|
-
},
|
|
101
|
-
})
|
|
102
|
-
}
|
package/src/plugins/stripe.ts
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
// Stripe payments plugin -- uses native fetch, no stripe SDK dependency
|
|
2
|
-
|
|
3
|
-
import type { MiddlewareFn, Context } from "../server/middleware.ts"
|
|
4
|
-
import type { GorseePlugin } from "./index.ts"
|
|
5
|
-
import { definePlugin } from "./index.ts"
|
|
6
|
-
|
|
7
|
-
export interface StripePluginConfig {
|
|
8
|
-
secretKey: string
|
|
9
|
-
webhookSecret?: string
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface CheckoutSessionOptions {
|
|
13
|
-
lineItems: Array<{ price: string; quantity: number }>
|
|
14
|
-
mode?: "payment" | "subscription"
|
|
15
|
-
successUrl: string
|
|
16
|
-
cancelUrl: string
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface StripeEvent {
|
|
20
|
-
id: string
|
|
21
|
-
type: string
|
|
22
|
-
data: { object: Record<string, unknown> }
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface StripeClient {
|
|
26
|
-
createCheckoutSession(options: CheckoutSessionOptions): Promise<{ url: string; id: string }>
|
|
27
|
-
verifyWebhook(request: Request): Promise<StripeEvent>
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const STRIPE_API = "https://api.stripe.com/v1"
|
|
31
|
-
|
|
32
|
-
let stripeClient: StripeClient | null = null
|
|
33
|
-
|
|
34
|
-
/** Returns the Stripe client (available after setup) */
|
|
35
|
-
export function getStripe(): StripeClient {
|
|
36
|
-
if (!stripeClient) {
|
|
37
|
-
throw new Error("Stripe not initialized. Did you register stripePlugin?")
|
|
38
|
-
}
|
|
39
|
-
return stripeClient
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function createStripeClient(config: StripePluginConfig): StripeClient {
|
|
43
|
-
const authHeader = `Basic ${btoa(config.secretKey + ":")}`
|
|
44
|
-
|
|
45
|
-
return {
|
|
46
|
-
async createCheckoutSession(options) {
|
|
47
|
-
const params = new URLSearchParams()
|
|
48
|
-
params.set("mode", options.mode ?? "payment")
|
|
49
|
-
params.set("success_url", options.successUrl)
|
|
50
|
-
params.set("cancel_url", options.cancelUrl)
|
|
51
|
-
options.lineItems.forEach((item, i) => {
|
|
52
|
-
params.set(`line_items[${i}][price]`, item.price)
|
|
53
|
-
params.set(`line_items[${i}][quantity]`, String(item.quantity))
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
const res = await fetch(`${STRIPE_API}/checkout/sessions`, {
|
|
57
|
-
method: "POST",
|
|
58
|
-
headers: { Authorization: authHeader, "Content-Type": "application/x-www-form-urlencoded" },
|
|
59
|
-
body: params.toString(),
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
if (!res.ok) {
|
|
63
|
-
const err = await res.text()
|
|
64
|
-
throw new Error(`Stripe API error (${res.status}): ${err}`)
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const data = (await res.json()) as { url: string; id: string }
|
|
68
|
-
return { url: data.url, id: data.id }
|
|
69
|
-
},
|
|
70
|
-
|
|
71
|
-
async verifyWebhook(request: Request) {
|
|
72
|
-
const body = await request.text()
|
|
73
|
-
const sig = request.headers.get("stripe-signature") ?? ""
|
|
74
|
-
|
|
75
|
-
if (!config.webhookSecret) {
|
|
76
|
-
throw new Error("Webhook secret not configured")
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Verify signature using HMAC-SHA256
|
|
80
|
-
const encoder = new TextEncoder()
|
|
81
|
-
const timestamp = sig.split(",").find((s) => s.startsWith("t="))?.slice(2) ?? ""
|
|
82
|
-
const v1Sig = sig.split(",").find((s) => s.startsWith("v1="))?.slice(3) ?? ""
|
|
83
|
-
const payload = `${timestamp}.${body}`
|
|
84
|
-
|
|
85
|
-
const key = await crypto.subtle.importKey(
|
|
86
|
-
"raw",
|
|
87
|
-
encoder.encode(config.webhookSecret),
|
|
88
|
-
{ name: "HMAC", hash: "SHA-256" },
|
|
89
|
-
false,
|
|
90
|
-
["sign"],
|
|
91
|
-
)
|
|
92
|
-
const signature = await crypto.subtle.sign("HMAC", key, encoder.encode(payload))
|
|
93
|
-
const expected = Array.from(new Uint8Array(signature))
|
|
94
|
-
.map((b) => b.toString(16).padStart(2, "0"))
|
|
95
|
-
.join("")
|
|
96
|
-
|
|
97
|
-
if (expected !== v1Sig) {
|
|
98
|
-
throw new Error("Invalid webhook signature")
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return JSON.parse(body) as StripeEvent
|
|
102
|
-
},
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/** Creates a Stripe payments plugin */
|
|
107
|
-
export function stripePlugin(config: StripePluginConfig): GorseePlugin {
|
|
108
|
-
return definePlugin({
|
|
109
|
-
name: "gorsee-stripe",
|
|
110
|
-
|
|
111
|
-
async setup(app) {
|
|
112
|
-
stripeClient = createStripeClient(config)
|
|
113
|
-
|
|
114
|
-
// Register webhook route if webhook secret is configured
|
|
115
|
-
if (config.webhookSecret) {
|
|
116
|
-
app.addRoute("/api/stripe/webhook", async (ctx) => {
|
|
117
|
-
try {
|
|
118
|
-
const event = await stripeClient!.verifyWebhook(ctx.request)
|
|
119
|
-
return new Response(JSON.stringify({ received: true, type: event.type }), {
|
|
120
|
-
headers: { "Content-Type": "application/json" },
|
|
121
|
-
})
|
|
122
|
-
} catch (err) {
|
|
123
|
-
return new Response(JSON.stringify({ error: String(err) }), { status: 400 })
|
|
124
|
-
}
|
|
125
|
-
})
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
|
|
129
|
-
async teardown() {
|
|
130
|
-
stripeClient = null
|
|
131
|
-
},
|
|
132
|
-
})
|
|
133
|
-
}
|
package/src/plugins/tailwind.ts
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
// Tailwind CSS integration plugin -- build pipeline hook
|
|
2
|
-
|
|
3
|
-
import type { GorseePlugin } from "./index.ts"
|
|
4
|
-
import { definePlugin } from "./index.ts"
|
|
5
|
-
|
|
6
|
-
export interface TailwindPluginConfig {
|
|
7
|
-
configPath?: string
|
|
8
|
-
inputCSS?: string
|
|
9
|
-
outputCSS?: string
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/** Generates tailwind.config.ts content */
|
|
13
|
-
export function generateTailwindConfig(options?: {
|
|
14
|
-
content?: string[]
|
|
15
|
-
theme?: Record<string, unknown>
|
|
16
|
-
}): string {
|
|
17
|
-
const content = options?.content ?? [
|
|
18
|
-
"./routes/**/*.{tsx,ts}",
|
|
19
|
-
"./components/**/*.{tsx,ts}",
|
|
20
|
-
]
|
|
21
|
-
const themeStr = options?.theme
|
|
22
|
-
? JSON.stringify(options.theme, null, 4)
|
|
23
|
-
: "{}"
|
|
24
|
-
|
|
25
|
-
return `/** @type {import('tailwindcss').Config} */
|
|
26
|
-
export default {
|
|
27
|
-
content: ${JSON.stringify(content, null, 4)},
|
|
28
|
-
theme: {
|
|
29
|
-
extend: ${themeStr},
|
|
30
|
-
},
|
|
31
|
-
plugins: [],
|
|
32
|
-
}
|
|
33
|
-
`
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/** Generates base CSS with @tailwind directives */
|
|
37
|
-
export function generateTailwindCSS(): string {
|
|
38
|
-
return `@tailwind base;
|
|
39
|
-
@tailwind components;
|
|
40
|
-
@tailwind utilities;
|
|
41
|
-
`
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/** Creates a Tailwind CSS integration plugin */
|
|
45
|
-
export function tailwindPlugin(config: TailwindPluginConfig = {}): GorseePlugin {
|
|
46
|
-
const inputCSS = config.inputCSS ?? "./styles/globals.css"
|
|
47
|
-
const outputCSS = config.outputCSS ?? "./.gorsee/client/tailwind.css"
|
|
48
|
-
|
|
49
|
-
return definePlugin({
|
|
50
|
-
name: "gorsee-tailwind",
|
|
51
|
-
|
|
52
|
-
async setup() {
|
|
53
|
-
// Generate tailwind.config.ts if it doesn't exist
|
|
54
|
-
const configPath = config.configPath ?? "./tailwind.config.ts"
|
|
55
|
-
const file = Bun.file(configPath)
|
|
56
|
-
if (!(await file.exists())) {
|
|
57
|
-
await Bun.write(configPath, generateTailwindConfig())
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
|
|
61
|
-
buildPlugins() {
|
|
62
|
-
return [
|
|
63
|
-
{
|
|
64
|
-
name: "gorsee-tailwind-transform",
|
|
65
|
-
setup(build) {
|
|
66
|
-
build.onLoad({ filter: /\.css$/ }, async (args) => {
|
|
67
|
-
const source = await Bun.file(args.path).text()
|
|
68
|
-
|
|
69
|
-
// If file contains @tailwind directives, process it
|
|
70
|
-
if (source.includes("@tailwind")) {
|
|
71
|
-
try {
|
|
72
|
-
const proc = Bun.spawn(
|
|
73
|
-
["bunx", "tailwindcss", "-i", args.path, "-o", outputCSS, "--minify"],
|
|
74
|
-
{ stdin: "inherit", stdout: "pipe", stderr: "pipe" },
|
|
75
|
-
)
|
|
76
|
-
await proc.exited
|
|
77
|
-
const processed = await Bun.file(outputCSS).text()
|
|
78
|
-
return { contents: processed, loader: "css" }
|
|
79
|
-
} catch {
|
|
80
|
-
// Fallback: return raw CSS if tailwindcss CLI not available
|
|
81
|
-
return { contents: source, loader: "css" }
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return undefined
|
|
86
|
-
})
|
|
87
|
-
},
|
|
88
|
-
},
|
|
89
|
-
]
|
|
90
|
-
},
|
|
91
|
-
})
|
|
92
|
-
}
|
package/src/prod.ts
DELETED
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
// Gorsee.js Production Server
|
|
2
|
-
// Serves pre-built client bundles + SSR pages from dist/
|
|
3
|
-
|
|
4
|
-
import { createRouter, matchRoute, buildStaticMap } from "./router/index.ts"
|
|
5
|
-
import { securityHeaders } from "./security/headers.ts"
|
|
6
|
-
import { createRateLimiter } from "./security/rate-limit.ts"
|
|
7
|
-
import { renderToStream, streamJsx } from "./runtime/stream.ts"
|
|
8
|
-
import { resetServerHead, getServerHead } from "./runtime/head.ts"
|
|
9
|
-
import type { MiddlewareFn } from "./server/middleware.ts"
|
|
10
|
-
import { compress } from "./server/compress.ts"
|
|
11
|
-
import { log, setLogLevel } from "./log/index.ts"
|
|
12
|
-
import { loadEnv } from "./env/index.ts"
|
|
13
|
-
import { generateNonce, wrapHTML } from "./server/html-shell.ts"
|
|
14
|
-
import { renderNotFoundPage } from "./server/not-found.ts"
|
|
15
|
-
import { createRateLimitResponse, handleRPCWithHeaders } from "./server/request-preflight.ts"
|
|
16
|
-
import {
|
|
17
|
-
buildPartialResponsePayload,
|
|
18
|
-
createClientScriptPath,
|
|
19
|
-
renderPageDocument,
|
|
20
|
-
} from "./server/page-render.ts"
|
|
21
|
-
import { handleRouteRequest } from "./server/route-request.ts"
|
|
22
|
-
import { servePrefixedStaticFile, serveStaticFile } from "./server/static-file.ts"
|
|
23
|
-
import {
|
|
24
|
-
getClientBundleForRoute,
|
|
25
|
-
getPrerenderedHtmlPath,
|
|
26
|
-
isPrerenderedRoute,
|
|
27
|
-
loadBuildManifest,
|
|
28
|
-
} from "./server/manifest.ts"
|
|
29
|
-
import { join } from "node:path"
|
|
30
|
-
import { createProjectContext, resolveRuntimeEnv, type RuntimeOptions } from "./runtime/project.ts"
|
|
31
|
-
// Route type used implicitly via createRouter return
|
|
32
|
-
|
|
33
|
-
interface StartProductionServerOptions extends RuntimeOptions {
|
|
34
|
-
port?: number
|
|
35
|
-
registerSignalHandlers?: boolean
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
interface ProductionRuntimeState {
|
|
39
|
-
cwd: string
|
|
40
|
-
routesDir: string
|
|
41
|
-
publicDir: string
|
|
42
|
-
distDir: string
|
|
43
|
-
clientDir: string
|
|
44
|
-
manifest: Awaited<ReturnType<typeof loadBuildManifest>>
|
|
45
|
-
routes: Awaited<ReturnType<typeof createRouter>>
|
|
46
|
-
staticMap: ReturnType<typeof buildStaticMap>
|
|
47
|
-
rateLimiter: ReturnType<typeof createRateLimiter>
|
|
48
|
-
compressMiddleware: ReturnType<typeof compress>
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
async function tryServeStatic(
|
|
52
|
-
pathname: string,
|
|
53
|
-
request: Request,
|
|
54
|
-
publicDir: string,
|
|
55
|
-
clientDir: string,
|
|
56
|
-
secHeaders: Record<string, string>,
|
|
57
|
-
): Promise<Response | null> {
|
|
58
|
-
if (pathname === "/") return null
|
|
59
|
-
// Client assets from dist/
|
|
60
|
-
const bundleResponse = await servePrefixedStaticFile(pathname, "/_gorsee/", clientDir, {
|
|
61
|
-
contentType: "application/javascript",
|
|
62
|
-
cacheControl: "public, max-age=31536000, immutable",
|
|
63
|
-
extraHeaders: secHeaders,
|
|
64
|
-
})
|
|
65
|
-
if (bundleResponse) return bundleResponse
|
|
66
|
-
|
|
67
|
-
// Public files
|
|
68
|
-
return serveStaticFile(publicDir, pathname.slice(1), {
|
|
69
|
-
request,
|
|
70
|
-
etag: true,
|
|
71
|
-
cacheControl: "public, max-age=3600",
|
|
72
|
-
extraHeaders: secHeaders,
|
|
73
|
-
})
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
async function tryServePrerenderedPage(
|
|
77
|
-
pathname: string,
|
|
78
|
-
request: Request,
|
|
79
|
-
manifest: Awaited<ReturnType<typeof loadBuildManifest>>,
|
|
80
|
-
distDir: string,
|
|
81
|
-
secHeaders: Record<string, string>,
|
|
82
|
-
): Promise<Response | null> {
|
|
83
|
-
if (request.method !== "GET") return null
|
|
84
|
-
if (!isPrerenderedRoute(manifest, pathname)) return null
|
|
85
|
-
|
|
86
|
-
return serveStaticFile(join(distDir, "static"), getPrerenderedHtmlPath(pathname), {
|
|
87
|
-
request,
|
|
88
|
-
etag: true,
|
|
89
|
-
cacheControl: "public, max-age=3600",
|
|
90
|
-
contentType: "text/html; charset=utf-8",
|
|
91
|
-
extraHeaders: secHeaders,
|
|
92
|
-
})
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export async function startProductionServer(options: StartProductionServerOptions = {}) {
|
|
96
|
-
const runtime = createProjectContext(options)
|
|
97
|
-
const registerSignalHandlers = options.registerSignalHandlers ?? true
|
|
98
|
-
|
|
99
|
-
await loadEnv(runtime.cwd)
|
|
100
|
-
const envConfig = resolveRuntimeEnv(process.env)
|
|
101
|
-
const port = options.port ?? envConfig.port
|
|
102
|
-
const fetchHandler = await createProductionFetchHandler({ cwd: runtime.cwd, env: process.env })
|
|
103
|
-
log.info("production server starting", { cwd: runtime.cwd })
|
|
104
|
-
|
|
105
|
-
const server = Bun.serve({
|
|
106
|
-
port,
|
|
107
|
-
fetch: fetchHandler,
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
log.info("production server started", { url: `http://localhost:${server.port}` })
|
|
111
|
-
|
|
112
|
-
// Graceful shutdown
|
|
113
|
-
if (registerSignalHandlers) {
|
|
114
|
-
const shutdown = () => {
|
|
115
|
-
log.info("shutting down...")
|
|
116
|
-
server.stop(true) // close existing connections gracefully
|
|
117
|
-
process.exit(0)
|
|
118
|
-
}
|
|
119
|
-
process.on("SIGTERM", shutdown)
|
|
120
|
-
process.on("SIGINT", shutdown)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return server
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export async function createProductionFetchHandler(
|
|
127
|
-
options: Pick<StartProductionServerOptions, "cwd" | "env"> = {},
|
|
128
|
-
): Promise<(request: Request, server?: { requestIP(request: Request): { address: string } | null }) => Promise<Response>> {
|
|
129
|
-
const state = await loadProductionRuntimeState(options)
|
|
130
|
-
|
|
131
|
-
return async (request, server) => {
|
|
132
|
-
const url = new URL(request.url)
|
|
133
|
-
const pathname = url.pathname
|
|
134
|
-
|
|
135
|
-
const ip = server?.requestIP(request)?.address ?? "unknown"
|
|
136
|
-
const rateLimitResponse = createRateLimitResponse(state.rateLimiter, ip)
|
|
137
|
-
if (rateLimitResponse) return rateLimitResponse
|
|
138
|
-
|
|
139
|
-
const nonce = generateNonce()
|
|
140
|
-
const secHeaders = securityHeaders({}, nonce)
|
|
141
|
-
|
|
142
|
-
const rpcResponse = await handleRPCWithHeaders(request, secHeaders)
|
|
143
|
-
if (rpcResponse) return rpcResponse
|
|
144
|
-
|
|
145
|
-
const staticResponse = await tryServeStatic(pathname, request, state.publicDir, state.clientDir, secHeaders)
|
|
146
|
-
if (staticResponse) return staticResponse
|
|
147
|
-
|
|
148
|
-
const prerenderedResponse = await tryServePrerenderedPage(pathname, request, state.manifest, state.distDir, secHeaders)
|
|
149
|
-
if (prerenderedResponse) return prerenderedResponse
|
|
150
|
-
|
|
151
|
-
const match = matchRoute(state.routes, pathname, state.staticMap)
|
|
152
|
-
if (!match) {
|
|
153
|
-
return new Response(await renderNotFoundPage(state.routesDir, nonce), {
|
|
154
|
-
status: 404,
|
|
155
|
-
headers: { "Content-Type": "text/html", ...secHeaders },
|
|
156
|
-
})
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
try {
|
|
160
|
-
return await handleRouteRequest({
|
|
161
|
-
match,
|
|
162
|
-
request,
|
|
163
|
-
extraMiddlewares: [state.compressMiddleware satisfies MiddlewareFn],
|
|
164
|
-
onPartialRequest: async ({ ctx, resolved }) => {
|
|
165
|
-
const { pageComponent, loaderData, cssFiles } = resolved
|
|
166
|
-
const rendered = renderPageDocument(pageComponent, ctx, match.params, loaderData)
|
|
167
|
-
const clientScript = createClientScriptPath(getClientBundleForRoute(state.manifest, match.route.path))
|
|
168
|
-
const partialPayload = buildPartialResponsePayload(
|
|
169
|
-
rendered,
|
|
170
|
-
loaderData,
|
|
171
|
-
match.params,
|
|
172
|
-
cssFiles,
|
|
173
|
-
clientScript,
|
|
174
|
-
)
|
|
175
|
-
return new Response(JSON.stringify(partialPayload), {
|
|
176
|
-
headers: { "Content-Type": "application/json", ...secHeaders },
|
|
177
|
-
})
|
|
178
|
-
},
|
|
179
|
-
onPageRequest: async ({ ctx, resolved }) => {
|
|
180
|
-
const { pageComponent, loaderData, cssFiles, renderMode } = resolved
|
|
181
|
-
|
|
182
|
-
const pageProps = { params: match.params, ctx, data: loaderData }
|
|
183
|
-
const clientScript = createClientScriptPath(getClientBundleForRoute(state.manifest, match.route.path))
|
|
184
|
-
|
|
185
|
-
if (renderMode === "stream") {
|
|
186
|
-
resetServerHead()
|
|
187
|
-
const vnode = streamJsx(pageComponent as any, pageProps)
|
|
188
|
-
const stream = renderToStream(vnode, {
|
|
189
|
-
shell: (body: string) => wrapHTML(body, nonce, {
|
|
190
|
-
clientScript,
|
|
191
|
-
loaderData,
|
|
192
|
-
params: match.params,
|
|
193
|
-
cssFiles,
|
|
194
|
-
headElements: getServerHead(),
|
|
195
|
-
}),
|
|
196
|
-
})
|
|
197
|
-
return new Response(stream, {
|
|
198
|
-
headers: { "Content-Type": "text/html", ...secHeaders },
|
|
199
|
-
})
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
const rendered = renderPageDocument(pageComponent, ctx, match.params, loaderData)
|
|
203
|
-
const html = wrapHTML(rendered.html, nonce, {
|
|
204
|
-
clientScript,
|
|
205
|
-
loaderData,
|
|
206
|
-
params: match.params,
|
|
207
|
-
cssFiles,
|
|
208
|
-
headElements: rendered.headElements,
|
|
209
|
-
})
|
|
210
|
-
return new Response(html, {
|
|
211
|
-
headers: { "Content-Type": "text/html", ...secHeaders },
|
|
212
|
-
})
|
|
213
|
-
},
|
|
214
|
-
})
|
|
215
|
-
} catch (err) {
|
|
216
|
-
const message = err instanceof Error ? err.message : String(err)
|
|
217
|
-
log.error("request error", { path: pathname, error: message })
|
|
218
|
-
return new Response(wrapHTML("<h1>500</h1><p>Internal Server Error</p>", nonce), {
|
|
219
|
-
status: 500,
|
|
220
|
-
headers: { "Content-Type": "text/html", ...secHeaders },
|
|
221
|
-
})
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
async function loadProductionRuntimeState(options: RuntimeOptions = {}): Promise<ProductionRuntimeState> {
|
|
227
|
-
const runtime = createProjectContext(options)
|
|
228
|
-
|
|
229
|
-
await loadEnv(runtime.cwd)
|
|
230
|
-
const envConfig = resolveRuntimeEnv(process.env)
|
|
231
|
-
setLogLevel(envConfig.logLevel)
|
|
232
|
-
|
|
233
|
-
const manifest = await loadBuildManifest(runtime.paths.distDir)
|
|
234
|
-
log.info("loaded manifest", { routes: Object.keys(manifest.routes).length, built: manifest.buildTime })
|
|
235
|
-
|
|
236
|
-
const routes = await createRouter(runtime.paths.routesDir)
|
|
237
|
-
const staticMap = buildStaticMap(routes)
|
|
238
|
-
const rateLimiter = createRateLimiter(envConfig.rateLimit, envConfig.rateWindow)
|
|
239
|
-
|
|
240
|
-
return {
|
|
241
|
-
cwd: runtime.cwd,
|
|
242
|
-
routesDir: runtime.paths.routesDir,
|
|
243
|
-
publicDir: runtime.paths.publicDir,
|
|
244
|
-
distDir: runtime.paths.distDir,
|
|
245
|
-
clientDir: runtime.paths.clientDir,
|
|
246
|
-
manifest,
|
|
247
|
-
routes,
|
|
248
|
-
staticMap,
|
|
249
|
-
rateLimiter,
|
|
250
|
-
compressMiddleware: compress(),
|
|
251
|
-
}
|
|
252
|
-
}
|
package/src/reactive/computed.ts
DELETED
package/src/reactive/effect.ts
DELETED
package/src/reactive/index.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { createSignal } from "./signal.ts"
|
|
2
|
-
export { createComputed } from "./computed.ts"
|
|
3
|
-
export { createEffect } from "./effect.ts"
|
|
4
|
-
export { createResource, invalidateResource, invalidateAll } from "./resource.ts"
|
|
5
|
-
export { createStore } from "./store.ts"
|
|
6
|
-
export { createLive, type LiveOptions, type LiveSignal } from "./live.ts"
|
|
7
|
-
export { createMutation, type Mutation, type MutationState, type MutationOptions } from "./optimistic.ts"
|