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,17 @@
|
|
|
1
|
+
import { signal as alienSignal } from "alien-signals";
|
|
2
|
+
import { trackSignalCreated, trackSignalRead, trackSignalWrite } from "./diagnostics.js";
|
|
3
|
+
import { GORSEE_SIGNAL_MARKER } from "../runtime/html-escape.js";
|
|
4
|
+
export function createSignal(initialValue, options = {}) {
|
|
5
|
+
const s = alienSignal(initialValue), nodeId = trackSignalCreated(options.label), getter = () => {
|
|
6
|
+
trackSignalRead(nodeId, options.label);
|
|
7
|
+
return s();
|
|
8
|
+
};
|
|
9
|
+
getter[GORSEE_SIGNAL_MARKER] = !0;
|
|
10
|
+
return [getter, (value) => {
|
|
11
|
+
trackSignalWrite(nodeId, options.label);
|
|
12
|
+
if (typeof value === "function")
|
|
13
|
+
s(value(s()));
|
|
14
|
+
else
|
|
15
|
+
s(value);
|
|
16
|
+
}];
|
|
17
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type SignalGetter } from "./signal.js";
|
|
2
|
+
export type Store<T extends Record<string, unknown>> = {
|
|
3
|
+
readonly [K in keyof T]: SignalGetter<T[K]>;
|
|
4
|
+
};
|
|
5
|
+
export type SetStore<T extends Record<string, unknown>> = <K extends keyof T>(key: K, value: T[K] | ((prev: T[K]) => T[K])) => void;
|
|
6
|
+
export declare function createStore<T extends Record<string, unknown>>(initialValue: T): [Store<T>, SetStore<T>];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createSignal } from "./signal.js";
|
|
2
|
+
export function createStore(initialValue) {
|
|
3
|
+
const signals = new Map;
|
|
4
|
+
for (const key of Object.keys(initialValue))
|
|
5
|
+
signals.set(key, createSignal(initialValue[key]));
|
|
6
|
+
return [new Proxy({}, {
|
|
7
|
+
get(_target, prop) {
|
|
8
|
+
const entry = signals.get(prop);
|
|
9
|
+
if (!entry)
|
|
10
|
+
return;
|
|
11
|
+
return entry[0];
|
|
12
|
+
}
|
|
13
|
+
}), (key, value) => {
|
|
14
|
+
const entry = signals.get(key);
|
|
15
|
+
if (!entry)
|
|
16
|
+
return;
|
|
17
|
+
entry[1](value);
|
|
18
|
+
}];
|
|
19
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Route } from "./scanner.js";
|
|
2
|
+
export interface MatchResult {
|
|
3
|
+
route: Route;
|
|
4
|
+
params: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
export declare function buildStaticMap(routes: Route[]): Map<string, Route>;
|
|
7
|
+
export declare function matchRoute(routes: Route[], pathname: string, staticMap?: Map<string, Route>): MatchResult | null;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export function buildStaticMap(routes) {
|
|
2
|
+
const map = new Map;
|
|
3
|
+
for (const route of routes)
|
|
4
|
+
if (!route.isDynamic)
|
|
5
|
+
map.set(route.path, route);
|
|
6
|
+
return map;
|
|
7
|
+
}
|
|
8
|
+
export function matchRoute(routes, pathname, staticMap) {
|
|
9
|
+
const normalized = normalizePathname(pathname);
|
|
10
|
+
if (staticMap) {
|
|
11
|
+
const staticRoute = staticMap.get(normalized);
|
|
12
|
+
if (staticRoute)
|
|
13
|
+
return { route: staticRoute, params: {} };
|
|
14
|
+
}
|
|
15
|
+
for (const route of routes) {
|
|
16
|
+
if (!route.isDynamic && staticMap)
|
|
17
|
+
continue;
|
|
18
|
+
const match = route.pattern.exec(normalized);
|
|
19
|
+
if (!match)
|
|
20
|
+
continue;
|
|
21
|
+
const params = {};
|
|
22
|
+
for (let i = 0;i < route.params.length; i++) {
|
|
23
|
+
const value = match[i + 1];
|
|
24
|
+
if (value !== void 0)
|
|
25
|
+
try {
|
|
26
|
+
params[route.params[i]] = decodeURIComponent(value);
|
|
27
|
+
} catch {
|
|
28
|
+
params[route.params[i]] = value;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return { route, params };
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
function normalizePathname(pathname) {
|
|
36
|
+
const normalized = pathname.replace(/\\/g, "/").replace(/\/{2,}/g, "/");
|
|
37
|
+
if (normalized === "/")
|
|
38
|
+
return "/";
|
|
39
|
+
return normalized.replace(/\/+$/, "") || "/";
|
|
40
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface Route {
|
|
2
|
+
path: string;
|
|
3
|
+
pattern: RegExp;
|
|
4
|
+
filePath: string;
|
|
5
|
+
isDynamic: boolean;
|
|
6
|
+
params: string[];
|
|
7
|
+
layoutPath: string | null;
|
|
8
|
+
layoutPaths: string[];
|
|
9
|
+
middlewarePath: string | null;
|
|
10
|
+
middlewarePaths: string[];
|
|
11
|
+
errorPath: string | null;
|
|
12
|
+
loadingPath: string | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function createRouter(routesDir: string): Promise<Route[]>;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { readdir, stat } from "node:fs/promises";
|
|
2
|
+
import { join, extname, basename } from "node:path";
|
|
3
|
+
const ROUTE_EXTENSIONS = new Set([".tsx", ".ts", ".jsx", ".js", ".mjs"]), IGNORED_PREFIXES = ["_"];
|
|
4
|
+
function fileToRoutePath(relativePath) {
|
|
5
|
+
let route = relativePath.replace(/\\/g, "/").replace(/\.(tsx?|jsx?)$/, "");
|
|
6
|
+
if (route === "index" || route.endsWith("/index"))
|
|
7
|
+
route = route.slice(0, -5) || "/";
|
|
8
|
+
if (!route.startsWith("/"))
|
|
9
|
+
route = "/" + route;
|
|
10
|
+
if (route.length > 1 && route.endsWith("/"))
|
|
11
|
+
route = route.slice(0, -1);
|
|
12
|
+
return route;
|
|
13
|
+
}
|
|
14
|
+
function routeToPattern(routePath) {
|
|
15
|
+
const params = [], finalRegex = routePath.split("/").map((segment) => {
|
|
16
|
+
if (!segment)
|
|
17
|
+
return "";
|
|
18
|
+
if (segment.startsWith("[...") && segment.endsWith("]")) {
|
|
19
|
+
const param = segment.slice(4, -1);
|
|
20
|
+
params.push(param);
|
|
21
|
+
return "(?:/(.+))?";
|
|
22
|
+
}
|
|
23
|
+
if (segment.startsWith("[") && segment.endsWith("]")) {
|
|
24
|
+
const param = segment.slice(1, -1);
|
|
25
|
+
params.push(param);
|
|
26
|
+
return "/([^/]+)";
|
|
27
|
+
}
|
|
28
|
+
return "/" + segment.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
29
|
+
}).join("") || "/";
|
|
30
|
+
return {
|
|
31
|
+
pattern: new RegExp(`^${finalRegex}$`),
|
|
32
|
+
params
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async function scanDirectory(dir, basePath, routes, parent) {
|
|
36
|
+
const layouts = new Map(parent?.layouts), middlewares = new Map(parent?.middlewares);
|
|
37
|
+
let entries;
|
|
38
|
+
try {
|
|
39
|
+
entries = await readdir(dir);
|
|
40
|
+
} catch {
|
|
41
|
+
return { layouts, middlewares, errors: new Map, loadings: new Map };
|
|
42
|
+
}
|
|
43
|
+
entries.sort((a, b) => a.localeCompare(b));
|
|
44
|
+
const errors = new Map(parent?.errors), loadings = new Map(parent?.loadings);
|
|
45
|
+
for (const entry of entries) {
|
|
46
|
+
const fullPath = join(dir, entry), name = basename(entry, extname(entry));
|
|
47
|
+
if (name === "_layout")
|
|
48
|
+
layouts.set(basePath || "/", fullPath);
|
|
49
|
+
if (name === "_middleware")
|
|
50
|
+
middlewares.set(basePath || "/", fullPath);
|
|
51
|
+
if (name === "_error")
|
|
52
|
+
errors.set(basePath || "/", fullPath);
|
|
53
|
+
if (name === "_loading")
|
|
54
|
+
loadings.set(basePath || "/", fullPath);
|
|
55
|
+
}
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
const fullPath = join(dir, entry), entryStat = await stat(fullPath), name = basename(entry, extname(entry));
|
|
58
|
+
if (entryStat.isDirectory()) {
|
|
59
|
+
const subPath = entry.startsWith("(") && entry.endsWith(")") ? basePath : basePath ? `${basePath}/${entry}` : entry, sub = await scanDirectory(fullPath, subPath, routes, { layouts, middlewares, errors, loadings });
|
|
60
|
+
for (const [k, v] of sub.layouts)
|
|
61
|
+
layouts.set(k, v);
|
|
62
|
+
for (const [k, v] of sub.middlewares)
|
|
63
|
+
middlewares.set(k, v);
|
|
64
|
+
for (const [k, v] of sub.errors)
|
|
65
|
+
errors.set(k, v);
|
|
66
|
+
for (const [k, v] of sub.loadings)
|
|
67
|
+
loadings.set(k, v);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (!ROUTE_EXTENSIONS.has(extname(entry)))
|
|
71
|
+
continue;
|
|
72
|
+
if (IGNORED_PREFIXES.some((p) => name.startsWith(p)))
|
|
73
|
+
continue;
|
|
74
|
+
const relPath = basePath ? `${basePath}/${entry}` : entry, routePath = fileToRoutePath(relPath), { pattern, params } = routeToPattern(routePath), middlewarePaths = [], segments = (basePath || "/").split("/").filter(Boolean), dirs = ["/"];
|
|
75
|
+
for (let i = 0;i < segments.length; i++)
|
|
76
|
+
dirs.push(segments.slice(0, i + 1).join("/"));
|
|
77
|
+
for (const d of dirs) {
|
|
78
|
+
const mwPath = middlewares.get(d);
|
|
79
|
+
if (mwPath)
|
|
80
|
+
middlewarePaths.push(mwPath);
|
|
81
|
+
}
|
|
82
|
+
const layoutPaths = [];
|
|
83
|
+
for (const d of dirs) {
|
|
84
|
+
const lPath = layouts.get(d);
|
|
85
|
+
if (lPath)
|
|
86
|
+
layoutPaths.push(lPath);
|
|
87
|
+
}
|
|
88
|
+
let loadingPath = null;
|
|
89
|
+
for (let i = dirs.length - 1;i >= 0; i--) {
|
|
90
|
+
const lp = loadings.get(dirs[i]);
|
|
91
|
+
if (lp) {
|
|
92
|
+
loadingPath = lp;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
let errorPath = null;
|
|
97
|
+
for (let i = dirs.length - 1;i >= 0; i--) {
|
|
98
|
+
const ep = errors.get(dirs[i]);
|
|
99
|
+
if (ep) {
|
|
100
|
+
errorPath = ep;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
routes.push({
|
|
105
|
+
path: routePath,
|
|
106
|
+
pattern,
|
|
107
|
+
filePath: fullPath,
|
|
108
|
+
isDynamic: params.length > 0,
|
|
109
|
+
params,
|
|
110
|
+
layoutPath: layoutPaths[layoutPaths.length - 1] ?? null,
|
|
111
|
+
layoutPaths,
|
|
112
|
+
middlewarePath: middlewarePaths[middlewarePaths.length - 1] ?? null,
|
|
113
|
+
middlewarePaths,
|
|
114
|
+
errorPath,
|
|
115
|
+
loadingPath
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return { layouts, middlewares, errors, loadings };
|
|
119
|
+
}
|
|
120
|
+
export async function createRouter(routesDir) {
|
|
121
|
+
const routes = [];
|
|
122
|
+
await scanDirectory(routesDir, "", routes);
|
|
123
|
+
routes.sort((a, b) => {
|
|
124
|
+
if (a.isDynamic !== b.isDynamic)
|
|
125
|
+
return a.isDynamic ? 1 : -1;
|
|
126
|
+
const aCatchAll = a.path.includes("[..."), bCatchAll = b.path.includes("[...");
|
|
127
|
+
if (aCatchAll !== bCatchAll)
|
|
128
|
+
return aCatchAll ? 1 : -1;
|
|
129
|
+
return a.path.localeCompare(b.path);
|
|
130
|
+
});
|
|
131
|
+
const seen = new Map;
|
|
132
|
+
for (const route of routes) {
|
|
133
|
+
const existing = seen.get(route.path);
|
|
134
|
+
if (existing)
|
|
135
|
+
throw Error(`Duplicate route path detected: ${route.path}
|
|
136
|
+
- ${existing}
|
|
137
|
+
- ${route.filePath}`);
|
|
138
|
+
seen.set(route.path, route.filePath);
|
|
139
|
+
}
|
|
140
|
+
return routes;
|
|
141
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { typedLink, typedNavigate, typedPrefetch, resolveTypedRouteTarget, buildSearchParams, buildTypedPath, createTypedRoute, extractRouteParamKeys, type TypedRouteDefinition, type TypedRouteOptions, type TypedRouteParams, type TypedRouteSearchValue, type TypedRouteTarget, } from "../runtime/typed-routes.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { MiddlewareFn } from "../server/middleware.js";
|
|
2
|
+
import { type AIObservabilityConfig } from "../ai/index.js";
|
|
3
|
+
export interface AppConfig {
|
|
4
|
+
ai?: AIObservabilityConfig;
|
|
5
|
+
security?: {
|
|
6
|
+
origin?: string;
|
|
7
|
+
hosts?: string[];
|
|
8
|
+
proxy?: {
|
|
9
|
+
preset?: ProxyPreset;
|
|
10
|
+
trustForwardedHeaders?: boolean;
|
|
11
|
+
trustedForwardedHops?: number;
|
|
12
|
+
};
|
|
13
|
+
rpc?: {
|
|
14
|
+
middlewares?: MiddlewareFn[];
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export type ProxyPreset = "none" | "reverse-proxy" | "vercel" | "netlify" | "fly" | "cloudflare";
|
|
19
|
+
export declare function loadAppConfig(cwd: string, explicitPath?: string): Promise<AppConfig>;
|
|
20
|
+
export declare function resolveRPCMiddlewares(config: AppConfig, explicitMiddlewares?: MiddlewareFn[]): MiddlewareFn[] | undefined;
|
|
21
|
+
export declare function resolveAIConfig(cwd: string, config: AppConfig, explicitConfig?: AIObservabilityConfig): AIObservabilityConfig | undefined;
|
|
22
|
+
export declare function resolveTrustedOrigin(config: AppConfig, env?: NodeJS.ProcessEnv): string | undefined;
|
|
23
|
+
export declare function resolveTrustForwardedHeaders(config: AppConfig): boolean;
|
|
24
|
+
export declare function resolveTrustedForwardedHops(config: AppConfig): number;
|
|
25
|
+
export declare function resolveTrustedHosts(config: AppConfig): string[];
|
|
26
|
+
export declare function resolveProxyPreset(config: AppConfig): ProxyPreset;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { stat } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { resolveAIObservabilityConfig } from "../ai/index.js";
|
|
5
|
+
export async function loadAppConfig(cwd, explicitPath) {
|
|
6
|
+
const candidatePaths = explicitPath ? [explicitPath] : [
|
|
7
|
+
join(cwd, "app.config.ts"),
|
|
8
|
+
join(cwd, "app.config.js"),
|
|
9
|
+
join(cwd, "app.config.mjs")
|
|
10
|
+
];
|
|
11
|
+
for (const configPath of candidatePaths)
|
|
12
|
+
try {
|
|
13
|
+
const configStat = await stat(configPath);
|
|
14
|
+
return (await import(`${pathToFileURL(configPath).href}?t=${configStat.mtimeMs}`)).default ?? {};
|
|
15
|
+
} catch {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
export function resolveRPCMiddlewares(config, explicitMiddlewares) {
|
|
21
|
+
if (explicitMiddlewares && explicitMiddlewares.length > 0)
|
|
22
|
+
return explicitMiddlewares;
|
|
23
|
+
const configMiddlewares = config.security?.rpc?.middlewares;
|
|
24
|
+
return configMiddlewares && configMiddlewares.length > 0 ? configMiddlewares : void 0;
|
|
25
|
+
}
|
|
26
|
+
export function resolveAIConfig(cwd, config, explicitConfig) {
|
|
27
|
+
const merged = {
|
|
28
|
+
...config.ai ?? {},
|
|
29
|
+
...explicitConfig ?? {}
|
|
30
|
+
};
|
|
31
|
+
if (Object.keys(merged).length === 0)
|
|
32
|
+
return;
|
|
33
|
+
return resolveAIObservabilityConfig(cwd, merged);
|
|
34
|
+
}
|
|
35
|
+
export function resolveTrustedOrigin(config, env = process.env) {
|
|
36
|
+
return config.security?.origin ?? env.APP_ORIGIN;
|
|
37
|
+
}
|
|
38
|
+
export function resolveTrustForwardedHeaders(config) {
|
|
39
|
+
const explicit = config.security?.proxy?.trustForwardedHeaders;
|
|
40
|
+
if (typeof explicit === "boolean")
|
|
41
|
+
return explicit;
|
|
42
|
+
return getProxyPresetDefaults(resolveProxyPreset(config)).trustForwardedHeaders;
|
|
43
|
+
}
|
|
44
|
+
export function resolveTrustedForwardedHops(config) {
|
|
45
|
+
const hops = config.security?.proxy?.trustedForwardedHops;
|
|
46
|
+
if (typeof hops === "number" && Number.isFinite(hops) && hops > 0)
|
|
47
|
+
return Math.floor(hops);
|
|
48
|
+
return getProxyPresetDefaults(resolveProxyPreset(config)).trustedForwardedHops;
|
|
49
|
+
}
|
|
50
|
+
export function resolveTrustedHosts(config) {
|
|
51
|
+
return config.security?.hosts ?? [];
|
|
52
|
+
}
|
|
53
|
+
export function resolveProxyPreset(config) {
|
|
54
|
+
return config.security?.proxy?.preset ?? "none";
|
|
55
|
+
}
|
|
56
|
+
function getProxyPresetDefaults(preset) {
|
|
57
|
+
switch (preset) {
|
|
58
|
+
case "reverse-proxy":
|
|
59
|
+
case "vercel":
|
|
60
|
+
case "netlify":
|
|
61
|
+
case "fly":
|
|
62
|
+
return { trustForwardedHeaders: !0, trustedForwardedHops: 1 };
|
|
63
|
+
case "cloudflare":
|
|
64
|
+
return { trustForwardedHeaders: !1, trustedForwardedHops: 0 };
|
|
65
|
+
case "none":
|
|
66
|
+
default:
|
|
67
|
+
return { trustForwardedHeaders: !1, trustedForwardedHops: 1 };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx } from "./jsx-runtime.js";
|
|
2
|
+
import { enterHydration, exitHydration } from "./hydration.js";
|
|
3
|
+
import { replayEvents } from "./event-replay.js";
|
|
4
|
+
import { isRenderableThunk } from "./html-escape.js";
|
|
5
|
+
function isVNodeLike(value) {
|
|
6
|
+
return typeof value === "object" && value !== null && "type" in value && "props" in value;
|
|
7
|
+
}
|
|
8
|
+
function insertResult(container, result) {
|
|
9
|
+
if (result instanceof Node)
|
|
10
|
+
container.appendChild(result);
|
|
11
|
+
else if (typeof result === "object" && result !== null && isVNodeLike(result))
|
|
12
|
+
container.appendChild(jsx(result.type, result.props));
|
|
13
|
+
else if (Array.isArray(result))
|
|
14
|
+
for (const child of result)
|
|
15
|
+
insertResult(container, child);
|
|
16
|
+
else if (isRenderableThunk(result))
|
|
17
|
+
insertResult(container, result());
|
|
18
|
+
else if (result != null && typeof result !== "boolean")
|
|
19
|
+
container.appendChild(document.createTextNode(String(result)));
|
|
20
|
+
}
|
|
21
|
+
export function render(component, container) {
|
|
22
|
+
container.replaceChildren();
|
|
23
|
+
insertResult(container, component());
|
|
24
|
+
}
|
|
25
|
+
export function hydrate(component, container) {
|
|
26
|
+
enterHydration(container);
|
|
27
|
+
component();
|
|
28
|
+
if (exitHydration().recoverableMismatch)
|
|
29
|
+
render(component, container);
|
|
30
|
+
replayEvents(container);
|
|
31
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type HydrationDiagnostics } from "./hydration.js";
|
|
2
|
+
import { type RouterNavigationDiagnostics } from "./router.js";
|
|
3
|
+
import { REACTIVE_TRACE_SCHEMA_VERSION, type ReactiveDiagnosticEvent, type ReactiveDiagnosticsSnapshot, type ReactiveTraceArtifact } from "../reactive/diagnostics.js";
|
|
4
|
+
export declare const RUNTIME_DEVTOOLS_SCHEMA_VERSION: 1;
|
|
5
|
+
export interface RuntimeDevtoolsRouteEntry {
|
|
6
|
+
path: string;
|
|
7
|
+
methods: string[];
|
|
8
|
+
isApi: boolean;
|
|
9
|
+
hasLoader: boolean;
|
|
10
|
+
hasMiddleware: boolean;
|
|
11
|
+
title?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface RuntimeDevtoolsRouteSummary {
|
|
14
|
+
total: number;
|
|
15
|
+
pages: number;
|
|
16
|
+
apis: number;
|
|
17
|
+
loaders: number;
|
|
18
|
+
middleware: number;
|
|
19
|
+
}
|
|
20
|
+
export interface RuntimeDevtoolsTopNode {
|
|
21
|
+
id: number;
|
|
22
|
+
kind: ReactiveTraceArtifact["nodes"][number]["kind"];
|
|
23
|
+
label?: string;
|
|
24
|
+
score: number;
|
|
25
|
+
reads: number;
|
|
26
|
+
writes: number;
|
|
27
|
+
runs: number;
|
|
28
|
+
invalidations: number;
|
|
29
|
+
}
|
|
30
|
+
export interface RuntimeDevtoolsSummary {
|
|
31
|
+
navigationState: "idle" | "navigating";
|
|
32
|
+
activeRoute: string;
|
|
33
|
+
hydrationState: "stable" | "recovering";
|
|
34
|
+
mismatchCount: number;
|
|
35
|
+
topReactiveNode: string | null;
|
|
36
|
+
recentReactiveEventKinds: string[];
|
|
37
|
+
}
|
|
38
|
+
export interface RuntimeDevtoolsSnapshot {
|
|
39
|
+
schemaVersion: typeof RUNTIME_DEVTOOLS_SCHEMA_VERSION;
|
|
40
|
+
generatedAt: string;
|
|
41
|
+
reactiveTraceSchemaVersion: typeof REACTIVE_TRACE_SCHEMA_VERSION;
|
|
42
|
+
navigation: RouterNavigationDiagnostics;
|
|
43
|
+
hydration: HydrationDiagnostics;
|
|
44
|
+
reactive: {
|
|
45
|
+
snapshot: ReactiveDiagnosticsSnapshot;
|
|
46
|
+
topNodes: RuntimeDevtoolsTopNode[];
|
|
47
|
+
recentEvents: ReactiveDiagnosticEvent[];
|
|
48
|
+
trace?: ReactiveTraceArtifact;
|
|
49
|
+
};
|
|
50
|
+
routes?: {
|
|
51
|
+
summary: RuntimeDevtoolsRouteSummary;
|
|
52
|
+
entries: RuntimeDevtoolsRouteEntry[];
|
|
53
|
+
};
|
|
54
|
+
summary: RuntimeDevtoolsSummary;
|
|
55
|
+
}
|
|
56
|
+
export interface RuntimeDevtoolsOptions {
|
|
57
|
+
includeTrace?: boolean;
|
|
58
|
+
maxReactiveEvents?: number;
|
|
59
|
+
maxTopNodes?: number;
|
|
60
|
+
routes?: RuntimeDevtoolsRouteEntry[];
|
|
61
|
+
}
|
|
62
|
+
export declare function createRuntimeDevtoolsSnapshot(options?: RuntimeDevtoolsOptions): RuntimeDevtoolsSnapshot;
|
|
63
|
+
export declare function renderRuntimeDevtoolsHTML(snapshot: RuntimeDevtoolsSnapshot): string;
|
|
64
|
+
export declare function renderRuntimeDevtoolsOverlay(snapshot: RuntimeDevtoolsSnapshot, nonce?: string): string;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { escapeHTML } from "./html-escape.js";
|
|
2
|
+
import { getHydrationDiagnostics } from "./hydration.js";
|
|
3
|
+
import { getRouterNavigationDiagnostics } from "./router.js";
|
|
4
|
+
import {
|
|
5
|
+
getReactiveTraceArtifact,
|
|
6
|
+
REACTIVE_TRACE_SCHEMA_VERSION
|
|
7
|
+
} from "../reactive/diagnostics.js";
|
|
8
|
+
export const RUNTIME_DEVTOOLS_SCHEMA_VERSION = 1;
|
|
9
|
+
function sortTopNodes(trace, limit) {
|
|
10
|
+
return trace.nodes.map((node) => ({
|
|
11
|
+
id: node.id,
|
|
12
|
+
kind: node.kind,
|
|
13
|
+
label: node.label,
|
|
14
|
+
score: node.reads + node.writes + node.runs + node.invalidations,
|
|
15
|
+
reads: node.reads,
|
|
16
|
+
writes: node.writes,
|
|
17
|
+
runs: node.runs,
|
|
18
|
+
invalidations: node.invalidations
|
|
19
|
+
})).sort((left, right) => right.score - left.score || right.runs - left.runs || left.id - right.id).slice(0, Math.max(1, limit));
|
|
20
|
+
}
|
|
21
|
+
function summarizeRoutes(entries) {
|
|
22
|
+
return {
|
|
23
|
+
total: entries.length,
|
|
24
|
+
pages: entries.filter((entry) => !entry.isApi).length,
|
|
25
|
+
apis: entries.filter((entry) => entry.isApi).length,
|
|
26
|
+
loaders: entries.filter((entry) => entry.hasLoader).length,
|
|
27
|
+
middleware: entries.filter((entry) => entry.hasMiddleware).length
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function summarizeSnapshot(navigation, hydration, topNodes, recentEvents) {
|
|
31
|
+
return {
|
|
32
|
+
navigationState: navigation.navigating ? "navigating" : "idle",
|
|
33
|
+
activeRoute: navigation.activeNavigation?.url ?? navigation.currentPath,
|
|
34
|
+
hydrationState: hydration.recoverableMismatch ? "recovering" : "stable",
|
|
35
|
+
mismatchCount: hydration.mismatches,
|
|
36
|
+
topReactiveNode: topNodes[0]?.label ?? topNodes[0]?.kind ?? null,
|
|
37
|
+
recentReactiveEventKinds: recentEvents.slice(-5).map((event) => event.kind)
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function createRuntimeDevtoolsSnapshot(options = {}) {
|
|
41
|
+
const trace = getReactiveTraceArtifact(), maxReactiveEvents = Math.max(1, options.maxReactiveEvents ?? 20), topNodes = sortTopNodes(trace, options.maxTopNodes ?? 5), recentEvents = trace.events.slice(-maxReactiveEvents), navigation = getRouterNavigationDiagnostics(), hydration = getHydrationDiagnostics(), routes = options.routes ? {
|
|
42
|
+
summary: summarizeRoutes(options.routes),
|
|
43
|
+
entries: [...options.routes]
|
|
44
|
+
} : void 0;
|
|
45
|
+
return {
|
|
46
|
+
schemaVersion: RUNTIME_DEVTOOLS_SCHEMA_VERSION,
|
|
47
|
+
generatedAt: new Date().toISOString(),
|
|
48
|
+
reactiveTraceSchemaVersion: REACTIVE_TRACE_SCHEMA_VERSION,
|
|
49
|
+
navigation,
|
|
50
|
+
hydration,
|
|
51
|
+
reactive: {
|
|
52
|
+
snapshot: trace.snapshot,
|
|
53
|
+
topNodes,
|
|
54
|
+
recentEvents,
|
|
55
|
+
trace: options.includeTrace ? trace : void 0
|
|
56
|
+
},
|
|
57
|
+
routes,
|
|
58
|
+
summary: summarizeSnapshot(navigation, hydration, topNodes, recentEvents)
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function renderKeyValueGrid(entries) {
|
|
62
|
+
return `<div class="g-devtools-grid">${entries.map((entry) => `<div class="g-devtools-card"><div class="g-devtools-key">${escapeHTML(entry.key)}</div><div class="g-devtools-value">${escapeHTML(entry.value)}</div></div>`).join("")}</div>`;
|
|
63
|
+
}
|
|
64
|
+
export function renderRuntimeDevtoolsHTML(snapshot) {
|
|
65
|
+
const routeSummary = snapshot.routes ? renderKeyValueGrid([
|
|
66
|
+
{ key: "Routes", value: String(snapshot.routes.summary.total) },
|
|
67
|
+
{ key: "Pages", value: String(snapshot.routes.summary.pages) },
|
|
68
|
+
{ key: "API", value: String(snapshot.routes.summary.apis) },
|
|
69
|
+
{ key: "Loaders", value: String(snapshot.routes.summary.loaders) },
|
|
70
|
+
{ key: "Middleware", value: String(snapshot.routes.summary.middleware) }
|
|
71
|
+
]) : "", topNodes = snapshot.reactive.topNodes.length > 0 ? snapshot.reactive.topNodes.map((node) => `<tr><td>${escapeHTML(node.label ?? `#${node.id}`)}</td><td>${escapeHTML(node.kind)}</td><td>${node.score}</td><td>${node.runs}</td><td>${node.invalidations}</td></tr>`).join("") : '<tr><td colspan="5">No reactive activity captured</td></tr>', recentEvents = snapshot.reactive.recentEvents.length > 0 ? snapshot.reactive.recentEvents.map((event) => `<tr><td>${event.seq}</td><td>${escapeHTML(event.kind)}</td><td>${escapeHTML(event.label ?? "-")}</td><td>${escapeHTML(event.reason ?? event.detail ?? "-")}</td></tr>`).join("") : '<tr><td colspan="4">No reactive events captured</td></tr>', routeRows = snapshot.routes?.entries.length ? snapshot.routes.entries.map((route) => `<tr><td>${escapeHTML(route.path)}</td><td>${escapeHTML(route.methods.join(", ") || "GET")}</td><td>${route.isApi ? "API" : "Page"}</td><td>${route.hasLoader ? "Yes" : "-"}</td><td>${route.hasMiddleware ? "Yes" : "-"}</td></tr>`).join("") : "";
|
|
72
|
+
return `<div class="g-devtools">
|
|
73
|
+
<style>
|
|
74
|
+
.g-devtools{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:linear-gradient(180deg,#0f172a,#111827);color:#e5eefb;padding:24px;border-radius:18px}
|
|
75
|
+
.g-devtools h1,.g-devtools h2{margin:0 0 12px}
|
|
76
|
+
.g-devtools p{margin:0 0 12px;color:#b7c3d9}
|
|
77
|
+
.g-devtools-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin:12px 0 20px}
|
|
78
|
+
.g-devtools-card{background:#172033;border:1px solid #30415f;border-radius:12px;padding:12px}
|
|
79
|
+
.g-devtools-key{font-size:11px;text-transform:uppercase;color:#8ea3c7;margin-bottom:6px}
|
|
80
|
+
.g-devtools-value{font-size:18px;font-weight:700}
|
|
81
|
+
.g-devtools-table{width:100%;border-collapse:collapse;margin-top:12px}
|
|
82
|
+
.g-devtools-table th,.g-devtools-table td{padding:10px;border-bottom:1px solid #24324d;text-align:left;vertical-align:top}
|
|
83
|
+
.g-devtools-pill{display:inline-block;padding:4px 8px;border-radius:999px;background:#1d4ed833;color:#93c5fd;font-size:12px}
|
|
84
|
+
.g-devtools-section{margin-top:22px}
|
|
85
|
+
</style>
|
|
86
|
+
<h1>Gorsee Runtime Inspector</h1>
|
|
87
|
+
<p>Path: ${escapeHTML(snapshot.summary.activeRoute || "/")} | Navigation: ${escapeHTML(snapshot.summary.navigationState)} | Hydration: ${escapeHTML(snapshot.summary.hydrationState)}</p>
|
|
88
|
+
${renderKeyValueGrid([
|
|
89
|
+
{ key: "Hydration mismatches", value: String(snapshot.hydration.mismatches) },
|
|
90
|
+
{ key: "Signals", value: String(snapshot.reactive.snapshot.signalsCreated) },
|
|
91
|
+
{ key: "Computeds", value: String(snapshot.reactive.snapshot.computedCreated) },
|
|
92
|
+
{ key: "Effects", value: String(snapshot.reactive.snapshot.effectCreated) },
|
|
93
|
+
{ key: "Resources", value: String(snapshot.reactive.snapshot.resourcesCreated) },
|
|
94
|
+
{ key: "Mutations", value: String(snapshot.reactive.snapshot.mutationsCreated) }
|
|
95
|
+
])}
|
|
96
|
+
${routeSummary}
|
|
97
|
+
<div class="g-devtools-section">
|
|
98
|
+
<h2>Top Reactive Nodes</h2>
|
|
99
|
+
<table class="g-devtools-table">
|
|
100
|
+
<thead><tr><th>Label</th><th>Kind</th><th>Score</th><th>Runs</th><th>Invalidations</th></tr></thead>
|
|
101
|
+
<tbody>${topNodes}</tbody>
|
|
102
|
+
</table>
|
|
103
|
+
</div>
|
|
104
|
+
<div class="g-devtools-section">
|
|
105
|
+
<h2>Recent Reactive Events</h2>
|
|
106
|
+
<table class="g-devtools-table">
|
|
107
|
+
<thead><tr><th>#</th><th>Kind</th><th>Label</th><th>Reason</th></tr></thead>
|
|
108
|
+
<tbody>${recentEvents}</tbody>
|
|
109
|
+
</table>
|
|
110
|
+
</div>
|
|
111
|
+
${routeRows ? `<div class="g-devtools-section">
|
|
112
|
+
<h2>Route Tree</h2>
|
|
113
|
+
<table class="g-devtools-table">
|
|
114
|
+
<thead><tr><th>Path</th><th>Methods</th><th>Type</th><th>Loader</th><th>Middleware</th></tr></thead>
|
|
115
|
+
<tbody>${routeRows}</tbody>
|
|
116
|
+
</table>
|
|
117
|
+
</div>` : ""}
|
|
118
|
+
</div>`;
|
|
119
|
+
}
|
|
120
|
+
export function renderRuntimeDevtoolsOverlay(snapshot, nonce = "") {
|
|
121
|
+
return `<!DOCTYPE html>
|
|
122
|
+
<html>
|
|
123
|
+
<head>
|
|
124
|
+
<meta charset="UTF-8" />
|
|
125
|
+
<title>Gorsee Runtime Inspector</title>
|
|
126
|
+
</head>
|
|
127
|
+
<body>
|
|
128
|
+
${nonce ? `<script nonce="${escapeHTML(nonce)}"></script>` : ""}
|
|
129
|
+
${renderRuntimeDevtoolsHTML(snapshot)}
|
|
130
|
+
</body>
|
|
131
|
+
</html>`;
|
|
132
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { GorseeRenderable } from "./renderable.js";
|
|
2
|
+
export interface ErrorBoundaryProps {
|
|
3
|
+
fallback: GorseeRenderable | ((error: Error) => GorseeRenderable);
|
|
4
|
+
children: GorseeRenderable;
|
|
5
|
+
}
|
|
6
|
+
export declare function ErrorBoundary(props: ErrorBoundaryProps): GorseeRenderable;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createSignal } from "../reactive/signal.js";
|
|
2
|
+
export function ErrorBoundary(props) {
|
|
3
|
+
const [error, setError] = createSignal(null);
|
|
4
|
+
try {
|
|
5
|
+
const children = typeof props.children === "function" ? props.children() : props.children;
|
|
6
|
+
return () => {
|
|
7
|
+
const err = error();
|
|
8
|
+
if (err)
|
|
9
|
+
return typeof props.fallback === "function" ? props.fallback(err) : props.fallback;
|
|
10
|
+
return children;
|
|
11
|
+
};
|
|
12
|
+
} catch (err) {
|
|
13
|
+
const errObj = err instanceof Error ? err : Error(String(err));
|
|
14
|
+
setError(errObj);
|
|
15
|
+
return typeof props.fallback === "function" ? props.fallback(errObj) : props.fallback;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const EVENT_REPLAY_SCRIPT = "<script data-g-event-replay>\n(function(){\n var Q=[];\n var E=[\"click\",\"input\",\"change\",\"submit\",\"keydown\",\"keyup\",\"focusin\",\"focusout\"];\n function capture(e){\n Q.push({type:e.type,target:e.target,timeStamp:e.timeStamp,\n detail:e.type===\"input\"?e.target.value:undefined,\n key:e.key||undefined});\n if(e.type===\"submit\")e.preventDefault();\n }\n E.forEach(function(t){document.addEventListener(t,capture,{capture:true})});\n window.__gorsee_events={\n queue:Q,\n stop:function(){E.forEach(function(t){document.removeEventListener(t,capture,{capture:true})})},\n replay:function(root){\n this.stop();\n Q.forEach(function(ev){\n if(ev.target&&root.contains(ev.target)){\n ev.target.dispatchEvent(new Event(ev.type,{bubbles:true}));\n }\n });\n Q.length=0;\n }\n };\n})();\n</script>";
|
|
2
|
+
export declare function replayEvents(root: Element): void;
|
|
3
|
+
export declare function stopEventCapture(): void;
|