gorsee 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +261 -213
- package/dist-pkg/ai/artifact-lifecycle.d.ts +25 -0
- package/dist-pkg/ai/artifact-lifecycle.js +98 -0
- package/dist-pkg/ai/bridge.d.ts +26 -0
- package/dist-pkg/ai/bridge.js +82 -0
- package/dist-pkg/ai/bundle.d.ts +46 -0
- package/dist-pkg/ai/bundle.js +247 -0
- package/dist-pkg/ai/contracts.d.ts +1 -0
- package/dist-pkg/ai/contracts.js +1 -0
- package/dist-pkg/ai/ide.d.ts +37 -0
- package/dist-pkg/ai/ide.js +56 -0
- package/dist-pkg/ai/index.d.ts +85 -0
- package/dist-pkg/ai/index.js +267 -0
- package/dist-pkg/ai/json.d.ts +6 -0
- package/dist-pkg/ai/json.js +14 -0
- package/dist-pkg/ai/mcp.d.ts +28 -0
- package/dist-pkg/ai/mcp.js +152 -0
- package/dist-pkg/ai/session-pack.d.ts +28 -0
- package/dist-pkg/ai/session-pack.js +57 -0
- package/dist-pkg/ai/store.d.ts +67 -0
- package/dist-pkg/ai/store.js +174 -0
- package/dist-pkg/ai/summary.d.ts +57 -0
- package/dist-pkg/ai/summary.js +148 -0
- package/dist-pkg/ai/watch.d.ts +15 -0
- package/dist-pkg/ai/watch.js +66 -0
- package/dist-pkg/auth/action-tokens.d.ts +50 -0
- package/dist-pkg/auth/action-tokens.js +79 -0
- package/dist-pkg/auth/index.d.ts +70 -0
- package/dist-pkg/auth/index.js +199 -0
- package/dist-pkg/auth/redis-session-store.d.ts +7 -0
- package/dist-pkg/auth/redis-session-store.js +42 -0
- package/dist-pkg/auth/signing.d.ts +4 -0
- package/dist-pkg/auth/signing.js +33 -0
- package/dist-pkg/auth/sqlite-session-store.d.ts +12 -0
- package/dist-pkg/auth/sqlite-session-store.js +83 -0
- package/dist-pkg/auth/store-utils.d.ts +2 -0
- package/dist-pkg/auth/store-utils.js +20 -0
- package/dist-pkg/bin/gorsee.js +2 -0
- package/dist-pkg/build/backends/experimental-rolldown.d.ts +6 -0
- package/dist-pkg/build/backends/experimental-rolldown.js +9 -0
- package/dist-pkg/build/backends/register.d.ts +7 -0
- package/dist-pkg/build/backends/register.js +24 -0
- package/dist-pkg/build/backends/rolldown.d.ts +16 -0
- package/dist-pkg/build/backends/rolldown.js +176 -0
- package/dist-pkg/build/client-backend.d.ts +31 -0
- package/dist-pkg/build/client-backend.js +97 -0
- package/dist-pkg/build/client.d.ts +12 -0
- package/dist-pkg/build/client.js +93 -0
- package/dist-pkg/build/css-modules.d.ts +10 -0
- package/dist-pkg/build/css-modules.js +51 -0
- package/dist-pkg/build/devalue-parse.d.ts +1 -0
- package/dist-pkg/build/devalue-parse.js +1 -0
- package/dist-pkg/build/diagnostics.d.ts +20 -0
- package/dist-pkg/build/diagnostics.js +35 -0
- package/dist-pkg/build/fixtures.d.ts +7 -0
- package/dist-pkg/build/fixtures.js +60 -0
- package/dist-pkg/build/framework-imports.d.ts +4 -0
- package/dist-pkg/build/framework-imports.js +58 -0
- package/dist-pkg/build/init.d.ts +1 -0
- package/dist-pkg/build/init.js +6 -0
- package/dist-pkg/build/manifest.d.ts +3 -0
- package/dist-pkg/build/manifest.js +23 -0
- package/dist-pkg/build/parity.d.ts +32 -0
- package/dist-pkg/build/parity.js +71 -0
- package/dist-pkg/build/plugin.d.ts +11 -0
- package/dist-pkg/build/plugin.js +8 -0
- package/dist-pkg/build/readiness.d.ts +11 -0
- package/dist-pkg/build/readiness.js +18 -0
- package/dist-pkg/build/route-client-transform.d.ts +17 -0
- package/dist-pkg/build/route-client-transform.js +48 -0
- package/dist-pkg/build/route-metadata.d.ts +6 -0
- package/dist-pkg/build/route-metadata.js +8 -0
- package/dist-pkg/build/rpc-transform.d.ts +1 -0
- package/dist-pkg/build/rpc-transform.js +44 -0
- package/dist-pkg/build/server-bundle.d.ts +4 -0
- package/dist-pkg/build/server-bundle.js +261 -0
- package/dist-pkg/build/server-strip.d.ts +2 -0
- package/dist-pkg/build/server-strip.js +32 -0
- package/dist-pkg/build/ssg.d.ts +12 -0
- package/dist-pkg/build/ssg.js +36 -0
- package/dist-pkg/cli/bun-plugin.d.ts +2 -0
- package/dist-pkg/cli/bun-plugin.js +14 -0
- package/dist-pkg/cli/canonical-import-rewrite.d.ts +18 -0
- package/dist-pkg/cli/canonical-import-rewrite.js +94 -0
- package/dist-pkg/cli/canonical-imports.d.ts +8 -0
- package/dist-pkg/cli/canonical-imports.js +131 -0
- package/dist-pkg/cli/check-ast.d.ts +20 -0
- package/dist-pkg/cli/check-ast.js +126 -0
- package/dist-pkg/cli/cmd-ai.d.ts +4 -0
- package/dist-pkg/cli/cmd-ai.js +290 -0
- package/dist-pkg/cli/cmd-build.d.ts +12 -0
- package/dist-pkg/cli/cmd-build.js +198 -0
- package/dist-pkg/cli/cmd-check.d.ts +25 -0
- package/dist-pkg/cli/cmd-check.js +573 -0
- package/dist-pkg/cli/cmd-create.d.ts +6 -0
- package/dist-pkg/cli/cmd-create.js +600 -0
- package/dist-pkg/cli/cmd-deploy.d.ts +6 -0
- package/dist-pkg/cli/cmd-deploy.js +381 -0
- package/dist-pkg/cli/cmd-dev.d.ts +5 -0
- package/dist-pkg/cli/cmd-dev.js +5 -0
- package/dist-pkg/cli/cmd-docs.d.ts +50 -0
- package/dist-pkg/cli/cmd-docs.js +122 -0
- package/dist-pkg/cli/cmd-generate.d.ts +12 -0
- package/dist-pkg/cli/cmd-generate.js +320 -0
- package/dist-pkg/cli/cmd-migrate.d.ts +7 -0
- package/dist-pkg/cli/cmd-migrate.js +42 -0
- package/dist-pkg/cli/cmd-routes.d.ts +6 -0
- package/dist-pkg/cli/cmd-routes.js +24 -0
- package/dist-pkg/cli/cmd-start.d.ts +13 -0
- package/dist-pkg/cli/cmd-start.js +32 -0
- package/dist-pkg/cli/cmd-test.d.ts +20 -0
- package/dist-pkg/cli/cmd-test.js +103 -0
- package/dist-pkg/cli/cmd-typegen.d.ts +7 -0
- package/dist-pkg/cli/cmd-typegen.js +66 -0
- package/dist-pkg/cli/cmd-upgrade.d.ts +38 -0
- package/dist-pkg/cli/cmd-upgrade.js +232 -0
- package/dist-pkg/cli/context.d.ts +4 -0
- package/dist-pkg/cli/context.js +4 -0
- package/dist-pkg/cli/framework-md.d.ts +1 -0
- package/dist-pkg/cli/framework-md.js +391 -0
- package/dist-pkg/cli/index.d.ts +6 -0
- package/dist-pkg/cli/index.js +106 -0
- package/dist-pkg/cli/release-version.d.ts +2 -0
- package/dist-pkg/cli/release-version.js +33 -0
- package/dist-pkg/client.d.ts +16 -0
- package/dist-pkg/client.js +71 -0
- package/dist-pkg/compat.d.ts +1 -0
- package/dist-pkg/compat.js +1 -0
- package/dist-pkg/compiler/analysis-backend.d.ts +20 -0
- package/dist-pkg/compiler/analysis-backend.js +164 -0
- package/dist-pkg/compiler/backends/experimental-oxc.d.ts +6 -0
- package/dist-pkg/compiler/backends/experimental-oxc.js +9 -0
- package/dist-pkg/compiler/backends/oxc.d.ts +16 -0
- package/dist-pkg/compiler/backends/oxc.js +198 -0
- package/dist-pkg/compiler/backends/register.d.ts +7 -0
- package/dist-pkg/compiler/backends/register.js +22 -0
- package/dist-pkg/compiler/fixtures.d.ts +2 -0
- package/dist-pkg/compiler/fixtures.js +118 -0
- package/dist-pkg/compiler/init.d.ts +1 -0
- package/dist-pkg/compiler/init.js +6 -0
- package/dist-pkg/compiler/module-analysis.d.ts +13 -0
- package/dist-pkg/compiler/module-analysis.js +50 -0
- package/dist-pkg/compiler/parity.d.ts +35 -0
- package/dist-pkg/compiler/parity.js +89 -0
- package/dist-pkg/compiler/readiness.d.ts +11 -0
- package/dist-pkg/compiler/readiness.js +18 -0
- package/dist-pkg/compiler/route-facts.d.ts +34 -0
- package/dist-pkg/compiler/route-facts.js +75 -0
- package/dist-pkg/content/index.d.ts +27 -0
- package/dist-pkg/content/index.js +287 -0
- package/dist-pkg/db/index.d.ts +3 -0
- package/dist-pkg/db/index.js +6 -0
- package/dist-pkg/db/migrate.d.ts +7 -0
- package/dist-pkg/db/migrate.js +53 -0
- package/dist-pkg/db/postgres.d.ts +29 -0
- package/dist-pkg/db/postgres.js +59 -0
- package/dist-pkg/db/sqlite.d.ts +10 -0
- package/dist-pkg/db/sqlite.js +22 -0
- package/dist-pkg/deploy/cloudflare.d.ts +8 -0
- package/{src/deploy/cloudflare.ts → dist-pkg/deploy/cloudflare.js} +24 -26
- package/dist-pkg/deploy/conformance.d.ts +21 -0
- package/dist-pkg/deploy/conformance.js +98 -0
- package/dist-pkg/deploy/dockerfile.d.ts +3 -0
- package/{src/deploy/dockerfile.ts → dist-pkg/deploy/dockerfile.js} +8 -10
- package/dist-pkg/deploy/fly.d.ts +3 -0
- package/{src/deploy/fly.ts → dist-pkg/deploy/fly.js} +11 -12
- package/dist-pkg/deploy/index.d.ts +6 -0
- package/dist-pkg/deploy/index.js +26 -0
- package/dist-pkg/deploy/netlify.d.ts +2 -0
- package/{src/deploy/netlify.ts → dist-pkg/deploy/netlify.js} +17 -11
- package/dist-pkg/deploy/runtime.d.ts +2 -0
- package/dist-pkg/deploy/runtime.js +3 -0
- package/dist-pkg/deploy/vercel.d.ts +22 -0
- package/dist-pkg/deploy/vercel.js +53 -0
- package/dist-pkg/dev/error-overlay.d.ts +1 -0
- package/{src/dev/error-overlay.ts → dist-pkg/dev/error-overlay.js} +13 -23
- package/dist-pkg/dev/hmr.d.ts +30 -0
- package/dist-pkg/dev/hmr.js +86 -0
- package/dist-pkg/dev/partial-handler.d.ts +9 -0
- package/dist-pkg/dev/partial-handler.js +24 -0
- package/dist-pkg/dev/request-handler.d.ts +30 -0
- package/dist-pkg/dev/request-handler.js +67 -0
- package/dist-pkg/dev/watcher.d.ts +6 -0
- package/dist-pkg/dev/watcher.js +34 -0
- package/dist-pkg/dev.d.ts +11 -0
- package/dist-pkg/dev.js +268 -0
- package/dist-pkg/env/index.d.ts +3 -0
- package/dist-pkg/env/index.js +57 -0
- package/dist-pkg/errors/catalog.d.ts +9 -0
- package/{src/errors/catalog.ts → dist-pkg/errors/catalog.js} +8 -24
- package/dist-pkg/errors/formatter.d.ts +22 -0
- package/dist-pkg/errors/formatter.js +43 -0
- package/dist-pkg/errors/index.d.ts +2 -0
- package/dist-pkg/errors/index.js +2 -0
- package/dist-pkg/forms/action.d.ts +15 -0
- package/dist-pkg/forms/action.js +20 -0
- package/dist-pkg/forms/index.d.ts +4 -0
- package/dist-pkg/forms/index.js +12 -0
- package/dist-pkg/i18n/index.d.ts +61 -0
- package/dist-pkg/i18n/index.js +147 -0
- package/dist-pkg/index-client.d.ts +1 -0
- package/dist-pkg/index-client.js +1 -0
- package/dist-pkg/index.d.ts +32 -0
- package/dist-pkg/index.js +79 -0
- package/dist-pkg/jsx-runtime-client.d.ts +8 -0
- package/dist-pkg/jsx-runtime-client.js +1 -0
- package/dist-pkg/jsx-runtime.d.ts +13 -0
- package/dist-pkg/jsx-runtime.js +5 -0
- package/dist-pkg/jsx-types-html.d.ts +221 -0
- package/dist-pkg/jsx-types-html.js +0 -0
- package/dist-pkg/log/index.d.ts +8 -0
- package/dist-pkg/log/index.js +55 -0
- package/dist-pkg/plugins/drizzle.d.ts +16 -0
- package/dist-pkg/plugins/drizzle.js +50 -0
- package/dist-pkg/plugins/index.d.ts +62 -0
- package/dist-pkg/plugins/index.js +147 -0
- package/dist-pkg/plugins/lucia.d.ts +26 -0
- package/dist-pkg/plugins/lucia.js +63 -0
- package/dist-pkg/plugins/prisma.d.ts +14 -0
- package/dist-pkg/plugins/prisma.js +57 -0
- package/dist-pkg/plugins/resend.d.ts +21 -0
- package/dist-pkg/plugins/resend.js +45 -0
- package/dist-pkg/plugins/s3.d.ts +18 -0
- package/dist-pkg/plugins/s3.js +63 -0
- package/dist-pkg/plugins/stripe.d.ts +32 -0
- package/dist-pkg/plugins/stripe.js +69 -0
- package/dist-pkg/plugins/tailwind.d.ts +15 -0
- package/dist-pkg/plugins/tailwind.js +58 -0
- package/dist-pkg/prod.d.ts +21 -0
- package/dist-pkg/prod.js +347 -0
- package/dist-pkg/reactive/computed.d.ts +3 -0
- package/dist-pkg/reactive/computed.js +15 -0
- package/dist-pkg/reactive/data.d.ts +25 -0
- package/dist-pkg/reactive/data.js +56 -0
- package/dist-pkg/reactive/diagnostics.d.ts +100 -0
- package/dist-pkg/reactive/diagnostics.js +363 -0
- package/dist-pkg/reactive/effect.d.ts +3 -0
- package/dist-pkg/reactive/effect.js +6 -0
- package/dist-pkg/reactive/index.d.ts +9 -0
- package/dist-pkg/reactive/index.js +18 -0
- package/dist-pkg/reactive/live.d.ts +15 -0
- package/dist-pkg/reactive/live.js +58 -0
- package/dist-pkg/reactive/optimistic.d.ts +20 -0
- package/dist-pkg/reactive/optimistic.js +54 -0
- package/dist-pkg/reactive/resource.d.ts +25 -0
- package/dist-pkg/reactive/resource.js +97 -0
- package/dist-pkg/reactive/signal.d.ts +4 -0
- package/dist-pkg/reactive/signal.js +17 -0
- package/dist-pkg/reactive/store.d.ts +6 -0
- package/dist-pkg/reactive/store.js +19 -0
- package/dist-pkg/router/index.d.ts +2 -0
- package/dist-pkg/router/index.js +2 -0
- package/dist-pkg/router/matcher.d.ts +7 -0
- package/dist-pkg/router/matcher.js +40 -0
- package/dist-pkg/router/scanner.d.ts +14 -0
- package/dist-pkg/router/scanner.js +141 -0
- package/dist-pkg/routes/index.d.ts +1 -0
- package/dist-pkg/routes/index.js +10 -0
- package/dist-pkg/runtime/app-config.d.ts +26 -0
- package/dist-pkg/runtime/app-config.js +69 -0
- package/dist-pkg/runtime/client.d.ts +3 -0
- package/dist-pkg/runtime/client.js +31 -0
- package/dist-pkg/runtime/devtools.d.ts +64 -0
- package/dist-pkg/runtime/devtools.js +132 -0
- package/dist-pkg/runtime/error-boundary.d.ts +6 -0
- package/dist-pkg/runtime/error-boundary.js +17 -0
- package/dist-pkg/runtime/event-replay.d.ts +3 -0
- package/{src/runtime/event-replay.ts → dist-pkg/runtime/event-replay.js} +7 -22
- package/dist-pkg/runtime/event-source.d.ts +7 -0
- package/dist-pkg/runtime/event-source.js +24 -0
- package/dist-pkg/runtime/form.d.ts +24 -0
- package/dist-pkg/runtime/form.js +59 -0
- package/dist-pkg/runtime/head.d.ts +7 -0
- package/dist-pkg/runtime/head.js +90 -0
- package/dist-pkg/runtime/html-escape.d.ts +7 -0
- package/dist-pkg/runtime/html-escape.js +39 -0
- package/dist-pkg/runtime/hydration.d.ts +15 -0
- package/dist-pkg/runtime/hydration.js +103 -0
- package/dist-pkg/runtime/image.d.ts +49 -0
- package/dist-pkg/runtime/image.js +144 -0
- package/dist-pkg/runtime/index.d.ts +17 -0
- package/dist-pkg/runtime/index.js +59 -0
- package/dist-pkg/runtime/island-hydrator.d.ts +12 -0
- package/dist-pkg/runtime/island-hydrator.js +49 -0
- package/dist-pkg/runtime/island.d.ts +19 -0
- package/dist-pkg/runtime/island.js +36 -0
- package/dist-pkg/runtime/jsx-runtime.d.ts +12 -0
- package/dist-pkg/runtime/jsx-runtime.js +173 -0
- package/dist-pkg/runtime/link.d.ts +16 -0
- package/dist-pkg/runtime/link.js +47 -0
- package/dist-pkg/runtime/project.d.ts +37 -0
- package/dist-pkg/runtime/project.js +36 -0
- package/dist-pkg/runtime/renderable.d.ts +6 -0
- package/dist-pkg/runtime/renderable.js +0 -0
- package/dist-pkg/runtime/router.d.ts +47 -0
- package/dist-pkg/runtime/router.js +476 -0
- package/dist-pkg/runtime/server.d.ts +8 -0
- package/dist-pkg/runtime/server.js +71 -0
- package/dist-pkg/runtime/stream.d.ts +29 -0
- package/dist-pkg/runtime/stream.js +106 -0
- package/dist-pkg/runtime/suspense.d.ts +6 -0
- package/dist-pkg/runtime/suspense.js +16 -0
- package/dist-pkg/runtime/typed-routes.d.ts +24 -0
- package/dist-pkg/runtime/typed-routes.js +77 -0
- package/dist-pkg/runtime/validated-form.d.ts +40 -0
- package/dist-pkg/runtime/validated-form.js +120 -0
- package/dist-pkg/security/cors.d.ts +10 -0
- package/dist-pkg/security/cors.js +56 -0
- package/dist-pkg/security/csrf.d.ts +9 -0
- package/dist-pkg/security/csrf.js +53 -0
- package/dist-pkg/security/headers.d.ts +11 -0
- package/dist-pkg/security/headers.js +31 -0
- package/dist-pkg/security/index.d.ts +5 -0
- package/dist-pkg/security/index.js +5 -0
- package/dist-pkg/security/rate-limit.d.ts +10 -0
- package/dist-pkg/security/rate-limit.js +49 -0
- package/dist-pkg/security/redis-rate-limit.d.ts +14 -0
- package/dist-pkg/security/redis-rate-limit.js +23 -0
- package/dist-pkg/server/action.d.ts +21 -0
- package/dist-pkg/server/action.js +64 -0
- package/dist-pkg/server/cache-utils.d.ts +2 -0
- package/dist-pkg/server/cache-utils.js +26 -0
- package/dist-pkg/server/cache.d.ts +33 -0
- package/dist-pkg/server/cache.js +236 -0
- package/dist-pkg/server/compress.d.ts +2 -0
- package/dist-pkg/server/compress.js +49 -0
- package/dist-pkg/server/endpoint-execution.d.ts +28 -0
- package/dist-pkg/server/endpoint-execution.js +37 -0
- package/dist-pkg/server/etag.d.ts +3 -0
- package/dist-pkg/server/etag.js +18 -0
- package/dist-pkg/server/guard.d.ts +16 -0
- package/dist-pkg/server/guard.js +45 -0
- package/dist-pkg/server/html-shell.d.ts +12 -0
- package/dist-pkg/server/html-shell.js +52 -0
- package/dist-pkg/server/index.d.ts +36 -0
- package/dist-pkg/server/index.js +170 -0
- package/dist-pkg/server/jobs.d.ts +41 -0
- package/dist-pkg/server/jobs.js +81 -0
- package/dist-pkg/server/manifest.d.ts +19 -0
- package/dist-pkg/server/manifest.js +36 -0
- package/dist-pkg/server/middleware.d.ts +39 -0
- package/dist-pkg/server/middleware.js +122 -0
- package/dist-pkg/server/mime.d.ts +1 -0
- package/{src/server/mime.ts → dist-pkg/server/mime.js} +6 -17
- package/dist-pkg/server/not-found.d.ts +6 -0
- package/dist-pkg/server/not-found.js +24 -0
- package/dist-pkg/server/page-render.d.ts +29 -0
- package/dist-pkg/server/page-render.js +67 -0
- package/dist-pkg/server/partial-navigation.d.ts +4 -0
- package/dist-pkg/server/partial-navigation.js +16 -0
- package/dist-pkg/server/pipe.d.ts +9 -0
- package/dist-pkg/server/pipe.js +32 -0
- package/dist-pkg/server/redis-cache-store.d.ts +10 -0
- package/dist-pkg/server/redis-cache-store.js +73 -0
- package/dist-pkg/server/redis-client.d.ts +37 -0
- package/dist-pkg/server/redis-client.js +37 -0
- package/dist-pkg/server/request-policy.d.ts +55 -0
- package/dist-pkg/server/request-policy.js +216 -0
- package/dist-pkg/server/request-preflight.d.ts +23 -0
- package/dist-pkg/server/request-preflight.js +45 -0
- package/dist-pkg/server/request-security-policy.d.ts +17 -0
- package/dist-pkg/server/request-security-policy.js +34 -0
- package/dist-pkg/server/request-surface.d.ts +8 -0
- package/dist-pkg/server/request-surface.js +19 -0
- package/dist-pkg/server/route-request.d.ts +31 -0
- package/dist-pkg/server/route-request.js +112 -0
- package/dist-pkg/server/route-response.d.ts +22 -0
- package/dist-pkg/server/route-response.js +58 -0
- package/dist-pkg/server/rpc-hash.d.ts +2 -0
- package/dist-pkg/server/rpc-hash.js +7 -0
- package/dist-pkg/server/rpc-protocol.d.ts +22 -0
- package/dist-pkg/server/rpc-protocol.js +28 -0
- package/dist-pkg/server/rpc-utils.d.ts +2 -0
- package/dist-pkg/server/rpc-utils.js +26 -0
- package/dist-pkg/server/rpc.d.ts +20 -0
- package/dist-pkg/server/rpc.js +147 -0
- package/dist-pkg/server/runtime-dispatch.d.ts +19 -0
- package/dist-pkg/server/runtime-dispatch.js +67 -0
- package/dist-pkg/server/server-execution.d.ts +22 -0
- package/dist-pkg/server/server-execution.js +53 -0
- package/dist-pkg/server/sqlite-cache-store.d.ts +13 -0
- package/dist-pkg/server/sqlite-cache-store.js +88 -0
- package/dist-pkg/server/sse.d.ts +9 -0
- package/dist-pkg/server/sse.js +34 -0
- package/dist-pkg/server/static-file.d.ts +9 -0
- package/dist-pkg/server/static-file.js +43 -0
- package/dist-pkg/server/ws.d.ts +18 -0
- package/dist-pkg/server/ws.js +40 -0
- package/dist-pkg/server-entry.d.ts +19 -0
- package/dist-pkg/server-entry.js +93 -0
- package/dist-pkg/testing/index.d.ts +98 -0
- package/dist-pkg/testing/index.js +254 -0
- package/dist-pkg/types/index.d.ts +4 -0
- package/dist-pkg/types/index.js +4 -0
- package/dist-pkg/types/safe-html.d.ts +7 -0
- package/dist-pkg/types/safe-html.js +19 -0
- package/dist-pkg/types/safe-sql.d.ts +8 -0
- package/dist-pkg/types/safe-sql.js +14 -0
- package/dist-pkg/types/safe-url.d.ts +7 -0
- package/dist-pkg/types/safe-url.js +20 -0
- package/dist-pkg/types/user-input.d.ts +9 -0
- package/dist-pkg/types/user-input.js +3 -0
- package/dist-pkg/unsafe/index.d.ts +12 -0
- package/dist-pkg/unsafe/index.js +6 -0
- package/package.json +102 -44
- package/bin/gorsee.js +0 -14
- package/src/auth/index.ts +0 -178
- package/src/auth/redis-session-store.ts +0 -46
- package/src/auth/sqlite-session-store.ts +0 -98
- package/src/auth/store-utils.ts +0 -21
- package/src/build/client.ts +0 -139
- package/src/build/css-modules.ts +0 -69
- package/src/build/devalue-parse.ts +0 -2
- package/src/build/manifest.ts +0 -34
- package/src/build/route-metadata.ts +0 -12
- package/src/build/rpc-transform.ts +0 -62
- package/src/build/server-strip.ts +0 -87
- package/src/build/ssg.ts +0 -70
- package/src/cli/bun-plugin.ts +0 -58
- package/src/cli/cmd-build.ts +0 -153
- package/src/cli/cmd-check.ts +0 -239
- package/src/cli/cmd-create.ts +0 -328
- package/src/cli/cmd-deploy.ts +0 -149
- package/src/cli/cmd-dev.ts +0 -13
- package/src/cli/cmd-docs.ts +0 -152
- package/src/cli/cmd-generate.ts +0 -155
- package/src/cli/cmd-migrate.ts +0 -53
- package/src/cli/cmd-routes.ts +0 -36
- package/src/cli/cmd-start.ts +0 -30
- package/src/cli/cmd-test.ts +0 -129
- package/src/cli/cmd-typegen.ts +0 -93
- package/src/cli/cmd-upgrade.ts +0 -143
- package/src/cli/context.ts +0 -12
- package/src/cli/framework-md.ts +0 -223
- package/src/cli/index.ts +0 -107
- package/src/client.ts +0 -26
- package/src/db/index.ts +0 -2
- package/src/db/migrate.ts +0 -89
- package/src/db/sqlite.ts +0 -40
- package/src/deploy/index.ts +0 -31
- package/src/deploy/vercel.ts +0 -94
- package/src/dev/hmr.ts +0 -31
- package/src/dev/partial-handler.ts +0 -52
- package/src/dev/request-handler.ts +0 -127
- package/src/dev/watcher.ts +0 -48
- package/src/dev.ts +0 -208
- package/src/env/index.ts +0 -74
- package/src/errors/formatter.ts +0 -63
- package/src/errors/index.ts +0 -2
- package/src/i18n/index.ts +0 -72
- package/src/index-client.ts +0 -4
- package/src/index.ts +0 -43
- package/src/jsx-runtime-client.ts +0 -13
- package/src/jsx-runtime.ts +0 -20
- package/src/jsx-types-html.ts +0 -242
- package/src/log/index.ts +0 -44
- package/src/plugins/drizzle.ts +0 -84
- package/src/plugins/index.ts +0 -86
- package/src/plugins/lucia.ts +0 -111
- package/src/plugins/prisma.ts +0 -85
- package/src/plugins/resend.ts +0 -78
- package/src/plugins/s3.ts +0 -102
- package/src/plugins/stripe.ts +0 -133
- package/src/plugins/tailwind.ts +0 -92
- package/src/prod.ts +0 -252
- package/src/reactive/computed.ts +0 -7
- package/src/reactive/effect.ts +0 -7
- package/src/reactive/index.ts +0 -7
- package/src/reactive/live.ts +0 -97
- package/src/reactive/optimistic.ts +0 -83
- package/src/reactive/resource.ts +0 -138
- package/src/reactive/signal.ts +0 -20
- package/src/reactive/store.ts +0 -36
- package/src/router/index.ts +0 -2
- package/src/router/matcher.ts +0 -53
- package/src/router/scanner.ts +0 -206
- package/src/runtime/client.ts +0 -28
- package/src/runtime/error-boundary.ts +0 -35
- package/src/runtime/form.ts +0 -49
- package/src/runtime/head.ts +0 -113
- package/src/runtime/html-escape.ts +0 -30
- package/src/runtime/hydration.ts +0 -95
- package/src/runtime/image.ts +0 -48
- package/src/runtime/index.ts +0 -12
- package/src/runtime/island-hydrator.ts +0 -84
- package/src/runtime/island.ts +0 -88
- package/src/runtime/jsx-runtime.ts +0 -167
- package/src/runtime/link.ts +0 -45
- package/src/runtime/project.ts +0 -73
- package/src/runtime/router.ts +0 -224
- package/src/runtime/server.ts +0 -102
- package/src/runtime/stream.ts +0 -182
- package/src/runtime/suspense.ts +0 -37
- package/src/runtime/typed-routes.ts +0 -26
- package/src/runtime/validated-form.ts +0 -106
- package/src/security/cors.ts +0 -80
- package/src/security/csrf.ts +0 -85
- package/src/security/headers.ts +0 -50
- package/src/security/index.ts +0 -4
- package/src/security/rate-limit.ts +0 -80
- package/src/server/action.ts +0 -48
- package/src/server/cache-utils.ts +0 -23
- package/src/server/cache.ts +0 -125
- package/src/server/compress.ts +0 -60
- package/src/server/etag.ts +0 -23
- package/src/server/guard.ts +0 -69
- package/src/server/html-shell.ts +0 -69
- package/src/server/index.ts +0 -57
- package/src/server/manifest.ts +0 -36
- package/src/server/middleware.ts +0 -159
- package/src/server/not-found.ts +0 -35
- package/src/server/page-render.ts +0 -123
- package/src/server/pipe.ts +0 -46
- package/src/server/redis-cache-store.ts +0 -87
- package/src/server/redis-client.ts +0 -71
- package/src/server/request-preflight.ts +0 -45
- package/src/server/route-request.ts +0 -72
- package/src/server/rpc-hash.ts +0 -17
- package/src/server/rpc-utils.ts +0 -27
- package/src/server/rpc.ts +0 -177
- package/src/server/sqlite-cache-store.ts +0 -109
- package/src/server/sse.ts +0 -96
- package/src/server/static-file.ts +0 -63
- package/src/server/ws.ts +0 -56
- package/src/server-entry.ts +0 -36
- package/src/testing/index.ts +0 -74
- package/src/types/index.ts +0 -4
- package/src/types/safe-html.ts +0 -32
- package/src/types/safe-sql.ts +0 -28
- package/src/types/safe-url.ts +0 -40
- package/src/types/user-input.ts +0 -12
- package/src/unsafe/index.ts +0 -18
|
@@ -0,0 +1,600 @@
|
|
|
1
|
+
import { copyFile, mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join, relative } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { generateFrameworkMD } from "./framework-md.js";
|
|
5
|
+
import { createProjectContext } from "../runtime/project.js";
|
|
6
|
+
const DIRS = [
|
|
7
|
+
"routes",
|
|
8
|
+
"routes/api",
|
|
9
|
+
"shared",
|
|
10
|
+
"middleware",
|
|
11
|
+
"migrations",
|
|
12
|
+
"public"
|
|
13
|
+
], INDEX_ROUTE = `import { createSignal, Head, Link } from "gorsee/client"
|
|
14
|
+
|
|
15
|
+
export default function HomePage() {
|
|
16
|
+
const [count, setCount] = createSignal(0)
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<div>
|
|
20
|
+
<Head>
|
|
21
|
+
<title>My Gorsee App</title>
|
|
22
|
+
<meta name="description" content="Built with Gorsee.js" />
|
|
23
|
+
</Head>
|
|
24
|
+
<h1>My Gorsee App</h1>
|
|
25
|
+
<p>Edit routes/index.tsx to get started.</p>
|
|
26
|
+
<nav>
|
|
27
|
+
<Link href="/">Home</Link> | <Link href="/about">About</Link>
|
|
28
|
+
</nav>
|
|
29
|
+
<div>
|
|
30
|
+
<button on:click={() => setCount((c: number) => c + 1)}>Count: {count}</button>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
`, ABOUT_ROUTE = `import { Head, Link } from "gorsee/client"
|
|
36
|
+
|
|
37
|
+
export default function AboutPage() {
|
|
38
|
+
return (
|
|
39
|
+
<div>
|
|
40
|
+
<Head>
|
|
41
|
+
<title>About - My Gorsee App</title>
|
|
42
|
+
</Head>
|
|
43
|
+
<h1>About</h1>
|
|
44
|
+
<p>This app is built with <strong>Gorsee.js</strong> \u2014 a full-stack TypeScript framework.</p>
|
|
45
|
+
<Link href="/">Back to Home</Link>
|
|
46
|
+
</div>
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
`, LAYOUT = `export default function RootLayout(props: { children: unknown }) {
|
|
50
|
+
return (
|
|
51
|
+
<div class="layout">
|
|
52
|
+
<header>
|
|
53
|
+
<nav class="main-nav">
|
|
54
|
+
<strong>Gorsee App</strong>
|
|
55
|
+
</nav>
|
|
56
|
+
</header>
|
|
57
|
+
<main>{props.children}</main>
|
|
58
|
+
<footer>
|
|
59
|
+
<p>Built with Gorsee.js</p>
|
|
60
|
+
</footer>
|
|
61
|
+
</div>
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
`, ERROR_PAGE = `export default function ErrorPage(props: { error: Error }) {
|
|
65
|
+
return (
|
|
66
|
+
<div class="error-page">
|
|
67
|
+
<h1>Something went wrong</h1>
|
|
68
|
+
<p>{props.error.message}</p>
|
|
69
|
+
<a href="/">Go back home</a>
|
|
70
|
+
</div>
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
`, NOT_FOUND_PAGE = `import { Head, Link } from "gorsee/client"
|
|
74
|
+
|
|
75
|
+
export default function NotFoundPage() {
|
|
76
|
+
return (
|
|
77
|
+
<div>
|
|
78
|
+
<Head><title>404 - Not Found</title></Head>
|
|
79
|
+
<h1>404</h1>
|
|
80
|
+
<p>The page you're looking for doesn't exist.</p>
|
|
81
|
+
<Link href="/">Go back home</Link>
|
|
82
|
+
</div>
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
`, HEALTH_API = `import type { Context } from "gorsee/server"
|
|
86
|
+
|
|
87
|
+
export function GET(_ctx: Context): Response {
|
|
88
|
+
return Response.json({
|
|
89
|
+
status: "ok",
|
|
90
|
+
timestamp: new Date().toISOString(),
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
`, DEFAULT_CSS = `*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
|
|
94
|
+
body{font-family:system-ui,-apple-system,sans-serif;line-height:1.6;color:#1a1a1a;max-width:800px;margin:0 auto;padding:2rem 1rem}
|
|
95
|
+
h1{margin-bottom:.5rem}p{margin-bottom:.5rem}
|
|
96
|
+
a{color:#2563eb;text-decoration:none}a:hover{text-decoration:underline}
|
|
97
|
+
button{background:#2563eb;color:#fff;border:none;padding:.4rem 1rem;border-radius:4px;cursor:pointer;font-size:.9rem}
|
|
98
|
+
button:hover{background:#1d4ed8}
|
|
99
|
+
.layout{min-height:100vh;display:flex;flex-direction:column}
|
|
100
|
+
.layout main{flex:1}
|
|
101
|
+
.layout footer{margin-top:2rem;padding-top:1rem;border-top:1px solid #e5e7eb;color:#6b7280;font-size:.85rem}
|
|
102
|
+
`, ENV_EXAMPLE = `# App
|
|
103
|
+
PORT=3000
|
|
104
|
+
NODE_ENV=development
|
|
105
|
+
APP_ORIGIN=http://localhost:3000
|
|
106
|
+
|
|
107
|
+
# Auth (generate with: openssl rand -hex 32)
|
|
108
|
+
SESSION_SECRET=change-me-in-production
|
|
109
|
+
|
|
110
|
+
# Database
|
|
111
|
+
DATABASE_URL=./data.sqlite
|
|
112
|
+
|
|
113
|
+
# Public vars (exposed to client)
|
|
114
|
+
PUBLIC_APP_NAME=My Gorsee App
|
|
115
|
+
`, APP_CONFIG = `export default {
|
|
116
|
+
port: 3000,
|
|
117
|
+
|
|
118
|
+
db: {
|
|
119
|
+
driver: "sqlite" as const,
|
|
120
|
+
url: "./data.sqlite",
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
log: "info" as const,
|
|
124
|
+
|
|
125
|
+
ai: {
|
|
126
|
+
enabled: false,
|
|
127
|
+
// Writes structured events for AI agents and IDE tooling.
|
|
128
|
+
jsonlPath: ".gorsee/ai-events.jsonl",
|
|
129
|
+
diagnosticsPath: ".gorsee/ai-diagnostics.json",
|
|
130
|
+
sessionPack: {
|
|
131
|
+
enabled: true,
|
|
132
|
+
outDir: ".gorsee/agent",
|
|
133
|
+
triggerKinds: ["diagnostic.issue", "request.error", "build.summary", "check.summary"],
|
|
134
|
+
},
|
|
135
|
+
bridge: {
|
|
136
|
+
// Point this at a local IDE bridge or MCP helper when you want live diagnostics.
|
|
137
|
+
url: "http://127.0.0.1:4318/gorsee/ai-events",
|
|
138
|
+
timeoutMs: 250,
|
|
139
|
+
events: ["diagnostic.issue", "check.summary", "build.summary", "request.error"],
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
|
|
143
|
+
security: {
|
|
144
|
+
// Canonical application origin used for redirect and origin-sensitive checks.
|
|
145
|
+
origin: process.env.APP_ORIGIN ?? "http://localhost:3000",
|
|
146
|
+
proxy: {
|
|
147
|
+
// Use "vercel", "netlify", "fly", or "reverse-proxy" when deployed behind a trusted proxy hop.
|
|
148
|
+
preset: "none" as const,
|
|
149
|
+
trustForwardedHeaders: false,
|
|
150
|
+
trustedForwardedHops: 1,
|
|
151
|
+
},
|
|
152
|
+
csp: true,
|
|
153
|
+
hsts: true,
|
|
154
|
+
csrf: true,
|
|
155
|
+
rateLimit: {
|
|
156
|
+
requests: 100,
|
|
157
|
+
window: "1m",
|
|
158
|
+
},
|
|
159
|
+
rpc: {
|
|
160
|
+
// Add auth/CSRF middleware here when server() calls need protection.
|
|
161
|
+
// Example:
|
|
162
|
+
// middlewares: [auth.protect(), createCSRFMiddleware(process.env.SESSION_SECRET!)],
|
|
163
|
+
middlewares: [],
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
deploy: {
|
|
168
|
+
target: "bun" as const,
|
|
169
|
+
},
|
|
170
|
+
}
|
|
171
|
+
`, TSCONFIG = `{
|
|
172
|
+
"compilerOptions": {
|
|
173
|
+
"target": "ESNext",
|
|
174
|
+
"module": "ESNext",
|
|
175
|
+
"moduleResolution": "bundler",
|
|
176
|
+
"jsx": "preserve",
|
|
177
|
+
"jsxImportSource": "gorsee",
|
|
178
|
+
"strict": true,
|
|
179
|
+
"noUncheckedIndexedAccess": true,
|
|
180
|
+
"allowImportingTsExtensions": true,
|
|
181
|
+
"noEmit": true,
|
|
182
|
+
"types": ["bun"]
|
|
183
|
+
},
|
|
184
|
+
"include": ["routes/**/*.ts", "routes/**/*.tsx", "shared/**/*.ts", "middleware/**/*.ts"]
|
|
185
|
+
}
|
|
186
|
+
`, GITIGNORE = `node_modules/
|
|
187
|
+
dist/
|
|
188
|
+
.gorsee/
|
|
189
|
+
.env
|
|
190
|
+
.env.local
|
|
191
|
+
*.sqlite
|
|
192
|
+
*.db
|
|
193
|
+
.DS_Store
|
|
194
|
+
`, PACKAGE_MANAGER = "bun@1.3.9", CREATE_TEMPLATES = ["basic", "secure-saas", "content-site", "agent-aware-ops", "workspace-monorepo"], REPO_ROOT = fileURLToPath(new URL("../../", import.meta.url)), TEMPLATE_DEFINITIONS = {
|
|
195
|
+
"secure-saas": {
|
|
196
|
+
sourceDir: join(REPO_ROOT, "examples/secure-saas"),
|
|
197
|
+
readmeDescription: "Authenticated SaaS starter with protected route groups, explicit auth middleware, and private cache semantics.",
|
|
198
|
+
readmeHighlights: [
|
|
199
|
+
"protected `/app/*` route group with canonical auth middleware",
|
|
200
|
+
"shared auth surface in `auth-shared.ts`",
|
|
201
|
+
"RPC boundary ready for authenticated server workflows"
|
|
202
|
+
]
|
|
203
|
+
},
|
|
204
|
+
"content-site": {
|
|
205
|
+
sourceDir: join(REPO_ROOT, "examples/content-site"),
|
|
206
|
+
readmeDescription: "Public content starter with prerendered entry pages, explicit public cache policy, and article routes.",
|
|
207
|
+
readmeHighlights: [
|
|
208
|
+
"public cache middleware with explicit auth-header policy",
|
|
209
|
+
"prerendered landing page",
|
|
210
|
+
"blog route shape for content collections"
|
|
211
|
+
]
|
|
212
|
+
},
|
|
213
|
+
"agent-aware-ops": {
|
|
214
|
+
sourceDir: join(REPO_ROOT, "examples/agent-aware-ops"),
|
|
215
|
+
readmeDescription: "Internal operations starter where AI diagnostics, IDE sync, session packs, and MCP workflows are part of the product surface.",
|
|
216
|
+
readmeHighlights: [
|
|
217
|
+
"`ai.enabled` configured in `app.config.ts`",
|
|
218
|
+
"ops route focused on agent-facing workflows",
|
|
219
|
+
"diagnostics-first baseline for internal tooling"
|
|
220
|
+
]
|
|
221
|
+
},
|
|
222
|
+
"workspace-monorepo": {
|
|
223
|
+
sourceDir: join(REPO_ROOT, "examples/workspace-monorepo"),
|
|
224
|
+
readmeDescription: "Workspace starter with one Gorsee app package and one shared package, keeping runtime ownership explicit.",
|
|
225
|
+
readmeHighlights: [
|
|
226
|
+
"root workspace with `apps/*` and `packages/*`",
|
|
227
|
+
"web app in `apps/web` using canonical `gorsee` scripts",
|
|
228
|
+
"shared package isolated from runtime ownership"
|
|
229
|
+
],
|
|
230
|
+
postCreate: async (dir, name) => {
|
|
231
|
+
await writeFile(join(dir, ".gitignore"), GITIGNORE);
|
|
232
|
+
const rootPackageJson = {
|
|
233
|
+
name,
|
|
234
|
+
private: !0,
|
|
235
|
+
packageManager: PACKAGE_MANAGER,
|
|
236
|
+
workspaces: ["apps/*", "packages/*"]
|
|
237
|
+
};
|
|
238
|
+
await writeFile(join(dir, "package.json"), JSON.stringify(rootPackageJson, null, 2) + `
|
|
239
|
+
`);
|
|
240
|
+
const webPackagePath = join(dir, "apps/web/package.json"), webPackageJson = JSON.parse(await readFile(webPackagePath, "utf-8"));
|
|
241
|
+
webPackageJson.name = "@workspace/web";
|
|
242
|
+
webPackageJson.private = !0;
|
|
243
|
+
webPackageJson.type = "module";
|
|
244
|
+
webPackageJson.packageManager = PACKAGE_MANAGER;
|
|
245
|
+
webPackageJson.scripts = createPackageScripts();
|
|
246
|
+
webPackageJson.dependencies = {
|
|
247
|
+
gorsee: "latest",
|
|
248
|
+
"@workspace/shared": "workspace:*"
|
|
249
|
+
};
|
|
250
|
+
await writeFile(webPackagePath, JSON.stringify(webPackageJson, null, 2) + `
|
|
251
|
+
`);
|
|
252
|
+
const sharedPackagePath = join(dir, "packages/shared/package.json"), sharedPackageJson = JSON.parse(await readFile(sharedPackagePath, "utf-8"));
|
|
253
|
+
sharedPackageJson.name = "@workspace/shared";
|
|
254
|
+
sharedPackageJson.version = "0.0.0";
|
|
255
|
+
sharedPackageJson.type = "module";
|
|
256
|
+
sharedPackageJson.exports = "./index.ts";
|
|
257
|
+
await writeFile(sharedPackagePath, JSON.stringify(sharedPackageJson, null, 2) + `
|
|
258
|
+
`);
|
|
259
|
+
const routePath = join(dir, "apps/web/routes/index.tsx"), routeSource = await readFile(routePath, "utf-8");
|
|
260
|
+
await writeFile(routePath, routeSource.replaceAll("@example/shared", "@workspace/shared"));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
function createPackageScripts() {
|
|
265
|
+
return {
|
|
266
|
+
dev: "gorsee dev",
|
|
267
|
+
build: "gorsee build",
|
|
268
|
+
start: "gorsee start",
|
|
269
|
+
check: "gorsee check"
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
function normalizePackageName(name) {
|
|
273
|
+
return name.trim().toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "gorsee-app";
|
|
274
|
+
}
|
|
275
|
+
function parseCreateArgs(args) {
|
|
276
|
+
let template = "basic";
|
|
277
|
+
const positional = [];
|
|
278
|
+
for (let i = 0;i < args.length; i += 1) {
|
|
279
|
+
const arg = args[i];
|
|
280
|
+
if (!arg)
|
|
281
|
+
continue;
|
|
282
|
+
if (arg === "--template" || arg === "-t") {
|
|
283
|
+
const value = args[i + 1];
|
|
284
|
+
if (!value)
|
|
285
|
+
printCreateUsageAndExit("Missing value for --template");
|
|
286
|
+
template = parseTemplateValue(value);
|
|
287
|
+
i += 1;
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
if (arg.startsWith("--template=")) {
|
|
291
|
+
template = parseTemplateValue(arg.slice(11));
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
positional.push(arg);
|
|
295
|
+
}
|
|
296
|
+
const name = positional[0];
|
|
297
|
+
if (!name)
|
|
298
|
+
printCreateUsageAndExit();
|
|
299
|
+
return { name, template };
|
|
300
|
+
}
|
|
301
|
+
function parseTemplateValue(value) {
|
|
302
|
+
if (CREATE_TEMPLATES.includes(value))
|
|
303
|
+
return value;
|
|
304
|
+
printCreateUsageAndExit(`Unknown template: ${value}`);
|
|
305
|
+
}
|
|
306
|
+
function printCreateUsageAndExit(message) {
|
|
307
|
+
if (message)
|
|
308
|
+
console.error(message);
|
|
309
|
+
console.error(`Usage: gorsee create <project-name> [--template ${CREATE_TEMPLATES.join("|")}]`);
|
|
310
|
+
process.exit(1);
|
|
311
|
+
}
|
|
312
|
+
async function copyTemplateTree(sourceDir, targetDir) {
|
|
313
|
+
await mkdir(targetDir, { recursive: !0 });
|
|
314
|
+
const entries = await readdir(sourceDir, { withFileTypes: !0 });
|
|
315
|
+
for (const entry of entries) {
|
|
316
|
+
if (shouldSkipTemplateEntry(entry.name))
|
|
317
|
+
continue;
|
|
318
|
+
const sourcePath = join(sourceDir, entry.name), targetPath = join(targetDir, entry.name);
|
|
319
|
+
if (entry.isDirectory()) {
|
|
320
|
+
await copyTemplateTree(sourcePath, targetPath);
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
if (entry.isFile())
|
|
324
|
+
await copyFile(sourcePath, targetPath);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
function shouldSkipTemplateEntry(name) {
|
|
328
|
+
return name === ".gorsee" || name === "dist" || name === "node_modules" || name === "bun.lock";
|
|
329
|
+
}
|
|
330
|
+
async function normalizeSinglePackageManifest(packageJsonPath, packageName) {
|
|
331
|
+
const packageJson = JSON.parse(await readFile(packageJsonPath, "utf-8"));
|
|
332
|
+
packageJson.name = packageName;
|
|
333
|
+
packageJson.version = "0.1.0";
|
|
334
|
+
packageJson.private = !0;
|
|
335
|
+
packageJson.type = "module";
|
|
336
|
+
packageJson.packageManager = PACKAGE_MANAGER;
|
|
337
|
+
packageJson.scripts = createPackageScripts();
|
|
338
|
+
packageJson.dependencies = {
|
|
339
|
+
...packageJson.dependencies ?? {},
|
|
340
|
+
gorsee: "latest"
|
|
341
|
+
};
|
|
342
|
+
await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + `
|
|
343
|
+
`);
|
|
344
|
+
}
|
|
345
|
+
function generateTemplateReadme(name, template) {
|
|
346
|
+
const definition = TEMPLATE_DEFINITIONS[template], highlightLines = definition.readmeHighlights.map((item) => `- ${item}`).join(`
|
|
347
|
+
`), workspaceHint = template === "workspace-monorepo" ? `
|
|
348
|
+
## Workspace Commands
|
|
349
|
+
|
|
350
|
+
Run the app package commands from \`apps/web\`.
|
|
351
|
+
` : "";
|
|
352
|
+
return `# ${name}
|
|
353
|
+
|
|
354
|
+
Built with Gorsee.js \u2014 AI-first reactive full-stack TypeScript framework.
|
|
355
|
+
|
|
356
|
+
Template: \`${template}\`
|
|
357
|
+
|
|
358
|
+
${definition.readmeDescription}
|
|
359
|
+
|
|
360
|
+
## Included Shape
|
|
361
|
+
|
|
362
|
+
${highlightLines}
|
|
363
|
+
|
|
364
|
+
## Getting Started
|
|
365
|
+
|
|
366
|
+
\`\`\`bash
|
|
367
|
+
bun install
|
|
368
|
+
${template === "workspace-monorepo" ? `cd apps/web
|
|
369
|
+
bun run dev` : "bun run dev"}
|
|
370
|
+
\`\`\`
|
|
371
|
+
|
|
372
|
+
Open [http://localhost:3000](http://localhost:3000).
|
|
373
|
+
${workspaceHint}
|
|
374
|
+
## Reproducibility
|
|
375
|
+
|
|
376
|
+
- Keep \`bun.lock\` in version control after the first \`bun install\`.
|
|
377
|
+
- Use \`bun install --frozen-lockfile\` in CI and deploy automation once the lockfile exists.
|
|
378
|
+
|
|
379
|
+
## Commands
|
|
380
|
+
|
|
381
|
+
${template === "workspace-monorepo" ? "- Root: workspace orchestration and shared packages\n- `apps/web`: `bun run dev`, `bun run build`, `bun run start`, `bun run check`" : "- `bun run dev`\n- `bun run build`\n- `bun run start`\n- `bun run check`"}
|
|
382
|
+
|
|
383
|
+
## Product Rule
|
|
384
|
+
|
|
385
|
+
This starter is a first-party product baseline. Keep client/server boundaries explicit, replace placeholder origins before shipping, and use \`FRAMEWORK.md\` plus the Gorsee docs as the canonical extension surface.
|
|
386
|
+
`;
|
|
387
|
+
}
|
|
388
|
+
async function createBasicProject(dir, name) {
|
|
389
|
+
for (const d of DIRS)
|
|
390
|
+
await mkdir(join(dir, d), { recursive: !0 });
|
|
391
|
+
await writeFile(join(dir, "routes/index.tsx"), INDEX_ROUTE);
|
|
392
|
+
await writeFile(join(dir, "routes/about.tsx"), ABOUT_ROUTE);
|
|
393
|
+
await writeFile(join(dir, "routes/_layout.tsx"), LAYOUT);
|
|
394
|
+
await writeFile(join(dir, "routes/_error.tsx"), ERROR_PAGE);
|
|
395
|
+
await writeFile(join(dir, "routes/404.tsx"), NOT_FOUND_PAGE);
|
|
396
|
+
await writeFile(join(dir, "routes/api/health.ts"), HEALTH_API);
|
|
397
|
+
await writeFile(join(dir, "public/styles.css"), DEFAULT_CSS);
|
|
398
|
+
await writeFile(join(dir, "app.config.ts"), APP_CONFIG);
|
|
399
|
+
await writeFile(join(dir, "tsconfig.json"), TSCONFIG);
|
|
400
|
+
await writeFile(join(dir, ".gitignore"), GITIGNORE);
|
|
401
|
+
await writeFile(join(dir, ".env.example"), ENV_EXAMPLE);
|
|
402
|
+
await writeFile(join(dir, ".env"), ENV_EXAMPLE);
|
|
403
|
+
await writeFile(join(dir, "README.md"), generateReadme(name));
|
|
404
|
+
await writeFile(join(dir, "package.json"), JSON.stringify({
|
|
405
|
+
name: normalizePackageName(name),
|
|
406
|
+
version: "0.1.0",
|
|
407
|
+
type: "module",
|
|
408
|
+
packageManager: PACKAGE_MANAGER,
|
|
409
|
+
scripts: createPackageScripts(),
|
|
410
|
+
dependencies: {
|
|
411
|
+
gorsee: "latest"
|
|
412
|
+
},
|
|
413
|
+
devDependencies: {
|
|
414
|
+
"@types/bun": "1.3.10"
|
|
415
|
+
}
|
|
416
|
+
}, null, 2) + `
|
|
417
|
+
`);
|
|
418
|
+
}
|
|
419
|
+
async function createTemplateProject(dir, name, template) {
|
|
420
|
+
const definition = TEMPLATE_DEFINITIONS[template];
|
|
421
|
+
await copyTemplateTree(definition.sourceDir, dir);
|
|
422
|
+
await writeFile(join(dir, "README.md"), generateTemplateReadme(name, template));
|
|
423
|
+
if (template !== "workspace-monorepo") {
|
|
424
|
+
await writeFile(join(dir, ".gitignore"), GITIGNORE);
|
|
425
|
+
await normalizeSinglePackageManifest(join(dir, "package.json"), normalizePackageName(name));
|
|
426
|
+
}
|
|
427
|
+
if (definition.postCreate)
|
|
428
|
+
await definition.postCreate(dir, name);
|
|
429
|
+
}
|
|
430
|
+
function generateReadme(name) {
|
|
431
|
+
return `# ${name}
|
|
432
|
+
|
|
433
|
+
Built with Gorsee.js \u2014 AI-first reactive full-stack TypeScript framework.
|
|
434
|
+
|
|
435
|
+
This project inherits Gorsee's product model:
|
|
436
|
+
|
|
437
|
+
- deterministic collaboration between humans and coding agents
|
|
438
|
+
- strict client/server boundaries
|
|
439
|
+
- reactive runtime without VDOM baggage
|
|
440
|
+
- security and deploy behavior treated as framework contracts
|
|
441
|
+
|
|
442
|
+
Treat this app as a product codebase, not as a disposable scaffold.
|
|
443
|
+
|
|
444
|
+
## Getting Started
|
|
445
|
+
|
|
446
|
+
\`\`\`bash
|
|
447
|
+
bun install
|
|
448
|
+
bun run dev
|
|
449
|
+
\`\`\`
|
|
450
|
+
|
|
451
|
+
Open [http://localhost:3000](http://localhost:3000).
|
|
452
|
+
|
|
453
|
+
## Reproducibility
|
|
454
|
+
|
|
455
|
+
- Keep \`bun.lock\` in version control after the first \`bun install\`.
|
|
456
|
+
- Use \`bun install --frozen-lockfile\` in CI and deploy automation once the lockfile exists.
|
|
457
|
+
|
|
458
|
+
## Choose Your App Class
|
|
459
|
+
|
|
460
|
+
- Secure SaaS App
|
|
461
|
+
- Content / Marketing Site
|
|
462
|
+
- Agent-Aware Internal Tool
|
|
463
|
+
- Workspace / Monorepo App
|
|
464
|
+
|
|
465
|
+
Use the Gorsee docs to pick one clear path before expanding architecture.
|
|
466
|
+
|
|
467
|
+
## Commands
|
|
468
|
+
|
|
469
|
+
| Command | Description |
|
|
470
|
+
|---------|-------------|
|
|
471
|
+
| \`bun run dev\` | Start dev server with HMR |
|
|
472
|
+
| \`bun run build\` | Production build |
|
|
473
|
+
| \`bun run start\` | Start production server |
|
|
474
|
+
| \`bun run check\` | Type check + safety audit |
|
|
475
|
+
| \`bunx gorsee ai doctor\` | Summarize AI diagnostics and incidents |
|
|
476
|
+
| \`bunx gorsee ai tail --limit 20\` | Inspect recent structured AI events |
|
|
477
|
+
| \`bunx gorsee ai export --format markdown\` | Generate a compact AI context packet |
|
|
478
|
+
| \`bunx gorsee ai export --bundle --format markdown\` | Generate an AI packet with focused code snippets |
|
|
479
|
+
| \`bunx gorsee ai ide-sync\` | Write IDE-friendly diagnostics/events/context files |
|
|
480
|
+
| \`bunx gorsee routes\` | Show route table |
|
|
481
|
+
| \`bunx gorsee generate <entity>\` | CRUD scaffold |
|
|
482
|
+
| \`bunx gorsee typegen\` | Generate typed routes |
|
|
483
|
+
| \`bunx gorsee migrate\` | Run DB migrations |
|
|
484
|
+
|
|
485
|
+
## Import Boundaries
|
|
486
|
+
|
|
487
|
+
- Use \`gorsee/client\` for route components, islands, links, forms, and reactive primitives.
|
|
488
|
+
- Use \`gorsee/server\` for \`load\`, \`action\`, middleware, cache, RPC, and route execution.
|
|
489
|
+
- Use scoped entrypoints such as \`gorsee/auth\`, \`gorsee/db\`, \`gorsee/security\`, \`gorsee/env\`, and \`gorsee/log\` when the concern is domain-specific.
|
|
490
|
+
- Do not use root \`gorsee\` in new code. It exists only as a compatibility entrypoint.
|
|
491
|
+
|
|
492
|
+
## Security Notes
|
|
493
|
+
|
|
494
|
+
- \`routeCache()\` varies by \`Cookie\` and \`Authorization\` by default. Disable that only for explicitly public responses.
|
|
495
|
+
- \`/api/_rpc/*\` is a separate boundary. Protect it through \`security.rpc.middlewares\` in \`app.config.ts\` or via programmatic server options.
|
|
496
|
+
- Replace any \`APP_ORIGIN\` placeholders in deploy configs before shipping. \`gorsee check --strict\` flags placeholder origins and floating runtime dependency versions.
|
|
497
|
+
|
|
498
|
+
## AI Notes
|
|
499
|
+
|
|
500
|
+
- AI observability is opt-in. Enable \`ai.enabled\` in \`app.config.ts\` when you want machine-readable runtime/build/check events.
|
|
501
|
+
- The default local sink is \`.gorsee/ai-events.jsonl\`. This is the stable source for agents, IDE tooling, and later summarization.
|
|
502
|
+
- Versioned AI packet, IDE projection, and session-pack expectations are documented in \`docs/AI_ARTIFACT_CONTRACT.md\` in the Gorsee repository.
|
|
503
|
+
- \`ai.bridge.url\` is optional. Use it only for a trusted local IDE/agent bridge; bridge failures never block the main app.
|
|
504
|
+
- \`bunx gorsee ai mcp\` starts a local stdio MCP server over the same AI state, so agents can read diagnostics without scraping logs.
|
|
505
|
+
- \`bunx gorsee ai doctor\` groups repeated failures into incident clusters so you can distinguish one-off errors from systemic regressions.
|
|
506
|
+
- \`bunx gorsee ai ide-sync\` writes \`.gorsee/ide/diagnostics.json\`, \`.gorsee/ide/events.json\`, and \`.gorsee/ide/context.md\` for editor integrations.
|
|
507
|
+
- \`bunx gorsee ai ide-sync --watch\` keeps those files fresh for live IDE diagnostics.
|
|
508
|
+
- \`bunx gorsee ai pack\` writes the latest agent-ready session pack to \`.gorsee/agent/latest.{json,md}\`.
|
|
509
|
+
- \`bun run ai:package:vscode\` stages and packages the VS Code/Cursor extension consumer.
|
|
510
|
+
- \`bun run release:extension\` emits a version-locked VSIX artifact for editor release/distribution.
|
|
511
|
+
|
|
512
|
+
## Project Structure
|
|
513
|
+
|
|
514
|
+
\`\`\`
|
|
515
|
+
routes/ \u2192 pages and API routes (file-based routing)
|
|
516
|
+
index.tsx \u2192 /
|
|
517
|
+
about.tsx \u2192 /about
|
|
518
|
+
api/health.ts \u2192 /api/health (JSON API)
|
|
519
|
+
_layout.tsx \u2192 wraps all pages
|
|
520
|
+
_error.tsx \u2192 error boundary
|
|
521
|
+
404.tsx \u2192 custom 404
|
|
522
|
+
shared/ \u2192 shared modules (imported by routes)
|
|
523
|
+
middleware/ \u2192 global middleware
|
|
524
|
+
migrations/ \u2192 SQL migration files
|
|
525
|
+
public/ \u2192 static assets (served as-is)
|
|
526
|
+
\`\`\`
|
|
527
|
+
|
|
528
|
+
## Learn More
|
|
529
|
+
|
|
530
|
+
See \`FRAMEWORK.md\` for the full API reference (AI-friendly).
|
|
531
|
+
|
|
532
|
+
Use \`docs/CANONICAL_RECIPES.md\` in the Gorsee repository when you want the recommended production path for SaaS apps, content sites, internal tools, or workspace-based apps.
|
|
533
|
+
|
|
534
|
+
For common runtime/setup mistakes, also use \`docs/RUNTIME_FAILURES.md\`, \`docs/RUNTIME_TRIAGE.md\`, \`docs/CACHE_INVALIDATION.md\`, and \`docs/STARTER_FAILURES.md\` in the Gorsee repository.
|
|
535
|
+
|
|
536
|
+
For AI-first team workflows, also use \`docs/AI_WORKFLOWS.md\`, \`docs/AI_IDE_SYNC_WORKFLOW.md\`, \`docs/AI_MCP_WORKFLOW.md\`, \`docs/AI_BRIDGE_WORKFLOW.md\`, \`docs/AI_SESSION_PACKS.md\`, and \`docs/AI_DEBUGGING_WORKFLOWS.md\` in the Gorsee repository.
|
|
537
|
+
|
|
538
|
+
For adoption and rollout guidance, also use \`docs/STARTER_ONBOARDING.md\`, \`docs/MIGRATION_GUIDE.md\`, \`docs/UPGRADE_PLAYBOOK.md\`, \`docs/DEPLOY_TARGET_GUIDE.md\`, \`docs/FIRST_PRODUCTION_ROLLOUT.md\`, \`docs/AUTH_CACHE_DATA_PATHS.md\`, \`docs/RECIPE_BOUNDARIES.md\`, \`docs/WORKSPACE_ADOPTION.md\`, and \`docs/TEAM_FAILURES.md\` in the Gorsee repository.
|
|
539
|
+
`;
|
|
540
|
+
}
|
|
541
|
+
export async function createProject(args, options = {}) {
|
|
542
|
+
const { name, template } = parseCreateArgs(args), { cwd } = createProjectContext(options), dir = join(cwd, name), location = relative(cwd, dir) || name;
|
|
543
|
+
console.log(`
|
|
544
|
+
Creating ${name} (${template})...
|
|
545
|
+
`);
|
|
546
|
+
await mkdir(dir, { recursive: !0 });
|
|
547
|
+
if (template === "basic")
|
|
548
|
+
await createBasicProject(dir, name);
|
|
549
|
+
else
|
|
550
|
+
await createTemplateProject(dir, name, template);
|
|
551
|
+
const frameworkMD = generateFrameworkMD(name);
|
|
552
|
+
await writeFile(join(dir, "FRAMEWORK.md"), frameworkMD);
|
|
553
|
+
console.log(" Created:");
|
|
554
|
+
if (template === "basic") {
|
|
555
|
+
console.log(" routes/index.tsx home page with counter");
|
|
556
|
+
console.log(" routes/about.tsx about page");
|
|
557
|
+
console.log(" routes/_layout.tsx root layout (header + footer)");
|
|
558
|
+
console.log(" routes/_error.tsx error boundary");
|
|
559
|
+
console.log(" routes/404.tsx custom 404");
|
|
560
|
+
console.log(" routes/api/health.ts health check API");
|
|
561
|
+
console.log(" public/styles.css default styles");
|
|
562
|
+
console.log(" app.config.ts configuration");
|
|
563
|
+
console.log(" .env / .env.example environment variables");
|
|
564
|
+
console.log(" README.md project readme");
|
|
565
|
+
console.log(" FRAMEWORK.md AI context file");
|
|
566
|
+
console.log(" tsconfig.json");
|
|
567
|
+
console.log(" package.json");
|
|
568
|
+
} else if (template === "workspace-monorepo") {
|
|
569
|
+
console.log(" apps/web Gorsee app package");
|
|
570
|
+
console.log(" packages/shared shared workspace package");
|
|
571
|
+
console.log(" package.json workspace root");
|
|
572
|
+
console.log(" README.md template guide");
|
|
573
|
+
console.log(" FRAMEWORK.md AI context file");
|
|
574
|
+
} else {
|
|
575
|
+
console.log(` template source examples/${template}`);
|
|
576
|
+
console.log(" routes/ first-party starter routes");
|
|
577
|
+
console.log(" app.config.ts template configuration");
|
|
578
|
+
console.log(" package.json normalized package surface");
|
|
579
|
+
console.log(" README.md template guide");
|
|
580
|
+
console.log(" FRAMEWORK.md AI context file");
|
|
581
|
+
}
|
|
582
|
+
console.log();
|
|
583
|
+
console.log(" Next steps:");
|
|
584
|
+
console.log();
|
|
585
|
+
console.log(` cd ${location}`);
|
|
586
|
+
if (template === "workspace-monorepo") {
|
|
587
|
+
console.log(" bun install");
|
|
588
|
+
console.log(" cd apps/web");
|
|
589
|
+
console.log(" bun run dev");
|
|
590
|
+
} else {
|
|
591
|
+
console.log(" bun install");
|
|
592
|
+
console.log(" bun run dev");
|
|
593
|
+
}
|
|
594
|
+
console.log();
|
|
595
|
+
console.log(" Then open http://localhost:3000");
|
|
596
|
+
console.log();
|
|
597
|
+
}
|
|
598
|
+
export async function runCreate(args, options = {}) {
|
|
599
|
+
return createProject(args, options);
|
|
600
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type RuntimeOptions } from "../runtime/project.js";
|
|
2
|
+
export interface DeployCommandOptions extends RuntimeOptions {
|
|
3
|
+
}
|
|
4
|
+
export declare function generateDeployConfig(args: string[], options?: DeployCommandOptions): Promise<void>;
|
|
5
|
+
/** @deprecated Use generateDeployConfig() for programmatic access. */
|
|
6
|
+
export declare function runDeploy(args: string[], options?: DeployCommandOptions): Promise<void>;
|