gorsee 0.2.4 → 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 +101 -45
- package/bin/gorsee.js +0 -2
- 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
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
// Page route request handler — SSR + streaming + layouts + loaders
|
|
2
|
-
|
|
3
|
-
import { createContext } from "../server/middleware.ts"
|
|
4
|
-
import { renderToString, ssrJsx } from "../runtime/server.ts"
|
|
5
|
-
import { renderToStream, streamJsx } from "../runtime/stream.ts"
|
|
6
|
-
import { resetServerHead, getServerHead } from "../runtime/head.ts"
|
|
7
|
-
import { handleAction } from "../server/action.ts"
|
|
8
|
-
import { log } from "../log/index.ts"
|
|
9
|
-
import { createClientScriptPath, renderPageDocument, resolvePageRoute } from "../server/page-render.ts"
|
|
10
|
-
import { handleRouteRequest } from "../server/route-request.ts"
|
|
11
|
-
import type { MatchResult } from "../router/matcher.ts"
|
|
12
|
-
import type { BuildResult } from "../build/client.ts"
|
|
13
|
-
|
|
14
|
-
interface RenderOptions {
|
|
15
|
-
match: MatchResult
|
|
16
|
-
request: Request
|
|
17
|
-
nonce: string
|
|
18
|
-
start: number
|
|
19
|
-
clientBuild: BuildResult
|
|
20
|
-
secHeaders: Record<string, string>
|
|
21
|
-
wrapHTML: (body: string, nonce: string, opts?: { title?: string; clientScript?: string; loaderData?: unknown; params?: Record<string, string>; cssFiles?: string[]; headElements?: string[] }) => string
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
async function renderPageRoute(mod: Record<string, unknown>, opts: RenderOptions): Promise<Response> {
|
|
25
|
-
const { match, request, nonce, start, clientBuild, secHeaders, wrapHTML } = opts
|
|
26
|
-
const ctx = createContext(request, match.params)
|
|
27
|
-
|
|
28
|
-
// API route
|
|
29
|
-
if (typeof mod.GET === "function" && request.method === "GET") return (mod.GET as Function)(ctx)
|
|
30
|
-
if (typeof mod.POST === "function" && request.method === "POST") return (mod.POST as Function)(ctx)
|
|
31
|
-
|
|
32
|
-
// Server Action (POST with action export)
|
|
33
|
-
if (request.method === "POST" && typeof mod.action === "function") {
|
|
34
|
-
const result = await handleAction(mod.action as (ctx: import("../server/middleware.ts").Context) => Promise<unknown>, ctx)
|
|
35
|
-
if (request.headers.get("Accept")?.includes("application/json")) {
|
|
36
|
-
return new Response(JSON.stringify(result), {
|
|
37
|
-
status: result.status,
|
|
38
|
-
headers: { "Content-Type": "application/json" },
|
|
39
|
-
})
|
|
40
|
-
}
|
|
41
|
-
// Progressive enhancement: redirect back to the page after action
|
|
42
|
-
return new Response(null, {
|
|
43
|
-
status: 303,
|
|
44
|
-
headers: { Location: request.url },
|
|
45
|
-
})
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const component = mod.default as Function | undefined
|
|
49
|
-
if (typeof component !== "function") {
|
|
50
|
-
return new Response("Route has no default export", { status: 500 })
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const resolved = await resolvePageRoute(mod, match, ctx)
|
|
54
|
-
if (!resolved) {
|
|
55
|
-
return new Response("Route has no default export", { status: 500 })
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const { pageComponent, loaderData, cssFiles, renderMode } = resolved
|
|
59
|
-
const pageProps = { params: match.params, ctx, data: loaderData }
|
|
60
|
-
const clientScript = createClientScriptPath(clientBuild.entryMap.get(match.route.path))
|
|
61
|
-
const htmlOpts = { clientScript, loaderData, params: match.params, cssFiles }
|
|
62
|
-
|
|
63
|
-
if (renderMode === "stream") {
|
|
64
|
-
resetServerHead()
|
|
65
|
-
const vnode = streamJsx(pageComponent as any, pageProps)
|
|
66
|
-
const stream = renderToStream(vnode, {
|
|
67
|
-
shell: (body: string) => wrapHTML(body, nonce, {
|
|
68
|
-
...htmlOpts,
|
|
69
|
-
headElements: getServerHead(),
|
|
70
|
-
}),
|
|
71
|
-
})
|
|
72
|
-
const elapsed = (performance.now() - start).toFixed(1)
|
|
73
|
-
log.info("request", { method: request.method, path: match.route.path, status: 200, ms: elapsed, mode: "stream" })
|
|
74
|
-
return new Response(stream, {
|
|
75
|
-
headers: { "Content-Type": "text/html", ...secHeaders },
|
|
76
|
-
})
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Default: async SSR
|
|
80
|
-
const rendered = renderPageDocument(pageComponent, ctx, match.params, loaderData)
|
|
81
|
-
const html = wrapHTML(rendered.html, nonce, {
|
|
82
|
-
...htmlOpts,
|
|
83
|
-
headElements: rendered.headElements,
|
|
84
|
-
})
|
|
85
|
-
const elapsed = (performance.now() - start).toFixed(1)
|
|
86
|
-
log.info("request", { method: request.method, path: match.route.path, status: 200, ms: elapsed })
|
|
87
|
-
|
|
88
|
-
return new Response(html, {
|
|
89
|
-
headers: { "Content-Type": "text/html", ...secHeaders },
|
|
90
|
-
})
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export async function handlePageRequest(opts: RenderOptions): Promise<Response> {
|
|
94
|
-
const { match, request } = opts
|
|
95
|
-
return handleRouteRequest({
|
|
96
|
-
match,
|
|
97
|
-
request,
|
|
98
|
-
onPartialRequest: async () => {
|
|
99
|
-
const { handlePartialNavigation } = await import("./partial-handler.ts")
|
|
100
|
-
return handlePartialNavigation({ match, request, clientBuild: opts.clientBuild })
|
|
101
|
-
},
|
|
102
|
-
onPageRequest: async ({ mod }) => renderPageRoute(mod, opts),
|
|
103
|
-
onRouteError: async (err) => {
|
|
104
|
-
if (match.route.errorPath) {
|
|
105
|
-
const errObj = err instanceof Error ? err : new Error(String(err))
|
|
106
|
-
return renderErrorBoundary(match.route.errorPath, errObj, opts)
|
|
107
|
-
}
|
|
108
|
-
throw err
|
|
109
|
-
},
|
|
110
|
-
})
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
async function renderErrorBoundary(errorPath: string, error: Error, opts: RenderOptions): Promise<Response> {
|
|
114
|
-
const { nonce, secHeaders, wrapHTML, match } = opts
|
|
115
|
-
const errorMod = await import(errorPath)
|
|
116
|
-
const ErrorComponent = errorMod.default
|
|
117
|
-
if (typeof ErrorComponent !== "function") throw error
|
|
118
|
-
|
|
119
|
-
const vnode = ssrJsx(ErrorComponent as any, { error, params: match.params })
|
|
120
|
-
const body = renderToString(vnode)
|
|
121
|
-
const html = wrapHTML(body, nonce, { title: "Error" })
|
|
122
|
-
|
|
123
|
-
return new Response(html, {
|
|
124
|
-
status: 500,
|
|
125
|
-
headers: { "Content-Type": "text/html", ...secHeaders },
|
|
126
|
-
})
|
|
127
|
-
}
|
package/src/dev/watcher.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
// File watcher for dev mode -- triggers rebuild on changes
|
|
2
|
-
|
|
3
|
-
import { watch, type FSWatcher } from "node:fs"
|
|
4
|
-
import { join } from "node:path"
|
|
5
|
-
import { log } from "../log/index.ts"
|
|
6
|
-
|
|
7
|
-
export interface WatcherOptions {
|
|
8
|
-
dirs: string[]
|
|
9
|
-
onChange: (path: string) => void
|
|
10
|
-
debounceMs?: number
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function startWatcher(options: WatcherOptions): () => void {
|
|
14
|
-
const { dirs, onChange, debounceMs = 100 } = options
|
|
15
|
-
const watchers: FSWatcher[] = []
|
|
16
|
-
let timer: ReturnType<typeof setTimeout> | null = null
|
|
17
|
-
let pendingPath = ""
|
|
18
|
-
|
|
19
|
-
function handle(filename: string | null, dir: string) {
|
|
20
|
-
if (!filename) return
|
|
21
|
-
if (!filename.match(/\.(tsx?|jsx?|css)$/)) return
|
|
22
|
-
|
|
23
|
-
pendingPath = join(dir, filename)
|
|
24
|
-
|
|
25
|
-
if (timer) clearTimeout(timer)
|
|
26
|
-
timer = setTimeout(() => {
|
|
27
|
-
log.info("file changed", { file: pendingPath })
|
|
28
|
-
onChange(pendingPath)
|
|
29
|
-
timer = null
|
|
30
|
-
}, debounceMs)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
for (const dir of dirs) {
|
|
34
|
-
try {
|
|
35
|
-
const w = watch(dir, { recursive: true }, (_event, filename) => {
|
|
36
|
-
handle(filename as string | null, dir)
|
|
37
|
-
})
|
|
38
|
-
watchers.push(w)
|
|
39
|
-
} catch {
|
|
40
|
-
// directory may not exist
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return () => {
|
|
45
|
-
for (const w of watchers) w.close()
|
|
46
|
-
if (timer) clearTimeout(timer)
|
|
47
|
-
}
|
|
48
|
-
}
|
package/src/dev.ts
DELETED
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
// Gorsee.js Dev Server
|
|
2
|
-
// Orchestrator: routing + security + HMR + static serving
|
|
3
|
-
|
|
4
|
-
import { createRouter, matchRoute, buildStaticMap } from "./router/index.ts"
|
|
5
|
-
import { __resetRPCState } from "./server/rpc.ts"
|
|
6
|
-
import { securityHeaders } from "./security/headers.ts"
|
|
7
|
-
import { createRateLimiter } from "./security/rate-limit.ts"
|
|
8
|
-
import { EVENT_REPLAY_SCRIPT } from "./runtime/event-replay.ts"
|
|
9
|
-
import { log, setLogLevel } from "./log/index.ts"
|
|
10
|
-
import { buildClientBundles, type BuildResult } from "./build/client.ts"
|
|
11
|
-
import { HMR_CLIENT_SCRIPT, addHMRClient, removeHMRClient, notifyReload } from "./dev/hmr.ts"
|
|
12
|
-
import { startWatcher } from "./dev/watcher.ts"
|
|
13
|
-
import { renderErrorOverlay } from "./dev/error-overlay.ts"
|
|
14
|
-
import { handlePageRequest } from "./dev/request-handler.ts"
|
|
15
|
-
import { handlePartialNavigation } from "./dev/partial-handler.ts"
|
|
16
|
-
import { loadEnv } from "./env/index.ts"
|
|
17
|
-
import { generateNonce, wrapHTML } from "./server/html-shell.ts"
|
|
18
|
-
import { renderNotFoundPage } from "./server/not-found.ts"
|
|
19
|
-
import { createRateLimitResponse, handleRPCWithHeaders } from "./server/request-preflight.ts"
|
|
20
|
-
import { servePrefixedStaticFile, serveStaticFile } from "./server/static-file.ts"
|
|
21
|
-
import { join } from "node:path"
|
|
22
|
-
import type { Route } from "./router/index.ts"
|
|
23
|
-
import { createProjectContext, resolveRuntimeEnv, type RuntimeOptions } from "./runtime/project.ts"
|
|
24
|
-
|
|
25
|
-
interface StartDevServerOptions extends RuntimeOptions {
|
|
26
|
-
port?: number
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
interface DevRuntimeState {
|
|
30
|
-
cwd: string
|
|
31
|
-
routesDir: string
|
|
32
|
-
publicDir: string
|
|
33
|
-
clientDir: string
|
|
34
|
-
rateLimiter: ReturnType<typeof createRateLimiter>
|
|
35
|
-
routes: Route[]
|
|
36
|
-
staticMap: Map<string, Route>
|
|
37
|
-
clientBuild: BuildResult
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// --- Static file serving ---
|
|
41
|
-
|
|
42
|
-
async function tryServeStatic(publicDir: string, pathname: string): Promise<Response | null> {
|
|
43
|
-
if (pathname === "/") return null
|
|
44
|
-
return serveStaticFile(publicDir, pathname.slice(1))
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
async function tryServeClientBundle(clientDir: string, pathname: string): Promise<Response | null> {
|
|
48
|
-
return servePrefixedStaticFile(pathname, "/_gorsee/", clientDir, {
|
|
49
|
-
contentType: "application/javascript",
|
|
50
|
-
})
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// --- 404 page ---
|
|
54
|
-
|
|
55
|
-
async function render404Page(routesDir: string, nonce: string): Promise<string> {
|
|
56
|
-
return renderNotFoundPage(routesDir, nonce, {
|
|
57
|
-
bodyPrefix: [EVENT_REPLAY_SCRIPT.replace("<script", `<script nonce="${nonce}"`)],
|
|
58
|
-
bodySuffix: [HMR_CLIENT_SCRIPT.replace("<script", `<script nonce="${nonce}"`)],
|
|
59
|
-
})
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// --- Build & watch ---
|
|
63
|
-
|
|
64
|
-
async function createDevRuntimeState(cwd: string): Promise<DevRuntimeState> {
|
|
65
|
-
const { paths } = createProjectContext({ cwd })
|
|
66
|
-
return {
|
|
67
|
-
cwd,
|
|
68
|
-
routesDir: paths.routesDir,
|
|
69
|
-
publicDir: paths.publicDir,
|
|
70
|
-
clientDir: join(paths.gorseeDir, "client"),
|
|
71
|
-
rateLimiter: createRateLimiter(200, "1m"),
|
|
72
|
-
routes: [],
|
|
73
|
-
staticMap: new Map(),
|
|
74
|
-
clientBuild: { entryMap: new Map() },
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
async function rebuildClient(state: DevRuntimeState, buildState: { inProgress: boolean, queued: boolean }) {
|
|
79
|
-
if (buildState.inProgress) {
|
|
80
|
-
buildState.queued = true
|
|
81
|
-
return
|
|
82
|
-
}
|
|
83
|
-
buildState.inProgress = true
|
|
84
|
-
try {
|
|
85
|
-
__resetRPCState()
|
|
86
|
-
state.routes = await createRouter(state.routesDir)
|
|
87
|
-
state.staticMap = buildStaticMap(state.routes)
|
|
88
|
-
state.clientBuild = await buildClientBundles(state.routes, state.cwd)
|
|
89
|
-
log.info("client build complete", { routes: state.clientBuild.entryMap.size })
|
|
90
|
-
} catch (err) {
|
|
91
|
-
log.error("client build failed", { error: String(err) })
|
|
92
|
-
} finally {
|
|
93
|
-
buildState.inProgress = false
|
|
94
|
-
if (buildState.queued) {
|
|
95
|
-
buildState.queued = false
|
|
96
|
-
await rebuildClient(state, buildState)
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// --- Server ---
|
|
102
|
-
|
|
103
|
-
export async function startDevServer(options: StartDevServerOptions = {}) {
|
|
104
|
-
const runtime = createProjectContext(options)
|
|
105
|
-
const cwd = runtime.cwd
|
|
106
|
-
const state = await createDevRuntimeState(cwd)
|
|
107
|
-
const buildState = { inProgress: false, queued: false }
|
|
108
|
-
|
|
109
|
-
await loadEnv(cwd)
|
|
110
|
-
const envConfig = resolveRuntimeEnv(process.env)
|
|
111
|
-
const port = options.port ?? envConfig.port
|
|
112
|
-
setLogLevel(envConfig.logLevel)
|
|
113
|
-
log.info("scanning routes", { dir: state.routesDir })
|
|
114
|
-
|
|
115
|
-
state.routes = await createRouter(state.routesDir)
|
|
116
|
-
state.staticMap = buildStaticMap(state.routes)
|
|
117
|
-
for (const route of state.routes) {
|
|
118
|
-
log.info("route registered", { path: route.path, file: route.filePath })
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
await rebuildClient(state, buildState)
|
|
122
|
-
|
|
123
|
-
startWatcher({
|
|
124
|
-
dirs: [state.routesDir, runtime.paths.sharedDir, runtime.paths.middlewareDir],
|
|
125
|
-
onChange: async () => {
|
|
126
|
-
await rebuildClient(state, buildState)
|
|
127
|
-
notifyReload()
|
|
128
|
-
},
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
const server = Bun.serve({
|
|
132
|
-
port,
|
|
133
|
-
async fetch(request, server) {
|
|
134
|
-
const url = new URL(request.url)
|
|
135
|
-
const pathname = url.pathname
|
|
136
|
-
|
|
137
|
-
// WebSocket upgrade for HMR
|
|
138
|
-
if (pathname === "/__gorsee_hmr") {
|
|
139
|
-
if (server.upgrade(request)) return new Response(null, { status: 101 })
|
|
140
|
-
return new Response("WebSocket upgrade failed", { status: 400 })
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Rate limiting by IP
|
|
144
|
-
const ip = server.requestIP(request)?.address ?? "unknown"
|
|
145
|
-
const rateLimitResponse = createRateLimitResponse(state.rateLimiter, ip)
|
|
146
|
-
if (rateLimitResponse) return rateLimitResponse
|
|
147
|
-
|
|
148
|
-
const start = performance.now()
|
|
149
|
-
const nonce = generateNonce()
|
|
150
|
-
const secHeaders = securityHeaders({}, nonce)
|
|
151
|
-
|
|
152
|
-
// 1. RPC
|
|
153
|
-
const rpcResponse = await handleRPCWithHeaders(request, secHeaders)
|
|
154
|
-
if (rpcResponse) return rpcResponse
|
|
155
|
-
|
|
156
|
-
// 2. Client bundles
|
|
157
|
-
const bundleResponse = await tryServeClientBundle(state.clientDir, pathname)
|
|
158
|
-
if (bundleResponse) return bundleResponse
|
|
159
|
-
|
|
160
|
-
// 3. Static files
|
|
161
|
-
const staticResponse = await tryServeStatic(state.publicDir, pathname)
|
|
162
|
-
if (staticResponse) return staticResponse
|
|
163
|
-
|
|
164
|
-
// 4. Route matching
|
|
165
|
-
const match = matchRoute(state.routes, pathname, state.staticMap)
|
|
166
|
-
if (!match) {
|
|
167
|
-
const notFoundHtml = await render404Page(state.routesDir, nonce)
|
|
168
|
-
return new Response(notFoundHtml, {
|
|
169
|
-
status: 404,
|
|
170
|
-
headers: { "Content-Type": "text/html", ...secHeaders },
|
|
171
|
-
})
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
try {
|
|
175
|
-
// Partial navigation (SPA client-side routing)
|
|
176
|
-
if (request.headers.get("X-Gorsee-Navigate") === "partial") {
|
|
177
|
-
return await handlePartialNavigation({ match, request, clientBuild: state.clientBuild })
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
return await handlePageRequest({
|
|
181
|
-
match, request, nonce, start, clientBuild: state.clientBuild, secHeaders, wrapHTML,
|
|
182
|
-
})
|
|
183
|
-
} catch (err) {
|
|
184
|
-
const errObj = err instanceof Error ? err : new Error(String(err))
|
|
185
|
-
log.error("request error", { path: pathname, error: errObj.message })
|
|
186
|
-
return new Response(renderErrorOverlay(errObj, nonce), {
|
|
187
|
-
status: 500,
|
|
188
|
-
headers: { "Content-Type": "text/html", ...secHeaders },
|
|
189
|
-
})
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
websocket: {
|
|
193
|
-
open(ws) { addHMRClient(ws) },
|
|
194
|
-
close(ws) { removeHMRClient(ws) },
|
|
195
|
-
message() {},
|
|
196
|
-
},
|
|
197
|
-
})
|
|
198
|
-
|
|
199
|
-
log.info("dev server started", { url: `http://localhost:${server.port}` })
|
|
200
|
-
return server
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
if (import.meta.main) {
|
|
204
|
-
startDevServer().catch((err) => {
|
|
205
|
-
console.error("Failed to start dev server:", err)
|
|
206
|
-
process.exit(1)
|
|
207
|
-
})
|
|
208
|
-
}
|
package/src/env/index.ts
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
// Environment variable loading from .env files
|
|
2
|
-
// Priority: .env.local > .env.{NODE_ENV} > .env
|
|
3
|
-
// Only PUBLIC_ prefixed vars are exposed to client bundles
|
|
4
|
-
|
|
5
|
-
import { readFile } from "node:fs/promises"
|
|
6
|
-
import { join } from "node:path"
|
|
7
|
-
|
|
8
|
-
function parseEnvFile(content: string): Record<string, string> {
|
|
9
|
-
const result: Record<string, string> = {}
|
|
10
|
-
for (const line of content.split("\n")) {
|
|
11
|
-
const trimmed = line.trim()
|
|
12
|
-
if (!trimmed || trimmed.startsWith("#")) continue
|
|
13
|
-
const eqIndex = trimmed.indexOf("=")
|
|
14
|
-
if (eqIndex < 0) continue
|
|
15
|
-
const key = trimmed.slice(0, eqIndex).trim()
|
|
16
|
-
let value = trimmed.slice(eqIndex + 1).trim()
|
|
17
|
-
// Remove quotes
|
|
18
|
-
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
19
|
-
(value.startsWith("'") && value.endsWith("'"))) {
|
|
20
|
-
value = value.slice(1, -1)
|
|
21
|
-
}
|
|
22
|
-
result[key] = value
|
|
23
|
-
}
|
|
24
|
-
return result
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
async function loadFile(path: string): Promise<Record<string, string>> {
|
|
28
|
-
try {
|
|
29
|
-
const content = await readFile(path, "utf-8")
|
|
30
|
-
return parseEnvFile(content)
|
|
31
|
-
} catch {
|
|
32
|
-
return {}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export async function loadEnv(cwd: string): Promise<void> {
|
|
37
|
-
const mode = process.env.NODE_ENV ?? "development"
|
|
38
|
-
|
|
39
|
-
// Load in priority order (lower priority first, higher overwrites)
|
|
40
|
-
const files = [
|
|
41
|
-
join(cwd, ".env"),
|
|
42
|
-
join(cwd, `.env.${mode}`),
|
|
43
|
-
join(cwd, ".env.local"),
|
|
44
|
-
]
|
|
45
|
-
|
|
46
|
-
for (const file of files) {
|
|
47
|
-
const vars = await loadFile(file)
|
|
48
|
-
for (const [key, value] of Object.entries(vars)) {
|
|
49
|
-
// Don't overwrite existing env vars (process env takes precedence)
|
|
50
|
-
if (process.env[key] === undefined) {
|
|
51
|
-
process.env[key] = value
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function getPublicEnv(): Record<string, string> {
|
|
58
|
-
const result: Record<string, string> = {}
|
|
59
|
-
for (const [key, value] of Object.entries(process.env)) {
|
|
60
|
-
if (key.startsWith("PUBLIC_") && value !== undefined) {
|
|
61
|
-
result[key] = value
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return result
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export function env(key: string, defaultValue?: string): string {
|
|
68
|
-
const value = process.env[key]
|
|
69
|
-
if (value === undefined) {
|
|
70
|
-
if (defaultValue !== undefined) return defaultValue
|
|
71
|
-
throw new Error(`[GORSEE] Missing required environment variable: ${key}`)
|
|
72
|
-
}
|
|
73
|
-
return value
|
|
74
|
-
}
|
package/src/errors/formatter.ts
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { ERROR_CATALOG, type ErrorCode } from "./catalog.ts"
|
|
2
|
-
|
|
3
|
-
export class GorseeError extends Error {
|
|
4
|
-
readonly code: ErrorCode
|
|
5
|
-
readonly filePath?: string
|
|
6
|
-
readonly line?: number
|
|
7
|
-
|
|
8
|
-
constructor(code: ErrorCode, details?: { filePath?: string; line?: number; extra?: string }) {
|
|
9
|
-
const entry = ERROR_CATALOG[code]
|
|
10
|
-
const title = entry?.title ?? "Unknown error"
|
|
11
|
-
super(`[GORSEE ${code}] ${title}${details?.extra ? `: ${details.extra}` : ""}`)
|
|
12
|
-
|
|
13
|
-
this.code = code
|
|
14
|
-
this.filePath = details?.filePath
|
|
15
|
-
this.line = details?.line
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface FormattedError {
|
|
20
|
-
human: string
|
|
21
|
-
json: {
|
|
22
|
-
code: ErrorCode
|
|
23
|
-
title: string
|
|
24
|
-
file?: string
|
|
25
|
-
line?: number
|
|
26
|
-
fix: string
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function formatError(err: GorseeError): FormattedError {
|
|
31
|
-
const entry = ERROR_CATALOG[err.code]
|
|
32
|
-
|
|
33
|
-
const location = err.filePath
|
|
34
|
-
? `\n ${err.filePath}${err.line ? `:${err.line}` : ""}`
|
|
35
|
-
: ""
|
|
36
|
-
|
|
37
|
-
const human = [
|
|
38
|
-
`GORSEE ${err.code}: ${entry?.title ?? "Unknown"}`,
|
|
39
|
-
location,
|
|
40
|
-
`\n What: ${entry?.description ?? err.message}`,
|
|
41
|
-
` Fix: ${entry?.fix ?? "See documentation"}`,
|
|
42
|
-
`\n AI context (copy entire block):`,
|
|
43
|
-
` +${"─".repeat(45)}`,
|
|
44
|
-
` | Framework: Gorsee.js`,
|
|
45
|
-
` | Error: ${err.code} - ${entry?.title}`,
|
|
46
|
-
err.filePath ? ` | File: ${err.filePath}${err.line ? `:${err.line}` : ""}` : null,
|
|
47
|
-
` | Fix: ${entry?.fix}`,
|
|
48
|
-
` +${"─".repeat(45)}`,
|
|
49
|
-
]
|
|
50
|
-
.filter(Boolean)
|
|
51
|
-
.join("\n")
|
|
52
|
-
|
|
53
|
-
return {
|
|
54
|
-
human,
|
|
55
|
-
json: {
|
|
56
|
-
code: err.code,
|
|
57
|
-
title: entry?.title ?? "Unknown",
|
|
58
|
-
file: err.filePath,
|
|
59
|
-
line: err.line,
|
|
60
|
-
fix: entry?.fix ?? "See documentation",
|
|
61
|
-
},
|
|
62
|
-
}
|
|
63
|
-
}
|
package/src/errors/index.ts
DELETED
package/src/i18n/index.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
// Basic i18n support
|
|
2
|
-
// Dictionary-based translations with locale detection
|
|
3
|
-
|
|
4
|
-
import { createSignal, type SignalGetter } from "../reactive/signal.ts"
|
|
5
|
-
|
|
6
|
-
type Translations = Record<string, string | Record<string, string>>
|
|
7
|
-
type LocaleDict = Record<string, Translations>
|
|
8
|
-
|
|
9
|
-
let dictionaries: LocaleDict = {}
|
|
10
|
-
let defaultLocale = "en"
|
|
11
|
-
|
|
12
|
-
const [currentLocale, setCurrentLocale] = createSignal(defaultLocale)
|
|
13
|
-
|
|
14
|
-
export function setupI18n(config: {
|
|
15
|
-
locales: LocaleDict
|
|
16
|
-
defaultLocale?: string
|
|
17
|
-
detectLocale?: boolean
|
|
18
|
-
}): void {
|
|
19
|
-
dictionaries = config.locales
|
|
20
|
-
defaultLocale = config.defaultLocale ?? "en"
|
|
21
|
-
|
|
22
|
-
if (config.detectLocale && typeof navigator !== "undefined") {
|
|
23
|
-
const browserLang = navigator.language.split("-")[0] ?? defaultLocale
|
|
24
|
-
if (dictionaries[browserLang]) {
|
|
25
|
-
setCurrentLocale(browserLang)
|
|
26
|
-
return
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
setCurrentLocale(defaultLocale)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export function getLocale(): SignalGetter<string> {
|
|
34
|
-
return currentLocale
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function setLocale(locale: string): void {
|
|
38
|
-
if (!dictionaries[locale]) {
|
|
39
|
-
console.warn(`[gorsee/i18n] Locale "${locale}" not found, available: ${Object.keys(dictionaries).join(", ")}`)
|
|
40
|
-
return
|
|
41
|
-
}
|
|
42
|
-
setCurrentLocale(locale)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function t(key: string, params?: Record<string, string | number>): string {
|
|
46
|
-
const locale = currentLocale()
|
|
47
|
-
const dict = dictionaries[locale] ?? dictionaries[defaultLocale] ?? {}
|
|
48
|
-
|
|
49
|
-
// Support nested keys: "nav.home"
|
|
50
|
-
const parts = key.split(".")
|
|
51
|
-
let value: unknown = dict
|
|
52
|
-
for (const part of parts) {
|
|
53
|
-
if (typeof value !== "object" || value === null) { value = undefined; break }
|
|
54
|
-
value = (value as Record<string, unknown>)[part]
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if (typeof value !== "string") return key
|
|
58
|
-
|
|
59
|
-
// Replace {{param}} placeholders
|
|
60
|
-
if (params) {
|
|
61
|
-
return value.replace(/\{\{(\w+)\}\}/g, (_, name) => {
|
|
62
|
-
return params[name] !== undefined ? String(params[name]) : `{{${name}}}`
|
|
63
|
-
})
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return value
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export function plural(key: string, count: number, params?: Record<string, string | number>): string {
|
|
70
|
-
const suffix = count === 1 ? "one" : "other"
|
|
71
|
-
return t(`${key}.${suffix}`, { count, ...params })
|
|
72
|
-
}
|
package/src/index-client.ts
DELETED
package/src/index.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
// Gorsee.js -- compatibility entry point.
|
|
2
|
-
// Prefer "gorsee/client" for browser-safe APIs, "gorsee/server" for server-only APIs,
|
|
3
|
-
// or "gorsee/compat" when you need an explicit legacy migration path.
|
|
4
|
-
|
|
5
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
6
|
-
export {
|
|
7
|
-
createSignal,
|
|
8
|
-
createComputed,
|
|
9
|
-
createEffect,
|
|
10
|
-
createResource,
|
|
11
|
-
createStore,
|
|
12
|
-
createLive,
|
|
13
|
-
invalidateResource,
|
|
14
|
-
invalidateAll,
|
|
15
|
-
createMutation,
|
|
16
|
-
} from "./reactive/index.ts"
|
|
17
|
-
|
|
18
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
19
|
-
export { Suspense } from "./runtime/suspense.ts"
|
|
20
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
21
|
-
export { Link } from "./runtime/link.ts"
|
|
22
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
23
|
-
export { Head } from "./runtime/head.ts"
|
|
24
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
25
|
-
export { navigate, onNavigate, beforeNavigate, getCurrentPath } from "./runtime/router.ts"
|
|
26
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
27
|
-
export { useFormAction } from "./runtime/form.ts"
|
|
28
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
29
|
-
export { Image } from "./runtime/image.ts"
|
|
30
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
31
|
-
export { ErrorBoundary } from "./runtime/error-boundary.ts"
|
|
32
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
33
|
-
export { island } from "./runtime/island.ts"
|
|
34
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
35
|
-
export { createEventSource } from "./server/sse.ts"
|
|
36
|
-
/** @deprecated Import from "gorsee/server" instead. */
|
|
37
|
-
export { createAuth } from "./auth/index.ts"
|
|
38
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
39
|
-
export { typedLink, typedNavigate } from "./runtime/typed-routes.ts"
|
|
40
|
-
/** @deprecated Import from "gorsee/client" instead. */
|
|
41
|
-
export { defineForm, validateForm, fieldAttrs } from "./runtime/validated-form.ts"
|
|
42
|
-
/** @deprecated Import from "gorsee/server" instead. */
|
|
43
|
-
export { definePlugin, createPluginRunner, type GorseePlugin, type PluginContext } from "./plugins/index.ts"
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// Client-side JSX runtime -- creates real DOM nodes with reactive bindings
|
|
2
|
-
// Used by client bundles (browser target)
|
|
3
|
-
|
|
4
|
-
export { jsx, jsxs, jsxDEV, Fragment } from "./runtime/jsx-runtime.ts"
|
|
5
|
-
|
|
6
|
-
export namespace JSX {
|
|
7
|
-
export type Element = Node | DocumentFragment
|
|
8
|
-
export type IntrinsicElements = import("./jsx-types-html.ts").GorseeIntrinsicElements
|
|
9
|
-
|
|
10
|
-
export interface ElementChildrenAttribute {
|
|
11
|
-
children: unknown
|
|
12
|
-
}
|
|
13
|
-
}
|
package/src/jsx-runtime.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// JSX automatic runtime entry point
|
|
2
|
-
// jsxImportSource: "gorsee" resolves to gorsee/jsx-runtime
|
|
3
|
-
// In dev/SSR mode this uses ssrJsx; client build would swap to DOM jsx
|
|
4
|
-
|
|
5
|
-
import { ssrJsx, ssrJsxs } from "./runtime/server.ts"
|
|
6
|
-
import { Fragment } from "./runtime/jsx-runtime.ts"
|
|
7
|
-
|
|
8
|
-
export { Fragment }
|
|
9
|
-
export const jsx = ssrJsx
|
|
10
|
-
export const jsxs = ssrJsxs
|
|
11
|
-
export const jsxDEV = ssrJsx
|
|
12
|
-
|
|
13
|
-
export namespace JSX {
|
|
14
|
-
export type Element = import("./runtime/server.ts").VNode | Node | DocumentFragment
|
|
15
|
-
export type IntrinsicElements = import("./jsx-types-html.ts").GorseeIntrinsicElements
|
|
16
|
-
|
|
17
|
-
export interface ElementChildrenAttribute {
|
|
18
|
-
children: unknown
|
|
19
|
-
}
|
|
20
|
-
}
|