gorsee 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +261 -213
- package/dist-pkg/ai/artifact-lifecycle.d.ts +25 -0
- package/dist-pkg/ai/artifact-lifecycle.js +98 -0
- package/dist-pkg/ai/bridge.d.ts +26 -0
- package/dist-pkg/ai/bridge.js +82 -0
- package/dist-pkg/ai/bundle.d.ts +46 -0
- package/dist-pkg/ai/bundle.js +247 -0
- package/dist-pkg/ai/contracts.d.ts +1 -0
- package/dist-pkg/ai/contracts.js +1 -0
- package/dist-pkg/ai/ide.d.ts +37 -0
- package/dist-pkg/ai/ide.js +56 -0
- package/dist-pkg/ai/index.d.ts +85 -0
- package/dist-pkg/ai/index.js +267 -0
- package/dist-pkg/ai/json.d.ts +6 -0
- package/dist-pkg/ai/json.js +14 -0
- package/dist-pkg/ai/mcp.d.ts +28 -0
- package/dist-pkg/ai/mcp.js +152 -0
- package/dist-pkg/ai/session-pack.d.ts +28 -0
- package/dist-pkg/ai/session-pack.js +57 -0
- package/dist-pkg/ai/store.d.ts +67 -0
- package/dist-pkg/ai/store.js +174 -0
- package/dist-pkg/ai/summary.d.ts +57 -0
- package/dist-pkg/ai/summary.js +148 -0
- package/dist-pkg/ai/watch.d.ts +15 -0
- package/dist-pkg/ai/watch.js +66 -0
- package/dist-pkg/auth/action-tokens.d.ts +50 -0
- package/dist-pkg/auth/action-tokens.js +79 -0
- package/dist-pkg/auth/index.d.ts +70 -0
- package/dist-pkg/auth/index.js +199 -0
- package/dist-pkg/auth/redis-session-store.d.ts +7 -0
- package/dist-pkg/auth/redis-session-store.js +42 -0
- package/dist-pkg/auth/signing.d.ts +4 -0
- package/dist-pkg/auth/signing.js +33 -0
- package/dist-pkg/auth/sqlite-session-store.d.ts +12 -0
- package/dist-pkg/auth/sqlite-session-store.js +83 -0
- package/dist-pkg/auth/store-utils.d.ts +2 -0
- package/dist-pkg/auth/store-utils.js +20 -0
- package/dist-pkg/bin/gorsee.js +2 -0
- package/dist-pkg/build/backends/experimental-rolldown.d.ts +6 -0
- package/dist-pkg/build/backends/experimental-rolldown.js +9 -0
- package/dist-pkg/build/backends/register.d.ts +7 -0
- package/dist-pkg/build/backends/register.js +24 -0
- package/dist-pkg/build/backends/rolldown.d.ts +16 -0
- package/dist-pkg/build/backends/rolldown.js +176 -0
- package/dist-pkg/build/client-backend.d.ts +31 -0
- package/dist-pkg/build/client-backend.js +97 -0
- package/dist-pkg/build/client.d.ts +12 -0
- package/dist-pkg/build/client.js +93 -0
- package/dist-pkg/build/css-modules.d.ts +10 -0
- package/dist-pkg/build/css-modules.js +51 -0
- package/dist-pkg/build/devalue-parse.d.ts +1 -0
- package/dist-pkg/build/devalue-parse.js +1 -0
- package/dist-pkg/build/diagnostics.d.ts +20 -0
- package/dist-pkg/build/diagnostics.js +35 -0
- package/dist-pkg/build/fixtures.d.ts +7 -0
- package/dist-pkg/build/fixtures.js +60 -0
- package/dist-pkg/build/framework-imports.d.ts +4 -0
- package/dist-pkg/build/framework-imports.js +58 -0
- package/dist-pkg/build/init.d.ts +1 -0
- package/dist-pkg/build/init.js +6 -0
- package/dist-pkg/build/manifest.d.ts +3 -0
- package/dist-pkg/build/manifest.js +23 -0
- package/dist-pkg/build/parity.d.ts +32 -0
- package/dist-pkg/build/parity.js +71 -0
- package/dist-pkg/build/plugin.d.ts +11 -0
- package/dist-pkg/build/plugin.js +8 -0
- package/dist-pkg/build/readiness.d.ts +11 -0
- package/dist-pkg/build/readiness.js +18 -0
- package/dist-pkg/build/route-client-transform.d.ts +17 -0
- package/dist-pkg/build/route-client-transform.js +48 -0
- package/dist-pkg/build/route-metadata.d.ts +6 -0
- package/dist-pkg/build/route-metadata.js +8 -0
- package/dist-pkg/build/rpc-transform.d.ts +1 -0
- package/dist-pkg/build/rpc-transform.js +44 -0
- package/dist-pkg/build/server-bundle.d.ts +4 -0
- package/dist-pkg/build/server-bundle.js +261 -0
- package/dist-pkg/build/server-strip.d.ts +2 -0
- package/dist-pkg/build/server-strip.js +32 -0
- package/dist-pkg/build/ssg.d.ts +12 -0
- package/dist-pkg/build/ssg.js +36 -0
- package/dist-pkg/cli/bun-plugin.d.ts +2 -0
- package/dist-pkg/cli/bun-plugin.js +14 -0
- package/dist-pkg/cli/canonical-import-rewrite.d.ts +18 -0
- package/dist-pkg/cli/canonical-import-rewrite.js +94 -0
- package/dist-pkg/cli/canonical-imports.d.ts +8 -0
- package/dist-pkg/cli/canonical-imports.js +131 -0
- package/dist-pkg/cli/check-ast.d.ts +20 -0
- package/dist-pkg/cli/check-ast.js +126 -0
- package/dist-pkg/cli/cmd-ai.d.ts +4 -0
- package/dist-pkg/cli/cmd-ai.js +290 -0
- package/dist-pkg/cli/cmd-build.d.ts +12 -0
- package/dist-pkg/cli/cmd-build.js +198 -0
- package/dist-pkg/cli/cmd-check.d.ts +25 -0
- package/dist-pkg/cli/cmd-check.js +573 -0
- package/dist-pkg/cli/cmd-create.d.ts +6 -0
- package/dist-pkg/cli/cmd-create.js +600 -0
- package/dist-pkg/cli/cmd-deploy.d.ts +6 -0
- package/dist-pkg/cli/cmd-deploy.js +381 -0
- package/dist-pkg/cli/cmd-dev.d.ts +5 -0
- package/dist-pkg/cli/cmd-dev.js +5 -0
- package/dist-pkg/cli/cmd-docs.d.ts +50 -0
- package/dist-pkg/cli/cmd-docs.js +122 -0
- package/dist-pkg/cli/cmd-generate.d.ts +12 -0
- package/dist-pkg/cli/cmd-generate.js +320 -0
- package/dist-pkg/cli/cmd-migrate.d.ts +7 -0
- package/dist-pkg/cli/cmd-migrate.js +42 -0
- package/dist-pkg/cli/cmd-routes.d.ts +6 -0
- package/dist-pkg/cli/cmd-routes.js +24 -0
- package/dist-pkg/cli/cmd-start.d.ts +13 -0
- package/dist-pkg/cli/cmd-start.js +32 -0
- package/dist-pkg/cli/cmd-test.d.ts +20 -0
- package/dist-pkg/cli/cmd-test.js +103 -0
- package/dist-pkg/cli/cmd-typegen.d.ts +7 -0
- package/dist-pkg/cli/cmd-typegen.js +66 -0
- package/dist-pkg/cli/cmd-upgrade.d.ts +38 -0
- package/dist-pkg/cli/cmd-upgrade.js +232 -0
- package/dist-pkg/cli/context.d.ts +4 -0
- package/dist-pkg/cli/context.js +4 -0
- package/dist-pkg/cli/framework-md.d.ts +1 -0
- package/dist-pkg/cli/framework-md.js +391 -0
- package/dist-pkg/cli/index.d.ts +6 -0
- package/dist-pkg/cli/index.js +106 -0
- package/dist-pkg/cli/release-version.d.ts +2 -0
- package/dist-pkg/cli/release-version.js +33 -0
- package/dist-pkg/client.d.ts +16 -0
- package/dist-pkg/client.js +71 -0
- package/dist-pkg/compat.d.ts +1 -0
- package/dist-pkg/compat.js +1 -0
- package/dist-pkg/compiler/analysis-backend.d.ts +20 -0
- package/dist-pkg/compiler/analysis-backend.js +164 -0
- package/dist-pkg/compiler/backends/experimental-oxc.d.ts +6 -0
- package/dist-pkg/compiler/backends/experimental-oxc.js +9 -0
- package/dist-pkg/compiler/backends/oxc.d.ts +16 -0
- package/dist-pkg/compiler/backends/oxc.js +198 -0
- package/dist-pkg/compiler/backends/register.d.ts +7 -0
- package/dist-pkg/compiler/backends/register.js +22 -0
- package/dist-pkg/compiler/fixtures.d.ts +2 -0
- package/dist-pkg/compiler/fixtures.js +118 -0
- package/dist-pkg/compiler/init.d.ts +1 -0
- package/dist-pkg/compiler/init.js +6 -0
- package/dist-pkg/compiler/module-analysis.d.ts +13 -0
- package/dist-pkg/compiler/module-analysis.js +50 -0
- package/dist-pkg/compiler/parity.d.ts +35 -0
- package/dist-pkg/compiler/parity.js +89 -0
- package/dist-pkg/compiler/readiness.d.ts +11 -0
- package/dist-pkg/compiler/readiness.js +18 -0
- package/dist-pkg/compiler/route-facts.d.ts +34 -0
- package/dist-pkg/compiler/route-facts.js +75 -0
- package/dist-pkg/content/index.d.ts +27 -0
- package/dist-pkg/content/index.js +287 -0
- package/dist-pkg/db/index.d.ts +3 -0
- package/dist-pkg/db/index.js +6 -0
- package/dist-pkg/db/migrate.d.ts +7 -0
- package/dist-pkg/db/migrate.js +53 -0
- package/dist-pkg/db/postgres.d.ts +29 -0
- package/dist-pkg/db/postgres.js +59 -0
- package/dist-pkg/db/sqlite.d.ts +10 -0
- package/dist-pkg/db/sqlite.js +22 -0
- package/dist-pkg/deploy/cloudflare.d.ts +8 -0
- package/{src/deploy/cloudflare.ts → dist-pkg/deploy/cloudflare.js} +24 -26
- package/dist-pkg/deploy/conformance.d.ts +21 -0
- package/dist-pkg/deploy/conformance.js +98 -0
- package/dist-pkg/deploy/dockerfile.d.ts +3 -0
- package/{src/deploy/dockerfile.ts → dist-pkg/deploy/dockerfile.js} +8 -10
- package/dist-pkg/deploy/fly.d.ts +3 -0
- package/{src/deploy/fly.ts → dist-pkg/deploy/fly.js} +11 -12
- package/dist-pkg/deploy/index.d.ts +6 -0
- package/dist-pkg/deploy/index.js +26 -0
- package/dist-pkg/deploy/netlify.d.ts +2 -0
- package/{src/deploy/netlify.ts → dist-pkg/deploy/netlify.js} +17 -11
- package/dist-pkg/deploy/runtime.d.ts +2 -0
- package/dist-pkg/deploy/runtime.js +3 -0
- package/dist-pkg/deploy/vercel.d.ts +22 -0
- package/dist-pkg/deploy/vercel.js +53 -0
- package/dist-pkg/dev/error-overlay.d.ts +1 -0
- package/{src/dev/error-overlay.ts → dist-pkg/dev/error-overlay.js} +13 -23
- package/dist-pkg/dev/hmr.d.ts +30 -0
- package/dist-pkg/dev/hmr.js +86 -0
- package/dist-pkg/dev/partial-handler.d.ts +9 -0
- package/dist-pkg/dev/partial-handler.js +24 -0
- package/dist-pkg/dev/request-handler.d.ts +30 -0
- package/dist-pkg/dev/request-handler.js +67 -0
- package/dist-pkg/dev/watcher.d.ts +6 -0
- package/dist-pkg/dev/watcher.js +34 -0
- package/dist-pkg/dev.d.ts +11 -0
- package/dist-pkg/dev.js +268 -0
- package/dist-pkg/env/index.d.ts +3 -0
- package/dist-pkg/env/index.js +57 -0
- package/dist-pkg/errors/catalog.d.ts +9 -0
- package/{src/errors/catalog.ts → dist-pkg/errors/catalog.js} +8 -24
- package/dist-pkg/errors/formatter.d.ts +22 -0
- package/dist-pkg/errors/formatter.js +43 -0
- package/dist-pkg/errors/index.d.ts +2 -0
- package/dist-pkg/errors/index.js +2 -0
- package/dist-pkg/forms/action.d.ts +15 -0
- package/dist-pkg/forms/action.js +20 -0
- package/dist-pkg/forms/index.d.ts +4 -0
- package/dist-pkg/forms/index.js +12 -0
- package/dist-pkg/i18n/index.d.ts +61 -0
- package/dist-pkg/i18n/index.js +147 -0
- package/dist-pkg/index-client.d.ts +1 -0
- package/dist-pkg/index-client.js +1 -0
- package/dist-pkg/index.d.ts +32 -0
- package/dist-pkg/index.js +79 -0
- package/dist-pkg/jsx-runtime-client.d.ts +8 -0
- package/dist-pkg/jsx-runtime-client.js +1 -0
- package/dist-pkg/jsx-runtime.d.ts +13 -0
- package/dist-pkg/jsx-runtime.js +5 -0
- package/dist-pkg/jsx-types-html.d.ts +221 -0
- package/dist-pkg/jsx-types-html.js +0 -0
- package/dist-pkg/log/index.d.ts +8 -0
- package/dist-pkg/log/index.js +55 -0
- package/dist-pkg/plugins/drizzle.d.ts +16 -0
- package/dist-pkg/plugins/drizzle.js +50 -0
- package/dist-pkg/plugins/index.d.ts +62 -0
- package/dist-pkg/plugins/index.js +147 -0
- package/dist-pkg/plugins/lucia.d.ts +26 -0
- package/dist-pkg/plugins/lucia.js +63 -0
- package/dist-pkg/plugins/prisma.d.ts +14 -0
- package/dist-pkg/plugins/prisma.js +57 -0
- package/dist-pkg/plugins/resend.d.ts +21 -0
- package/dist-pkg/plugins/resend.js +45 -0
- package/dist-pkg/plugins/s3.d.ts +18 -0
- package/dist-pkg/plugins/s3.js +63 -0
- package/dist-pkg/plugins/stripe.d.ts +32 -0
- package/dist-pkg/plugins/stripe.js +69 -0
- package/dist-pkg/plugins/tailwind.d.ts +15 -0
- package/dist-pkg/plugins/tailwind.js +58 -0
- package/dist-pkg/prod.d.ts +21 -0
- package/dist-pkg/prod.js +347 -0
- package/dist-pkg/reactive/computed.d.ts +3 -0
- package/dist-pkg/reactive/computed.js +15 -0
- package/dist-pkg/reactive/data.d.ts +25 -0
- package/dist-pkg/reactive/data.js +56 -0
- package/dist-pkg/reactive/diagnostics.d.ts +100 -0
- package/dist-pkg/reactive/diagnostics.js +363 -0
- package/dist-pkg/reactive/effect.d.ts +3 -0
- package/dist-pkg/reactive/effect.js +6 -0
- package/dist-pkg/reactive/index.d.ts +9 -0
- package/dist-pkg/reactive/index.js +18 -0
- package/dist-pkg/reactive/live.d.ts +15 -0
- package/dist-pkg/reactive/live.js +58 -0
- package/dist-pkg/reactive/optimistic.d.ts +20 -0
- package/dist-pkg/reactive/optimistic.js +54 -0
- package/dist-pkg/reactive/resource.d.ts +25 -0
- package/dist-pkg/reactive/resource.js +97 -0
- package/dist-pkg/reactive/signal.d.ts +4 -0
- package/dist-pkg/reactive/signal.js +17 -0
- package/dist-pkg/reactive/store.d.ts +6 -0
- package/dist-pkg/reactive/store.js +19 -0
- package/dist-pkg/router/index.d.ts +2 -0
- package/dist-pkg/router/index.js +2 -0
- package/dist-pkg/router/matcher.d.ts +7 -0
- package/dist-pkg/router/matcher.js +40 -0
- package/dist-pkg/router/scanner.d.ts +14 -0
- package/dist-pkg/router/scanner.js +141 -0
- package/dist-pkg/routes/index.d.ts +1 -0
- package/dist-pkg/routes/index.js +10 -0
- package/dist-pkg/runtime/app-config.d.ts +26 -0
- package/dist-pkg/runtime/app-config.js +69 -0
- package/dist-pkg/runtime/client.d.ts +3 -0
- package/dist-pkg/runtime/client.js +31 -0
- package/dist-pkg/runtime/devtools.d.ts +64 -0
- package/dist-pkg/runtime/devtools.js +132 -0
- package/dist-pkg/runtime/error-boundary.d.ts +6 -0
- package/dist-pkg/runtime/error-boundary.js +17 -0
- package/dist-pkg/runtime/event-replay.d.ts +3 -0
- package/{src/runtime/event-replay.ts → dist-pkg/runtime/event-replay.js} +7 -22
- package/dist-pkg/runtime/event-source.d.ts +7 -0
- package/dist-pkg/runtime/event-source.js +24 -0
- package/dist-pkg/runtime/form.d.ts +24 -0
- package/dist-pkg/runtime/form.js +59 -0
- package/dist-pkg/runtime/head.d.ts +7 -0
- package/dist-pkg/runtime/head.js +90 -0
- package/dist-pkg/runtime/html-escape.d.ts +7 -0
- package/dist-pkg/runtime/html-escape.js +39 -0
- package/dist-pkg/runtime/hydration.d.ts +15 -0
- package/dist-pkg/runtime/hydration.js +103 -0
- package/dist-pkg/runtime/image.d.ts +49 -0
- package/dist-pkg/runtime/image.js +144 -0
- package/dist-pkg/runtime/index.d.ts +17 -0
- package/dist-pkg/runtime/index.js +59 -0
- package/dist-pkg/runtime/island-hydrator.d.ts +12 -0
- package/dist-pkg/runtime/island-hydrator.js +49 -0
- package/dist-pkg/runtime/island.d.ts +19 -0
- package/dist-pkg/runtime/island.js +36 -0
- package/dist-pkg/runtime/jsx-runtime.d.ts +12 -0
- package/dist-pkg/runtime/jsx-runtime.js +173 -0
- package/dist-pkg/runtime/link.d.ts +16 -0
- package/dist-pkg/runtime/link.js +47 -0
- package/dist-pkg/runtime/project.d.ts +37 -0
- package/dist-pkg/runtime/project.js +36 -0
- package/dist-pkg/runtime/renderable.d.ts +6 -0
- package/dist-pkg/runtime/renderable.js +0 -0
- package/dist-pkg/runtime/router.d.ts +47 -0
- package/dist-pkg/runtime/router.js +476 -0
- package/dist-pkg/runtime/server.d.ts +8 -0
- package/dist-pkg/runtime/server.js +71 -0
- package/dist-pkg/runtime/stream.d.ts +29 -0
- package/dist-pkg/runtime/stream.js +106 -0
- package/dist-pkg/runtime/suspense.d.ts +6 -0
- package/dist-pkg/runtime/suspense.js +16 -0
- package/dist-pkg/runtime/typed-routes.d.ts +24 -0
- package/dist-pkg/runtime/typed-routes.js +77 -0
- package/dist-pkg/runtime/validated-form.d.ts +40 -0
- package/dist-pkg/runtime/validated-form.js +120 -0
- package/dist-pkg/security/cors.d.ts +10 -0
- package/dist-pkg/security/cors.js +56 -0
- package/dist-pkg/security/csrf.d.ts +9 -0
- package/dist-pkg/security/csrf.js +53 -0
- package/dist-pkg/security/headers.d.ts +11 -0
- package/dist-pkg/security/headers.js +31 -0
- package/dist-pkg/security/index.d.ts +5 -0
- package/dist-pkg/security/index.js +5 -0
- package/dist-pkg/security/rate-limit.d.ts +10 -0
- package/dist-pkg/security/rate-limit.js +49 -0
- package/dist-pkg/security/redis-rate-limit.d.ts +14 -0
- package/dist-pkg/security/redis-rate-limit.js +23 -0
- package/dist-pkg/server/action.d.ts +21 -0
- package/dist-pkg/server/action.js +64 -0
- package/dist-pkg/server/cache-utils.d.ts +2 -0
- package/dist-pkg/server/cache-utils.js +26 -0
- package/dist-pkg/server/cache.d.ts +33 -0
- package/dist-pkg/server/cache.js +236 -0
- package/dist-pkg/server/compress.d.ts +2 -0
- package/dist-pkg/server/compress.js +49 -0
- package/dist-pkg/server/endpoint-execution.d.ts +28 -0
- package/dist-pkg/server/endpoint-execution.js +37 -0
- package/dist-pkg/server/etag.d.ts +3 -0
- package/dist-pkg/server/etag.js +18 -0
- package/dist-pkg/server/guard.d.ts +16 -0
- package/dist-pkg/server/guard.js +45 -0
- package/dist-pkg/server/html-shell.d.ts +12 -0
- package/dist-pkg/server/html-shell.js +52 -0
- package/dist-pkg/server/index.d.ts +36 -0
- package/dist-pkg/server/index.js +170 -0
- package/dist-pkg/server/jobs.d.ts +41 -0
- package/dist-pkg/server/jobs.js +81 -0
- package/dist-pkg/server/manifest.d.ts +19 -0
- package/dist-pkg/server/manifest.js +36 -0
- package/dist-pkg/server/middleware.d.ts +39 -0
- package/dist-pkg/server/middleware.js +122 -0
- package/dist-pkg/server/mime.d.ts +1 -0
- package/{src/server/mime.ts → dist-pkg/server/mime.js} +6 -17
- package/dist-pkg/server/not-found.d.ts +6 -0
- package/dist-pkg/server/not-found.js +24 -0
- package/dist-pkg/server/page-render.d.ts +29 -0
- package/dist-pkg/server/page-render.js +67 -0
- package/dist-pkg/server/partial-navigation.d.ts +4 -0
- package/dist-pkg/server/partial-navigation.js +16 -0
- package/dist-pkg/server/pipe.d.ts +9 -0
- package/dist-pkg/server/pipe.js +32 -0
- package/dist-pkg/server/redis-cache-store.d.ts +10 -0
- package/dist-pkg/server/redis-cache-store.js +73 -0
- package/dist-pkg/server/redis-client.d.ts +37 -0
- package/dist-pkg/server/redis-client.js +37 -0
- package/dist-pkg/server/request-policy.d.ts +55 -0
- package/dist-pkg/server/request-policy.js +216 -0
- package/dist-pkg/server/request-preflight.d.ts +23 -0
- package/dist-pkg/server/request-preflight.js +45 -0
- package/dist-pkg/server/request-security-policy.d.ts +17 -0
- package/dist-pkg/server/request-security-policy.js +34 -0
- package/dist-pkg/server/request-surface.d.ts +8 -0
- package/dist-pkg/server/request-surface.js +19 -0
- package/dist-pkg/server/route-request.d.ts +31 -0
- package/dist-pkg/server/route-request.js +112 -0
- package/dist-pkg/server/route-response.d.ts +22 -0
- package/dist-pkg/server/route-response.js +58 -0
- package/dist-pkg/server/rpc-hash.d.ts +2 -0
- package/dist-pkg/server/rpc-hash.js +7 -0
- package/dist-pkg/server/rpc-protocol.d.ts +22 -0
- package/dist-pkg/server/rpc-protocol.js +28 -0
- package/dist-pkg/server/rpc-utils.d.ts +2 -0
- package/dist-pkg/server/rpc-utils.js +26 -0
- package/dist-pkg/server/rpc.d.ts +20 -0
- package/dist-pkg/server/rpc.js +147 -0
- package/dist-pkg/server/runtime-dispatch.d.ts +19 -0
- package/dist-pkg/server/runtime-dispatch.js +67 -0
- package/dist-pkg/server/server-execution.d.ts +22 -0
- package/dist-pkg/server/server-execution.js +53 -0
- package/dist-pkg/server/sqlite-cache-store.d.ts +13 -0
- package/dist-pkg/server/sqlite-cache-store.js +88 -0
- package/dist-pkg/server/sse.d.ts +9 -0
- package/dist-pkg/server/sse.js +34 -0
- package/dist-pkg/server/static-file.d.ts +9 -0
- package/dist-pkg/server/static-file.js +43 -0
- package/dist-pkg/server/ws.d.ts +18 -0
- package/dist-pkg/server/ws.js +40 -0
- package/dist-pkg/server-entry.d.ts +19 -0
- package/dist-pkg/server-entry.js +93 -0
- package/dist-pkg/testing/index.d.ts +98 -0
- package/dist-pkg/testing/index.js +254 -0
- package/dist-pkg/types/index.d.ts +4 -0
- package/dist-pkg/types/index.js +4 -0
- package/dist-pkg/types/safe-html.d.ts +7 -0
- package/dist-pkg/types/safe-html.js +19 -0
- package/dist-pkg/types/safe-sql.d.ts +8 -0
- package/dist-pkg/types/safe-sql.js +14 -0
- package/dist-pkg/types/safe-url.d.ts +7 -0
- package/dist-pkg/types/safe-url.js +20 -0
- package/dist-pkg/types/user-input.d.ts +9 -0
- package/dist-pkg/types/user-input.js +3 -0
- package/dist-pkg/unsafe/index.d.ts +12 -0
- package/dist-pkg/unsafe/index.js +6 -0
- package/package.json +101 -45
- package/bin/gorsee.js +0 -2
- package/src/auth/index.ts +0 -178
- package/src/auth/redis-session-store.ts +0 -46
- package/src/auth/sqlite-session-store.ts +0 -98
- package/src/auth/store-utils.ts +0 -21
- package/src/build/client.ts +0 -139
- package/src/build/css-modules.ts +0 -69
- package/src/build/devalue-parse.ts +0 -2
- package/src/build/manifest.ts +0 -34
- package/src/build/route-metadata.ts +0 -12
- package/src/build/rpc-transform.ts +0 -62
- package/src/build/server-strip.ts +0 -87
- package/src/build/ssg.ts +0 -70
- package/src/cli/bun-plugin.ts +0 -58
- package/src/cli/cmd-build.ts +0 -153
- package/src/cli/cmd-check.ts +0 -239
- package/src/cli/cmd-create.ts +0 -328
- package/src/cli/cmd-deploy.ts +0 -149
- package/src/cli/cmd-dev.ts +0 -13
- package/src/cli/cmd-docs.ts +0 -152
- package/src/cli/cmd-generate.ts +0 -155
- package/src/cli/cmd-migrate.ts +0 -53
- package/src/cli/cmd-routes.ts +0 -36
- package/src/cli/cmd-start.ts +0 -30
- package/src/cli/cmd-test.ts +0 -129
- package/src/cli/cmd-typegen.ts +0 -93
- package/src/cli/cmd-upgrade.ts +0 -143
- package/src/cli/context.ts +0 -12
- package/src/cli/framework-md.ts +0 -223
- package/src/cli/index.ts +0 -107
- package/src/client.ts +0 -26
- package/src/db/index.ts +0 -2
- package/src/db/migrate.ts +0 -89
- package/src/db/sqlite.ts +0 -40
- package/src/deploy/index.ts +0 -31
- package/src/deploy/vercel.ts +0 -94
- package/src/dev/hmr.ts +0 -31
- package/src/dev/partial-handler.ts +0 -52
- package/src/dev/request-handler.ts +0 -127
- package/src/dev/watcher.ts +0 -48
- package/src/dev.ts +0 -208
- package/src/env/index.ts +0 -74
- package/src/errors/formatter.ts +0 -63
- package/src/errors/index.ts +0 -2
- package/src/i18n/index.ts +0 -72
- package/src/index-client.ts +0 -4
- package/src/index.ts +0 -43
- package/src/jsx-runtime-client.ts +0 -13
- package/src/jsx-runtime.ts +0 -20
- package/src/jsx-types-html.ts +0 -242
- package/src/log/index.ts +0 -44
- package/src/plugins/drizzle.ts +0 -84
- package/src/plugins/index.ts +0 -86
- package/src/plugins/lucia.ts +0 -111
- package/src/plugins/prisma.ts +0 -85
- package/src/plugins/resend.ts +0 -78
- package/src/plugins/s3.ts +0 -102
- package/src/plugins/stripe.ts +0 -133
- package/src/plugins/tailwind.ts +0 -92
- package/src/prod.ts +0 -252
- package/src/reactive/computed.ts +0 -7
- package/src/reactive/effect.ts +0 -7
- package/src/reactive/index.ts +0 -7
- package/src/reactive/live.ts +0 -97
- package/src/reactive/optimistic.ts +0 -83
- package/src/reactive/resource.ts +0 -138
- package/src/reactive/signal.ts +0 -20
- package/src/reactive/store.ts +0 -36
- package/src/router/index.ts +0 -2
- package/src/router/matcher.ts +0 -53
- package/src/router/scanner.ts +0 -206
- package/src/runtime/client.ts +0 -28
- package/src/runtime/error-boundary.ts +0 -35
- package/src/runtime/form.ts +0 -49
- package/src/runtime/head.ts +0 -113
- package/src/runtime/html-escape.ts +0 -30
- package/src/runtime/hydration.ts +0 -95
- package/src/runtime/image.ts +0 -48
- package/src/runtime/index.ts +0 -12
- package/src/runtime/island-hydrator.ts +0 -84
- package/src/runtime/island.ts +0 -88
- package/src/runtime/jsx-runtime.ts +0 -167
- package/src/runtime/link.ts +0 -45
- package/src/runtime/project.ts +0 -73
- package/src/runtime/router.ts +0 -224
- package/src/runtime/server.ts +0 -102
- package/src/runtime/stream.ts +0 -182
- package/src/runtime/suspense.ts +0 -37
- package/src/runtime/typed-routes.ts +0 -26
- package/src/runtime/validated-form.ts +0 -106
- package/src/security/cors.ts +0 -80
- package/src/security/csrf.ts +0 -85
- package/src/security/headers.ts +0 -50
- package/src/security/index.ts +0 -4
- package/src/security/rate-limit.ts +0 -80
- package/src/server/action.ts +0 -48
- package/src/server/cache-utils.ts +0 -23
- package/src/server/cache.ts +0 -125
- package/src/server/compress.ts +0 -60
- package/src/server/etag.ts +0 -23
- package/src/server/guard.ts +0 -69
- package/src/server/html-shell.ts +0 -69
- package/src/server/index.ts +0 -57
- package/src/server/manifest.ts +0 -36
- package/src/server/middleware.ts +0 -159
- package/src/server/not-found.ts +0 -35
- package/src/server/page-render.ts +0 -123
- package/src/server/pipe.ts +0 -46
- package/src/server/redis-cache-store.ts +0 -87
- package/src/server/redis-client.ts +0 -71
- package/src/server/request-preflight.ts +0 -45
- package/src/server/route-request.ts +0 -72
- package/src/server/rpc-hash.ts +0 -17
- package/src/server/rpc-utils.ts +0 -27
- package/src/server/rpc.ts +0 -177
- package/src/server/sqlite-cache-store.ts +0 -109
- package/src/server/sse.ts +0 -96
- package/src/server/static-file.ts +0 -63
- package/src/server/ws.ts +0 -56
- package/src/server-entry.ts +0 -36
- package/src/testing/index.ts +0 -74
- package/src/types/index.ts +0 -4
- package/src/types/safe-html.ts +0 -32
- package/src/types/safe-sql.ts +0 -28
- package/src/types/safe-url.ts +0 -40
- package/src/types/user-input.ts +0 -12
- package/src/unsafe/index.ts +0 -18
package/README.md
CHANGED
|
@@ -1,267 +1,315 @@
|
|
|
1
1
|
# Gorsee.js
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
AI-first reactive full-stack TypeScript framework for deterministic collaboration between humans and coding agents.
|
|
4
|
+
|
|
5
|
+
Gorsee is not a pet project, not a research toy, and not a bundle of optional recipes. It is a product-grade framework with strict runtime contracts, built-in security boundaries, fine-grained reactivity, and AI-native developer tooling.
|
|
6
|
+
|
|
7
|
+
## Product Direction
|
|
8
|
+
|
|
9
|
+
Gorsee is built around four non-negotiable product goals:
|
|
10
|
+
|
|
11
|
+
- AI-first development: the framework must be predictable for coding agents, not only ergonomic for humans.
|
|
12
|
+
- Deterministic architecture: one clear way beats many inconsistent ways.
|
|
13
|
+
- Reactive execution: fine-grained reactivity, islands, and minimal client JavaScript over VDOM-heavy legacy models.
|
|
14
|
+
- Built-in guarantees: auth, request policy, cache boundaries, diagnostics, and deploy contracts are framework properties, not scattered ecosystem recipes.
|
|
15
|
+
|
|
16
|
+
Read the strategic docs:
|
|
17
|
+
|
|
18
|
+
- [Product Vision](./docs/PRODUCT_VISION.md)
|
|
19
|
+
- [Framework Doctrine](./docs/FRAMEWORK_DOCTRINE.md)
|
|
20
|
+
- [Security Model](./docs/SECURITY_MODEL.md)
|
|
21
|
+
- [Top-Tier Roadmap](./docs/TOP_TIER_ROADMAP.md)
|
|
22
|
+
- [Canonical Language Plan](./docs/CANONICAL_LANGUAGE_PLAN.md)
|
|
23
|
+
- [Canonical Recipes](./docs/CANONICAL_RECIPES.md)
|
|
24
|
+
- [Canonical Examples](./examples/README.md)
|
|
25
|
+
- [Examples Policy](./docs/EXAMPLES_POLICY.md)
|
|
26
|
+
- [Reactive Runtime](./docs/REACTIVE_RUNTIME.md)
|
|
27
|
+
- [Reactive Benchmarks](./docs/REACTIVE_BENCHMARKS.md)
|
|
28
|
+
- [Reactive Patterns](./docs/REACTIVE_PATTERNS.md)
|
|
29
|
+
- [Reactive Hydration](./docs/REACTIVE_HYDRATION.md)
|
|
30
|
+
- [Reactive Debugging](./docs/REACTIVE_DEBUGGING.md)
|
|
31
|
+
- [Reactive Measurement Gaps](./docs/REACTIVE_MEASUREMENT_GAPS.md)
|
|
32
|
+
- [Benchmark Policy](./docs/BENCHMARK_POLICY.md)
|
|
33
|
+
- [Benchmark Methodology](./docs/BENCHMARK_METHODOLOGY.md)
|
|
34
|
+
- [SSR Benchmark Proof](./docs/SSR_BENCHMARK_PROOF.md)
|
|
35
|
+
- [DOM Benchmark Proof](./docs/DOM_BENCHMARK_PROOF.md)
|
|
36
|
+
- [Benchmark Artifacts](./docs/BENCHMARK_ARTIFACTS.md)
|
|
37
|
+
- [Benchmark Release Discipline](./docs/BENCHMARK_RELEASE_DISCIPLINE.md)
|
|
38
|
+
- [Build Diagnostics](./docs/BUILD_DIAGNOSTICS.md)
|
|
39
|
+
- [Runtime Failures](./docs/RUNTIME_FAILURES.md)
|
|
40
|
+
- [Cache Invalidation](./docs/CACHE_INVALIDATION.md)
|
|
41
|
+
- [Streaming and Hydration Failures](./docs/STREAMING_HYDRATION_FAILURES.md)
|
|
42
|
+
- [Runtime Triage](./docs/RUNTIME_TRIAGE.md)
|
|
43
|
+
- [Starter Failures](./docs/STARTER_FAILURES.md)
|
|
44
|
+
- [AI Workflows](./docs/AI_WORKFLOWS.md)
|
|
45
|
+
- [AI IDE Sync Workflow](./docs/AI_IDE_SYNC_WORKFLOW.md)
|
|
46
|
+
- [AI MCP Workflow](./docs/AI_MCP_WORKFLOW.md)
|
|
47
|
+
- [AI Bridge Workflow](./docs/AI_BRIDGE_WORKFLOW.md)
|
|
48
|
+
- [AI Tool Builders](./docs/AI_TOOL_BUILDERS.md)
|
|
49
|
+
- [AI Surface Stability](./docs/AI_SURFACE_STABILITY.md)
|
|
50
|
+
- [AI Session Packs](./docs/AI_SESSION_PACKS.md)
|
|
51
|
+
- [AI Debugging Workflows](./docs/AI_DEBUGGING_WORKFLOWS.md)
|
|
52
|
+
- [Starter Onboarding](./docs/STARTER_ONBOARDING.md)
|
|
53
|
+
- [Market-Ready Proof](./docs/MARKET_READY_PROOF.md)
|
|
54
|
+
- [Migration Guide](./docs/MIGRATION_GUIDE.md)
|
|
55
|
+
- [Upgrade Playbook](./docs/UPGRADE_PLAYBOOK.md)
|
|
56
|
+
- [Deploy Target Guide](./docs/DEPLOY_TARGET_GUIDE.md)
|
|
57
|
+
- [First Production Rollout](./docs/FIRST_PRODUCTION_ROLLOUT.md)
|
|
58
|
+
- [Auth / Cache / Data Paths](./docs/AUTH_CACHE_DATA_PATHS.md)
|
|
59
|
+
- [Recipe Boundaries](./docs/RECIPE_BOUNDARIES.md)
|
|
60
|
+
- [Workspace Adoption](./docs/WORKSPACE_ADOPTION.md)
|
|
61
|
+
- [Downstream Testing](./docs/DOWNSTREAM_TESTING.md)
|
|
62
|
+
- [Team Failures](./docs/TEAM_FAILURES.md)
|
|
63
|
+
- [Maturity Policy](./docs/MATURITY_POLICY.md)
|
|
64
|
+
- [Dependency Policy](./docs/DEPENDENCY_POLICY.md)
|
|
65
|
+
- [Compatibility Guardrails](./docs/COMPATIBILITY_GUARDRAILS.md)
|
|
66
|
+
- [Ambiguity Policy](./docs/AMBIGUITY_POLICY.md)
|
|
67
|
+
- [DX Feedback Loop](./docs/DX_FEEDBACK_LOOP.md)
|
|
68
|
+
- [Evidence Policy](./docs/EVIDENCE_POLICY.md)
|
|
69
|
+
- [Roadmap Completion Policy](./docs/ROADMAP_COMPLETION_POLICY.md)
|
|
4
70
|
|
|
5
71
|
## Quick Start
|
|
6
72
|
|
|
7
73
|
```bash
|
|
8
|
-
bunx gorsee create my-app
|
|
74
|
+
bunx gorsee create my-app --template secure-saas
|
|
9
75
|
cd my-app
|
|
10
76
|
bun install
|
|
11
77
|
bun run dev
|
|
12
78
|
```
|
|
13
79
|
|
|
14
|
-
|
|
80
|
+
Alternative bootstrap paths:
|
|
15
81
|
|
|
16
|
-
|
|
82
|
+
```bash
|
|
83
|
+
npx create-gorsee my-app
|
|
84
|
+
npm create gorsee@latest my-app
|
|
85
|
+
```
|
|
17
86
|
|
|
18
|
-
|
|
19
|
-
|---------|:---------:|:-------:|:----:|:---------:|
|
|
20
|
-
| Islands (partial hydration) | ✅ | ❌ | ❌ | ❌ |
|
|
21
|
-
| Reactive WebSocket signals | ✅ | ❌ | ❌ | ❌ |
|
|
22
|
-
| Optimistic mutations + rollback | ✅ | ❌ | ❌ | ❌ |
|
|
23
|
-
| Server-Sent Events (reactive) | ✅ | manual | manual | manual |
|
|
24
|
-
| Route-level cache (SWR) | ✅ | ISR only | partial | ❌ |
|
|
25
|
-
| Built-in auth (HMAC sessions) | ✅ | manual | manual | manual |
|
|
26
|
-
| Guards (declarative ACL) | ✅ | manual | partial | ❌ |
|
|
27
|
-
| Middleware pipe/compose | ✅ | ❌ | ❌ | ❌ |
|
|
28
|
-
| Validated forms (client+server) | ✅ | ❌ | ❌ | ❌ |
|
|
29
|
-
| Type-safe routes (generated) | ✅ | experimental | partial | ❌ |
|
|
30
|
-
| Branded types (SafeSQL/HTML/URL) | ✅ | ❌ | ❌ | ❌ |
|
|
87
|
+
Open [http://localhost:3000](http://localhost:3000).
|
|
31
88
|
|
|
32
|
-
|
|
89
|
+
## Why Gorsee
|
|
33
90
|
|
|
34
|
-
|
|
91
|
+
Most modern frameworks optimize for flexibility, historical compatibility, or ecosystem breadth.
|
|
92
|
+
Gorsee optimizes for deterministic delivery by humans and AI agents working in the same codebase.
|
|
35
93
|
|
|
36
|
-
|
|
94
|
+
What that means in practice:
|
|
37
95
|
|
|
38
|
-
|
|
39
|
-
|
|
96
|
+
- strict client/server import boundaries
|
|
97
|
+
- explicit request classification and security policy
|
|
98
|
+
- fail-closed production origin model
|
|
99
|
+
- small reactive runtime without VDOM baggage
|
|
100
|
+
- route-scoped hydration through islands
|
|
101
|
+
- optimized image rendering with remote allowlists, srcset generation, and format-aware loaders
|
|
102
|
+
- structured form actions with field/form error handling and typed coercion
|
|
103
|
+
- explicit data queries and mutations with keyed invalidation over the reactive runtime
|
|
104
|
+
- typed route builders with params, query strings, and reusable route definitions
|
|
105
|
+
- locale negotiation, fallback dictionaries, Intl formatting, and locale-aware route helpers
|
|
106
|
+
- content collections with nested frontmatter parsing, schema validation, excerpts, block-scalar support, and locale-aware querying
|
|
107
|
+
- deterministic plugin platform with capabilities, dependency ordering, config validation, and conformance testing
|
|
108
|
+
- AI diagnostics, saved reactive-trace ingestion, context bundles, IDE projections, and MCP integration built into the framework lifecycle
|
|
109
|
+
- CLI enforcement through `gorsee check`, release gates, deploy contracts, and policy docs
|
|
40
110
|
|
|
41
|
-
|
|
42
|
-
export default island(function LikeButton({ postId }) {
|
|
43
|
-
const [count, setCount] = createSignal(0)
|
|
44
|
-
return <button on:click={() => setCount(c => c + 1)}>Like {count()}</button>
|
|
45
|
-
})
|
|
46
|
-
```
|
|
111
|
+
## Core Ideas
|
|
47
112
|
|
|
48
|
-
###
|
|
113
|
+
### AI-first development
|
|
49
114
|
|
|
50
|
-
|
|
51
|
-
import { createLive } from "gorsee/client"
|
|
52
|
-
|
|
53
|
-
function StockPrice() {
|
|
54
|
-
const { value: price, connected } = createLive({
|
|
55
|
-
url: "wss://api.example.com/btc",
|
|
56
|
-
initialValue: 0,
|
|
57
|
-
reconnect: true, // auto-reconnect with exponential backoff
|
|
58
|
-
})
|
|
59
|
-
return <span>{connected() ? price() : "..."}</span>
|
|
60
|
-
}
|
|
61
|
-
```
|
|
115
|
+
The framework must be easy for an agent to reason about:
|
|
62
116
|
|
|
63
|
-
|
|
117
|
+
- deterministic project layout
|
|
118
|
+
- narrow public surfaces
|
|
119
|
+
- explicit runtime contracts
|
|
120
|
+
- strong defaults over open-ended composition
|
|
121
|
+
- observability artifacts that can be consumed by tools and models
|
|
64
122
|
|
|
65
|
-
|
|
66
|
-
import { createSignal, createMutation } from "gorsee/client"
|
|
123
|
+
### Reactive-first runtime
|
|
67
124
|
|
|
68
|
-
|
|
69
|
-
const addTodo = createMutation({
|
|
70
|
-
mutationFn: async (text) => fetch("/api/todos", { method: "POST", body: text }),
|
|
71
|
-
})
|
|
125
|
+
Gorsee follows a fine-grained reactive model closer to Solid than to React:
|
|
72
126
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
### Built-in Auth
|
|
127
|
+
- signals instead of VDOM diffing
|
|
128
|
+
- direct SSR rendering
|
|
129
|
+
- explicit hydration model
|
|
130
|
+
- islands for minimal client JavaScript
|
|
78
131
|
|
|
79
132
|
```tsx
|
|
80
|
-
import {
|
|
81
|
-
|
|
82
|
-
const auth = createAuth({ secret: process.env.SESSION_SECRET })
|
|
133
|
+
import { island, createSignal } from "gorsee/client"
|
|
83
134
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
135
|
+
export default island(function LikeButton() {
|
|
136
|
+
const [count, setCount] = createSignal(0)
|
|
137
|
+
return <button on:click={() => setCount((value) => value + 1)}>Like {count()}</button>
|
|
138
|
+
})
|
|
87
139
|
```
|
|
88
140
|
|
|
89
|
-
###
|
|
141
|
+
### Built-in guarantees
|
|
90
142
|
|
|
91
|
-
|
|
92
|
-
routes/
|
|
93
|
-
index.tsx → /
|
|
94
|
-
about.tsx → /about
|
|
95
|
-
users/[id].tsx → /users/:id
|
|
96
|
-
blog/[...slug].tsx → /blog/*
|
|
97
|
-
(admin)/
|
|
98
|
-
dashboard.tsx → /dashboard (group — no /admin prefix)
|
|
99
|
-
_layout.tsx → wraps all pages
|
|
100
|
-
_middleware.ts → runs before all routes
|
|
101
|
-
_error.tsx → error boundary
|
|
102
|
-
_loading.tsx → loading state
|
|
103
|
-
404.tsx → custom 404
|
|
104
|
-
```
|
|
143
|
+
Capabilities are not bolt-on features. They are part of the framework contract:
|
|
105
144
|
|
|
106
|
-
|
|
145
|
+
- auth and session stores
|
|
146
|
+
- request policy and security validation
|
|
147
|
+
- route cache with explicit intent
|
|
148
|
+
- type-safe route generation
|
|
149
|
+
- validated forms
|
|
150
|
+
- deploy adapters with provider assumptions
|
|
151
|
+
- AI observability and bridge tooling
|
|
107
152
|
|
|
108
|
-
|
|
109
|
-
import { pipe, forPaths, forMethods } from "gorsee/server"
|
|
110
|
-
import { cors } from "gorsee/security"
|
|
153
|
+
## Canonical Route Grammar
|
|
111
154
|
|
|
112
|
-
|
|
113
|
-
forPaths(["/api"], cors({ origin: "https://app.com" })),
|
|
114
|
-
forMethods(["POST"], rateLimit(100, "1m")),
|
|
115
|
-
auth.middleware,
|
|
116
|
-
)
|
|
117
|
-
```
|
|
155
|
+
For greenfield route modules, prefer this structure:
|
|
118
156
|
|
|
119
|
-
|
|
157
|
+
- `default export` for page UI
|
|
158
|
+
- `load` for route data reads
|
|
159
|
+
- `action` for page-bound mutations
|
|
160
|
+
- `cache` for declarative cache policy
|
|
161
|
+
- `middleware` for cross-cutting request policy
|
|
162
|
+
- `GET` / `POST` / other method handlers for raw HTTP endpoints
|
|
163
|
+
- route contracts from `gorsee/routes` for typed links and navigation
|
|
120
164
|
|
|
121
|
-
|
|
122
|
-
|---------|-------------|
|
|
123
|
-
| `gorsee create <name>` | Scaffold new project |
|
|
124
|
-
| `gorsee dev` | Dev server with HMR |
|
|
125
|
-
| `gorsee build` | Production build |
|
|
126
|
-
| `gorsee start` | Production server |
|
|
127
|
-
| `gorsee check` | Type check + safety audit |
|
|
128
|
-
| `gorsee routes` | Show route table |
|
|
129
|
-
| `gorsee generate <entity>` | CRUD scaffold |
|
|
130
|
-
| `gorsee typegen` | Generate typed routes |
|
|
131
|
-
| `gorsee migrate` | Run DB migrations |
|
|
165
|
+
Compatibility note: `loader` remains supported as a migration alias, but canonical route modules should use `load`.
|
|
132
166
|
|
|
133
|
-
##
|
|
167
|
+
## Public Entrypoints
|
|
134
168
|
|
|
135
169
|
```tsx
|
|
136
|
-
// Route components, islands, navigation, forms, browser-safe reactivity
|
|
137
170
|
import { createSignal, island, Link, Head } from "gorsee/client"
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
import {
|
|
171
|
+
import { createAuth } from "gorsee/auth"
|
|
172
|
+
import { createDB } from "gorsee/db"
|
|
173
|
+
import { cors } from "gorsee/security"
|
|
174
|
+
import { log } from "gorsee/log"
|
|
175
|
+
import { defineForm, useFormAction } from "gorsee/forms"
|
|
176
|
+
import { createTypedRoute } from "gorsee/routes"
|
|
141
177
|
```
|
|
142
178
|
|
|
143
|
-
- Use `gorsee/client` for route components and anything that must stay browser-safe.
|
|
144
|
-
- Use `gorsee/server` for loaders, middleware, API routes, auth, db, security, env, and logging.
|
|
145
|
-
- Keep root `gorsee` only for backward compatibility. New code should not depend on it.
|
|
146
|
-
- If you need explicit legacy semantics during migration, use `gorsee/compat`.
|
|
147
|
-
|
|
148
|
-
## Adapter Utilities
|
|
149
|
-
|
|
150
179
|
```tsx
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
createNamespacedSessionStore,
|
|
155
|
-
createRedisSessionStore,
|
|
156
|
-
createSQLiteSessionStore,
|
|
157
|
-
createMemoryCacheStore,
|
|
158
|
-
createNamespacedCacheStore,
|
|
159
|
-
createRedisCacheStore,
|
|
160
|
-
createSQLiteCacheStore,
|
|
161
|
-
createMemoryRPCRegistry,
|
|
162
|
-
createScopedRPCRegistry,
|
|
163
|
-
} from "gorsee/server"
|
|
164
|
-
|
|
165
|
-
const sharedSessions = createMemorySessionStore()
|
|
166
|
-
const tenantSessions = createNamespacedSessionStore(sharedSessions, "tenant-a")
|
|
167
|
-
const auth = createAuth({ secret: process.env.SESSION_SECRET!, store: tenantSessions })
|
|
168
|
-
|
|
169
|
-
const sharedCache = createMemoryCacheStore()
|
|
170
|
-
const tenantCache = createNamespacedCacheStore(sharedCache, "tenant-a")
|
|
171
|
-
|
|
172
|
-
const sessionStore = createSQLiteSessionStore("./data/auth.sqlite")
|
|
173
|
-
const cacheStore = createSQLiteCacheStore("./data/cache.sqlite")
|
|
174
|
-
|
|
175
|
-
const redisSessionStore = createRedisSessionStore(redisClient, { prefix: "gorsee:sessions" })
|
|
176
|
-
const redisCacheStore = createRedisCacheStore(redisClient, { prefix: "gorsee:cache" })
|
|
177
|
-
|
|
178
|
-
const sharedRPC = createMemoryRPCRegistry()
|
|
179
|
-
const tenantRPC = createScopedRPCRegistry(sharedRPC, "tenant-a")
|
|
180
|
+
const userRoute = createTypedRoute("/users/[id]")
|
|
181
|
+
|
|
182
|
+
<Link href={userRoute} params={{ id: "42" }}>Profile</Link>
|
|
180
183
|
```
|
|
181
184
|
|
|
182
|
-
- `
|
|
183
|
-
- `
|
|
184
|
-
- `
|
|
185
|
-
- `
|
|
186
|
-
-
|
|
187
|
-
- `
|
|
188
|
-
- RPC handlers remain intentionally process-local. The stable extension point is injected request-time registry resolution, not pretending closures can live in Redis.
|
|
189
|
-
- `createScopedRPCRegistry` isolates RPC registrations without forking the entire server runtime.
|
|
185
|
+
- Use `gorsee/client` for route components and browser-safe APIs.
|
|
186
|
+
- Use `gorsee/server` for `load`, `action`, middleware, API routes, cache, request policy, and server runtime orchestration.
|
|
187
|
+
- Prefer scoped stable subpaths such as `gorsee/auth`, `gorsee/db`, `gorsee/security`, `gorsee/ai`, `gorsee/forms`, `gorsee/routes`, `gorsee/i18n`, and `gorsee/content` when the concern is already clear.
|
|
188
|
+
- Keep root `gorsee` only for compatibility. New code should not depend on it.
|
|
189
|
+
- Use `gorsee/compat` only for explicit legacy migration semantics.
|
|
190
|
+
- `Link` prefetch is explicit: `prefetch={true}` is eager, `prefetch="hover"` is pointer/focus triggered, and `prefetch="viewport"` is IntersectionObserver-driven. Links without `prefetch` do not prefetch implicitly.
|
|
190
191
|
|
|
191
|
-
##
|
|
192
|
+
## Package Distribution
|
|
192
193
|
|
|
193
|
-
|
|
194
|
+
- workspace development stays Bun-first and source-first
|
|
195
|
+
- production build output includes `dist/prod.js` for Bun, `dist/prod-node.js` for Node, and matching Bun/Node server-handler entries for adapter runtimes
|
|
196
|
+
- process deploy generators keep Bun-first defaults while also supporting explicit Node runtime profiles for Docker and Fly
|
|
197
|
+
- published packages are normalized at `npm pack` / publish time to compiled `dist-pkg/*.js` and `dist-pkg/*.d.ts` artifacts
|
|
198
|
+
- packed `gorsee` validates CLI install, starter creation, `check`, `typegen`, `docs`, `build`, and deploy generator paths before release
|
|
199
|
+
- published runtime dependencies are treated as product surface and must stay pinned exactly
|
|
194
200
|
|
|
195
|
-
|
|
196
|
-
import { createClient } from "redis"
|
|
197
|
-
import {
|
|
198
|
-
createAuth,
|
|
199
|
-
createRedisSessionStore,
|
|
200
|
-
createRedisCacheStore,
|
|
201
|
-
createNodeRedisLikeClient,
|
|
202
|
-
routeCache,
|
|
203
|
-
} from "gorsee/server"
|
|
204
|
-
|
|
205
|
-
const redis = createClient({ url: process.env.REDIS_URL })
|
|
206
|
-
await redis.connect()
|
|
207
|
-
const redisClient = createNodeRedisLikeClient(redis)
|
|
208
|
-
|
|
209
|
-
const auth = createAuth({
|
|
210
|
-
secret: process.env.SESSION_SECRET!,
|
|
211
|
-
store: createRedisSessionStore(redisClient, { prefix: "app:sessions" }),
|
|
212
|
-
})
|
|
201
|
+
## Starter Templates
|
|
213
202
|
|
|
214
|
-
|
|
215
|
-
maxAge: 60,
|
|
216
|
-
staleWhileRevalidate: 300,
|
|
217
|
-
store: createRedisCacheStore(redisClient, {
|
|
218
|
-
prefix: "app:cache",
|
|
219
|
-
maxEntryAgeMs: 360_000,
|
|
220
|
-
}),
|
|
221
|
-
})
|
|
222
|
-
```
|
|
203
|
+
`gorsee create` ships with one generic baseline and four first-party product starters:
|
|
223
204
|
|
|
224
|
-
|
|
205
|
+
- `basic` for the minimal canonical scaffold
|
|
206
|
+
- `secure-saas` for authenticated SaaS apps with protected route groups
|
|
207
|
+
- `content-site` for public content and marketing sites
|
|
208
|
+
- `agent-aware-ops` for internal tools with AI-first workflows enabled
|
|
209
|
+
- `workspace-monorepo` for workspace layouts with one app package and one shared package
|
|
225
210
|
|
|
226
|
-
|
|
227
|
-
import Redis from "ioredis"
|
|
228
|
-
import {
|
|
229
|
-
createAuth,
|
|
230
|
-
createRedisSessionStore,
|
|
231
|
-
createRedisCacheStore,
|
|
232
|
-
createIORedisLikeClient,
|
|
233
|
-
routeCache,
|
|
234
|
-
} from "gorsee/server"
|
|
235
|
-
|
|
236
|
-
const redis = new Redis(process.env.REDIS_URL!)
|
|
237
|
-
const redisClient = createIORedisLikeClient(redis)
|
|
238
|
-
|
|
239
|
-
const auth = createAuth({
|
|
240
|
-
secret: process.env.SESSION_SECRET!,
|
|
241
|
-
store: createRedisSessionStore(redisClient, { prefix: "app:sessions" }),
|
|
242
|
-
})
|
|
211
|
+
Examples:
|
|
243
212
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
})
|
|
213
|
+
```bash
|
|
214
|
+
bunx gorsee create my-saas --template secure-saas
|
|
215
|
+
bunx gorsee create my-site --template content-site
|
|
216
|
+
bunx gorsee create my-ops --template agent-aware-ops
|
|
217
|
+
bunx gorsee create my-workspace --template workspace-monorepo
|
|
218
|
+
npx create-gorsee my-app
|
|
219
|
+
npm create gorsee@latest my-app
|
|
252
220
|
```
|
|
253
221
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
- For multi-instance deployments, keep the same Redis prefixes across all app replicas.
|
|
257
|
-
- Session expiry is enforced by store TTL and validated again by `createAuth()`.
|
|
258
|
-
- Cache retention is controlled by `maxEntryAgeMs`; `routeCache()` still decides HIT/STALE/MISS at request time.
|
|
259
|
-
- `createNodeRedisLikeClient()` and `createIORedisLikeClient()` let you pass real Redis SDK clients without writing framework-specific glue.
|
|
260
|
-
|
|
261
|
-
## Requirements
|
|
222
|
+
## CLI
|
|
262
223
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
224
|
+
| Command | Description |
|
|
225
|
+
|---------|-------------|
|
|
226
|
+
| `gorsee create <name> [--template <name>]` | Scaffold a new project from the canonical starter set |
|
|
227
|
+
| `gorsee dev` | Start development server with HMR |
|
|
228
|
+
| `gorsee build` | Build client and server output |
|
|
229
|
+
| `gorsee start` | Start production runtime |
|
|
230
|
+
| `gorsee start --runtime node` | Start the built Node production runtime entry |
|
|
231
|
+
| `gorsee check [--rewrite-imports] [--rewrite-loaders]` | Type, structure, TSX contract, and safety audit, with optional canonical autofix |
|
|
232
|
+
| `gorsee routes` | Show route table |
|
|
233
|
+
| `gorsee generate <entity>` | Generate CRUD scaffold with typed routes, validated forms, and inferred `memory|sqlite|postgres` data mode |
|
|
234
|
+
| `gorsee docs --format json --contracts` | Emit machine-readable route/docs contract artifact |
|
|
235
|
+
| `gorsee upgrade --rewrite-imports --check --report docs/upgrade-report.json` | Audit migration drift, rewrite obvious import/loader aliases, and write a structured upgrade report |
|
|
236
|
+
| `gorsee typegen` | Generate typed routes |
|
|
237
|
+
| `gorsee migrate` | Run database migrations |
|
|
238
|
+
| `gorsee deploy` | Generate deploy config for supported targets, with `--runtime bun|node` on process-based adapters |
|
|
239
|
+
| `gorsee ai` | AI diagnostics, bridge, IDE sync, export, and MCP tooling |
|
|
240
|
+
|
|
241
|
+
Runtime debugging surface:
|
|
242
|
+
|
|
243
|
+
- `createRuntimeDevtoolsSnapshot()` for a versioned inspector snapshot spanning router, hydration, and reactive diagnostics
|
|
244
|
+
- `renderRuntimeDevtoolsHTML()` / `renderRuntimeDevtoolsOverlay()` for a human-readable devtools view built from the same canonical artifacts
|
|
245
|
+
|
|
246
|
+
Migration ergonomics:
|
|
247
|
+
|
|
248
|
+
- `gorsee check --rewrite-imports --rewrite-loaders` can normalize obvious scoped-import and `loader -> load` drift before the audit runs.
|
|
249
|
+
- `gorsee upgrade --rewrite-imports --check --report docs/upgrade-report.json` is the canonical migration cleanup flow.
|
|
250
|
+
|
|
251
|
+
## Product Standards
|
|
252
|
+
|
|
253
|
+
- Production behavior must remain deterministic across dev and prod.
|
|
254
|
+
- Security-sensitive behavior must be explicit, testable, and fail-closed.
|
|
255
|
+
- New APIs must strengthen the framework contract, not widen ambiguity.
|
|
256
|
+
- Performance claims must be backed by benchmarks and reproducible examples.
|
|
257
|
+
- Gorsee is developed as a mature product. Regressions in policy, runtime contracts, or release discipline are product failures.
|
|
258
|
+
|
|
259
|
+
## Additional References
|
|
260
|
+
|
|
261
|
+
- [API Stability Policy](./docs/API_STABILITY.md)
|
|
262
|
+
- [AI Artifact Contract](./docs/AI_ARTIFACT_CONTRACT.md)
|
|
263
|
+
- [Reactive Runtime](./docs/REACTIVE_RUNTIME.md)
|
|
264
|
+
- [Reactive Benchmarks](./docs/REACTIVE_BENCHMARKS.md)
|
|
265
|
+
- [Reactive Patterns](./docs/REACTIVE_PATTERNS.md)
|
|
266
|
+
- [Reactive Hydration](./docs/REACTIVE_HYDRATION.md)
|
|
267
|
+
- [Reactive Debugging](./docs/REACTIVE_DEBUGGING.md)
|
|
268
|
+
- [Reactive Measurement Gaps](./docs/REACTIVE_MEASUREMENT_GAPS.md)
|
|
269
|
+
- [Benchmark Policy](./docs/BENCHMARK_POLICY.md)
|
|
270
|
+
- [Benchmark Methodology](./docs/BENCHMARK_METHODOLOGY.md)
|
|
271
|
+
- [SSR Benchmark Proof](./docs/SSR_BENCHMARK_PROOF.md)
|
|
272
|
+
- [DOM Benchmark Proof](./docs/DOM_BENCHMARK_PROOF.md)
|
|
273
|
+
- [Benchmark Artifacts](./docs/BENCHMARK_ARTIFACTS.md)
|
|
274
|
+
- [Benchmark Release Discipline](./docs/BENCHMARK_RELEASE_DISCIPLINE.md)
|
|
275
|
+
- [Build Diagnostics](./docs/BUILD_DIAGNOSTICS.md)
|
|
276
|
+
- [Runtime Failures](./docs/RUNTIME_FAILURES.md)
|
|
277
|
+
- [Cache Invalidation](./docs/CACHE_INVALIDATION.md)
|
|
278
|
+
- [Streaming and Hydration Failures](./docs/STREAMING_HYDRATION_FAILURES.md)
|
|
279
|
+
- [Runtime Triage](./docs/RUNTIME_TRIAGE.md)
|
|
280
|
+
- [Starter Failures](./docs/STARTER_FAILURES.md)
|
|
281
|
+
- [AI Workflows](./docs/AI_WORKFLOWS.md)
|
|
282
|
+
- [AI IDE Sync Workflow](./docs/AI_IDE_SYNC_WORKFLOW.md)
|
|
283
|
+
- [AI MCP Workflow](./docs/AI_MCP_WORKFLOW.md)
|
|
284
|
+
- [AI Bridge Workflow](./docs/AI_BRIDGE_WORKFLOW.md)
|
|
285
|
+
- [AI Tool Builders](./docs/AI_TOOL_BUILDERS.md)
|
|
286
|
+
- [AI Surface Stability](./docs/AI_SURFACE_STABILITY.md)
|
|
287
|
+
- [AI Session Packs](./docs/AI_SESSION_PACKS.md)
|
|
288
|
+
- [AI Debugging Workflows](./docs/AI_DEBUGGING_WORKFLOWS.md)
|
|
289
|
+
- [Starter Onboarding](./docs/STARTER_ONBOARDING.md)
|
|
290
|
+
- [Migration Guide](./docs/MIGRATION_GUIDE.md)
|
|
291
|
+
- [Upgrade Playbook](./docs/UPGRADE_PLAYBOOK.md)
|
|
292
|
+
- [Deploy Target Guide](./docs/DEPLOY_TARGET_GUIDE.md)
|
|
293
|
+
- [First Production Rollout](./docs/FIRST_PRODUCTION_ROLLOUT.md)
|
|
294
|
+
- [Auth / Cache / Data Paths](./docs/AUTH_CACHE_DATA_PATHS.md)
|
|
295
|
+
- [Recipe Boundaries](./docs/RECIPE_BOUNDARIES.md)
|
|
296
|
+
- [Workspace Adoption](./docs/WORKSPACE_ADOPTION.md)
|
|
297
|
+
- [Downstream Testing](./docs/DOWNSTREAM_TESTING.md)
|
|
298
|
+
- [Team Failures](./docs/TEAM_FAILURES.md)
|
|
299
|
+
- [Maturity Policy](./docs/MATURITY_POLICY.md)
|
|
300
|
+
- [Dependency Policy](./docs/DEPENDENCY_POLICY.md)
|
|
301
|
+
- [Compatibility Guardrails](./docs/COMPATIBILITY_GUARDRAILS.md)
|
|
302
|
+
- [Ambiguity Policy](./docs/AMBIGUITY_POLICY.md)
|
|
303
|
+
- [DX Feedback Loop](./docs/DX_FEEDBACK_LOOP.md)
|
|
304
|
+
- [Evidence Policy](./docs/EVIDENCE_POLICY.md)
|
|
305
|
+
- [Roadmap Completion Policy](./docs/ROADMAP_COMPLETION_POLICY.md)
|
|
306
|
+
- [Canonical Recipes](./docs/CANONICAL_RECIPES.md)
|
|
307
|
+
- [Canonical Examples](./examples/README.md)
|
|
308
|
+
- [Examples Policy](./docs/EXAMPLES_POLICY.md)
|
|
309
|
+
- [Support Matrix](./docs/SUPPORT_MATRIX.md)
|
|
310
|
+
- [Deprecation Policy](./docs/DEPRECATION_POLICY.md)
|
|
311
|
+
- [Secure Patterns](./docs/SECURE_PATTERNS.md)
|
|
312
|
+
- [Adapter Security](./docs/ADAPTER_SECURITY.md)
|
|
313
|
+
- [CI Policy](./docs/CI_POLICY.md)
|
|
314
|
+
- [Release Policy](./docs/RELEASE_POLICY.md)
|
|
315
|
+
- [Release Checklist](./docs/RELEASE_CHECKLIST.md)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface ArtifactLifecycleEventInput {
|
|
2
|
+
cwd: string;
|
|
3
|
+
source: "deploy" | "cli" | "build";
|
|
4
|
+
phase: "deploy" | "release" | "build";
|
|
5
|
+
kind: string;
|
|
6
|
+
severity: "info" | "warn" | "error";
|
|
7
|
+
message: string;
|
|
8
|
+
code?: string;
|
|
9
|
+
data?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export declare function writeArtifactLifecycleEvent(input: ArtifactLifecycleEventInput): Promise<void>;
|
|
12
|
+
export declare function writeArtifactSuccessPack(cwd: string): Promise<void>;
|
|
13
|
+
export declare function writeArtifactFailurePack(cwd: string, source: "deploy" | "cli" | "build", kind: string, code: string, message: string): Promise<void>;
|
|
14
|
+
export declare function runArtifactLifecycleStep<T>(input: {
|
|
15
|
+
cwd: string;
|
|
16
|
+
source: "deploy" | "cli" | "build";
|
|
17
|
+
phase: "deploy" | "release" | "build";
|
|
18
|
+
step: string;
|
|
19
|
+
version?: string;
|
|
20
|
+
code?: string;
|
|
21
|
+
startMessage: string;
|
|
22
|
+
finishMessage: string;
|
|
23
|
+
data?: Record<string, unknown>;
|
|
24
|
+
run: () => Promise<T>;
|
|
25
|
+
}): Promise<T>;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { appendFile, mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
export async function writeArtifactLifecycleEvent(input) {
|
|
4
|
+
const gorseeDir = join(input.cwd, ".gorsee");
|
|
5
|
+
await mkdir(gorseeDir, { recursive: !0 });
|
|
6
|
+
const ts = new Date().toISOString();
|
|
7
|
+
await appendFile(join(gorseeDir, "ai-events.jsonl"), `${JSON.stringify({
|
|
8
|
+
id: crypto.randomUUID(),
|
|
9
|
+
kind: input.kind,
|
|
10
|
+
severity: input.severity,
|
|
11
|
+
ts,
|
|
12
|
+
source: input.source,
|
|
13
|
+
message: input.message,
|
|
14
|
+
code: input.code,
|
|
15
|
+
phase: input.phase,
|
|
16
|
+
data: input.data
|
|
17
|
+
})}
|
|
18
|
+
`, "utf-8");
|
|
19
|
+
}
|
|
20
|
+
export async function writeArtifactSuccessPack(cwd) {
|
|
21
|
+
const repoCliEntry = join(import.meta.dir, "..", "cli", "index.ts");
|
|
22
|
+
try {
|
|
23
|
+
await Bun.$`bun run ${repoCliEntry} ai pack`.cwd(cwd).quiet();
|
|
24
|
+
} catch {}
|
|
25
|
+
}
|
|
26
|
+
export async function writeArtifactFailurePack(cwd, source, kind, code, message) {
|
|
27
|
+
const gorseeDir = join(cwd, ".gorsee");
|
|
28
|
+
await mkdir(gorseeDir, { recursive: !0 });
|
|
29
|
+
const ts = new Date().toISOString();
|
|
30
|
+
await appendFile(join(gorseeDir, "ai-events.jsonl"), `${JSON.stringify({
|
|
31
|
+
id: crypto.randomUUID(),
|
|
32
|
+
kind,
|
|
33
|
+
severity: "error",
|
|
34
|
+
ts,
|
|
35
|
+
source,
|
|
36
|
+
message,
|
|
37
|
+
code
|
|
38
|
+
})}
|
|
39
|
+
`, "utf-8");
|
|
40
|
+
await writeFile(join(gorseeDir, "ai-diagnostics.json"), JSON.stringify({
|
|
41
|
+
updatedAt: ts,
|
|
42
|
+
latest: {
|
|
43
|
+
code,
|
|
44
|
+
message,
|
|
45
|
+
severity: "error",
|
|
46
|
+
source
|
|
47
|
+
}
|
|
48
|
+
}, null, 2), "utf-8");
|
|
49
|
+
await writeArtifactSuccessPack(cwd);
|
|
50
|
+
}
|
|
51
|
+
export async function runArtifactLifecycleStep(input) {
|
|
52
|
+
await writeArtifactLifecycleEvent({
|
|
53
|
+
cwd: input.cwd,
|
|
54
|
+
source: input.source,
|
|
55
|
+
phase: input.phase,
|
|
56
|
+
kind: `${input.step}.start`,
|
|
57
|
+
severity: "info",
|
|
58
|
+
message: input.startMessage,
|
|
59
|
+
data: {
|
|
60
|
+
version: input.version,
|
|
61
|
+
...input.data ?? {}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
try {
|
|
65
|
+
const result = await input.run();
|
|
66
|
+
await writeArtifactLifecycleEvent({
|
|
67
|
+
cwd: input.cwd,
|
|
68
|
+
source: input.source,
|
|
69
|
+
phase: input.phase,
|
|
70
|
+
kind: `${input.step}.finish`,
|
|
71
|
+
severity: "info",
|
|
72
|
+
message: input.finishMessage,
|
|
73
|
+
data: {
|
|
74
|
+
version: input.version,
|
|
75
|
+
...input.data ?? {}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
await writeArtifactSuccessPack(input.cwd);
|
|
79
|
+
return result;
|
|
80
|
+
} catch (error) {
|
|
81
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
82
|
+
await writeArtifactLifecycleEvent({
|
|
83
|
+
cwd: input.cwd,
|
|
84
|
+
source: input.source,
|
|
85
|
+
phase: input.phase,
|
|
86
|
+
kind: `${input.step}.error`,
|
|
87
|
+
severity: "error",
|
|
88
|
+
message,
|
|
89
|
+
code: input.code,
|
|
90
|
+
data: {
|
|
91
|
+
version: input.version,
|
|
92
|
+
...input.data ?? {}
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
await writeArtifactFailurePack(input.cwd, input.source, `${input.step}.failure`, input.code ?? "ARTIFACT_STEP", message);
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|