gorsee 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +261 -213
- package/dist-pkg/ai/artifact-lifecycle.d.ts +25 -0
- package/dist-pkg/ai/artifact-lifecycle.js +98 -0
- package/dist-pkg/ai/bridge.d.ts +26 -0
- package/dist-pkg/ai/bridge.js +82 -0
- package/dist-pkg/ai/bundle.d.ts +46 -0
- package/dist-pkg/ai/bundle.js +247 -0
- package/dist-pkg/ai/contracts.d.ts +1 -0
- package/dist-pkg/ai/contracts.js +1 -0
- package/dist-pkg/ai/ide.d.ts +37 -0
- package/dist-pkg/ai/ide.js +56 -0
- package/dist-pkg/ai/index.d.ts +85 -0
- package/dist-pkg/ai/index.js +267 -0
- package/dist-pkg/ai/json.d.ts +6 -0
- package/dist-pkg/ai/json.js +14 -0
- package/dist-pkg/ai/mcp.d.ts +28 -0
- package/dist-pkg/ai/mcp.js +152 -0
- package/dist-pkg/ai/session-pack.d.ts +28 -0
- package/dist-pkg/ai/session-pack.js +57 -0
- package/dist-pkg/ai/store.d.ts +67 -0
- package/dist-pkg/ai/store.js +174 -0
- package/dist-pkg/ai/summary.d.ts +57 -0
- package/dist-pkg/ai/summary.js +148 -0
- package/dist-pkg/ai/watch.d.ts +15 -0
- package/dist-pkg/ai/watch.js +66 -0
- package/dist-pkg/auth/action-tokens.d.ts +50 -0
- package/dist-pkg/auth/action-tokens.js +79 -0
- package/dist-pkg/auth/index.d.ts +70 -0
- package/dist-pkg/auth/index.js +199 -0
- package/dist-pkg/auth/redis-session-store.d.ts +7 -0
- package/dist-pkg/auth/redis-session-store.js +42 -0
- package/dist-pkg/auth/signing.d.ts +4 -0
- package/dist-pkg/auth/signing.js +33 -0
- package/dist-pkg/auth/sqlite-session-store.d.ts +12 -0
- package/dist-pkg/auth/sqlite-session-store.js +83 -0
- package/dist-pkg/auth/store-utils.d.ts +2 -0
- package/dist-pkg/auth/store-utils.js +20 -0
- package/dist-pkg/bin/gorsee.js +2 -0
- package/dist-pkg/build/backends/experimental-rolldown.d.ts +6 -0
- package/dist-pkg/build/backends/experimental-rolldown.js +9 -0
- package/dist-pkg/build/backends/register.d.ts +7 -0
- package/dist-pkg/build/backends/register.js +24 -0
- package/dist-pkg/build/backends/rolldown.d.ts +16 -0
- package/dist-pkg/build/backends/rolldown.js +176 -0
- package/dist-pkg/build/client-backend.d.ts +31 -0
- package/dist-pkg/build/client-backend.js +97 -0
- package/dist-pkg/build/client.d.ts +12 -0
- package/dist-pkg/build/client.js +93 -0
- package/dist-pkg/build/css-modules.d.ts +10 -0
- package/dist-pkg/build/css-modules.js +51 -0
- package/dist-pkg/build/devalue-parse.d.ts +1 -0
- package/dist-pkg/build/devalue-parse.js +1 -0
- package/dist-pkg/build/diagnostics.d.ts +20 -0
- package/dist-pkg/build/diagnostics.js +35 -0
- package/dist-pkg/build/fixtures.d.ts +7 -0
- package/dist-pkg/build/fixtures.js +60 -0
- package/dist-pkg/build/framework-imports.d.ts +4 -0
- package/dist-pkg/build/framework-imports.js +58 -0
- package/dist-pkg/build/init.d.ts +1 -0
- package/dist-pkg/build/init.js +6 -0
- package/dist-pkg/build/manifest.d.ts +3 -0
- package/dist-pkg/build/manifest.js +23 -0
- package/dist-pkg/build/parity.d.ts +32 -0
- package/dist-pkg/build/parity.js +71 -0
- package/dist-pkg/build/plugin.d.ts +11 -0
- package/dist-pkg/build/plugin.js +8 -0
- package/dist-pkg/build/readiness.d.ts +11 -0
- package/dist-pkg/build/readiness.js +18 -0
- package/dist-pkg/build/route-client-transform.d.ts +17 -0
- package/dist-pkg/build/route-client-transform.js +48 -0
- package/dist-pkg/build/route-metadata.d.ts +6 -0
- package/dist-pkg/build/route-metadata.js +8 -0
- package/dist-pkg/build/rpc-transform.d.ts +1 -0
- package/dist-pkg/build/rpc-transform.js +44 -0
- package/dist-pkg/build/server-bundle.d.ts +4 -0
- package/dist-pkg/build/server-bundle.js +261 -0
- package/dist-pkg/build/server-strip.d.ts +2 -0
- package/dist-pkg/build/server-strip.js +32 -0
- package/dist-pkg/build/ssg.d.ts +12 -0
- package/dist-pkg/build/ssg.js +36 -0
- package/dist-pkg/cli/bun-plugin.d.ts +2 -0
- package/dist-pkg/cli/bun-plugin.js +14 -0
- package/dist-pkg/cli/canonical-import-rewrite.d.ts +18 -0
- package/dist-pkg/cli/canonical-import-rewrite.js +94 -0
- package/dist-pkg/cli/canonical-imports.d.ts +8 -0
- package/dist-pkg/cli/canonical-imports.js +131 -0
- package/dist-pkg/cli/check-ast.d.ts +20 -0
- package/dist-pkg/cli/check-ast.js +126 -0
- package/dist-pkg/cli/cmd-ai.d.ts +4 -0
- package/dist-pkg/cli/cmd-ai.js +290 -0
- package/dist-pkg/cli/cmd-build.d.ts +12 -0
- package/dist-pkg/cli/cmd-build.js +198 -0
- package/dist-pkg/cli/cmd-check.d.ts +25 -0
- package/dist-pkg/cli/cmd-check.js +573 -0
- package/dist-pkg/cli/cmd-create.d.ts +6 -0
- package/dist-pkg/cli/cmd-create.js +600 -0
- package/dist-pkg/cli/cmd-deploy.d.ts +6 -0
- package/dist-pkg/cli/cmd-deploy.js +381 -0
- package/dist-pkg/cli/cmd-dev.d.ts +5 -0
- package/dist-pkg/cli/cmd-dev.js +5 -0
- package/dist-pkg/cli/cmd-docs.d.ts +50 -0
- package/dist-pkg/cli/cmd-docs.js +122 -0
- package/dist-pkg/cli/cmd-generate.d.ts +12 -0
- package/dist-pkg/cli/cmd-generate.js +320 -0
- package/dist-pkg/cli/cmd-migrate.d.ts +7 -0
- package/dist-pkg/cli/cmd-migrate.js +42 -0
- package/dist-pkg/cli/cmd-routes.d.ts +6 -0
- package/dist-pkg/cli/cmd-routes.js +24 -0
- package/dist-pkg/cli/cmd-start.d.ts +13 -0
- package/dist-pkg/cli/cmd-start.js +32 -0
- package/dist-pkg/cli/cmd-test.d.ts +20 -0
- package/dist-pkg/cli/cmd-test.js +103 -0
- package/dist-pkg/cli/cmd-typegen.d.ts +7 -0
- package/dist-pkg/cli/cmd-typegen.js +66 -0
- package/dist-pkg/cli/cmd-upgrade.d.ts +38 -0
- package/dist-pkg/cli/cmd-upgrade.js +232 -0
- package/dist-pkg/cli/context.d.ts +4 -0
- package/dist-pkg/cli/context.js +4 -0
- package/dist-pkg/cli/framework-md.d.ts +1 -0
- package/dist-pkg/cli/framework-md.js +391 -0
- package/dist-pkg/cli/index.d.ts +6 -0
- package/dist-pkg/cli/index.js +106 -0
- package/dist-pkg/cli/release-version.d.ts +2 -0
- package/dist-pkg/cli/release-version.js +33 -0
- package/dist-pkg/client.d.ts +16 -0
- package/dist-pkg/client.js +71 -0
- package/dist-pkg/compat.d.ts +1 -0
- package/dist-pkg/compat.js +1 -0
- package/dist-pkg/compiler/analysis-backend.d.ts +20 -0
- package/dist-pkg/compiler/analysis-backend.js +164 -0
- package/dist-pkg/compiler/backends/experimental-oxc.d.ts +6 -0
- package/dist-pkg/compiler/backends/experimental-oxc.js +9 -0
- package/dist-pkg/compiler/backends/oxc.d.ts +16 -0
- package/dist-pkg/compiler/backends/oxc.js +198 -0
- package/dist-pkg/compiler/backends/register.d.ts +7 -0
- package/dist-pkg/compiler/backends/register.js +22 -0
- package/dist-pkg/compiler/fixtures.d.ts +2 -0
- package/dist-pkg/compiler/fixtures.js +118 -0
- package/dist-pkg/compiler/init.d.ts +1 -0
- package/dist-pkg/compiler/init.js +6 -0
- package/dist-pkg/compiler/module-analysis.d.ts +13 -0
- package/dist-pkg/compiler/module-analysis.js +50 -0
- package/dist-pkg/compiler/parity.d.ts +35 -0
- package/dist-pkg/compiler/parity.js +89 -0
- package/dist-pkg/compiler/readiness.d.ts +11 -0
- package/dist-pkg/compiler/readiness.js +18 -0
- package/dist-pkg/compiler/route-facts.d.ts +34 -0
- package/dist-pkg/compiler/route-facts.js +75 -0
- package/dist-pkg/content/index.d.ts +27 -0
- package/dist-pkg/content/index.js +287 -0
- package/dist-pkg/db/index.d.ts +3 -0
- package/dist-pkg/db/index.js +6 -0
- package/dist-pkg/db/migrate.d.ts +7 -0
- package/dist-pkg/db/migrate.js +53 -0
- package/dist-pkg/db/postgres.d.ts +29 -0
- package/dist-pkg/db/postgres.js +59 -0
- package/dist-pkg/db/sqlite.d.ts +10 -0
- package/dist-pkg/db/sqlite.js +22 -0
- package/dist-pkg/deploy/cloudflare.d.ts +8 -0
- package/{src/deploy/cloudflare.ts → dist-pkg/deploy/cloudflare.js} +24 -26
- package/dist-pkg/deploy/conformance.d.ts +21 -0
- package/dist-pkg/deploy/conformance.js +98 -0
- package/dist-pkg/deploy/dockerfile.d.ts +3 -0
- package/{src/deploy/dockerfile.ts → dist-pkg/deploy/dockerfile.js} +8 -10
- package/dist-pkg/deploy/fly.d.ts +3 -0
- package/{src/deploy/fly.ts → dist-pkg/deploy/fly.js} +11 -12
- package/dist-pkg/deploy/index.d.ts +6 -0
- package/dist-pkg/deploy/index.js +26 -0
- package/dist-pkg/deploy/netlify.d.ts +2 -0
- package/{src/deploy/netlify.ts → dist-pkg/deploy/netlify.js} +17 -11
- package/dist-pkg/deploy/runtime.d.ts +2 -0
- package/dist-pkg/deploy/runtime.js +3 -0
- package/dist-pkg/deploy/vercel.d.ts +22 -0
- package/dist-pkg/deploy/vercel.js +53 -0
- package/dist-pkg/dev/error-overlay.d.ts +1 -0
- package/{src/dev/error-overlay.ts → dist-pkg/dev/error-overlay.js} +13 -23
- package/dist-pkg/dev/hmr.d.ts +30 -0
- package/dist-pkg/dev/hmr.js +86 -0
- package/dist-pkg/dev/partial-handler.d.ts +9 -0
- package/dist-pkg/dev/partial-handler.js +24 -0
- package/dist-pkg/dev/request-handler.d.ts +30 -0
- package/dist-pkg/dev/request-handler.js +67 -0
- package/dist-pkg/dev/watcher.d.ts +6 -0
- package/dist-pkg/dev/watcher.js +34 -0
- package/dist-pkg/dev.d.ts +11 -0
- package/dist-pkg/dev.js +268 -0
- package/dist-pkg/env/index.d.ts +3 -0
- package/dist-pkg/env/index.js +57 -0
- package/dist-pkg/errors/catalog.d.ts +9 -0
- package/{src/errors/catalog.ts → dist-pkg/errors/catalog.js} +8 -24
- package/dist-pkg/errors/formatter.d.ts +22 -0
- package/dist-pkg/errors/formatter.js +43 -0
- package/dist-pkg/errors/index.d.ts +2 -0
- package/dist-pkg/errors/index.js +2 -0
- package/dist-pkg/forms/action.d.ts +15 -0
- package/dist-pkg/forms/action.js +20 -0
- package/dist-pkg/forms/index.d.ts +4 -0
- package/dist-pkg/forms/index.js +12 -0
- package/dist-pkg/i18n/index.d.ts +61 -0
- package/dist-pkg/i18n/index.js +147 -0
- package/dist-pkg/index-client.d.ts +1 -0
- package/dist-pkg/index-client.js +1 -0
- package/dist-pkg/index.d.ts +32 -0
- package/dist-pkg/index.js +79 -0
- package/dist-pkg/jsx-runtime-client.d.ts +8 -0
- package/dist-pkg/jsx-runtime-client.js +1 -0
- package/dist-pkg/jsx-runtime.d.ts +13 -0
- package/dist-pkg/jsx-runtime.js +5 -0
- package/dist-pkg/jsx-types-html.d.ts +221 -0
- package/dist-pkg/jsx-types-html.js +0 -0
- package/dist-pkg/log/index.d.ts +8 -0
- package/dist-pkg/log/index.js +55 -0
- package/dist-pkg/plugins/drizzle.d.ts +16 -0
- package/dist-pkg/plugins/drizzle.js +50 -0
- package/dist-pkg/plugins/index.d.ts +62 -0
- package/dist-pkg/plugins/index.js +147 -0
- package/dist-pkg/plugins/lucia.d.ts +26 -0
- package/dist-pkg/plugins/lucia.js +63 -0
- package/dist-pkg/plugins/prisma.d.ts +14 -0
- package/dist-pkg/plugins/prisma.js +57 -0
- package/dist-pkg/plugins/resend.d.ts +21 -0
- package/dist-pkg/plugins/resend.js +45 -0
- package/dist-pkg/plugins/s3.d.ts +18 -0
- package/dist-pkg/plugins/s3.js +63 -0
- package/dist-pkg/plugins/stripe.d.ts +32 -0
- package/dist-pkg/plugins/stripe.js +69 -0
- package/dist-pkg/plugins/tailwind.d.ts +15 -0
- package/dist-pkg/plugins/tailwind.js +58 -0
- package/dist-pkg/prod.d.ts +21 -0
- package/dist-pkg/prod.js +347 -0
- package/dist-pkg/reactive/computed.d.ts +3 -0
- package/dist-pkg/reactive/computed.js +15 -0
- package/dist-pkg/reactive/data.d.ts +25 -0
- package/dist-pkg/reactive/data.js +56 -0
- package/dist-pkg/reactive/diagnostics.d.ts +100 -0
- package/dist-pkg/reactive/diagnostics.js +363 -0
- package/dist-pkg/reactive/effect.d.ts +3 -0
- package/dist-pkg/reactive/effect.js +6 -0
- package/dist-pkg/reactive/index.d.ts +9 -0
- package/dist-pkg/reactive/index.js +18 -0
- package/dist-pkg/reactive/live.d.ts +15 -0
- package/dist-pkg/reactive/live.js +58 -0
- package/dist-pkg/reactive/optimistic.d.ts +20 -0
- package/dist-pkg/reactive/optimistic.js +54 -0
- package/dist-pkg/reactive/resource.d.ts +25 -0
- package/dist-pkg/reactive/resource.js +97 -0
- package/dist-pkg/reactive/signal.d.ts +4 -0
- package/dist-pkg/reactive/signal.js +17 -0
- package/dist-pkg/reactive/store.d.ts +6 -0
- package/dist-pkg/reactive/store.js +19 -0
- package/dist-pkg/router/index.d.ts +2 -0
- package/dist-pkg/router/index.js +2 -0
- package/dist-pkg/router/matcher.d.ts +7 -0
- package/dist-pkg/router/matcher.js +40 -0
- package/dist-pkg/router/scanner.d.ts +14 -0
- package/dist-pkg/router/scanner.js +141 -0
- package/dist-pkg/routes/index.d.ts +1 -0
- package/dist-pkg/routes/index.js +10 -0
- package/dist-pkg/runtime/app-config.d.ts +26 -0
- package/dist-pkg/runtime/app-config.js +69 -0
- package/dist-pkg/runtime/client.d.ts +3 -0
- package/dist-pkg/runtime/client.js +31 -0
- package/dist-pkg/runtime/devtools.d.ts +64 -0
- package/dist-pkg/runtime/devtools.js +132 -0
- package/dist-pkg/runtime/error-boundary.d.ts +6 -0
- package/dist-pkg/runtime/error-boundary.js +17 -0
- package/dist-pkg/runtime/event-replay.d.ts +3 -0
- package/{src/runtime/event-replay.ts → dist-pkg/runtime/event-replay.js} +7 -22
- package/dist-pkg/runtime/event-source.d.ts +7 -0
- package/dist-pkg/runtime/event-source.js +24 -0
- package/dist-pkg/runtime/form.d.ts +24 -0
- package/dist-pkg/runtime/form.js +59 -0
- package/dist-pkg/runtime/head.d.ts +7 -0
- package/dist-pkg/runtime/head.js +90 -0
- package/dist-pkg/runtime/html-escape.d.ts +7 -0
- package/dist-pkg/runtime/html-escape.js +39 -0
- package/dist-pkg/runtime/hydration.d.ts +15 -0
- package/dist-pkg/runtime/hydration.js +103 -0
- package/dist-pkg/runtime/image.d.ts +49 -0
- package/dist-pkg/runtime/image.js +144 -0
- package/dist-pkg/runtime/index.d.ts +17 -0
- package/dist-pkg/runtime/index.js +59 -0
- package/dist-pkg/runtime/island-hydrator.d.ts +12 -0
- package/dist-pkg/runtime/island-hydrator.js +49 -0
- package/dist-pkg/runtime/island.d.ts +19 -0
- package/dist-pkg/runtime/island.js +36 -0
- package/dist-pkg/runtime/jsx-runtime.d.ts +12 -0
- package/dist-pkg/runtime/jsx-runtime.js +173 -0
- package/dist-pkg/runtime/link.d.ts +16 -0
- package/dist-pkg/runtime/link.js +47 -0
- package/dist-pkg/runtime/project.d.ts +37 -0
- package/dist-pkg/runtime/project.js +36 -0
- package/dist-pkg/runtime/renderable.d.ts +6 -0
- package/dist-pkg/runtime/renderable.js +0 -0
- package/dist-pkg/runtime/router.d.ts +47 -0
- package/dist-pkg/runtime/router.js +476 -0
- package/dist-pkg/runtime/server.d.ts +8 -0
- package/dist-pkg/runtime/server.js +71 -0
- package/dist-pkg/runtime/stream.d.ts +29 -0
- package/dist-pkg/runtime/stream.js +106 -0
- package/dist-pkg/runtime/suspense.d.ts +6 -0
- package/dist-pkg/runtime/suspense.js +16 -0
- package/dist-pkg/runtime/typed-routes.d.ts +24 -0
- package/dist-pkg/runtime/typed-routes.js +77 -0
- package/dist-pkg/runtime/validated-form.d.ts +40 -0
- package/dist-pkg/runtime/validated-form.js +120 -0
- package/dist-pkg/security/cors.d.ts +10 -0
- package/dist-pkg/security/cors.js +56 -0
- package/dist-pkg/security/csrf.d.ts +9 -0
- package/dist-pkg/security/csrf.js +53 -0
- package/dist-pkg/security/headers.d.ts +11 -0
- package/dist-pkg/security/headers.js +31 -0
- package/dist-pkg/security/index.d.ts +5 -0
- package/dist-pkg/security/index.js +5 -0
- package/dist-pkg/security/rate-limit.d.ts +10 -0
- package/dist-pkg/security/rate-limit.js +49 -0
- package/dist-pkg/security/redis-rate-limit.d.ts +14 -0
- package/dist-pkg/security/redis-rate-limit.js +23 -0
- package/dist-pkg/server/action.d.ts +21 -0
- package/dist-pkg/server/action.js +64 -0
- package/dist-pkg/server/cache-utils.d.ts +2 -0
- package/dist-pkg/server/cache-utils.js +26 -0
- package/dist-pkg/server/cache.d.ts +33 -0
- package/dist-pkg/server/cache.js +236 -0
- package/dist-pkg/server/compress.d.ts +2 -0
- package/dist-pkg/server/compress.js +49 -0
- package/dist-pkg/server/endpoint-execution.d.ts +28 -0
- package/dist-pkg/server/endpoint-execution.js +37 -0
- package/dist-pkg/server/etag.d.ts +3 -0
- package/dist-pkg/server/etag.js +18 -0
- package/dist-pkg/server/guard.d.ts +16 -0
- package/dist-pkg/server/guard.js +45 -0
- package/dist-pkg/server/html-shell.d.ts +12 -0
- package/dist-pkg/server/html-shell.js +52 -0
- package/dist-pkg/server/index.d.ts +36 -0
- package/dist-pkg/server/index.js +170 -0
- package/dist-pkg/server/jobs.d.ts +41 -0
- package/dist-pkg/server/jobs.js +81 -0
- package/dist-pkg/server/manifest.d.ts +19 -0
- package/dist-pkg/server/manifest.js +36 -0
- package/dist-pkg/server/middleware.d.ts +39 -0
- package/dist-pkg/server/middleware.js +122 -0
- package/dist-pkg/server/mime.d.ts +1 -0
- package/{src/server/mime.ts → dist-pkg/server/mime.js} +6 -17
- package/dist-pkg/server/not-found.d.ts +6 -0
- package/dist-pkg/server/not-found.js +24 -0
- package/dist-pkg/server/page-render.d.ts +29 -0
- package/dist-pkg/server/page-render.js +67 -0
- package/dist-pkg/server/partial-navigation.d.ts +4 -0
- package/dist-pkg/server/partial-navigation.js +16 -0
- package/dist-pkg/server/pipe.d.ts +9 -0
- package/dist-pkg/server/pipe.js +32 -0
- package/dist-pkg/server/redis-cache-store.d.ts +10 -0
- package/dist-pkg/server/redis-cache-store.js +73 -0
- package/dist-pkg/server/redis-client.d.ts +37 -0
- package/dist-pkg/server/redis-client.js +37 -0
- package/dist-pkg/server/request-policy.d.ts +55 -0
- package/dist-pkg/server/request-policy.js +216 -0
- package/dist-pkg/server/request-preflight.d.ts +23 -0
- package/dist-pkg/server/request-preflight.js +45 -0
- package/dist-pkg/server/request-security-policy.d.ts +17 -0
- package/dist-pkg/server/request-security-policy.js +34 -0
- package/dist-pkg/server/request-surface.d.ts +8 -0
- package/dist-pkg/server/request-surface.js +19 -0
- package/dist-pkg/server/route-request.d.ts +31 -0
- package/dist-pkg/server/route-request.js +112 -0
- package/dist-pkg/server/route-response.d.ts +22 -0
- package/dist-pkg/server/route-response.js +58 -0
- package/dist-pkg/server/rpc-hash.d.ts +2 -0
- package/dist-pkg/server/rpc-hash.js +7 -0
- package/dist-pkg/server/rpc-protocol.d.ts +22 -0
- package/dist-pkg/server/rpc-protocol.js +28 -0
- package/dist-pkg/server/rpc-utils.d.ts +2 -0
- package/dist-pkg/server/rpc-utils.js +26 -0
- package/dist-pkg/server/rpc.d.ts +20 -0
- package/dist-pkg/server/rpc.js +147 -0
- package/dist-pkg/server/runtime-dispatch.d.ts +19 -0
- package/dist-pkg/server/runtime-dispatch.js +67 -0
- package/dist-pkg/server/server-execution.d.ts +22 -0
- package/dist-pkg/server/server-execution.js +53 -0
- package/dist-pkg/server/sqlite-cache-store.d.ts +13 -0
- package/dist-pkg/server/sqlite-cache-store.js +88 -0
- package/dist-pkg/server/sse.d.ts +9 -0
- package/dist-pkg/server/sse.js +34 -0
- package/dist-pkg/server/static-file.d.ts +9 -0
- package/dist-pkg/server/static-file.js +43 -0
- package/dist-pkg/server/ws.d.ts +18 -0
- package/dist-pkg/server/ws.js +40 -0
- package/dist-pkg/server-entry.d.ts +19 -0
- package/dist-pkg/server-entry.js +93 -0
- package/dist-pkg/testing/index.d.ts +98 -0
- package/dist-pkg/testing/index.js +254 -0
- package/dist-pkg/types/index.d.ts +4 -0
- package/dist-pkg/types/index.js +4 -0
- package/dist-pkg/types/safe-html.d.ts +7 -0
- package/dist-pkg/types/safe-html.js +19 -0
- package/dist-pkg/types/safe-sql.d.ts +8 -0
- package/dist-pkg/types/safe-sql.js +14 -0
- package/dist-pkg/types/safe-url.d.ts +7 -0
- package/dist-pkg/types/safe-url.js +20 -0
- package/dist-pkg/types/user-input.d.ts +9 -0
- package/dist-pkg/types/user-input.js +3 -0
- package/dist-pkg/unsafe/index.d.ts +12 -0
- package/dist-pkg/unsafe/index.js +6 -0
- package/package.json +102 -44
- package/bin/gorsee.js +0 -14
- package/src/auth/index.ts +0 -178
- package/src/auth/redis-session-store.ts +0 -46
- package/src/auth/sqlite-session-store.ts +0 -98
- package/src/auth/store-utils.ts +0 -21
- package/src/build/client.ts +0 -139
- package/src/build/css-modules.ts +0 -69
- package/src/build/devalue-parse.ts +0 -2
- package/src/build/manifest.ts +0 -34
- package/src/build/route-metadata.ts +0 -12
- package/src/build/rpc-transform.ts +0 -62
- package/src/build/server-strip.ts +0 -87
- package/src/build/ssg.ts +0 -70
- package/src/cli/bun-plugin.ts +0 -58
- package/src/cli/cmd-build.ts +0 -153
- package/src/cli/cmd-check.ts +0 -239
- package/src/cli/cmd-create.ts +0 -328
- package/src/cli/cmd-deploy.ts +0 -149
- package/src/cli/cmd-dev.ts +0 -13
- package/src/cli/cmd-docs.ts +0 -152
- package/src/cli/cmd-generate.ts +0 -155
- package/src/cli/cmd-migrate.ts +0 -53
- package/src/cli/cmd-routes.ts +0 -36
- package/src/cli/cmd-start.ts +0 -30
- package/src/cli/cmd-test.ts +0 -129
- package/src/cli/cmd-typegen.ts +0 -93
- package/src/cli/cmd-upgrade.ts +0 -143
- package/src/cli/context.ts +0 -12
- package/src/cli/framework-md.ts +0 -223
- package/src/cli/index.ts +0 -107
- package/src/client.ts +0 -26
- package/src/db/index.ts +0 -2
- package/src/db/migrate.ts +0 -89
- package/src/db/sqlite.ts +0 -40
- package/src/deploy/index.ts +0 -31
- package/src/deploy/vercel.ts +0 -94
- package/src/dev/hmr.ts +0 -31
- package/src/dev/partial-handler.ts +0 -52
- package/src/dev/request-handler.ts +0 -127
- package/src/dev/watcher.ts +0 -48
- package/src/dev.ts +0 -208
- package/src/env/index.ts +0 -74
- package/src/errors/formatter.ts +0 -63
- package/src/errors/index.ts +0 -2
- package/src/i18n/index.ts +0 -72
- package/src/index-client.ts +0 -4
- package/src/index.ts +0 -43
- package/src/jsx-runtime-client.ts +0 -13
- package/src/jsx-runtime.ts +0 -20
- package/src/jsx-types-html.ts +0 -242
- package/src/log/index.ts +0 -44
- package/src/plugins/drizzle.ts +0 -84
- package/src/plugins/index.ts +0 -86
- package/src/plugins/lucia.ts +0 -111
- package/src/plugins/prisma.ts +0 -85
- package/src/plugins/resend.ts +0 -78
- package/src/plugins/s3.ts +0 -102
- package/src/plugins/stripe.ts +0 -133
- package/src/plugins/tailwind.ts +0 -92
- package/src/prod.ts +0 -252
- package/src/reactive/computed.ts +0 -7
- package/src/reactive/effect.ts +0 -7
- package/src/reactive/index.ts +0 -7
- package/src/reactive/live.ts +0 -97
- package/src/reactive/optimistic.ts +0 -83
- package/src/reactive/resource.ts +0 -138
- package/src/reactive/signal.ts +0 -20
- package/src/reactive/store.ts +0 -36
- package/src/router/index.ts +0 -2
- package/src/router/matcher.ts +0 -53
- package/src/router/scanner.ts +0 -206
- package/src/runtime/client.ts +0 -28
- package/src/runtime/error-boundary.ts +0 -35
- package/src/runtime/form.ts +0 -49
- package/src/runtime/head.ts +0 -113
- package/src/runtime/html-escape.ts +0 -30
- package/src/runtime/hydration.ts +0 -95
- package/src/runtime/image.ts +0 -48
- package/src/runtime/index.ts +0 -12
- package/src/runtime/island-hydrator.ts +0 -84
- package/src/runtime/island.ts +0 -88
- package/src/runtime/jsx-runtime.ts +0 -167
- package/src/runtime/link.ts +0 -45
- package/src/runtime/project.ts +0 -73
- package/src/runtime/router.ts +0 -224
- package/src/runtime/server.ts +0 -102
- package/src/runtime/stream.ts +0 -182
- package/src/runtime/suspense.ts +0 -37
- package/src/runtime/typed-routes.ts +0 -26
- package/src/runtime/validated-form.ts +0 -106
- package/src/security/cors.ts +0 -80
- package/src/security/csrf.ts +0 -85
- package/src/security/headers.ts +0 -50
- package/src/security/index.ts +0 -4
- package/src/security/rate-limit.ts +0 -80
- package/src/server/action.ts +0 -48
- package/src/server/cache-utils.ts +0 -23
- package/src/server/cache.ts +0 -125
- package/src/server/compress.ts +0 -60
- package/src/server/etag.ts +0 -23
- package/src/server/guard.ts +0 -69
- package/src/server/html-shell.ts +0 -69
- package/src/server/index.ts +0 -57
- package/src/server/manifest.ts +0 -36
- package/src/server/middleware.ts +0 -159
- package/src/server/not-found.ts +0 -35
- package/src/server/page-render.ts +0 -123
- package/src/server/pipe.ts +0 -46
- package/src/server/redis-cache-store.ts +0 -87
- package/src/server/redis-client.ts +0 -71
- package/src/server/request-preflight.ts +0 -45
- package/src/server/route-request.ts +0 -72
- package/src/server/rpc-hash.ts +0 -17
- package/src/server/rpc-utils.ts +0 -27
- package/src/server/rpc.ts +0 -177
- package/src/server/sqlite-cache-store.ts +0 -109
- package/src/server/sse.ts +0 -96
- package/src/server/static-file.ts +0 -63
- package/src/server/ws.ts +0 -56
- package/src/server-entry.ts +0 -36
- package/src/testing/index.ts +0 -74
- package/src/types/index.ts +0 -4
- package/src/types/safe-html.ts +0 -32
- package/src/types/safe-sql.ts +0 -28
- package/src/types/safe-url.ts +0 -40
- package/src/types/user-input.ts +0 -12
- package/src/unsafe/index.ts +0 -18
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
// Bun.build plugin: strips server-only code from client bundles
|
|
2
|
-
// - Removes export function loader() and its body
|
|
3
|
-
// - Replaces server-only modules (gorsee/db) with empty stubs
|
|
4
|
-
|
|
5
|
-
import type { BunPlugin } from "bun"
|
|
6
|
-
import { transformServerCalls } from "./rpc-transform.ts"
|
|
7
|
-
|
|
8
|
-
const SERVER_ONLY_MODULES = ["gorsee/db", "gorsee/log"]
|
|
9
|
-
|
|
10
|
-
// Modules that need a lightweight client stub instead of full server code
|
|
11
|
-
const SERVER_STUB_MODULES: Record<string, string> = {
|
|
12
|
-
"gorsee/server": `export function server(fn) { return fn; }
|
|
13
|
-
export function middleware(fn) { return fn; }`,
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// Regex to strip `export async function loader` or `export function loader`
|
|
17
|
-
// Handles multi-line function bodies by counting braces
|
|
18
|
-
function stripLoader(source: string): string {
|
|
19
|
-
const loaderRe = /export\s+(async\s+)?function\s+loader\s*\([^)]*\)\s*(\{)/g
|
|
20
|
-
const match = loaderRe.exec(source)
|
|
21
|
-
if (!match) return source
|
|
22
|
-
|
|
23
|
-
const start = match.index
|
|
24
|
-
let braces = 1
|
|
25
|
-
let i = loaderRe.lastIndex
|
|
26
|
-
|
|
27
|
-
while (i < source.length && braces > 0) {
|
|
28
|
-
if (source[i] === "{") braces++
|
|
29
|
-
else if (source[i] === "}") braces--
|
|
30
|
-
i++
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return source.slice(0, start) + source.slice(i)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// Pre-compiled regexes for import stripping
|
|
37
|
-
const SERVER_IMPORT_REGEXES = SERVER_ONLY_MODULES.map(
|
|
38
|
-
(mod) => new RegExp(`import\\s+.*?from\\s+["']${mod.replace("/", "\\/")}["'];?\\n?`, "g")
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
function stripUnusedServerImports(source: string): string {
|
|
42
|
-
for (const re of SERVER_IMPORT_REGEXES) {
|
|
43
|
-
re.lastIndex = 0
|
|
44
|
-
source = source.replace(re, "")
|
|
45
|
-
}
|
|
46
|
-
return source
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export const serverStripPlugin: BunPlugin = {
|
|
50
|
-
name: "gorsee-server-strip",
|
|
51
|
-
setup(build) {
|
|
52
|
-
// Replace server-only modules with empty exports
|
|
53
|
-
for (const mod of SERVER_ONLY_MODULES) {
|
|
54
|
-
build.onResolve({ filter: new RegExp(`^${mod.replace("/", "\\/")}$`) }, () => ({
|
|
55
|
-
path: mod,
|
|
56
|
-
namespace: "gorsee-empty",
|
|
57
|
-
}))
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
build.onLoad({ filter: /.*/, namespace: "gorsee-empty" }, () => ({
|
|
61
|
-
contents: "export default {}",
|
|
62
|
-
loader: "js",
|
|
63
|
-
}))
|
|
64
|
-
|
|
65
|
-
// Replace server modules with lightweight client stubs
|
|
66
|
-
for (const mod of Object.keys(SERVER_STUB_MODULES)) {
|
|
67
|
-
build.onResolve({ filter: new RegExp(`^${mod.replace("/", "\\/")}$`) }, () => ({
|
|
68
|
-
path: mod,
|
|
69
|
-
namespace: "gorsee-stub",
|
|
70
|
-
}))
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
build.onLoad({ filter: /.*/, namespace: "gorsee-stub" }, (args) => ({
|
|
74
|
-
contents: SERVER_STUB_MODULES[args.path] ?? "export default {}",
|
|
75
|
-
loader: "js",
|
|
76
|
-
}))
|
|
77
|
-
|
|
78
|
-
// Strip loader + transform RPC calls in route files
|
|
79
|
-
build.onLoad({ filter: /routes\/.*\.tsx?$/ }, async (args) => {
|
|
80
|
-
let source = await Bun.file(args.path).text()
|
|
81
|
-
source = stripLoader(source)
|
|
82
|
-
source = stripUnusedServerImports(source)
|
|
83
|
-
source = transformServerCalls(source, args.path)
|
|
84
|
-
return { contents: source, loader: args.path.endsWith(".tsx") ? "tsx" : "ts" }
|
|
85
|
-
})
|
|
86
|
-
},
|
|
87
|
-
}
|
package/src/build/ssg.ts
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
// Static Site Generation -- pre-renders pages at build time
|
|
2
|
-
// Routes with `export const prerender = true` are rendered to static HTML
|
|
3
|
-
|
|
4
|
-
import { createRouter } from "../router/scanner.ts"
|
|
5
|
-
import { createContext } from "../server/middleware.ts"
|
|
6
|
-
import { renderPageDocument, resolvePageRoute } from "../server/page-render.ts"
|
|
7
|
-
import { wrapHTML, type HTMLWrapOptions } from "../server/html-shell.ts"
|
|
8
|
-
import { join } from "node:path"
|
|
9
|
-
import { mkdir, writeFile } from "node:fs/promises"
|
|
10
|
-
|
|
11
|
-
export interface SSGResult {
|
|
12
|
-
pages: Map<string, string> // path → HTML content
|
|
13
|
-
errors: string[]
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
interface SSGOptions {
|
|
17
|
-
routesDir: string
|
|
18
|
-
outDir: string
|
|
19
|
-
wrapHTML?: (body: string, options?: HTMLWrapOptions) => string
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export async function generateStaticPages(options: SSGOptions): Promise<SSGResult> {
|
|
23
|
-
const { routesDir, outDir, wrapHTML } = options
|
|
24
|
-
const routes = await createRouter(routesDir)
|
|
25
|
-
const pages = new Map<string, string>()
|
|
26
|
-
const errors: string[] = []
|
|
27
|
-
|
|
28
|
-
for (const route of routes) {
|
|
29
|
-
if (route.isDynamic) continue
|
|
30
|
-
|
|
31
|
-
try {
|
|
32
|
-
const mod = await import(route.filePath)
|
|
33
|
-
|
|
34
|
-
// Skip routes that don't opt-in to prerendering
|
|
35
|
-
if (!mod.prerender) continue
|
|
36
|
-
|
|
37
|
-
const fakeRequest = new Request(`http://localhost${route.path}`)
|
|
38
|
-
const ctx = createContext(fakeRequest, {})
|
|
39
|
-
const match = { route, params: {} }
|
|
40
|
-
const resolved = await resolvePageRoute(mod, match, ctx)
|
|
41
|
-
if (!resolved) continue
|
|
42
|
-
|
|
43
|
-
const rendered = renderPageDocument(resolved.pageComponent, ctx, {}, resolved.loaderData)
|
|
44
|
-
const renderHTML = wrapHTML ?? defaultWrapHTML
|
|
45
|
-
const html = renderHTML(rendered.html, {
|
|
46
|
-
title: rendered.title,
|
|
47
|
-
loaderData: resolved.loaderData,
|
|
48
|
-
headElements: rendered.headElements,
|
|
49
|
-
cssFiles: resolved.cssFiles,
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
// Write file
|
|
53
|
-
const outPath = route.path === "/"
|
|
54
|
-
? join(outDir, "index.html")
|
|
55
|
-
: join(outDir, route.path, "index.html")
|
|
56
|
-
await mkdir(join(outPath, ".."), { recursive: true })
|
|
57
|
-
await writeFile(outPath, html)
|
|
58
|
-
|
|
59
|
-
pages.set(route.path, outPath)
|
|
60
|
-
} catch (err) {
|
|
61
|
-
errors.push(`${route.path}: ${err instanceof Error ? err.message : String(err)}`)
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return { pages, errors }
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function defaultWrapHTML(body: string, options: HTMLWrapOptions = {}): string {
|
|
69
|
-
return wrapHTML(body, undefined, options)
|
|
70
|
-
}
|
package/src/cli/bun-plugin.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
// Bun plugin that resolves "gorsee/*" imports to framework source
|
|
2
|
-
// and transforms JSX in route files to use our runtime
|
|
3
|
-
|
|
4
|
-
import { plugin } from "bun"
|
|
5
|
-
import { resolve } from "node:path"
|
|
6
|
-
|
|
7
|
-
// Framework root — where gorsee source lives
|
|
8
|
-
const FRAMEWORK_ROOT = resolve(import.meta.dir, "..")
|
|
9
|
-
|
|
10
|
-
const EXPORT_MAP: Record<string, string> = {
|
|
11
|
-
"gorsee": resolve(FRAMEWORK_ROOT, "index.ts"),
|
|
12
|
-
"gorsee/compat": resolve(FRAMEWORK_ROOT, "index.ts"),
|
|
13
|
-
"gorsee/client": resolve(FRAMEWORK_ROOT, "client.ts"),
|
|
14
|
-
"gorsee/reactive": resolve(FRAMEWORK_ROOT, "reactive/index.ts"),
|
|
15
|
-
"gorsee/server": resolve(FRAMEWORK_ROOT, "server-entry.ts"),
|
|
16
|
-
"gorsee/types": resolve(FRAMEWORK_ROOT, "types/index.ts"),
|
|
17
|
-
"gorsee/db": resolve(FRAMEWORK_ROOT, "db/index.ts"),
|
|
18
|
-
"gorsee/router": resolve(FRAMEWORK_ROOT, "router/index.ts"),
|
|
19
|
-
"gorsee/log": resolve(FRAMEWORK_ROOT, "log/index.ts"),
|
|
20
|
-
"gorsee/unsafe": resolve(FRAMEWORK_ROOT, "unsafe/index.ts"),
|
|
21
|
-
"gorsee/runtime": resolve(FRAMEWORK_ROOT, "runtime/index.ts"),
|
|
22
|
-
"gorsee/security": resolve(FRAMEWORK_ROOT, "security/index.ts"),
|
|
23
|
-
"gorsee/jsx-runtime": resolve(FRAMEWORK_ROOT, "jsx-runtime.ts"),
|
|
24
|
-
"gorsee/jsx-dev-runtime": resolve(FRAMEWORK_ROOT, "jsx-runtime.ts"),
|
|
25
|
-
"gorsee/testing": resolve(FRAMEWORK_ROOT, "testing/index.ts"),
|
|
26
|
-
"gorsee/i18n": resolve(FRAMEWORK_ROOT, "i18n/index.ts"),
|
|
27
|
-
"gorsee/env": resolve(FRAMEWORK_ROOT, "env/index.ts"),
|
|
28
|
-
"gorsee/auth": resolve(FRAMEWORK_ROOT, "auth/index.ts"),
|
|
29
|
-
"gorsee/routes": resolve(FRAMEWORK_ROOT, "runtime/typed-routes.ts"),
|
|
30
|
-
"gorsee/cli/cmd-create": resolve(FRAMEWORK_ROOT, "cli/cmd-create.ts"),
|
|
31
|
-
"gorsee/plugins": resolve(FRAMEWORK_ROOT, "plugins/index.ts"),
|
|
32
|
-
"gorsee/plugins/drizzle": resolve(FRAMEWORK_ROOT, "plugins/drizzle.ts"),
|
|
33
|
-
"gorsee/plugins/prisma": resolve(FRAMEWORK_ROOT, "plugins/prisma.ts"),
|
|
34
|
-
"gorsee/plugins/tailwind": resolve(FRAMEWORK_ROOT, "plugins/tailwind.ts"),
|
|
35
|
-
"gorsee/plugins/lucia": resolve(FRAMEWORK_ROOT, "plugins/lucia.ts"),
|
|
36
|
-
"gorsee/plugins/s3": resolve(FRAMEWORK_ROOT, "plugins/s3.ts"),
|
|
37
|
-
"gorsee/plugins/resend": resolve(FRAMEWORK_ROOT, "plugins/resend.ts"),
|
|
38
|
-
"gorsee/plugins/stripe": resolve(FRAMEWORK_ROOT, "plugins/stripe.ts"),
|
|
39
|
-
"gorsee/deploy": resolve(FRAMEWORK_ROOT, "deploy/index.ts"),
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function resolveFrameworkImport(specifier: string): string | undefined {
|
|
43
|
-
return EXPORT_MAP[specifier]
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
plugin({
|
|
47
|
-
name: "gorsee-resolve",
|
|
48
|
-
setup(build) {
|
|
49
|
-
// Resolve gorsee/* imports
|
|
50
|
-
build.onResolve({ filter: /^gorsee(\/.*)?$/ }, (args) => {
|
|
51
|
-
const mapped = resolveFrameworkImport(args.path)
|
|
52
|
-
if (mapped) {
|
|
53
|
-
return { path: mapped }
|
|
54
|
-
}
|
|
55
|
-
return undefined
|
|
56
|
-
})
|
|
57
|
-
},
|
|
58
|
-
})
|
package/src/cli/cmd-build.ts
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
// gorsee build -- production build
|
|
2
|
-
// Bundles client JS, minifies, generates asset hashes
|
|
3
|
-
|
|
4
|
-
import { join } from "node:path"
|
|
5
|
-
import { mkdir, rm, writeFile, readdir, stat, watch } from "node:fs/promises"
|
|
6
|
-
import { createRouter } from "../router/scanner.ts"
|
|
7
|
-
import { buildClientBundles } from "../build/client.ts"
|
|
8
|
-
import { generateStaticPages } from "../build/ssg.ts"
|
|
9
|
-
import { createBuildManifest } from "../build/manifest.ts"
|
|
10
|
-
import { createHash } from "node:crypto"
|
|
11
|
-
import { wrapHTML } from "../server/html-shell.ts"
|
|
12
|
-
import { createProjectContext, type RuntimeOptions } from "../runtime/project.ts"
|
|
13
|
-
|
|
14
|
-
async function hashFile(path: string): Promise<string> {
|
|
15
|
-
const content = await Bun.file(path).arrayBuffer()
|
|
16
|
-
return createHash("sha256").update(new Uint8Array(content)).digest("hex").slice(0, 8)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
async function getAllFiles(dir: string): Promise<string[]> {
|
|
20
|
-
const files: string[] = []
|
|
21
|
-
try {
|
|
22
|
-
const entries = await readdir(dir, { withFileTypes: true })
|
|
23
|
-
for (const entry of entries) {
|
|
24
|
-
const full = join(dir, entry.name)
|
|
25
|
-
if (entry.isDirectory()) {
|
|
26
|
-
files.push(...await getAllFiles(full))
|
|
27
|
-
} else {
|
|
28
|
-
files.push(full)
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
} catch {}
|
|
32
|
-
return files
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export interface BuildCommandOptions extends RuntimeOptions {
|
|
36
|
-
minify?: boolean
|
|
37
|
-
sourcemap?: boolean
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export async function buildProject(options: BuildCommandOptions = {}) {
|
|
41
|
-
const { cwd, paths } = createProjectContext(options)
|
|
42
|
-
const startTime = performance.now()
|
|
43
|
-
console.log("\n Gorsee Build\n")
|
|
44
|
-
|
|
45
|
-
await rm(paths.distDir, { recursive: true, force: true })
|
|
46
|
-
await mkdir(paths.clientDir, { recursive: true })
|
|
47
|
-
await mkdir(paths.serverDir, { recursive: true })
|
|
48
|
-
|
|
49
|
-
// 1. Scan routes
|
|
50
|
-
const routes = await createRouter(paths.routesDir)
|
|
51
|
-
console.log(` [1/5] Found ${routes.length} route(s)`)
|
|
52
|
-
|
|
53
|
-
// 2. Build client bundles (minified)
|
|
54
|
-
const build = await buildClientBundles(routes, cwd, {
|
|
55
|
-
minify: options.minify ?? true,
|
|
56
|
-
sourcemap: options.sourcemap ?? true,
|
|
57
|
-
})
|
|
58
|
-
console.log(` [2/5] Client bundles built (${build.entryMap.size} entries)`)
|
|
59
|
-
|
|
60
|
-
// 3. Hash and copy client files to dist
|
|
61
|
-
const clientSrc = join(paths.gorseeDir, "client")
|
|
62
|
-
const clientFiles = await getAllFiles(clientSrc)
|
|
63
|
-
const hashMap = new Map<string, string>()
|
|
64
|
-
|
|
65
|
-
for (const file of clientFiles) {
|
|
66
|
-
const rel = file.slice(clientSrc.length + 1)
|
|
67
|
-
const hash = await hashFile(file)
|
|
68
|
-
const ext = rel.lastIndexOf(".")
|
|
69
|
-
const hashed = ext > 0 ? `${rel.slice(0, ext)}.${hash}${rel.slice(ext)}` : `${rel}.${hash}`
|
|
70
|
-
const dest = join(paths.clientDir, hashed)
|
|
71
|
-
await mkdir(join(dest, ".."), { recursive: true })
|
|
72
|
-
await Bun.write(dest, Bun.file(file))
|
|
73
|
-
hashMap.set(rel, hashed)
|
|
74
|
-
}
|
|
75
|
-
console.log(` [3/5] Assets hashed (${hashMap.size} files)`)
|
|
76
|
-
|
|
77
|
-
// 4. Generate manifest
|
|
78
|
-
const manifest = await createBuildManifest(routes, build.entryMap, hashMap)
|
|
79
|
-
|
|
80
|
-
await writeFile(join(paths.distDir, "manifest.json"), JSON.stringify(manifest, null, 2))
|
|
81
|
-
console.log(` [4/5] Manifest generated`)
|
|
82
|
-
|
|
83
|
-
// 5. Static Site Generation (prerender pages with `export const prerender = true`)
|
|
84
|
-
const ssgResult = await generateStaticPages({
|
|
85
|
-
routesDir: paths.routesDir,
|
|
86
|
-
outDir: join(paths.distDir, "static"),
|
|
87
|
-
wrapHTML: (body, options = {}) => wrapHTML(body, undefined, options),
|
|
88
|
-
})
|
|
89
|
-
const finalManifest = ssgResult.pages.size > 0
|
|
90
|
-
? await createBuildManifest(routes, build.entryMap, hashMap, ssgResult.pages.keys())
|
|
91
|
-
: manifest
|
|
92
|
-
if (ssgResult.pages.size > 0) {
|
|
93
|
-
await writeFile(join(paths.distDir, "manifest.json"), JSON.stringify(finalManifest, null, 2))
|
|
94
|
-
}
|
|
95
|
-
if (ssgResult.errors.length > 0) {
|
|
96
|
-
for (const err of ssgResult.errors) console.error(` SSG error: ${err}`)
|
|
97
|
-
}
|
|
98
|
-
console.log(` [5/5] SSG: ${ssgResult.pages.size} page(s) pre-rendered`)
|
|
99
|
-
|
|
100
|
-
// Stats
|
|
101
|
-
let totalSize = 0
|
|
102
|
-
for (const file of await getAllFiles(paths.clientDir)) {
|
|
103
|
-
const s = await stat(file)
|
|
104
|
-
totalSize += s.size
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const elapsed = ((performance.now() - startTime) / 1000).toFixed(2)
|
|
108
|
-
console.log()
|
|
109
|
-
console.log(` Output: dist/`)
|
|
110
|
-
console.log(` Client size: ${(totalSize / 1024).toFixed(1)} KB`)
|
|
111
|
-
console.log(` Built in ${elapsed}s`)
|
|
112
|
-
console.log()
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export async function watchBuildProject(options: BuildCommandOptions = {}) {
|
|
116
|
-
const { paths } = createProjectContext(options)
|
|
117
|
-
|
|
118
|
-
console.log("\n Gorsee Build --watch\n")
|
|
119
|
-
console.log(" Performing initial build...")
|
|
120
|
-
await buildProject(options)
|
|
121
|
-
|
|
122
|
-
let building = false
|
|
123
|
-
let queued = false
|
|
124
|
-
|
|
125
|
-
async function rebuild() {
|
|
126
|
-
if (building) { queued = true; return }
|
|
127
|
-
building = true
|
|
128
|
-
try {
|
|
129
|
-
const start = performance.now()
|
|
130
|
-
await buildProject(options)
|
|
131
|
-
const ms = (performance.now() - start).toFixed(0)
|
|
132
|
-
console.log(` Rebuilt in ${ms}ms`)
|
|
133
|
-
} catch (err) {
|
|
134
|
-
console.error(" Build error:", err)
|
|
135
|
-
} finally {
|
|
136
|
-
building = false
|
|
137
|
-
if (queued) { queued = false; await rebuild() }
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
console.log(" Watching for changes...")
|
|
142
|
-
const watcher = watch(paths.routesDir, { recursive: true })
|
|
143
|
-
for await (const _event of watcher) {
|
|
144
|
-
await rebuild()
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
export async function runBuild(args: string[], options: BuildCommandOptions = {}) {
|
|
149
|
-
if (args.includes("--watch")) {
|
|
150
|
-
return watchBuildProject(options)
|
|
151
|
-
}
|
|
152
|
-
return buildProject(options)
|
|
153
|
-
}
|
package/src/cli/cmd-check.ts
DELETED
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
// gorsee check -- validate project structure, types, and safety
|
|
2
|
-
|
|
3
|
-
import { join, relative } from "node:path"
|
|
4
|
-
import { readdir, stat, readFile } from "node:fs/promises"
|
|
5
|
-
import { createRouter } from "../router/scanner.ts"
|
|
6
|
-
import { createProjectContext, type RuntimeOptions } from "../runtime/project.ts"
|
|
7
|
-
|
|
8
|
-
interface CheckResult {
|
|
9
|
-
errors: CheckIssue[]
|
|
10
|
-
warnings: CheckIssue[]
|
|
11
|
-
info: string[]
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface CheckIssue {
|
|
15
|
-
code: string
|
|
16
|
-
file: string
|
|
17
|
-
line?: number
|
|
18
|
-
message: string
|
|
19
|
-
fix?: string
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const MAX_FILE_LINES = 500
|
|
23
|
-
|
|
24
|
-
export type { CheckResult, CheckIssue }
|
|
25
|
-
|
|
26
|
-
async function getAllTsFiles(dir: string): Promise<string[]> {
|
|
27
|
-
const files: string[] = []
|
|
28
|
-
let entries: string[]
|
|
29
|
-
try {
|
|
30
|
-
entries = await readdir(dir)
|
|
31
|
-
} catch {
|
|
32
|
-
return files
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
for (const entry of entries) {
|
|
36
|
-
if (entry === "node_modules" || entry === "dist" || entry === ".git") continue
|
|
37
|
-
const fullPath = join(dir, entry)
|
|
38
|
-
const s = await stat(fullPath)
|
|
39
|
-
if (s.isDirectory()) {
|
|
40
|
-
files.push(...(await getAllTsFiles(fullPath)))
|
|
41
|
-
} else if (entry.endsWith(".ts") || entry.endsWith(".tsx")) {
|
|
42
|
-
files.push(fullPath)
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return files
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
async function checkFileSize(file: string, cwd: string): Promise<CheckIssue[]> {
|
|
49
|
-
const issues: CheckIssue[] = []
|
|
50
|
-
const content = await readFile(file, "utf-8")
|
|
51
|
-
const lines = content.split("\n").length
|
|
52
|
-
const rel = relative(cwd, file)
|
|
53
|
-
|
|
54
|
-
if (lines > MAX_FILE_LINES) {
|
|
55
|
-
issues.push({
|
|
56
|
-
code: "E901",
|
|
57
|
-
file: rel,
|
|
58
|
-
message: `File has ${lines} lines (limit: ${MAX_FILE_LINES}). Must split before merge.`,
|
|
59
|
-
fix: "Extract logic into focused modules by responsibility",
|
|
60
|
-
})
|
|
61
|
-
} else if (lines > 300) {
|
|
62
|
-
issues.push({
|
|
63
|
-
code: "W901",
|
|
64
|
-
file: rel,
|
|
65
|
-
message: `File has ${lines} lines (warning threshold: 300). Plan to split.`,
|
|
66
|
-
fix: "Consider extracting into separate modules",
|
|
67
|
-
})
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return issues
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
async function checkUnsafePatterns(file: string, cwd: string): Promise<CheckIssue[]> {
|
|
74
|
-
const issues: CheckIssue[] = []
|
|
75
|
-
const content = await readFile(file, "utf-8")
|
|
76
|
-
const lines = content.split("\n")
|
|
77
|
-
const rel = relative(cwd, file)
|
|
78
|
-
|
|
79
|
-
for (let i = 0; i < lines.length; i++) {
|
|
80
|
-
const line = lines[i]!
|
|
81
|
-
const lineNum = i + 1
|
|
82
|
-
|
|
83
|
-
// Check for string concatenation in SQL-like contexts
|
|
84
|
-
if (line.match(/db\.(get|all|run)\s*\(\s*`/) && !line.includes("SafeSQL")) {
|
|
85
|
-
issues.push({
|
|
86
|
-
code: "E001",
|
|
87
|
-
file: rel,
|
|
88
|
-
line: lineNum,
|
|
89
|
-
message: "Raw template literal in database query (SQL injection risk)",
|
|
90
|
-
fix: "Use SafeSQL`...` tagged template: db.get(SafeSQL`SELECT ...`)",
|
|
91
|
-
})
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Check for string concat in db calls
|
|
95
|
-
if (line.match(/db\.(get|all|run)\s*\(\s*["']/) || line.match(/db\.(get|all|run)\s*\([^S]*\+/)) {
|
|
96
|
-
issues.push({
|
|
97
|
-
code: "E001",
|
|
98
|
-
file: rel,
|
|
99
|
-
line: lineNum,
|
|
100
|
-
message: "String concatenation in database query (SQL injection risk)",
|
|
101
|
-
fix: "Use SafeSQL`...` tagged template with parameterized values",
|
|
102
|
-
})
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Check for innerHTML usage
|
|
106
|
-
if (line.includes(".innerHTML") && !line.includes("unsafeHTML")) {
|
|
107
|
-
issues.push({
|
|
108
|
-
code: "E002",
|
|
109
|
-
file: rel,
|
|
110
|
-
line: lineNum,
|
|
111
|
-
message: "Direct innerHTML assignment (XSS risk)",
|
|
112
|
-
fix: "Use SafeHTML`...` or sanitize() from gorsee/types",
|
|
113
|
-
})
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return issues
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
async function checkProjectStructure(cwd: string): Promise<CheckIssue[]> {
|
|
121
|
-
const issues: CheckIssue[] = []
|
|
122
|
-
|
|
123
|
-
// Check routes/ exists
|
|
124
|
-
try {
|
|
125
|
-
await stat(join(cwd, "routes"))
|
|
126
|
-
} catch {
|
|
127
|
-
issues.push({
|
|
128
|
-
code: "E902",
|
|
129
|
-
file: ".",
|
|
130
|
-
message: "Missing routes/ directory",
|
|
131
|
-
fix: "Create routes/ directory with at least routes/index.ts",
|
|
132
|
-
})
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Check app.config.ts exists
|
|
136
|
-
try {
|
|
137
|
-
await stat(join(cwd, "app.config.ts"))
|
|
138
|
-
} catch {
|
|
139
|
-
issues.push({
|
|
140
|
-
code: "W902",
|
|
141
|
-
file: ".",
|
|
142
|
-
message: "Missing app.config.ts",
|
|
143
|
-
fix: "Create app.config.ts with project configuration",
|
|
144
|
-
})
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return issues
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export interface CheckCommandOptions extends RuntimeOptions {
|
|
151
|
-
runTypeScript?: boolean
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
export async function checkProject(options: CheckCommandOptions = {}): Promise<CheckResult> {
|
|
155
|
-
const { cwd, paths } = createProjectContext(options)
|
|
156
|
-
const runTypeScript = options.runTypeScript ?? true
|
|
157
|
-
const result: CheckResult = { errors: [], warnings: [], info: [] }
|
|
158
|
-
|
|
159
|
-
const structIssues = await checkProjectStructure(cwd)
|
|
160
|
-
for (const issue of structIssues) {
|
|
161
|
-
if (issue.code.startsWith("E")) result.errors.push(issue)
|
|
162
|
-
else result.warnings.push(issue)
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
try {
|
|
166
|
-
const routes = await createRouter(paths.routesDir)
|
|
167
|
-
result.info.push(`Found ${routes.length} route(s)`)
|
|
168
|
-
} catch {
|
|
169
|
-
result.info.push("Could not scan routes")
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const files = await getAllTsFiles(paths.routesDir)
|
|
173
|
-
files.push(...(await getAllTsFiles(paths.sharedDir)))
|
|
174
|
-
files.push(...(await getAllTsFiles(paths.middlewareDir)))
|
|
175
|
-
|
|
176
|
-
for (const file of files) {
|
|
177
|
-
const sizeIssues = await checkFileSize(file, cwd)
|
|
178
|
-
const safetyIssues = await checkUnsafePatterns(file, cwd)
|
|
179
|
-
for (const issue of [...sizeIssues, ...safetyIssues]) {
|
|
180
|
-
if (issue.code.startsWith("E")) result.errors.push(issue)
|
|
181
|
-
else result.warnings.push(issue)
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (runTypeScript) {
|
|
186
|
-
const tsc = Bun.spawn(["bun", "x", "tsc", "--noEmit"], {
|
|
187
|
-
cwd,
|
|
188
|
-
stdout: "pipe",
|
|
189
|
-
stderr: "pipe",
|
|
190
|
-
})
|
|
191
|
-
const tscExit = await tsc.exited
|
|
192
|
-
if (tscExit !== 0) {
|
|
193
|
-
const stderr = await new Response(tsc.stderr).text()
|
|
194
|
-
result.errors.push({
|
|
195
|
-
code: "TSC",
|
|
196
|
-
file: ".",
|
|
197
|
-
message: `TypeScript errors:\n${stderr.trim()}`,
|
|
198
|
-
})
|
|
199
|
-
} else {
|
|
200
|
-
result.info.push("TypeScript: no errors")
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return result
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/** @deprecated Use checkProject() for programmatic access. */
|
|
208
|
-
export async function runCheck(_args: string[], options: CheckCommandOptions = {}) {
|
|
209
|
-
console.log("\n Gorsee Check\n")
|
|
210
|
-
if (options.runTypeScript ?? true) {
|
|
211
|
-
console.log(" Running TypeScript check...")
|
|
212
|
-
}
|
|
213
|
-
const result = await checkProject(options)
|
|
214
|
-
|
|
215
|
-
// Report
|
|
216
|
-
for (const info of result.info) {
|
|
217
|
-
console.log(` [info] ${info}`)
|
|
218
|
-
}
|
|
219
|
-
for (const warn of result.warnings) {
|
|
220
|
-
const loc = warn.line ? `${warn.file}:${warn.line}` : warn.file
|
|
221
|
-
console.log(` [warn] ${warn.code} ${loc}: ${warn.message}`)
|
|
222
|
-
if (warn.fix) console.log(` Fix: ${warn.fix}`)
|
|
223
|
-
}
|
|
224
|
-
for (const err of result.errors) {
|
|
225
|
-
const loc = err.line ? `${err.file}:${err.line}` : err.file
|
|
226
|
-
console.log(` [ERROR] ${err.code} ${loc}: ${err.message}`)
|
|
227
|
-
if (err.fix) console.log(` Fix: ${err.fix}`)
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
console.log()
|
|
231
|
-
if (result.errors.length === 0) {
|
|
232
|
-
console.log(` Result: PASS (${result.warnings.length} warning(s))`)
|
|
233
|
-
} else {
|
|
234
|
-
console.log(` Result: FAIL (${result.errors.length} error(s), ${result.warnings.length} warning(s))`)
|
|
235
|
-
}
|
|
236
|
-
console.log()
|
|
237
|
-
|
|
238
|
-
process.exit(result.errors.length > 0 ? 1 : 0)
|
|
239
|
-
}
|