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
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
export function validateDeployArtifactConformance(input) {
|
|
2
|
+
const missing = input.requiredTokens.filter((token) => !input.content.includes(token)), forbidden = (input.forbiddenTokens ?? []).filter((token) => input.content.includes(token)), structured = parseStructuredArtifact(input), missingPaths = structured ? (input.requiredPaths ?? []).filter((path) => getStructuredValue(structured, path) === void 0) : [], mismatchedValues = structured ? (input.requiredValues ?? []).flatMap((expectation) => {
|
|
3
|
+
const actual = getStructuredValue(structured, expectation.path);
|
|
4
|
+
return actual === expectation.value ? [] : [`${expectation.path}: expected ${String(expectation.value)}, received ${String(actual)}`];
|
|
5
|
+
}) : [];
|
|
6
|
+
return {
|
|
7
|
+
ok: missing.length === 0 && forbidden.length === 0 && missingPaths.length === 0 && mismatchedValues.length === 0,
|
|
8
|
+
missing,
|
|
9
|
+
forbidden,
|
|
10
|
+
missingPaths,
|
|
11
|
+
mismatchedValues
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function assertDeployArtifactConformance(input) {
|
|
15
|
+
const result = validateDeployArtifactConformance(input);
|
|
16
|
+
if (result.ok)
|
|
17
|
+
return;
|
|
18
|
+
const problems = [
|
|
19
|
+
...result.missing.map((token) => `missing token: ${token}`),
|
|
20
|
+
...result.forbidden.map((token) => `forbidden token present: ${token}`),
|
|
21
|
+
...result.missingPaths.map((path) => `missing path: ${path}`),
|
|
22
|
+
...result.mismatchedValues.map((entry) => `mismatched value: ${entry}`)
|
|
23
|
+
].join("; ");
|
|
24
|
+
throw Error(`${input.name} failed deploy conformance: ${problems}`);
|
|
25
|
+
}
|
|
26
|
+
function parseStructuredArtifact(input) {
|
|
27
|
+
if (input.format === "json")
|
|
28
|
+
return JSON.parse(input.content);
|
|
29
|
+
if (input.format === "toml")
|
|
30
|
+
return parseToml(input.content);
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
function getStructuredValue(record, path) {
|
|
34
|
+
let current = record;
|
|
35
|
+
for (const segment of path.split(".")) {
|
|
36
|
+
if (!current || typeof current !== "object" || !(segment in current))
|
|
37
|
+
return;
|
|
38
|
+
current = current[segment];
|
|
39
|
+
}
|
|
40
|
+
return current;
|
|
41
|
+
}
|
|
42
|
+
function parseToml(content) {
|
|
43
|
+
const root = {};
|
|
44
|
+
let current = root;
|
|
45
|
+
for (const rawLine of content.split(/\r?\n/)) {
|
|
46
|
+
const line = rawLine.trim();
|
|
47
|
+
if (!line || line.startsWith("#"))
|
|
48
|
+
continue;
|
|
49
|
+
if (line.startsWith("[[") && line.endsWith("]]")) {
|
|
50
|
+
const segments = line.slice(2, -2).trim().split("."), key = segments.pop(), parent = ensureTomlContainer(root, segments);
|
|
51
|
+
if (!key)
|
|
52
|
+
continue;
|
|
53
|
+
const list = Array.isArray(parent[key]) ? parent[key] : [], next = {};
|
|
54
|
+
list.push(next);
|
|
55
|
+
parent[key] = list;
|
|
56
|
+
current = next;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (line.startsWith("[") && line.endsWith("]")) {
|
|
60
|
+
const path = line.slice(1, -1).trim().split(".");
|
|
61
|
+
current = ensureTomlContainer(root, path);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const separator = line.indexOf("=");
|
|
65
|
+
if (separator === -1)
|
|
66
|
+
continue;
|
|
67
|
+
const key = line.slice(0, separator).trim(), value = line.slice(separator + 1).trim();
|
|
68
|
+
current[key] = parseTomlValue(value);
|
|
69
|
+
}
|
|
70
|
+
return root;
|
|
71
|
+
}
|
|
72
|
+
function ensureTomlContainer(root, segments) {
|
|
73
|
+
let current = root;
|
|
74
|
+
for (const segment of segments) {
|
|
75
|
+
const existing = current[segment];
|
|
76
|
+
if (!existing || typeof existing !== "object" || Array.isArray(existing))
|
|
77
|
+
current[segment] = {};
|
|
78
|
+
current = current[segment];
|
|
79
|
+
}
|
|
80
|
+
return current;
|
|
81
|
+
}
|
|
82
|
+
function parseTomlValue(value) {
|
|
83
|
+
if (value.startsWith('"') && value.endsWith('"'))
|
|
84
|
+
return value.slice(1, -1);
|
|
85
|
+
if (value === "true")
|
|
86
|
+
return !0;
|
|
87
|
+
if (value === "false")
|
|
88
|
+
return !1;
|
|
89
|
+
if (/^-?\d+$/.test(value))
|
|
90
|
+
return Number(value);
|
|
91
|
+
if (value.startsWith("[") && value.endsWith("]")) {
|
|
92
|
+
const inner = value.slice(1, -1).trim();
|
|
93
|
+
if (!inner)
|
|
94
|
+
return [];
|
|
95
|
+
return inner.split(",").map((part) => parseTomlValue(part.trim()));
|
|
96
|
+
}
|
|
97
|
+
return value;
|
|
98
|
+
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export function generateDockerfile(): string {
|
|
1
|
+
export function generateDockerfile(runtime = "bun") {
|
|
4
2
|
return `# Gorsee.js Production Dockerfile
|
|
3
|
+
# Runtime profile: ${runtime}
|
|
5
4
|
FROM oven/bun:1 AS builder
|
|
6
5
|
WORKDIR /app
|
|
7
6
|
COPY package.json bun.lock* ./
|
|
@@ -9,24 +8,23 @@ RUN bun install --frozen-lockfile
|
|
|
9
8
|
COPY . .
|
|
10
9
|
RUN bun run build
|
|
11
10
|
|
|
12
|
-
FROM oven/bun:1-slim
|
|
11
|
+
FROM ${runtime === "node" ? "node:20-bookworm-slim" : "oven/bun:1-slim"}
|
|
13
12
|
WORKDIR /app
|
|
14
13
|
COPY --from=builder /app/package.json ./
|
|
15
14
|
COPY --from=builder /app/node_modules ./node_modules
|
|
16
15
|
COPY --from=builder /app/dist ./dist
|
|
17
|
-
COPY --from=builder /app/routes ./routes
|
|
18
16
|
COPY --from=builder /app/public ./public
|
|
19
17
|
COPY --from=builder /app/.env* ./
|
|
20
18
|
|
|
21
19
|
ENV NODE_ENV=production
|
|
22
20
|
ENV PORT=3000
|
|
21
|
+
ENV APP_ORIGIN=REPLACE_WITH_APP_ORIGIN
|
|
23
22
|
EXPOSE 3000
|
|
24
23
|
|
|
25
|
-
CMD ["bun", "run", "start"]
|
|
26
|
-
|
|
24
|
+
${runtime === "node" ? 'CMD ["node", "dist/prod-node.js"]' : 'CMD ["bun", "run", "start"]'}
|
|
25
|
+
`;
|
|
27
26
|
}
|
|
28
|
-
|
|
29
|
-
export function generateDockerignore(): string {
|
|
27
|
+
export function generateDockerignore() {
|
|
30
28
|
return `node_modules
|
|
31
29
|
.gorsee
|
|
32
30
|
.git
|
|
@@ -34,5 +32,5 @@ export function generateDockerignore(): string {
|
|
|
34
32
|
*.sqlite
|
|
35
33
|
*.db
|
|
36
34
|
.env.local
|
|
37
|
-
|
|
35
|
+
`;
|
|
38
36
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export function generateFlyConfig(appName: string): string {
|
|
4
|
-
return `# Gorsee.js — Fly.io configuration
|
|
1
|
+
export function generateFlyConfig(appName) {
|
|
2
|
+
return `# Gorsee.js \u2014 Fly.io configuration
|
|
5
3
|
# Auto-generated by \`gorsee deploy fly\`
|
|
6
4
|
|
|
7
5
|
app = "${appName}"
|
|
@@ -13,6 +11,7 @@ primary_region = "iad"
|
|
|
13
11
|
[env]
|
|
14
12
|
NODE_ENV = "production"
|
|
15
13
|
PORT = "3000"
|
|
14
|
+
APP_ORIGIN = "REPLACE_WITH_APP_ORIGIN"
|
|
16
15
|
|
|
17
16
|
[http_service]
|
|
18
17
|
internal_port = 3000
|
|
@@ -39,12 +38,12 @@ primary_region = "iad"
|
|
|
39
38
|
processes = ["app"]
|
|
40
39
|
count_min = 1
|
|
41
40
|
count_max = 3
|
|
42
|
-
|
|
41
|
+
`;
|
|
43
42
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return `# Gorsee.js — Fly.io optimized Dockerfile
|
|
43
|
+
export function generateFlyDockerfile(runtime = "bun") {
|
|
44
|
+
return `# Gorsee.js \u2014 Fly.io optimized Dockerfile
|
|
47
45
|
# Auto-generated by \`gorsee deploy fly\`
|
|
46
|
+
# Runtime profile: ${runtime}
|
|
48
47
|
|
|
49
48
|
FROM oven/bun:1 AS builder
|
|
50
49
|
WORKDIR /app
|
|
@@ -53,18 +52,18 @@ RUN bun install --frozen-lockfile
|
|
|
53
52
|
COPY . .
|
|
54
53
|
RUN bun run build
|
|
55
54
|
|
|
56
|
-
FROM oven/bun:1-slim
|
|
55
|
+
FROM ${runtime === "node" ? "node:20-bookworm-slim" : "oven/bun:1-slim"}
|
|
57
56
|
WORKDIR /app
|
|
58
57
|
|
|
59
58
|
COPY --from=builder /app/package.json ./
|
|
60
59
|
COPY --from=builder /app/node_modules ./node_modules
|
|
61
60
|
COPY --from=builder /app/dist ./dist
|
|
62
|
-
COPY --from=builder /app/routes ./routes
|
|
63
61
|
COPY --from=builder /app/public ./public
|
|
64
62
|
COPY --from=builder /app/.env* ./
|
|
65
63
|
|
|
66
64
|
ENV NODE_ENV=production
|
|
67
65
|
ENV PORT=3000
|
|
66
|
+
ENV APP_ORIGIN=REPLACE_WITH_APP_ORIGIN
|
|
68
67
|
|
|
69
68
|
# Fly.io runtime env vars are injected automatically:
|
|
70
69
|
# FLY_ALLOC_ID, FLY_APP_NAME, FLY_REGION, FLY_MACHINE_ID
|
|
@@ -74,6 +73,6 @@ EXPOSE 3000
|
|
|
74
73
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \\
|
|
75
74
|
CMD curl -f http://localhost:3000/api/health || exit 1
|
|
76
75
|
|
|
77
|
-
CMD ["bun", "run", "start"]
|
|
78
|
-
|
|
76
|
+
${runtime === "node" ? 'CMD ["node", "dist/prod-node.js"]' : 'CMD ["bun", "run", "start"]'}
|
|
77
|
+
`;
|
|
79
78
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { generateDockerfile, generateDockerignore, } from "./dockerfile.js";
|
|
2
|
+
export { generateVercelConfig, generateVercelServerlessEntry, generateVercelBuildOutput, type VercelConfig, type VercelOutputConfig, } from "./vercel.js";
|
|
3
|
+
export { generateFlyConfig, generateFlyDockerfile, } from "./fly.js";
|
|
4
|
+
export { generateWranglerConfig, generateCloudflareEntry, generateCloudflareStaticAssets, type CloudflareRoutesConfig, } from "./cloudflare.js";
|
|
5
|
+
export { generateNetlifyConfig, generateNetlifyFunction, } from "./netlify.js";
|
|
6
|
+
export { validateDeployArtifactConformance, assertDeployArtifactConformance, type DeployArtifactConformanceInput, type DeployArtifactConformanceResult, } from "./conformance.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export {
|
|
2
|
+
generateDockerfile,
|
|
3
|
+
generateDockerignore
|
|
4
|
+
} from "./dockerfile.js";
|
|
5
|
+
export {
|
|
6
|
+
generateVercelConfig,
|
|
7
|
+
generateVercelServerlessEntry,
|
|
8
|
+
generateVercelBuildOutput
|
|
9
|
+
} from "./vercel.js";
|
|
10
|
+
export {
|
|
11
|
+
generateFlyConfig,
|
|
12
|
+
generateFlyDockerfile
|
|
13
|
+
} from "./fly.js";
|
|
14
|
+
export {
|
|
15
|
+
generateWranglerConfig,
|
|
16
|
+
generateCloudflareEntry,
|
|
17
|
+
generateCloudflareStaticAssets
|
|
18
|
+
} from "./cloudflare.js";
|
|
19
|
+
export {
|
|
20
|
+
generateNetlifyConfig,
|
|
21
|
+
generateNetlifyFunction
|
|
22
|
+
} from "./netlify.js";
|
|
23
|
+
export {
|
|
24
|
+
validateDeployArtifactConformance,
|
|
25
|
+
assertDeployArtifactConformance
|
|
26
|
+
} from "./conformance.js";
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export function generateNetlifyConfig(): string {
|
|
4
|
-
return `# Gorsee.js — Netlify configuration
|
|
1
|
+
export function generateNetlifyConfig() {
|
|
2
|
+
return `# Gorsee.js \u2014 Netlify configuration
|
|
5
3
|
# Auto-generated by \`gorsee deploy netlify\`
|
|
6
4
|
|
|
7
5
|
[build]
|
|
@@ -10,6 +8,7 @@ export function generateNetlifyConfig(): string {
|
|
|
10
8
|
|
|
11
9
|
[build.environment]
|
|
12
10
|
NODE_VERSION = "20"
|
|
11
|
+
APP_ORIGIN = "REPLACE_WITH_APP_ORIGIN"
|
|
13
12
|
|
|
14
13
|
[[edge_functions]]
|
|
15
14
|
function = "gorsee-handler"
|
|
@@ -36,11 +35,10 @@ export function generateNetlifyConfig(): string {
|
|
|
36
35
|
for = "/_gorsee/*"
|
|
37
36
|
[headers.values]
|
|
38
37
|
Cache-Control = "public, max-age=31536000, immutable"
|
|
39
|
-
|
|
38
|
+
`;
|
|
40
39
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return `// Gorsee.js — Netlify Edge Function
|
|
40
|
+
export function generateNetlifyFunction() {
|
|
41
|
+
return `// Gorsee.js \u2014 Netlify Edge Function
|
|
44
42
|
// Auto-generated by \`gorsee deploy netlify\`
|
|
45
43
|
// Place in: netlify/edge-functions/gorsee-handler.ts
|
|
46
44
|
|
|
@@ -51,8 +49,9 @@ export default async function handler(
|
|
|
51
49
|
context: Context,
|
|
52
50
|
): Promise<Response> {
|
|
53
51
|
const url = new URL(request.url)
|
|
52
|
+
const appOrigin = Netlify.env.get("APP_ORIGIN") ?? url.origin
|
|
54
53
|
|
|
55
|
-
// Skip static assets
|
|
54
|
+
// Skip static assets \u2014 handled by Netlify CDN
|
|
56
55
|
if (url.pathname.startsWith("/_gorsee/")) {
|
|
57
56
|
return context.next()
|
|
58
57
|
}
|
|
@@ -64,8 +63,15 @@ export default async function handler(
|
|
|
64
63
|
|
|
65
64
|
// Forward to Gorsee server handler
|
|
66
65
|
try {
|
|
66
|
+
const rpcPolicy = {
|
|
67
|
+
// Wire auth/CSRF middleware here for privileged server() calls.
|
|
68
|
+
// The server handler should prefer app.config.ts security.rpc.middlewares
|
|
69
|
+
// when no explicit runtime policy is provided.
|
|
70
|
+
middlewares: [],
|
|
71
|
+
}
|
|
67
72
|
const { handleRequest } = await import("../../dist/server-handler.js")
|
|
68
|
-
|
|
73
|
+
void appOrigin
|
|
74
|
+
return await handleRequest(request, { netlifyContext: context }, { rpcPolicy })
|
|
69
75
|
} catch (err) {
|
|
70
76
|
console.error("Gorsee handler error:", err)
|
|
71
77
|
return new Response("Internal Server Error", { status: 500 })
|
|
@@ -73,5 +79,5 @@ export default async function handler(
|
|
|
73
79
|
}
|
|
74
80
|
|
|
75
81
|
export const config = { path: "/*" }
|
|
76
|
-
|
|
82
|
+
`;
|
|
77
83
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface VercelConfig {
|
|
2
|
+
version: number;
|
|
3
|
+
framework: null;
|
|
4
|
+
buildCommand: string;
|
|
5
|
+
outputDirectory: string;
|
|
6
|
+
routes: Array<{
|
|
7
|
+
src: string;
|
|
8
|
+
dest?: string;
|
|
9
|
+
headers?: Record<string, string>;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export declare function generateVercelConfig(): VercelConfig;
|
|
13
|
+
export declare function generateVercelServerlessEntry(): string;
|
|
14
|
+
export interface VercelOutputConfig {
|
|
15
|
+
version: number;
|
|
16
|
+
routes: Array<{
|
|
17
|
+
src: string;
|
|
18
|
+
dest?: string;
|
|
19
|
+
headers?: Record<string, string>;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
export declare function generateVercelBuildOutput(routes: string[]): VercelOutputConfig;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export function generateVercelConfig() {
|
|
2
|
+
return {
|
|
3
|
+
version: 2,
|
|
4
|
+
framework: null,
|
|
5
|
+
buildCommand: "bun run build",
|
|
6
|
+
outputDirectory: ".vercel/output",
|
|
7
|
+
routes: [
|
|
8
|
+
{
|
|
9
|
+
src: "/_gorsee/(.*)",
|
|
10
|
+
headers: { "Cache-Control": "public, max-age=31536000, immutable" }
|
|
11
|
+
},
|
|
12
|
+
{ src: "/(.*)", dest: "/api/index" }
|
|
13
|
+
]
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function generateVercelServerlessEntry() {
|
|
17
|
+
return `// Gorsee.js \u2014 Vercel serverless entry
|
|
18
|
+
// Auto-generated by \`gorsee deploy vercel\`
|
|
19
|
+
|
|
20
|
+
import { handleRequest } from "../dist/server-handler-node.js"
|
|
21
|
+
|
|
22
|
+
export default async function handler(request: Request): Promise<Response> {
|
|
23
|
+
const url = new URL(request.url)
|
|
24
|
+
// Set APP_ORIGIN in your Vercel project environment before production traffic.
|
|
25
|
+
const appOrigin = process.env.APP_ORIGIN ?? url.origin
|
|
26
|
+
void appOrigin
|
|
27
|
+
|
|
28
|
+
const rpcPolicy = {
|
|
29
|
+
// Wire auth/CSRF middleware here for privileged server() calls.
|
|
30
|
+
middlewares: [],
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return handleRequest(request, { vercel: true }, { rpcPolicy })
|
|
34
|
+
}
|
|
35
|
+
`;
|
|
36
|
+
}
|
|
37
|
+
export function generateVercelBuildOutput(routes) {
|
|
38
|
+
const outputRoutes = [
|
|
39
|
+
{
|
|
40
|
+
src: "/_gorsee/(.*)",
|
|
41
|
+
dest: "/static/_gorsee/$1",
|
|
42
|
+
headers: { "Cache-Control": "public, max-age=31536000, immutable" }
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
src: "/favicon\\.ico|/robots\\.txt|/styles\\.css",
|
|
46
|
+
dest: "/static/$0"
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
for (const route of routes)
|
|
50
|
+
outputRoutes.push({ src: route, dest: "/functions/index" });
|
|
51
|
+
outputRoutes.push({ src: "/(.*)", dest: "/functions/index" });
|
|
52
|
+
return { version: 3, routes: outputRoutes };
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function renderErrorOverlay(error: Error | string, nonce: string): string;
|
|
@@ -1,25 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (match) return { fn: match[1], file: match[2], line: match[3], col: match[4] }
|
|
14
|
-
const match2 = line.match(/at\s+(.+):(\d+):(\d+)/)
|
|
15
|
-
if (match2) return { fn: "(anonymous)", file: match2[1], line: match2[2], col: match2[3] }
|
|
16
|
-
return null
|
|
17
|
-
}).filter(Boolean)
|
|
18
|
-
|
|
19
|
-
const framesHTML = frames.map((f) =>
|
|
20
|
-
`<div class="g-frame"><span class="g-fn">${escapeHTML(f!.fn!)}</span> <span class="g-loc">${escapeHTML(f!.file!)}:${f!.line}</span></div>`
|
|
21
|
-
).join("")
|
|
22
|
-
|
|
1
|
+
import { escapeHTML } from "../runtime/html-escape.js";
|
|
2
|
+
export function renderErrorOverlay(error, nonce) {
|
|
3
|
+
const message = typeof error === "string" ? error : error.message, frames = (typeof error === "string" ? "" : error.stack ?? "").split(`
|
|
4
|
+
`).slice(1).map((line) => {
|
|
5
|
+
const match = line.match(/at\s+(.+?)\s+\((.+):(\d+):(\d+)\)/);
|
|
6
|
+
if (match)
|
|
7
|
+
return { fn: match[1], file: match[2], line: match[3], col: match[4] };
|
|
8
|
+
const match2 = line.match(/at\s+(.+):(\d+):(\d+)/);
|
|
9
|
+
if (match2)
|
|
10
|
+
return { fn: "(anonymous)", file: match2[1], line: match2[2], col: match2[3] };
|
|
11
|
+
return null;
|
|
12
|
+
}).filter(Boolean), framesHTML = frames.map((f) => `<div class="g-frame"><span class="g-fn">${escapeHTML(f.fn)}</span> <span class="g-loc">${escapeHTML(f.file)}:${f.line}</span></div>`).join("");
|
|
23
13
|
return `<!DOCTYPE html>
|
|
24
14
|
<html>
|
|
25
15
|
<head><meta charset="UTF-8" /><title>Error - Gorsee Dev</title>
|
|
@@ -50,5 +40,5 @@ body{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:#1a1a2e;
|
|
|
50
40
|
</div>
|
|
51
41
|
</div>
|
|
52
42
|
</body>
|
|
53
|
-
</html
|
|
43
|
+
</html>`;
|
|
54
44
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { BuildResult } from "../build/client.js";
|
|
2
|
+
import type { Route } from "../router/index.js";
|
|
3
|
+
export type HMRUpdateKind = "full-reload" | "route-refresh" | "css-update";
|
|
4
|
+
export interface HMRUpdate {
|
|
5
|
+
kind: HMRUpdateKind;
|
|
6
|
+
changedPath: string;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
reason?: string;
|
|
9
|
+
routePaths?: string[];
|
|
10
|
+
entryScripts?: string[];
|
|
11
|
+
refreshCurrentRoute?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface HMRUpdateContext {
|
|
14
|
+
changedPath: string;
|
|
15
|
+
routesDir: string;
|
|
16
|
+
sharedDir: string;
|
|
17
|
+
middlewareDir: string;
|
|
18
|
+
routes: Route[];
|
|
19
|
+
clientBuild: BuildResult;
|
|
20
|
+
}
|
|
21
|
+
export declare const HMR_CLIENT_SCRIPT = "<script data-g-hmr>\n(function(){\n function reload() {\n location.reload();\n }\n function handleMessage(raw) {\n if (raw === \"reload\") {\n reload();\n return;\n }\n try {\n var payload = JSON.parse(raw);\n if (!payload || typeof payload !== \"object\") {\n reload();\n return;\n }\n if (typeof window.__gorseeHandleHMR === \"function\") {\n window.__gorseeHandleHMR(payload);\n return;\n }\n } catch {}\n reload();\n }\n var ws = new WebSocket((location.protocol===\"https:\"?\"wss://\":\"ws://\") + location.host + \"/__gorsee_hmr\");\n ws.onmessage = function(e) {\n handleMessage(String(e.data || \"\"));\n };\n ws.onclose = function() {\n setTimeout(function(){ reload(); }, 1000);\n };\n})();\n</script>";
|
|
22
|
+
export declare function addHMRClient(ws: {
|
|
23
|
+
send(data: string): void;
|
|
24
|
+
}): void;
|
|
25
|
+
export declare function removeHMRClient(ws: {
|
|
26
|
+
send(data: string): void;
|
|
27
|
+
}): void;
|
|
28
|
+
export declare function serializeHMRUpdate(update: HMRUpdate): string;
|
|
29
|
+
export declare function notifyHMRUpdate(update: HMRUpdate): void;
|
|
30
|
+
export declare function createHMRUpdate(context: HMRUpdateContext): HMRUpdate;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { relative } from "node:path";
|
|
2
|
+
export const HMR_CLIENT_SCRIPT = `<script data-g-hmr>
|
|
3
|
+
(function(){
|
|
4
|
+
function reload() {
|
|
5
|
+
location.reload();
|
|
6
|
+
}
|
|
7
|
+
function handleMessage(raw) {
|
|
8
|
+
if (raw === "reload") {
|
|
9
|
+
reload();
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
var payload = JSON.parse(raw);
|
|
14
|
+
if (!payload || typeof payload !== "object") {
|
|
15
|
+
reload();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (typeof window.__gorseeHandleHMR === "function") {
|
|
19
|
+
window.__gorseeHandleHMR(payload);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
} catch {}
|
|
23
|
+
reload();
|
|
24
|
+
}
|
|
25
|
+
var ws = new WebSocket((location.protocol==="https:"?"wss://":"ws://") + location.host + "/__gorsee_hmr");
|
|
26
|
+
ws.onmessage = function(e) {
|
|
27
|
+
handleMessage(String(e.data || ""));
|
|
28
|
+
};
|
|
29
|
+
ws.onclose = function() {
|
|
30
|
+
setTimeout(function(){ reload(); }, 1000);
|
|
31
|
+
};
|
|
32
|
+
})();
|
|
33
|
+
</script>`;
|
|
34
|
+
const clients = new Set;
|
|
35
|
+
export function addHMRClient(ws) {
|
|
36
|
+
clients.add(ws);
|
|
37
|
+
}
|
|
38
|
+
export function removeHMRClient(ws) {
|
|
39
|
+
clients.delete(ws);
|
|
40
|
+
}
|
|
41
|
+
export function serializeHMRUpdate(update) {
|
|
42
|
+
return JSON.stringify(update);
|
|
43
|
+
}
|
|
44
|
+
export function notifyHMRUpdate(update) {
|
|
45
|
+
const payload = serializeHMRUpdate(update);
|
|
46
|
+
for (const ws of clients)
|
|
47
|
+
try {
|
|
48
|
+
ws.send(payload);
|
|
49
|
+
} catch {}
|
|
50
|
+
}
|
|
51
|
+
export function createHMRUpdate(context) {
|
|
52
|
+
const normalizedChangedPath = context.changedPath.replace(/\\/g, "/"), timestamp = Date.now(), isCSS = normalizedChangedPath.endsWith(".css"), routePaths = context.routes.filter((route) => route.filePath.replace(/\\/g, "/") === normalizedChangedPath || route.layoutPaths.some((layoutPath) => layoutPath.replace(/\\/g, "/") === normalizedChangedPath) || route.middlewarePaths.some((middlewarePath) => middlewarePath.replace(/\\/g, "/") === normalizedChangedPath) || route.errorPath?.replace(/\\/g, "/") === normalizedChangedPath || route.loadingPath?.replace(/\\/g, "/") === normalizedChangedPath).map((route) => route.path), entryScripts = routePaths.map((routePath) => context.clientBuild.entryMap.get(routePath)).filter((entry) => typeof entry === "string").map((entry) => `/_gorsee/${entry}`);
|
|
53
|
+
if (normalizedChangedPath.startsWith(context.routesDir.replace(/\\/g, "/"))) {
|
|
54
|
+
if (routePaths.length === 0 && entryScripts.length === 0)
|
|
55
|
+
return {
|
|
56
|
+
kind: "full-reload",
|
|
57
|
+
changedPath: normalizedChangedPath,
|
|
58
|
+
timestamp,
|
|
59
|
+
reason: "route change could not be mapped to a stable entry",
|
|
60
|
+
refreshCurrentRoute: !0
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
kind: isCSS ? "css-update" : "route-refresh",
|
|
64
|
+
changedPath: normalizedChangedPath,
|
|
65
|
+
timestamp,
|
|
66
|
+
routePaths,
|
|
67
|
+
entryScripts,
|
|
68
|
+
refreshCurrentRoute: !0
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (normalizedChangedPath.startsWith(context.sharedDir.replace(/\\/g, "/")) || normalizedChangedPath.startsWith(context.middlewareDir.replace(/\\/g, "/")))
|
|
72
|
+
return {
|
|
73
|
+
kind: isCSS ? "css-update" : "route-refresh",
|
|
74
|
+
changedPath: normalizedChangedPath,
|
|
75
|
+
timestamp,
|
|
76
|
+
reason: normalizedChangedPath.startsWith(context.sharedDir.replace(/\\/g, "/")) ? "shared dependency changed" : "middleware changed",
|
|
77
|
+
refreshCurrentRoute: !0
|
|
78
|
+
};
|
|
79
|
+
return {
|
|
80
|
+
kind: "full-reload",
|
|
81
|
+
changedPath: normalizedChangedPath,
|
|
82
|
+
timestamp,
|
|
83
|
+
reason: `unclassified dev update: ${relative(process.cwd(), normalizedChangedPath)}`,
|
|
84
|
+
refreshCurrentRoute: !0
|
|
85
|
+
};
|
|
86
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MatchResult } from "../router/matcher.js";
|
|
2
|
+
import type { BuildResult } from "../build/client.js";
|
|
3
|
+
interface PartialRenderOptions {
|
|
4
|
+
match: MatchResult;
|
|
5
|
+
request: Request;
|
|
6
|
+
clientBuild: BuildResult;
|
|
7
|
+
}
|
|
8
|
+
export declare function handlePartialNavigation(opts: PartialRenderOptions): Promise<Response>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createContext } from "../server/middleware.js";
|
|
2
|
+
import {
|
|
3
|
+
createClientScriptPath,
|
|
4
|
+
resolvePageRoute
|
|
5
|
+
} from "../server/page-render.js";
|
|
6
|
+
import { renderRoutePartialResponse } from "../server/route-response.js";
|
|
7
|
+
export async function handlePartialNavigation(opts) {
|
|
8
|
+
const { match, request, clientBuild } = opts, mod = await import(match.route.filePath), ctx = createContext(request, match.params);
|
|
9
|
+
if (typeof mod.GET === "function" || typeof mod.POST === "function")
|
|
10
|
+
return new Response("Not a page route", { status: 400 });
|
|
11
|
+
const resolved = await resolvePageRoute(mod, match, ctx);
|
|
12
|
+
if (!resolved)
|
|
13
|
+
return new Response(JSON.stringify({ error: "Route has no default export" }), {
|
|
14
|
+
status: 500,
|
|
15
|
+
headers: { "Content-Type": "application/json" }
|
|
16
|
+
});
|
|
17
|
+
const clientScript = createClientScriptPath(clientBuild.entryMap.get(match.route.path));
|
|
18
|
+
return renderRoutePartialResponse({
|
|
19
|
+
match,
|
|
20
|
+
ctx,
|
|
21
|
+
resolved,
|
|
22
|
+
clientScript
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { RequestSecurityPolicy } from "../server/request-security-policy.js";
|
|
2
|
+
import type { MatchResult } from "../router/matcher.js";
|
|
3
|
+
import type { BuildResult } from "../build/client.js";
|
|
4
|
+
interface RenderOptions {
|
|
5
|
+
match: MatchResult;
|
|
6
|
+
request: Request;
|
|
7
|
+
nonce: string;
|
|
8
|
+
start: number;
|
|
9
|
+
trace?: {
|
|
10
|
+
requestId?: string;
|
|
11
|
+
traceId?: string;
|
|
12
|
+
spanId?: string;
|
|
13
|
+
parentSpanId?: string;
|
|
14
|
+
};
|
|
15
|
+
trustedOrigin?: string;
|
|
16
|
+
trustForwardedHeaders?: boolean;
|
|
17
|
+
securityPolicy?: RequestSecurityPolicy;
|
|
18
|
+
clientBuild: BuildResult;
|
|
19
|
+
secHeaders: Record<string, string>;
|
|
20
|
+
wrapHTML: (body: string, nonce: string | undefined, opts?: {
|
|
21
|
+
title?: string;
|
|
22
|
+
clientScript?: string;
|
|
23
|
+
loaderData?: unknown;
|
|
24
|
+
params?: Record<string, string>;
|
|
25
|
+
cssFiles?: string[];
|
|
26
|
+
headElements?: string[];
|
|
27
|
+
}) => string;
|
|
28
|
+
}
|
|
29
|
+
export declare function handlePageRequest(opts: RenderOptions): Promise<Response>;
|
|
30
|
+
export {};
|