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,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;
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
// Event Replay -- captures user interactions before hydration completes
|
|
2
|
-
// Inspired by Angular's JSAction / Google Wiz
|
|
3
|
-
//
|
|
4
|
-
// This generates a small inline <script> (~400 bytes minified)
|
|
5
|
-
// that should be placed before any app content in the HTML.
|
|
6
|
-
|
|
7
1
|
export const EVENT_REPLAY_SCRIPT = `<script data-g-event-replay>
|
|
8
2
|
(function(){
|
|
9
3
|
var Q=[];
|
|
@@ -29,22 +23,26 @@ export const EVENT_REPLAY_SCRIPT = `<script data-g-event-replay>
|
|
|
29
23
|
}
|
|
30
24
|
};
|
|
31
25
|
})();
|
|
32
|
-
</script
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
</script>`;
|
|
27
|
+
function getEventReplay() {
|
|
28
|
+
const value = globalThis.__gorsee_events;
|
|
29
|
+
if (!value || typeof value !== "object")
|
|
30
|
+
return;
|
|
31
|
+
return value;
|
|
38
32
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
export function replayEvents(root) {
|
|
34
|
+
const replay = getEventReplay()?.replay;
|
|
35
|
+
if (typeof replay !== "function")
|
|
36
|
+
return;
|
|
37
|
+
try {
|
|
38
|
+
replay(root);
|
|
39
|
+
} catch {}
|
|
42
40
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
41
|
+
export function stopEventCapture() {
|
|
42
|
+
const stop = getEventReplay()?.stop;
|
|
43
|
+
if (typeof stop !== "function")
|
|
44
|
+
return;
|
|
45
|
+
try {
|
|
46
|
+
stop();
|
|
47
|
+
} catch {}
|
|
50
48
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type SignalGetter } from "../reactive/signal.js";
|
|
2
|
+
export interface EventSourceSignal<T> {
|
|
3
|
+
readonly value: SignalGetter<T>;
|
|
4
|
+
readonly connected: SignalGetter<boolean>;
|
|
5
|
+
close: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function createEventSource<T>(url: string, event: string, initialValue: T): EventSourceSignal<T>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createSignal } from "../reactive/signal.js";
|
|
2
|
+
export function createEventSource(url, event, initialValue) {
|
|
3
|
+
const [value, setValue] = createSignal(initialValue), [connected, setConnected] = createSignal(!1);
|
|
4
|
+
if (typeof globalThis.EventSource > "u")
|
|
5
|
+
return { value, connected, close: () => {} };
|
|
6
|
+
const source = new EventSource(url);
|
|
7
|
+
source.addEventListener("open", () => {
|
|
8
|
+
setConnected(!0);
|
|
9
|
+
});
|
|
10
|
+
source.addEventListener(event, (e) => {
|
|
11
|
+
try {
|
|
12
|
+
const parsed = JSON.parse(String(e.data));
|
|
13
|
+
setValue(parsed);
|
|
14
|
+
} catch {}
|
|
15
|
+
});
|
|
16
|
+
source.addEventListener("error", () => {
|
|
17
|
+
setConnected(!1);
|
|
18
|
+
});
|
|
19
|
+
function close() {
|
|
20
|
+
source.close();
|
|
21
|
+
setConnected(!1);
|
|
22
|
+
}
|
|
23
|
+
return { value, connected, close };
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type SignalGetter } from "../reactive/signal.js";
|
|
2
|
+
export interface FormActionResult<T = unknown> {
|
|
3
|
+
ok?: boolean;
|
|
4
|
+
status?: number;
|
|
5
|
+
data?: T;
|
|
6
|
+
error?: string;
|
|
7
|
+
fieldErrors?: Record<string, string[]>;
|
|
8
|
+
formErrors?: string[];
|
|
9
|
+
values?: Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
export interface FormSubmitOptions<T = unknown> {
|
|
12
|
+
optimisticData?: T;
|
|
13
|
+
}
|
|
14
|
+
export interface FormState<T = unknown> {
|
|
15
|
+
submitting: SignalGetter<boolean>;
|
|
16
|
+
status: SignalGetter<"idle" | "submitting" | "success" | "error">;
|
|
17
|
+
error: SignalGetter<string | undefined>;
|
|
18
|
+
formErrors: SignalGetter<string[]>;
|
|
19
|
+
fieldErrors: SignalGetter<Record<string, string[]>>;
|
|
20
|
+
data: SignalGetter<T | undefined>;
|
|
21
|
+
submit: (formData: FormData | Record<string, string>, options?: FormSubmitOptions<T>) => Promise<FormActionResult<T>>;
|
|
22
|
+
reset: () => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function useFormAction<T = unknown>(actionUrl?: string): FormState<T>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { createSignal } from "../reactive/signal.js";
|
|
2
|
+
function isPlainFormActionResult(value) {
|
|
3
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
function normalizeFormInput(input) {
|
|
6
|
+
return input instanceof FormData ? input : new URLSearchParams(input);
|
|
7
|
+
}
|
|
8
|
+
export function useFormAction(actionUrl) {
|
|
9
|
+
const [submitting, setSubmitting] = createSignal(!1), [status, setStatus] = createSignal("idle"), [error, setError] = createSignal(void 0), [formErrors, setFormErrors] = createSignal([]), [fieldErrors, setFieldErrors] = createSignal({}), [data, setData] = createSignal(void 0);
|
|
10
|
+
function reset() {
|
|
11
|
+
setSubmitting(!1);
|
|
12
|
+
setStatus("idle");
|
|
13
|
+
setError(void 0);
|
|
14
|
+
setFormErrors([]);
|
|
15
|
+
setFieldErrors({});
|
|
16
|
+
setData(void 0);
|
|
17
|
+
}
|
|
18
|
+
async function submit(input, options = {}) {
|
|
19
|
+
setSubmitting(!0);
|
|
20
|
+
setStatus("submitting");
|
|
21
|
+
setError(void 0);
|
|
22
|
+
setFormErrors([]);
|
|
23
|
+
setFieldErrors({});
|
|
24
|
+
if (options.optimisticData !== void 0)
|
|
25
|
+
setData(() => options.optimisticData);
|
|
26
|
+
try {
|
|
27
|
+
const url = actionUrl ?? location.pathname, res = await fetch(url, {
|
|
28
|
+
method: "POST",
|
|
29
|
+
body: normalizeFormInput(input),
|
|
30
|
+
headers: {
|
|
31
|
+
Accept: "application/json"
|
|
32
|
+
}
|
|
33
|
+
}), decoded = await res.json();
|
|
34
|
+
if (!isPlainFormActionResult(decoded))
|
|
35
|
+
throw Error("Malformed form action response");
|
|
36
|
+
const rawResult = decoded, result = {
|
|
37
|
+
ok: rawResult.ok ?? res.ok,
|
|
38
|
+
status: rawResult.status ?? res.status,
|
|
39
|
+
data: rawResult.data,
|
|
40
|
+
error: rawResult.error,
|
|
41
|
+
fieldErrors: rawResult.fieldErrors,
|
|
42
|
+
formErrors: rawResult.formErrors,
|
|
43
|
+
values: rawResult.values
|
|
44
|
+
};
|
|
45
|
+
if (result.ok === !1 || result.error || result.formErrors && result.formErrors.length > 0 || result.fieldErrors && Object.keys(result.fieldErrors).length > 0) {
|
|
46
|
+
setStatus("error");
|
|
47
|
+
setError(result.error);
|
|
48
|
+
setFormErrors(result.formErrors ?? []);
|
|
49
|
+
setFieldErrors(result.fieldErrors ?? {});
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
setStatus("success");
|
|
53
|
+
setData(() => result.data);
|
|
54
|
+
return result;
|
|
55
|
+
} catch (err) {
|
|
56
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
57
|
+
setStatus("error");
|
|
58
|
+
setError(message);
|
|
59
|
+
return { ok: !1, status: 500, error: message };
|
|
60
|
+
} finally {
|
|
61
|
+
setSubmitting(!1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return { submitting, status, error, formErrors, fieldErrors, data, submit, reset };
|
|
65
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
let serverHeadElements = [];
|
|
2
|
+
export function resetServerHead() {
|
|
3
|
+
serverHeadElements = [];
|
|
4
|
+
}
|
|
5
|
+
export function getServerHead() {
|
|
6
|
+
return serverHeadElements;
|
|
7
|
+
}
|
|
8
|
+
export function Head(props) {
|
|
9
|
+
const children = props.children;
|
|
10
|
+
if (!children)
|
|
11
|
+
return null;
|
|
12
|
+
if (typeof document < "u")
|
|
13
|
+
applyClientHead(children);
|
|
14
|
+
else
|
|
15
|
+
collectServerHead(children);
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
function isVNode(v) {
|
|
19
|
+
return typeof v === "object" && v !== null && "type" in v && "props" in v;
|
|
20
|
+
}
|
|
21
|
+
function collectServerHead(children) {
|
|
22
|
+
if (Array.isArray(children)) {
|
|
23
|
+
for (const child of children)
|
|
24
|
+
collectServerHead(child);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!isVNode(children))
|
|
28
|
+
return;
|
|
29
|
+
const { type, props } = children;
|
|
30
|
+
if (type === "title" && props.children) {
|
|
31
|
+
serverHeadElements.push(`<title>${String(props.children)}</title>`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
let tag = `<${type}`;
|
|
35
|
+
for (const [key, value] of Object.entries(props)) {
|
|
36
|
+
if (key === "children")
|
|
37
|
+
continue;
|
|
38
|
+
if (value != null)
|
|
39
|
+
tag += ` ${key}="${String(value)}"`;
|
|
40
|
+
}
|
|
41
|
+
if (props.children)
|
|
42
|
+
tag += `>${String(props.children)}</${type}>`;
|
|
43
|
+
else
|
|
44
|
+
tag += " />";
|
|
45
|
+
serverHeadElements.push(tag);
|
|
46
|
+
}
|
|
47
|
+
function applyClientHead(children) {
|
|
48
|
+
if (Array.isArray(children)) {
|
|
49
|
+
for (const child of children)
|
|
50
|
+
applyClientHead(child);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!isVNode(children))
|
|
54
|
+
return;
|
|
55
|
+
const { type, props } = children;
|
|
56
|
+
if (type === "title") {
|
|
57
|
+
document.title = String(props.children ?? "");
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (type === "meta") {
|
|
61
|
+
const name = props.name ?? props.property;
|
|
62
|
+
if (name) {
|
|
63
|
+
const existing = document.querySelector(`meta[name="${name}"], meta[property="${name}"]`);
|
|
64
|
+
if (existing) {
|
|
65
|
+
existing.setAttribute("content", String(props.content ?? ""));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const meta = document.createElement("meta");
|
|
70
|
+
for (const [key, value] of Object.entries(props)) {
|
|
71
|
+
if (key === "children")
|
|
72
|
+
continue;
|
|
73
|
+
if (value != null)
|
|
74
|
+
meta.setAttribute(key, String(value));
|
|
75
|
+
}
|
|
76
|
+
document.head.appendChild(meta);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (type === "link") {
|
|
80
|
+
const el = document.createElement("link");
|
|
81
|
+
for (const [key, value] of Object.entries(props)) {
|
|
82
|
+
if (key === "children")
|
|
83
|
+
continue;
|
|
84
|
+
if (value != null)
|
|
85
|
+
el.setAttribute(key, String(value));
|
|
86
|
+
}
|
|
87
|
+
el.dataset.gHead = "";
|
|
88
|
+
document.head.appendChild(el);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const GORSEE_SIGNAL_MARKER = "__gorseeSignal";
|
|
2
|
+
export declare function escapeHTML(value: string): string;
|
|
3
|
+
export declare function escapeAttr(value: string): string;
|
|
4
|
+
export declare const VOID_ELEMENTS: Set<string>;
|
|
5
|
+
export declare function isSignal(value: unknown): value is () => unknown;
|
|
6
|
+
export declare function isRenderableThunk(value: unknown): value is () => unknown;
|
|
7
|
+
export declare function resolveValue(value: unknown): unknown;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const HTML_ESCAPE_RE = /[&<>"']/g, ATTR_ESCAPE_RE = /["&]/g, HTML_ESCAPES = {
|
|
2
|
+
"&": "&",
|
|
3
|
+
"<": "<",
|
|
4
|
+
">": ">",
|
|
5
|
+
'"': """,
|
|
6
|
+
"'": "'"
|
|
7
|
+
};
|
|
8
|
+
export const GORSEE_SIGNAL_MARKER = "__gorseeSignal";
|
|
9
|
+
export function escapeHTML(value) {
|
|
10
|
+
return value.replace(HTML_ESCAPE_RE, (ch) => HTML_ESCAPES[ch] ?? ch);
|
|
11
|
+
}
|
|
12
|
+
export function escapeAttr(value) {
|
|
13
|
+
return value.replace(ATTR_ESCAPE_RE, (ch) => HTML_ESCAPES[ch] ?? ch);
|
|
14
|
+
}
|
|
15
|
+
export const VOID_ELEMENTS = new Set([
|
|
16
|
+
"area",
|
|
17
|
+
"base",
|
|
18
|
+
"br",
|
|
19
|
+
"col",
|
|
20
|
+
"embed",
|
|
21
|
+
"hr",
|
|
22
|
+
"img",
|
|
23
|
+
"input",
|
|
24
|
+
"link",
|
|
25
|
+
"meta",
|
|
26
|
+
"param",
|
|
27
|
+
"source",
|
|
28
|
+
"track",
|
|
29
|
+
"wbr"
|
|
30
|
+
]);
|
|
31
|
+
export function isSignal(value) {
|
|
32
|
+
return typeof value === "function" && value[GORSEE_SIGNAL_MARKER] === !0;
|
|
33
|
+
}
|
|
34
|
+
export function isRenderableThunk(value) {
|
|
35
|
+
return typeof value === "function" && value.length === 0 && !isSignal(value);
|
|
36
|
+
}
|
|
37
|
+
export function resolveValue(value) {
|
|
38
|
+
return isSignal(value) ? value() : value;
|
|
39
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface HydrationDiagnostics {
|
|
2
|
+
active: boolean;
|
|
3
|
+
mismatches: number;
|
|
4
|
+
recoverableMismatch: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function isHydrating(): boolean;
|
|
7
|
+
export declare function getHydrationMismatches(): number;
|
|
8
|
+
export declare function getHydrationDiagnostics(): HydrationDiagnostics;
|
|
9
|
+
export declare function resetHydrationDiagnostics(): void;
|
|
10
|
+
export declare function enterHydration(root: Element): void;
|
|
11
|
+
export declare function exitHydration(): HydrationDiagnostics;
|
|
12
|
+
export declare function claimElement(expectedTag?: string): Element | null;
|
|
13
|
+
export declare function claimText(expectedText?: string): Text | null;
|
|
14
|
+
export declare function pushCursor(parent: Node): void;
|
|
15
|
+
export declare function popCursor(): void;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
const stack = [];
|
|
2
|
+
let active = !1, mismatches = 0;
|
|
3
|
+
export function isHydrating() {
|
|
4
|
+
return active;
|
|
5
|
+
}
|
|
6
|
+
export function getHydrationMismatches() {
|
|
7
|
+
return mismatches;
|
|
8
|
+
}
|
|
9
|
+
export function getHydrationDiagnostics() {
|
|
10
|
+
return { active, mismatches, recoverableMismatch: mismatches > 0 };
|
|
11
|
+
}
|
|
12
|
+
export function resetHydrationDiagnostics() {
|
|
13
|
+
mismatches = 0;
|
|
14
|
+
}
|
|
15
|
+
export function enterHydration(root) {
|
|
16
|
+
active = !0;
|
|
17
|
+
mismatches = 0;
|
|
18
|
+
stack.length = 0;
|
|
19
|
+
stack.push({ parent: root, index: 0 });
|
|
20
|
+
}
|
|
21
|
+
export function exitHydration() {
|
|
22
|
+
for (const cursor of stack)
|
|
23
|
+
mismatches += countRemainingMeaningfulNodes(cursor);
|
|
24
|
+
active = !1;
|
|
25
|
+
stack.length = 0;
|
|
26
|
+
if (mismatches > 0 && typeof console < "u")
|
|
27
|
+
console.warn(`[gorsee] Hydration completed with ${mismatches} mismatch(es). Server and client HTML may differ.`);
|
|
28
|
+
return getHydrationDiagnostics();
|
|
29
|
+
}
|
|
30
|
+
export function claimElement(expectedTag) {
|
|
31
|
+
const cursor = stack[stack.length - 1];
|
|
32
|
+
if (!cursor)
|
|
33
|
+
return null;
|
|
34
|
+
while (cursor.index < cursor.parent.childNodes.length) {
|
|
35
|
+
const node = cursor.parent.childNodes[cursor.index];
|
|
36
|
+
if (node.nodeType === 1) {
|
|
37
|
+
if (expectedTag && node.tagName.toLowerCase() !== expectedTag.toLowerCase()) {
|
|
38
|
+
mismatches++;
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
cursor.index++;
|
|
42
|
+
return node;
|
|
43
|
+
}
|
|
44
|
+
if (node.nodeType === 3 && node.textContent?.trim() === "") {
|
|
45
|
+
cursor.index++;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (node.nodeType === 8) {
|
|
49
|
+
cursor.index++;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
export function claimText(expectedText) {
|
|
57
|
+
const cursor = stack[stack.length - 1];
|
|
58
|
+
if (!cursor)
|
|
59
|
+
return null;
|
|
60
|
+
while (cursor.index < cursor.parent.childNodes.length) {
|
|
61
|
+
const node = cursor.parent.childNodes[cursor.index];
|
|
62
|
+
if (node.nodeType === 3) {
|
|
63
|
+
cursor.index++;
|
|
64
|
+
const textNode = node;
|
|
65
|
+
if (expectedText !== void 0) {
|
|
66
|
+
const currentText = textNode.textContent ?? "";
|
|
67
|
+
if (currentText !== expectedText)
|
|
68
|
+
if (currentText.startsWith(expectedText) && expectedText.length < currentText.length) {
|
|
69
|
+
textNode.splitText(expectedText.length);
|
|
70
|
+
textNode.textContent = expectedText;
|
|
71
|
+
} else {
|
|
72
|
+
textNode.textContent = expectedText;
|
|
73
|
+
mismatches++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return textNode;
|
|
77
|
+
}
|
|
78
|
+
if (node.nodeType === 8) {
|
|
79
|
+
cursor.index++;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
export function pushCursor(parent) {
|
|
87
|
+
stack.push({ parent, index: 0 });
|
|
88
|
+
}
|
|
89
|
+
export function popCursor() {
|
|
90
|
+
stack.pop();
|
|
91
|
+
}
|
|
92
|
+
function countRemainingMeaningfulNodes(cursor) {
|
|
93
|
+
let count = 0;
|
|
94
|
+
for (let i = cursor.index;i < cursor.parent.childNodes.length; i++) {
|
|
95
|
+
const node = cursor.parent.childNodes[i];
|
|
96
|
+
if (node.nodeType === 8)
|
|
97
|
+
continue;
|
|
98
|
+
if (node.nodeType === 3 && node.textContent?.trim() === "")
|
|
99
|
+
continue;
|
|
100
|
+
count++;
|
|
101
|
+
}
|
|
102
|
+
return count;
|
|
103
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { GorseeRenderable } from "./renderable.js";
|
|
2
|
+
export type ImageFormat = "avif" | "webp" | "jpeg" | "png";
|
|
3
|
+
export type ImageFit = "cover" | "contain" | "fill" | "inside" | "outside";
|
|
4
|
+
export interface ImageRemotePattern {
|
|
5
|
+
protocol?: "http:" | "https:";
|
|
6
|
+
hostname: string;
|
|
7
|
+
pathname?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ImageLoaderParams {
|
|
10
|
+
src: string;
|
|
11
|
+
width: number;
|
|
12
|
+
quality: number;
|
|
13
|
+
format?: ImageFormat;
|
|
14
|
+
}
|
|
15
|
+
export type ImageLoader = (params: ImageLoaderParams) => string;
|
|
16
|
+
export interface ImageRuntimeConfig {
|
|
17
|
+
widths?: number[];
|
|
18
|
+
formats?: ImageFormat[];
|
|
19
|
+
quality?: number;
|
|
20
|
+
fit?: ImageFit;
|
|
21
|
+
loader?: ImageLoader;
|
|
22
|
+
remotePatterns?: ImageRemotePattern[];
|
|
23
|
+
}
|
|
24
|
+
export interface ImageProps {
|
|
25
|
+
src: string;
|
|
26
|
+
alt: string;
|
|
27
|
+
width?: number;
|
|
28
|
+
height?: number;
|
|
29
|
+
loading?: "lazy" | "eager";
|
|
30
|
+
priority?: boolean;
|
|
31
|
+
sizes?: string;
|
|
32
|
+
quality?: number;
|
|
33
|
+
fit?: ImageFit;
|
|
34
|
+
format?: ImageFormat;
|
|
35
|
+
formats?: ImageFormat[];
|
|
36
|
+
optimize?: boolean;
|
|
37
|
+
placeholder?: "empty" | "blur";
|
|
38
|
+
blurDataURL?: string;
|
|
39
|
+
class?: string;
|
|
40
|
+
className?: string;
|
|
41
|
+
config?: ImageRuntimeConfig;
|
|
42
|
+
[key: string]: unknown;
|
|
43
|
+
}
|
|
44
|
+
export declare function isAllowedRemoteImage(src: string, patterns?: ImageRemotePattern[]): boolean;
|
|
45
|
+
export declare function defaultImageLoader(params: ImageLoaderParams): string;
|
|
46
|
+
export declare function getImageCandidateWidths(width: number | undefined, widths?: number[]): number[];
|
|
47
|
+
export declare function buildImageSrcSet(src: string, width: number | undefined, quality: number, loader: ImageLoader, format?: ImageFormat, widths?: number[]): string | undefined;
|
|
48
|
+
export declare function getImageProps(props: ImageProps): Record<string, unknown>;
|
|
49
|
+
export declare function Image(props: ImageProps): GorseeRenderable;
|