gorsee 0.2.4 → 0.2.6
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 +283 -212
- 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 +173 -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} +44 -28
- 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 +53 -0
- package/dist-pkg/plugins/index.d.ts +62 -0
- package/dist-pkg/plugins/index.js +159 -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 +60 -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 +70 -0
- package/dist-pkg/reactive/optimistic.d.ts +20 -0
- package/dist-pkg/reactive/optimistic.js +67 -0
- package/dist-pkg/reactive/resource.d.ts +25 -0
- package/dist-pkg/reactive/resource.js +153 -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 +42 -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} +20 -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 +65 -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 +74 -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 +176 -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 +487 -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 +77 -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 +83 -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 +127 -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 +27 -0
- package/dist-pkg/server/page-render.d.ts +29 -0
- package/dist-pkg/server/page-render.js +70 -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 +46 -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 +61 -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 +257 -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 +110 -45
- package/bin/gorsee.js +0 -2
- package/src/auth/index.ts +0 -178
- package/src/auth/redis-session-store.ts +0 -46
- package/src/auth/sqlite-session-store.ts +0 -98
- package/src/auth/store-utils.ts +0 -21
- package/src/build/client.ts +0 -139
- package/src/build/css-modules.ts +0 -69
- package/src/build/devalue-parse.ts +0 -2
- package/src/build/manifest.ts +0 -34
- package/src/build/route-metadata.ts +0 -12
- package/src/build/rpc-transform.ts +0 -62
- package/src/build/server-strip.ts +0 -87
- package/src/build/ssg.ts +0 -70
- package/src/cli/bun-plugin.ts +0 -58
- package/src/cli/cmd-build.ts +0 -153
- package/src/cli/cmd-check.ts +0 -239
- package/src/cli/cmd-create.ts +0 -328
- package/src/cli/cmd-deploy.ts +0 -149
- package/src/cli/cmd-dev.ts +0 -13
- package/src/cli/cmd-docs.ts +0 -152
- package/src/cli/cmd-generate.ts +0 -155
- package/src/cli/cmd-migrate.ts +0 -53
- package/src/cli/cmd-routes.ts +0 -36
- package/src/cli/cmd-start.ts +0 -30
- package/src/cli/cmd-test.ts +0 -129
- package/src/cli/cmd-typegen.ts +0 -93
- package/src/cli/cmd-upgrade.ts +0 -143
- package/src/cli/context.ts +0 -12
- package/src/cli/framework-md.ts +0 -223
- package/src/cli/index.ts +0 -107
- package/src/client.ts +0 -26
- package/src/db/index.ts +0 -2
- package/src/db/migrate.ts +0 -89
- package/src/db/sqlite.ts +0 -40
- package/src/deploy/index.ts +0 -31
- package/src/deploy/vercel.ts +0 -94
- package/src/dev/hmr.ts +0 -31
- package/src/dev/partial-handler.ts +0 -52
- package/src/dev/request-handler.ts +0 -127
- package/src/dev/watcher.ts +0 -48
- package/src/dev.ts +0 -208
- package/src/env/index.ts +0 -74
- package/src/errors/formatter.ts +0 -63
- package/src/errors/index.ts +0 -2
- package/src/i18n/index.ts +0 -72
- package/src/index-client.ts +0 -4
- package/src/index.ts +0 -43
- package/src/jsx-runtime-client.ts +0 -13
- package/src/jsx-runtime.ts +0 -20
- package/src/jsx-types-html.ts +0 -242
- package/src/log/index.ts +0 -44
- package/src/plugins/drizzle.ts +0 -84
- package/src/plugins/index.ts +0 -86
- package/src/plugins/lucia.ts +0 -111
- package/src/plugins/prisma.ts +0 -85
- package/src/plugins/resend.ts +0 -78
- package/src/plugins/s3.ts +0 -102
- package/src/plugins/stripe.ts +0 -133
- package/src/plugins/tailwind.ts +0 -92
- package/src/prod.ts +0 -252
- package/src/reactive/computed.ts +0 -7
- package/src/reactive/effect.ts +0 -7
- package/src/reactive/index.ts +0 -7
- package/src/reactive/live.ts +0 -97
- package/src/reactive/optimistic.ts +0 -83
- package/src/reactive/resource.ts +0 -138
- package/src/reactive/signal.ts +0 -20
- package/src/reactive/store.ts +0 -36
- package/src/router/index.ts +0 -2
- package/src/router/matcher.ts +0 -53
- package/src/router/scanner.ts +0 -206
- package/src/runtime/client.ts +0 -28
- package/src/runtime/error-boundary.ts +0 -35
- package/src/runtime/form.ts +0 -49
- package/src/runtime/head.ts +0 -113
- package/src/runtime/html-escape.ts +0 -30
- package/src/runtime/hydration.ts +0 -95
- package/src/runtime/image.ts +0 -48
- package/src/runtime/index.ts +0 -12
- package/src/runtime/island-hydrator.ts +0 -84
- package/src/runtime/island.ts +0 -88
- package/src/runtime/jsx-runtime.ts +0 -167
- package/src/runtime/link.ts +0 -45
- package/src/runtime/project.ts +0 -73
- package/src/runtime/router.ts +0 -224
- package/src/runtime/server.ts +0 -102
- package/src/runtime/stream.ts +0 -182
- package/src/runtime/suspense.ts +0 -37
- package/src/runtime/typed-routes.ts +0 -26
- package/src/runtime/validated-form.ts +0 -106
- package/src/security/cors.ts +0 -80
- package/src/security/csrf.ts +0 -85
- package/src/security/headers.ts +0 -50
- package/src/security/index.ts +0 -4
- package/src/security/rate-limit.ts +0 -80
- package/src/server/action.ts +0 -48
- package/src/server/cache-utils.ts +0 -23
- package/src/server/cache.ts +0 -125
- package/src/server/compress.ts +0 -60
- package/src/server/etag.ts +0 -23
- package/src/server/guard.ts +0 -69
- package/src/server/html-shell.ts +0 -69
- package/src/server/index.ts +0 -57
- package/src/server/manifest.ts +0 -36
- package/src/server/middleware.ts +0 -159
- package/src/server/not-found.ts +0 -35
- package/src/server/page-render.ts +0 -123
- package/src/server/pipe.ts +0 -46
- package/src/server/redis-cache-store.ts +0 -87
- package/src/server/redis-client.ts +0 -71
- package/src/server/request-preflight.ts +0 -45
- package/src/server/route-request.ts +0 -72
- package/src/server/rpc-hash.ts +0 -17
- package/src/server/rpc-utils.ts +0 -27
- package/src/server/rpc.ts +0 -177
- package/src/server/sqlite-cache-store.ts +0 -109
- package/src/server/sse.ts +0 -96
- package/src/server/static-file.ts +0 -63
- package/src/server/ws.ts +0 -56
- package/src/server-entry.ts +0 -36
- package/src/testing/index.ts +0 -74
- package/src/types/index.ts +0 -4
- package/src/types/safe-html.ts +0 -32
- package/src/types/safe-sql.ts +0 -28
- package/src/types/safe-url.ts +0 -40
- package/src/types/user-input.ts +0 -12
- package/src/unsafe/index.ts +0 -18
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type SignalGetter } from "./signal.js";
|
|
2
|
+
export interface ResourceOptions {
|
|
3
|
+
/** Initial data (skip first fetch) */
|
|
4
|
+
initialData?: unknown;
|
|
5
|
+
/** Retry count on failure (default: 0) */
|
|
6
|
+
retry?: number;
|
|
7
|
+
/** Retry delay in ms (default: 1000) */
|
|
8
|
+
retryDelay?: number;
|
|
9
|
+
/** Cache key for deduplication */
|
|
10
|
+
key?: string;
|
|
11
|
+
/** Stale time in ms — refetch after this period */
|
|
12
|
+
staleTime?: number;
|
|
13
|
+
/** Optional diagnostics label for reactive tracing */
|
|
14
|
+
label?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ResourceState<T> {
|
|
17
|
+
loading: SignalGetter<boolean>;
|
|
18
|
+
error: SignalGetter<Error | undefined>;
|
|
19
|
+
refetch: () => void;
|
|
20
|
+
mutate: (value: T | undefined | ((prev: T | undefined) => T | undefined)) => void;
|
|
21
|
+
}
|
|
22
|
+
export type ResourceReturn<T> = [SignalGetter<T | undefined>, ResourceState<T>];
|
|
23
|
+
export declare function invalidateResource(key: string): void;
|
|
24
|
+
export declare function invalidateAll(): void;
|
|
25
|
+
export declare function createResource<T>(fetcher: () => Promise<T>, options?: ResourceOptions): ResourceReturn<T>;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { createSignal } from "./signal.js";
|
|
2
|
+
import {
|
|
3
|
+
trackResourceCreated,
|
|
4
|
+
trackResourceInvalidation,
|
|
5
|
+
trackResourceLoadError,
|
|
6
|
+
trackResourceLoadStart,
|
|
7
|
+
trackResourceLoadSuccess,
|
|
8
|
+
trackResourceMutate,
|
|
9
|
+
trackResourceRefetch
|
|
10
|
+
} from "./diagnostics.js";
|
|
11
|
+
const resourceCache = new Map, resourceCacheEpochs = new Map;
|
|
12
|
+
function getCacheEpoch(key) {
|
|
13
|
+
return resourceCacheEpochs.get(key) ?? 0;
|
|
14
|
+
}
|
|
15
|
+
function bumpCacheEpoch(key) {
|
|
16
|
+
const nextEpoch = getCacheEpoch(key) + 1;
|
|
17
|
+
resourceCacheEpochs.set(key, nextEpoch);
|
|
18
|
+
return nextEpoch;
|
|
19
|
+
}
|
|
20
|
+
export function invalidateResource(key) {
|
|
21
|
+
bumpCacheEpoch(key);
|
|
22
|
+
resourceCache.delete(key);
|
|
23
|
+
trackResourceInvalidation(key, "resource.invalidate");
|
|
24
|
+
}
|
|
25
|
+
export function invalidateAll() {
|
|
26
|
+
for (const key of resourceCache.keys()) {
|
|
27
|
+
bumpCacheEpoch(key);
|
|
28
|
+
trackResourceInvalidation(key, "resource.invalidateAll");
|
|
29
|
+
}
|
|
30
|
+
resourceCache.clear();
|
|
31
|
+
}
|
|
32
|
+
export function createResource(fetcher, options) {
|
|
33
|
+
const retryCount = options?.retry ?? 0, retryDelay = options?.retryDelay ?? 1000, cacheKey = options?.key, staleTime = options?.staleTime, diagnosticsLabel = options?.label ?? cacheKey, resourceNodeId = trackResourceCreated(diagnosticsLabel, cacheKey), cached = cacheKey ? resourceCache.get(cacheKey) : void 0, hasValidCache = cached && staleTime && Date.now() - cached.fetchedAt < staleTime, initialValue = hasValidCache ? cached.data : options?.initialData, [data, setData] = createSignal(initialValue), [loading, setLoading] = createSignal(!hasValidCache), [error, setError] = createSignal(void 0);
|
|
34
|
+
let currentLoadId = 0;
|
|
35
|
+
function writeCachedValue(value) {
|
|
36
|
+
if (!cacheKey)
|
|
37
|
+
return;
|
|
38
|
+
resourceCache.set(cacheKey, {
|
|
39
|
+
data: value,
|
|
40
|
+
fetchedAt: Date.now()
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async function fetchWithRetry(attempt) {
|
|
44
|
+
try {
|
|
45
|
+
return await fetcher();
|
|
46
|
+
} catch (err) {
|
|
47
|
+
if (attempt < retryCount) {
|
|
48
|
+
await new Promise((r) => setTimeout(r, retryDelay * (attempt + 1)));
|
|
49
|
+
return fetchWithRetry(attempt + 1);
|
|
50
|
+
}
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const load = (forceFresh = !1) => {
|
|
55
|
+
const loadId = ++currentLoadId;
|
|
56
|
+
if (cacheKey && !forceFresh) {
|
|
57
|
+
const entry = resourceCache.get(cacheKey);
|
|
58
|
+
if (entry?.promise) {
|
|
59
|
+
const cacheEpoch = getCacheEpoch(cacheKey);
|
|
60
|
+
trackResourceLoadStart(resourceNodeId, diagnosticsLabel, cacheKey, "deduped");
|
|
61
|
+
entry.promise.then((result) => {
|
|
62
|
+
if (loadId !== currentLoadId)
|
|
63
|
+
return;
|
|
64
|
+
if (getCacheEpoch(cacheKey) !== cacheEpoch) {
|
|
65
|
+
setLoading(!1);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
setData(() => result);
|
|
69
|
+
setLoading(!1);
|
|
70
|
+
trackResourceLoadSuccess(resourceNodeId, diagnosticsLabel, cacheKey);
|
|
71
|
+
}).catch((err) => {
|
|
72
|
+
if (loadId !== currentLoadId)
|
|
73
|
+
return;
|
|
74
|
+
if (getCacheEpoch(cacheKey) !== cacheEpoch) {
|
|
75
|
+
setLoading(!1);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
setError(err instanceof Error ? err : Error(String(err)));
|
|
79
|
+
setLoading(!1);
|
|
80
|
+
trackResourceLoadError(resourceNodeId, diagnosticsLabel, cacheKey, err instanceof Error ? err.message : String(err));
|
|
81
|
+
});
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const cacheEpoch = cacheKey ? bumpCacheEpoch(cacheKey) : 0;
|
|
86
|
+
setLoading(!0);
|
|
87
|
+
setError(void 0);
|
|
88
|
+
trackResourceLoadStart(resourceNodeId, diagnosticsLabel, cacheKey);
|
|
89
|
+
const promise = fetchWithRetry(0);
|
|
90
|
+
if (cacheKey) {
|
|
91
|
+
const entry = resourceCache.get(cacheKey) ?? { data: void 0, fetchedAt: 0 };
|
|
92
|
+
entry.promise = promise;
|
|
93
|
+
resourceCache.set(cacheKey, entry);
|
|
94
|
+
}
|
|
95
|
+
promise.then((result) => {
|
|
96
|
+
if (loadId !== currentLoadId)
|
|
97
|
+
return;
|
|
98
|
+
if (cacheKey && getCacheEpoch(cacheKey) !== cacheEpoch) {
|
|
99
|
+
setLoading(!1);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
setData(() => result);
|
|
103
|
+
setLoading(!1);
|
|
104
|
+
trackResourceLoadSuccess(resourceNodeId, diagnosticsLabel, cacheKey);
|
|
105
|
+
if (cacheKey)
|
|
106
|
+
resourceCache.set(cacheKey, { data: result, fetchedAt: Date.now() });
|
|
107
|
+
}).catch((err) => {
|
|
108
|
+
if (loadId !== currentLoadId)
|
|
109
|
+
return;
|
|
110
|
+
if (cacheKey && getCacheEpoch(cacheKey) !== cacheEpoch) {
|
|
111
|
+
setLoading(!1);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
setError(err instanceof Error ? err : Error(String(err)));
|
|
115
|
+
setLoading(!1);
|
|
116
|
+
trackResourceLoadError(resourceNodeId, diagnosticsLabel, cacheKey, err instanceof Error ? err.message : String(err));
|
|
117
|
+
if (cacheKey) {
|
|
118
|
+
const entry = resourceCache.get(cacheKey);
|
|
119
|
+
if (entry)
|
|
120
|
+
entry.promise = void 0;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
if (!hasValidCache)
|
|
125
|
+
load();
|
|
126
|
+
return [
|
|
127
|
+
data,
|
|
128
|
+
{
|
|
129
|
+
loading,
|
|
130
|
+
error,
|
|
131
|
+
refetch: () => {
|
|
132
|
+
trackResourceRefetch(resourceNodeId, diagnosticsLabel, cacheKey);
|
|
133
|
+
load(!0);
|
|
134
|
+
},
|
|
135
|
+
mutate: (value) => {
|
|
136
|
+
trackResourceMutate(resourceNodeId, diagnosticsLabel, cacheKey);
|
|
137
|
+
currentLoadId++;
|
|
138
|
+
if (cacheKey)
|
|
139
|
+
bumpCacheEpoch(cacheKey);
|
|
140
|
+
setLoading(!1);
|
|
141
|
+
setError(void 0);
|
|
142
|
+
if (typeof value === "function") {
|
|
143
|
+
const nextValue = value(data());
|
|
144
|
+
setData(() => nextValue);
|
|
145
|
+
writeCachedValue(nextValue);
|
|
146
|
+
} else {
|
|
147
|
+
setData(() => value);
|
|
148
|
+
writeCachedValue(value);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
];
|
|
153
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ReactiveDiagnosticOptions } from "./diagnostics.js";
|
|
2
|
+
export type SignalGetter<T> = () => T;
|
|
3
|
+
export type SignalSetter<T> = (value: T | ((prev: T) => T)) => void;
|
|
4
|
+
export declare function createSignal<T>(initialValue: T, options?: ReactiveDiagnosticOptions): [SignalGetter<T>, SignalSetter<T>];
|
|
@@ -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,42 @@
|
|
|
1
|
+
import { jsx } from "./jsx-runtime.js";
|
|
2
|
+
import { enterHydration, exitHydration, isHydrating } 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 renderVNodeLike(vnode) {
|
|
9
|
+
return jsx(vnode.type, vnode.props);
|
|
10
|
+
}
|
|
11
|
+
function insertResult(container, result) {
|
|
12
|
+
if (result instanceof Node)
|
|
13
|
+
container.appendChild(result);
|
|
14
|
+
else if (typeof result === "object" && result !== null && isVNodeLike(result))
|
|
15
|
+
container.appendChild(renderVNodeLike(result));
|
|
16
|
+
else if (Array.isArray(result))
|
|
17
|
+
for (const child of result)
|
|
18
|
+
insertResult(container, child);
|
|
19
|
+
else if (isRenderableThunk(result))
|
|
20
|
+
insertResult(container, result());
|
|
21
|
+
else if (result != null && typeof result !== "boolean")
|
|
22
|
+
container.appendChild(document.createTextNode(String(result)));
|
|
23
|
+
}
|
|
24
|
+
export function render(component, container) {
|
|
25
|
+
container.replaceChildren();
|
|
26
|
+
insertResult(container, component());
|
|
27
|
+
}
|
|
28
|
+
export function hydrate(component, container) {
|
|
29
|
+
enterHydration(container);
|
|
30
|
+
let diagnostics;
|
|
31
|
+
try {
|
|
32
|
+
component();
|
|
33
|
+
diagnostics = exitHydration();
|
|
34
|
+
} catch (error) {
|
|
35
|
+
if (isHydrating())
|
|
36
|
+
exitHydration();
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
if (diagnostics.recoverableMismatch)
|
|
40
|
+
render(component, container);
|
|
41
|
+
replayEvents(container);
|
|
42
|
+
}
|
|
@@ -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;
|