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,287 @@
|
|
|
1
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
2
|
+
import { extname, join, relative } from "node:path";
|
|
3
|
+
export function parseFrontmatter(source) {
|
|
4
|
+
if (!source.startsWith(`---
|
|
5
|
+
`))
|
|
6
|
+
return { frontmatter: {}, body: source };
|
|
7
|
+
const end = source.indexOf(`
|
|
8
|
+
---
|
|
9
|
+
`, 4);
|
|
10
|
+
if (end === -1)
|
|
11
|
+
return { frontmatter: {}, body: source };
|
|
12
|
+
const rawFrontmatter = source.slice(4, end), body = source.slice(end + 5), lines = rawFrontmatter.split(`
|
|
13
|
+
`), { value } = parseObjectBlock(lines, 0, 0);
|
|
14
|
+
return { frontmatter: value, body };
|
|
15
|
+
}
|
|
16
|
+
export function extractExcerpt(body, maxLength = 180) {
|
|
17
|
+
const clean = body.replace(/^#+\s+/gm, "").replace(/\[(.*?)\]\((.*?)\)/g, "$1").replace(/[*_`>#-]/g, "").replace(/\s+/g, " ").trim();
|
|
18
|
+
if (clean.length <= maxLength)
|
|
19
|
+
return clean;
|
|
20
|
+
return `${clean.slice(0, maxLength).trimEnd()}...`;
|
|
21
|
+
}
|
|
22
|
+
function inferSlug(filePath) {
|
|
23
|
+
return filePath.replace(/\.[^.]+$/, "").replace(/\.([a-z]{2}(?:-[A-Z]{2})?)$/, "").replace(/\/index$/, "").replace(/\\/g, "/");
|
|
24
|
+
}
|
|
25
|
+
function inferLocale(frontmatter, slug, defaultLocale) {
|
|
26
|
+
if (typeof frontmatter.locale === "string")
|
|
27
|
+
return frontmatter.locale;
|
|
28
|
+
const firstSegment = slug.split("/")[0] ?? "";
|
|
29
|
+
if (/^[a-z]{2}(-[A-Z]{2})?$/.test(firstSegment))
|
|
30
|
+
return firstSegment;
|
|
31
|
+
return defaultLocale ? defaultLocale : null;
|
|
32
|
+
}
|
|
33
|
+
async function collectFiles(root, dir = root) {
|
|
34
|
+
const entries = await readdir(dir, { withFileTypes: !0 }).catch(() => []), files = [];
|
|
35
|
+
for (const entry of entries) {
|
|
36
|
+
const fullPath = join(dir, entry.name);
|
|
37
|
+
if (entry.isDirectory()) {
|
|
38
|
+
files.push(...await collectFiles(root, fullPath));
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
files.push(fullPath);
|
|
42
|
+
}
|
|
43
|
+
return files;
|
|
44
|
+
}
|
|
45
|
+
export async function loadContentCollection(options) {
|
|
46
|
+
const includeExtensions = options.includeExtensions ?? [".md", ".mdx"], defaultLocale = options.defaultLocale ?? "en", files = (await collectFiles(options.dir)).filter((file) => includeExtensions.includes(extname(file))), entries = [];
|
|
47
|
+
for (const file of files) {
|
|
48
|
+
const source = await readFile(file, "utf-8"), parsed = parseFrontmatter(source), id = relative(options.dir, file).replace(/\\/g, "/"), slug = inferSlug(id), locale = inferLocale(parsed.frontmatter, slug, defaultLocale), baseEntry = {
|
|
49
|
+
id,
|
|
50
|
+
slug,
|
|
51
|
+
locale,
|
|
52
|
+
body: parsed.body,
|
|
53
|
+
excerpt: extractExcerpt(parsed.body),
|
|
54
|
+
sourcePath: file
|
|
55
|
+
}, frontmatter = options.validate ? options.validate(parsed.frontmatter, baseEntry) : parsed.frontmatter;
|
|
56
|
+
entries.push({ ...baseEntry, frontmatter });
|
|
57
|
+
}
|
|
58
|
+
return entries;
|
|
59
|
+
}
|
|
60
|
+
export function queryContent(entries, options = {}) {
|
|
61
|
+
const sorted = [...options.locale ? entries.filter((entry) => entry.locale === options.locale) : [...entries]];
|
|
62
|
+
switch (options.sortBy) {
|
|
63
|
+
case "date-asc":
|
|
64
|
+
sorted.sort((a, b) => String(a.frontmatter.date ?? "").localeCompare(String(b.frontmatter.date ?? "")));
|
|
65
|
+
break;
|
|
66
|
+
case "date-desc":
|
|
67
|
+
sorted.sort((a, b) => String(b.frontmatter.date ?? "").localeCompare(String(a.frontmatter.date ?? "")));
|
|
68
|
+
break;
|
|
69
|
+
case "title-asc":
|
|
70
|
+
sorted.sort((a, b) => String(a.frontmatter.title ?? "").localeCompare(String(b.frontmatter.title ?? "")));
|
|
71
|
+
break;
|
|
72
|
+
case "title-desc":
|
|
73
|
+
sorted.sort((a, b) => String(b.frontmatter.title ?? "").localeCompare(String(a.frontmatter.title ?? "")));
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
return sorted;
|
|
77
|
+
}
|
|
78
|
+
export function getContentEntryBySlug(entries, slug, locale) {
|
|
79
|
+
return entries.find((entry) => entry.slug === slug && (locale ? entry.locale === locale : !0)) ?? null;
|
|
80
|
+
}
|
|
81
|
+
function parseObjectBlock(lines, startIndex, indent) {
|
|
82
|
+
const result = {};
|
|
83
|
+
let index = startIndex;
|
|
84
|
+
while (index < lines.length) {
|
|
85
|
+
const line = lines[index] ?? "";
|
|
86
|
+
if (!line.trim() || line.trimStart().startsWith("#")) {
|
|
87
|
+
index += 1;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const lineIndent = countIndent(line);
|
|
91
|
+
if (lineIndent < indent)
|
|
92
|
+
break;
|
|
93
|
+
if (lineIndent > indent) {
|
|
94
|
+
index += 1;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const content = line.slice(indent);
|
|
98
|
+
if (content.startsWith("- "))
|
|
99
|
+
break;
|
|
100
|
+
const separator = content.indexOf(":");
|
|
101
|
+
if (separator === -1) {
|
|
102
|
+
index += 1;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const key = content.slice(0, separator).trim(), rawValue = content.slice(separator + 1).trim();
|
|
106
|
+
if (!key) {
|
|
107
|
+
index += 1;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (rawValue === "|" || rawValue === ">") {
|
|
111
|
+
const block = parseBlockScalar(lines, index + 1, indent, rawValue);
|
|
112
|
+
result[key] = block.value;
|
|
113
|
+
index = block.nextIndex;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (rawValue) {
|
|
117
|
+
result[key] = parseScalar(rawValue);
|
|
118
|
+
index += 1;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const next = findNextMeaningfulLine(lines, index + 1);
|
|
122
|
+
if (!next || next.indent <= indent) {
|
|
123
|
+
result[key] = null;
|
|
124
|
+
index += 1;
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (next.content.startsWith("- ")) {
|
|
128
|
+
const sequence = parseArrayBlock(lines, next.index, next.indent);
|
|
129
|
+
result[key] = sequence.value;
|
|
130
|
+
index = sequence.nextIndex;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
const object = parseObjectBlock(lines, next.index, next.indent);
|
|
134
|
+
result[key] = object.value;
|
|
135
|
+
index = object.nextIndex;
|
|
136
|
+
}
|
|
137
|
+
return { value: result, nextIndex: index };
|
|
138
|
+
}
|
|
139
|
+
function parseArrayBlock(lines, startIndex, indent) {
|
|
140
|
+
const result = [];
|
|
141
|
+
let index = startIndex;
|
|
142
|
+
while (index < lines.length) {
|
|
143
|
+
const line = lines[index] ?? "";
|
|
144
|
+
if (!line.trim() || line.trimStart().startsWith("#")) {
|
|
145
|
+
index += 1;
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const lineIndent = countIndent(line);
|
|
149
|
+
if (lineIndent < indent)
|
|
150
|
+
break;
|
|
151
|
+
if (lineIndent !== indent) {
|
|
152
|
+
index += 1;
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
const content = line.slice(indent);
|
|
156
|
+
if (!content.startsWith("- "))
|
|
157
|
+
break;
|
|
158
|
+
const itemContent = content.slice(2).trim();
|
|
159
|
+
if (!itemContent) {
|
|
160
|
+
const next = findNextMeaningfulLine(lines, index + 1);
|
|
161
|
+
if (!next || next.indent <= indent) {
|
|
162
|
+
result.push(null);
|
|
163
|
+
index += 1;
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
if (next.content.startsWith("- ")) {
|
|
167
|
+
const nestedArray = parseArrayBlock(lines, next.index, next.indent);
|
|
168
|
+
result.push(nestedArray.value);
|
|
169
|
+
index = nestedArray.nextIndex;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
const nestedObject = parseObjectBlock(lines, next.index, next.indent);
|
|
173
|
+
result.push(nestedObject.value);
|
|
174
|
+
index = nestedObject.nextIndex;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
if (itemContent === "|" || itemContent === ">") {
|
|
178
|
+
const block = parseBlockScalar(lines, index + 1, indent, itemContent);
|
|
179
|
+
result.push(block.value);
|
|
180
|
+
index = block.nextIndex;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (looksLikeInlineMapping(itemContent)) {
|
|
184
|
+
const separator = itemContent.indexOf(":"), key = itemContent.slice(0, separator).trim(), rawValue = itemContent.slice(separator + 1).trim(), item = {
|
|
185
|
+
[key]: rawValue ? parseScalar(rawValue) : null
|
|
186
|
+
}, next = findNextMeaningfulLine(lines, index + 1);
|
|
187
|
+
if (next && next.indent > indent && !next.content.startsWith("- ")) {
|
|
188
|
+
const nested = parseObjectBlock(lines, next.index, next.indent);
|
|
189
|
+
Object.assign(item, nested.value);
|
|
190
|
+
result.push(item);
|
|
191
|
+
index = nested.nextIndex;
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
result.push(item);
|
|
195
|
+
index += 1;
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
result.push(parseScalar(itemContent));
|
|
199
|
+
index += 1;
|
|
200
|
+
}
|
|
201
|
+
return { value: result, nextIndex: index };
|
|
202
|
+
}
|
|
203
|
+
function parseBlockScalar(lines, startIndex, parentIndent, mode) {
|
|
204
|
+
const first = findNextMeaningfulLine(lines, startIndex);
|
|
205
|
+
if (!first || first.indent <= parentIndent)
|
|
206
|
+
return { value: "", nextIndex: startIndex };
|
|
207
|
+
const blockIndent = first.indent, values = [];
|
|
208
|
+
let index = startIndex;
|
|
209
|
+
while (index < lines.length) {
|
|
210
|
+
const line = lines[index] ?? "";
|
|
211
|
+
if (!line.trim()) {
|
|
212
|
+
values.push("");
|
|
213
|
+
index += 1;
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
if (countIndent(line) < blockIndent)
|
|
217
|
+
break;
|
|
218
|
+
values.push(line.slice(blockIndent));
|
|
219
|
+
index += 1;
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
value: mode === "|" ? values.join(`
|
|
223
|
+
`).trimEnd() : foldBlockScalar(values),
|
|
224
|
+
nextIndex: index
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function foldBlockScalar(lines) {
|
|
228
|
+
const paragraphs = [];
|
|
229
|
+
let current = "";
|
|
230
|
+
for (const line of lines) {
|
|
231
|
+
if (!line.trim()) {
|
|
232
|
+
if (current) {
|
|
233
|
+
paragraphs.push(current.trim());
|
|
234
|
+
current = "";
|
|
235
|
+
}
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
current = current ? `${current} ${line.trim()}` : line.trim();
|
|
239
|
+
}
|
|
240
|
+
if (current)
|
|
241
|
+
paragraphs.push(current.trim());
|
|
242
|
+
return paragraphs.join(`
|
|
243
|
+
|
|
244
|
+
`);
|
|
245
|
+
}
|
|
246
|
+
function parseScalar(rawValue) {
|
|
247
|
+
const value = rawValue.trim();
|
|
248
|
+
if (!value)
|
|
249
|
+
return "";
|
|
250
|
+
if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'"))
|
|
251
|
+
return value.slice(1, -1);
|
|
252
|
+
if (value === "true")
|
|
253
|
+
return !0;
|
|
254
|
+
if (value === "false")
|
|
255
|
+
return !1;
|
|
256
|
+
if (value === "null")
|
|
257
|
+
return null;
|
|
258
|
+
if (/^-?\d+(\.\d+)?$/.test(value))
|
|
259
|
+
return Number(value);
|
|
260
|
+
if (value.startsWith("[") && value.endsWith("]")) {
|
|
261
|
+
const inner = value.slice(1, -1).trim();
|
|
262
|
+
if (!inner)
|
|
263
|
+
return [];
|
|
264
|
+
return inner.split(",").map((item) => parseScalar(item)).filter((item) => item !== "");
|
|
265
|
+
}
|
|
266
|
+
return value;
|
|
267
|
+
}
|
|
268
|
+
function countIndent(line) {
|
|
269
|
+
return line.length - line.trimStart().length;
|
|
270
|
+
}
|
|
271
|
+
function findNextMeaningfulLine(lines, startIndex) {
|
|
272
|
+
for (let index = startIndex;index < lines.length; index += 1) {
|
|
273
|
+
const line = lines[index] ?? "";
|
|
274
|
+
if (!line.trim() || line.trimStart().startsWith("#"))
|
|
275
|
+
continue;
|
|
276
|
+
const indent = countIndent(line);
|
|
277
|
+
return {
|
|
278
|
+
index,
|
|
279
|
+
indent,
|
|
280
|
+
content: line.slice(indent)
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
285
|
+
function looksLikeInlineMapping(value) {
|
|
286
|
+
return value.indexOf(":") > 0 && !value.startsWith("http://") && !value.startsWith("https://");
|
|
287
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { createDB, type DB } from "./sqlite.js";
|
|
2
|
+
export { createPostgresDB, toPostgresSQL, type PostgresDB, type PostgresClientLike, type PostgresConnectionLike, type PostgresPoolLike, type PostgresQueryResult, } from "./postgres.js";
|
|
3
|
+
export { runMigrations, createMigration, type MigrationResult } from "./migrate.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface MigrationResult {
|
|
2
|
+
applied: string[];
|
|
3
|
+
skipped: string[];
|
|
4
|
+
errors: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare function runMigrations(dbPath: string, migrationsDir: string): Promise<MigrationResult>;
|
|
7
|
+
export declare function createMigration(migrationsDir: string, name: string): Promise<string>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Database } from "bun:sqlite";
|
|
2
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
3
|
+
import { join, extname } from "node:path";
|
|
4
|
+
export async function runMigrations(dbPath, migrationsDir) {
|
|
5
|
+
const db = new Database(dbPath);
|
|
6
|
+
db.run("PRAGMA journal_mode=WAL;");
|
|
7
|
+
db.run(`CREATE TABLE IF NOT EXISTS _migrations (
|
|
8
|
+
name TEXT PRIMARY KEY,
|
|
9
|
+
applied_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
10
|
+
)`);
|
|
11
|
+
const applied = new Set(db.query("SELECT name FROM _migrations ORDER BY name").all().map((r) => r.name));
|
|
12
|
+
let files;
|
|
13
|
+
try {
|
|
14
|
+
files = await readdir(migrationsDir);
|
|
15
|
+
} catch {
|
|
16
|
+
db.close();
|
|
17
|
+
return { applied: [], skipped: [], errors: ["migrations/ directory not found"] };
|
|
18
|
+
}
|
|
19
|
+
const sqlFiles = files.filter((f) => extname(f) === ".sql").sort(), result = { applied: [], skipped: [], errors: [] };
|
|
20
|
+
for (const file of sqlFiles) {
|
|
21
|
+
if (applied.has(file)) {
|
|
22
|
+
result.skipped.push(file);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const sql = await readFile(join(migrationsDir, file), "utf-8");
|
|
27
|
+
db.run("BEGIN");
|
|
28
|
+
try {
|
|
29
|
+
db.run(sql);
|
|
30
|
+
db.run("INSERT INTO _migrations (name) VALUES (?)", [file]);
|
|
31
|
+
db.run("COMMIT");
|
|
32
|
+
result.applied.push(file);
|
|
33
|
+
} catch (err) {
|
|
34
|
+
db.run("ROLLBACK");
|
|
35
|
+
throw err;
|
|
36
|
+
}
|
|
37
|
+
} catch (err) {
|
|
38
|
+
result.errors.push(`${file}: ${err instanceof Error ? err.message : String(err)}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
db.close();
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
export async function createMigration(migrationsDir, name) {
|
|
45
|
+
const { mkdir, writeFile } = await import("node:fs/promises");
|
|
46
|
+
await mkdir(migrationsDir, { recursive: !0 });
|
|
47
|
+
const timestamp = new Date().toISOString().replace(/[-:T]/g, "").slice(0, 14), safeName = name.replace(/[^a-zA-Z0-9_-]/g, "_").toLowerCase(), filename = `${timestamp}_${safeName}.sql`, filepath = join(migrationsDir, filename);
|
|
48
|
+
await writeFile(filepath, `-- Migration: ${name}
|
|
49
|
+
-- Created: ${new Date().toISOString()}
|
|
50
|
+
|
|
51
|
+
`);
|
|
52
|
+
return filename;
|
|
53
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { SafeSQLValue } from "../types/safe-sql.js";
|
|
2
|
+
type Awaitable<T> = T | Promise<T>;
|
|
3
|
+
export interface PostgresQueryResult<Row = unknown> {
|
|
4
|
+
rows: Row[];
|
|
5
|
+
rowCount?: number | null;
|
|
6
|
+
}
|
|
7
|
+
export interface PostgresClientLike {
|
|
8
|
+
query<Row = unknown>(text: string, params?: readonly unknown[]): Awaitable<PostgresQueryResult<Row>>;
|
|
9
|
+
}
|
|
10
|
+
export interface PostgresConnectionLike extends PostgresClientLike {
|
|
11
|
+
release?(): Awaitable<void>;
|
|
12
|
+
}
|
|
13
|
+
export interface PostgresPoolLike extends PostgresClientLike {
|
|
14
|
+
connect?(): Promise<PostgresConnectionLike>;
|
|
15
|
+
}
|
|
16
|
+
export interface PostgresDB {
|
|
17
|
+
get<T>(query: SafeSQLValue): Promise<T | null>;
|
|
18
|
+
all<T>(query: SafeSQLValue): Promise<T[]>;
|
|
19
|
+
run(query: SafeSQLValue): Promise<{
|
|
20
|
+
changes: number;
|
|
21
|
+
}>;
|
|
22
|
+
transaction<T>(handler: (db: PostgresDB) => Promise<T>): Promise<T>;
|
|
23
|
+
}
|
|
24
|
+
export declare function toPostgresSQL(query: SafeSQLValue): {
|
|
25
|
+
text: string;
|
|
26
|
+
params: readonly unknown[];
|
|
27
|
+
};
|
|
28
|
+
export declare function createPostgresDB(client: PostgresPoolLike): PostgresDB;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export function toPostgresSQL(query) {
|
|
2
|
+
let index = 0;
|
|
3
|
+
return {
|
|
4
|
+
text: query.text.replace(/\?/g, () => `$${++index}`),
|
|
5
|
+
params: query.params
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
function createBoundPostgresDB(client, beginTransaction) {
|
|
9
|
+
return {
|
|
10
|
+
async get(query) {
|
|
11
|
+
const { text, params } = toPostgresSQL(query);
|
|
12
|
+
return (await client.query(text, params)).rows[0] ?? null;
|
|
13
|
+
},
|
|
14
|
+
async all(query) {
|
|
15
|
+
const { text, params } = toPostgresSQL(query);
|
|
16
|
+
return (await client.query(text, params)).rows;
|
|
17
|
+
},
|
|
18
|
+
async run(query) {
|
|
19
|
+
const { text, params } = toPostgresSQL(query);
|
|
20
|
+
return { changes: (await client.query(text, params)).rowCount ?? 0 };
|
|
21
|
+
},
|
|
22
|
+
async transaction(handler) {
|
|
23
|
+
if (!beginTransaction)
|
|
24
|
+
return handler(createBoundPostgresDB(client, !1));
|
|
25
|
+
await client.query("BEGIN");
|
|
26
|
+
try {
|
|
27
|
+
const result = await handler(createBoundPostgresDB(client, !1));
|
|
28
|
+
await client.query("COMMIT");
|
|
29
|
+
return result;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
await client.query("ROLLBACK");
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function createPostgresDB(client) {
|
|
38
|
+
return {
|
|
39
|
+
async get(query) {
|
|
40
|
+
return createBoundPostgresDB(client, !0).get(query);
|
|
41
|
+
},
|
|
42
|
+
async all(query) {
|
|
43
|
+
return createBoundPostgresDB(client, !0).all(query);
|
|
44
|
+
},
|
|
45
|
+
async run(query) {
|
|
46
|
+
return createBoundPostgresDB(client, !0).run(query);
|
|
47
|
+
},
|
|
48
|
+
async transaction(handler) {
|
|
49
|
+
if (!client.connect)
|
|
50
|
+
return createBoundPostgresDB(client, !0).transaction(handler);
|
|
51
|
+
const connection = await client.connect();
|
|
52
|
+
try {
|
|
53
|
+
return await createBoundPostgresDB(connection, !0).transaction(handler);
|
|
54
|
+
} finally {
|
|
55
|
+
await connection.release?.();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SafeSQLValue } from "../types/safe-sql.js";
|
|
2
|
+
export interface DB {
|
|
3
|
+
get<T>(query: SafeSQLValue): T | null;
|
|
4
|
+
all<T>(query: SafeSQLValue): T[];
|
|
5
|
+
run(query: SafeSQLValue): {
|
|
6
|
+
changes: number;
|
|
7
|
+
};
|
|
8
|
+
close(): void;
|
|
9
|
+
}
|
|
10
|
+
export declare function createDB(path?: string): DB;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Database } from "bun:sqlite";
|
|
2
|
+
function toBindings(params) {
|
|
3
|
+
return params;
|
|
4
|
+
}
|
|
5
|
+
export function createDB(path = ":memory:") {
|
|
6
|
+
const sqlite = new Database(path);
|
|
7
|
+
sqlite.run("PRAGMA journal_mode=WAL;");
|
|
8
|
+
return {
|
|
9
|
+
get(query) {
|
|
10
|
+
return sqlite.prepare(query.text).get(...toBindings(query.params));
|
|
11
|
+
},
|
|
12
|
+
all(query) {
|
|
13
|
+
return sqlite.prepare(query.text).all(...toBindings(query.params));
|
|
14
|
+
},
|
|
15
|
+
run(query) {
|
|
16
|
+
return { changes: sqlite.prepare(query.text).run(...toBindings(query.params)).changes ?? 0 };
|
|
17
|
+
},
|
|
18
|
+
close() {
|
|
19
|
+
sqlite.close();
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function generateWranglerConfig(name: string): string;
|
|
2
|
+
export declare function generateCloudflareEntry(): string;
|
|
3
|
+
export interface CloudflareRoutesConfig {
|
|
4
|
+
version: number;
|
|
5
|
+
include: string[];
|
|
6
|
+
exclude: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function generateCloudflareStaticAssets(): CloudflareRoutesConfig;
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const today = new Date().toISOString().split("T")[0]
|
|
5
|
-
|
|
6
|
-
return `# Gorsee.js — Cloudflare Workers configuration
|
|
1
|
+
export function generateWranglerConfig(name) {
|
|
2
|
+
const today = new Date().toISOString().split("T")[0];
|
|
3
|
+
return `# Gorsee.js \u2014 Cloudflare Workers configuration
|
|
7
4
|
# Auto-generated by \`gorsee deploy cloudflare\`
|
|
8
5
|
|
|
9
6
|
name = "${name}"
|
|
@@ -25,16 +22,16 @@ command = "bun run build"
|
|
|
25
22
|
# Environment variables
|
|
26
23
|
[vars]
|
|
27
24
|
NODE_ENV = "production"
|
|
25
|
+
APP_ORIGIN = "REPLACE_WITH_APP_ORIGIN"
|
|
28
26
|
|
|
29
27
|
# Production overrides
|
|
30
28
|
[env.production]
|
|
31
29
|
name = "${name}"
|
|
32
30
|
route = { pattern = "*", zone_name = "" }
|
|
33
|
-
|
|
31
|
+
`;
|
|
34
32
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return `// Gorsee.js — Cloudflare Worker entry
|
|
33
|
+
export function generateCloudflareEntry() {
|
|
34
|
+
return `// Gorsee.js \u2014 Cloudflare Worker entry
|
|
38
35
|
// Auto-generated by \`gorsee deploy cloudflare\`
|
|
39
36
|
|
|
40
37
|
export default {
|
|
@@ -44,11 +41,12 @@ export default {
|
|
|
44
41
|
ctx: ExecutionContext,
|
|
45
42
|
): Promise<Response> {
|
|
46
43
|
const url = new URL(request.url)
|
|
44
|
+
const appOrigin = (env.APP_ORIGIN as string | undefined) ?? url.origin
|
|
47
45
|
|
|
48
46
|
// Serve static client assets from KV/site
|
|
49
47
|
if (url.pathname.startsWith("/_gorsee/")) {
|
|
50
48
|
const assetPath = url.pathname.slice("/_gorsee/".length)
|
|
51
|
-
// @ts-expect-error
|
|
49
|
+
// @ts-expect-error \u2014 __STATIC_CONTENT is injected by Cloudflare
|
|
52
50
|
const asset = await (env.__STATIC_CONTENT as any)?.get(assetPath)
|
|
53
51
|
if (asset) {
|
|
54
52
|
return new Response(asset, {
|
|
@@ -63,7 +61,7 @@ export default {
|
|
|
63
61
|
// Serve public static files
|
|
64
62
|
const staticExts = [".css", ".ico", ".svg", ".png", ".jpg", ".woff2", ".txt"]
|
|
65
63
|
if (staticExts.some((ext) => url.pathname.endsWith(ext))) {
|
|
66
|
-
// @ts-expect-error
|
|
64
|
+
// @ts-expect-error \u2014 __STATIC_CONTENT is injected by Cloudflare
|
|
67
65
|
const asset = await (env.__STATIC_CONTENT as any)?.get(url.pathname.slice(1))
|
|
68
66
|
if (asset) {
|
|
69
67
|
return new Response(asset, {
|
|
@@ -75,23 +73,23 @@ export default {
|
|
|
75
73
|
// Forward all other requests to Gorsee server handler
|
|
76
74
|
// In production, this imports the built server bundle
|
|
77
75
|
try {
|
|
78
|
-
const
|
|
79
|
-
|
|
76
|
+
const rpcPolicy = {
|
|
77
|
+
// Wire auth/CSRF middleware here for privileged server() calls.
|
|
78
|
+
// The server handler should prefer app.config.ts security.rpc.middlewares
|
|
79
|
+
// when no explicit runtime policy is provided.
|
|
80
|
+
middlewares: [],
|
|
81
|
+
}
|
|
82
|
+
const { handleRequest } = await import("./dist/server-handler.js")
|
|
83
|
+
void appOrigin
|
|
84
|
+
return await handleRequest(request, env, { rpcPolicy })
|
|
80
85
|
} catch {
|
|
81
86
|
return new Response("Internal Server Error", { status: 500 })
|
|
82
87
|
}
|
|
83
88
|
},
|
|
84
89
|
}
|
|
85
|
-
|
|
90
|
+
`;
|
|
86
91
|
}
|
|
87
|
-
|
|
88
|
-
export interface CloudflareRoutesConfig {
|
|
89
|
-
version: number
|
|
90
|
-
include: string[]
|
|
91
|
-
exclude: string[]
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export function generateCloudflareStaticAssets(): CloudflareRoutesConfig {
|
|
92
|
+
export function generateCloudflareStaticAssets() {
|
|
95
93
|
return {
|
|
96
94
|
version: 1,
|
|
97
95
|
include: ["/*"],
|
|
@@ -103,7 +101,7 @@ export function generateCloudflareStaticAssets(): CloudflareRoutesConfig {
|
|
|
103
101
|
"/*.png",
|
|
104
102
|
"/*.jpg",
|
|
105
103
|
"/*.svg",
|
|
106
|
-
"/*.woff2"
|
|
107
|
-
]
|
|
108
|
-
}
|
|
104
|
+
"/*.woff2"
|
|
105
|
+
]
|
|
106
|
+
};
|
|
109
107
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface DeployArtifactConformanceInput {
|
|
2
|
+
name: string;
|
|
3
|
+
content: string;
|
|
4
|
+
requiredTokens: string[];
|
|
5
|
+
forbiddenTokens?: string[];
|
|
6
|
+
format?: "text" | "json" | "toml";
|
|
7
|
+
requiredPaths?: string[];
|
|
8
|
+
requiredValues?: Array<{
|
|
9
|
+
path: string;
|
|
10
|
+
value: string | number | boolean;
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
export interface DeployArtifactConformanceResult {
|
|
14
|
+
ok: boolean;
|
|
15
|
+
missing: string[];
|
|
16
|
+
forbidden: string[];
|
|
17
|
+
missingPaths: string[];
|
|
18
|
+
mismatchedValues: string[];
|
|
19
|
+
}
|
|
20
|
+
export declare function validateDeployArtifactConformance(input: DeployArtifactConformanceInput): DeployArtifactConformanceResult;
|
|
21
|
+
export declare function assertDeployArtifactConformance(input: DeployArtifactConformanceInput): void;
|