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,106 @@
|
|
|
1
|
+
const args = process.argv.slice(2), command = args[0], COMMANDS = {
|
|
2
|
+
create: "Create a new Gorsee.js project",
|
|
3
|
+
dev: "Start development server with HMR",
|
|
4
|
+
build: "Production build (client + server)",
|
|
5
|
+
start: "Start production server",
|
|
6
|
+
check: "Check project: types, safety, structure, optional canonical autofix",
|
|
7
|
+
routes: "List all routes with render modes",
|
|
8
|
+
migrate: "Run database migrations",
|
|
9
|
+
generate: "Generate CRUD scaffold for entity",
|
|
10
|
+
typegen: "Generate typed route definitions",
|
|
11
|
+
deploy: "Generate deploy config (vercel/fly/cloudflare/netlify/docker)",
|
|
12
|
+
test: "Run tests (unit/integration/e2e)",
|
|
13
|
+
docs: "Generate API documentation from routes",
|
|
14
|
+
ai: "AI-first tooling: tail, doctor, bridge, mcp",
|
|
15
|
+
upgrade: "Upgrade Gorsee.js with migration audit and canonical rewrites",
|
|
16
|
+
help: "Show this help message"
|
|
17
|
+
};
|
|
18
|
+
async function main() {
|
|
19
|
+
switch (command) {
|
|
20
|
+
case "create":
|
|
21
|
+
const { runCreate } = await import("./cmd-create.js");
|
|
22
|
+
await runCreate(args.slice(1));
|
|
23
|
+
break;
|
|
24
|
+
case "dev":
|
|
25
|
+
const { runDev } = await import("./cmd-dev.js");
|
|
26
|
+
await runDev(args.slice(1));
|
|
27
|
+
break;
|
|
28
|
+
case "build":
|
|
29
|
+
const { runBuild } = await import("./cmd-build.js");
|
|
30
|
+
await runBuild(args.slice(1));
|
|
31
|
+
break;
|
|
32
|
+
case "start":
|
|
33
|
+
const { runStart } = await import("./cmd-start.js");
|
|
34
|
+
await runStart(args.slice(1));
|
|
35
|
+
break;
|
|
36
|
+
case "check":
|
|
37
|
+
const { runCheck } = await import("./cmd-check.js");
|
|
38
|
+
await runCheck(args.slice(1));
|
|
39
|
+
break;
|
|
40
|
+
case "routes":
|
|
41
|
+
const { runRoutes } = await import("./cmd-routes.js");
|
|
42
|
+
await runRoutes(args.slice(1));
|
|
43
|
+
break;
|
|
44
|
+
case "migrate":
|
|
45
|
+
const { runMigrate } = await import("./cmd-migrate.js");
|
|
46
|
+
await runMigrate(args.slice(1));
|
|
47
|
+
break;
|
|
48
|
+
case "generate":
|
|
49
|
+
const { runGenerate } = await import("./cmd-generate.js");
|
|
50
|
+
await runGenerate(args.slice(1));
|
|
51
|
+
break;
|
|
52
|
+
case "typegen":
|
|
53
|
+
const { runTypegen } = await import("./cmd-typegen.js");
|
|
54
|
+
await runTypegen(args.slice(1));
|
|
55
|
+
break;
|
|
56
|
+
case "deploy":
|
|
57
|
+
const { runDeploy } = await import("./cmd-deploy.js");
|
|
58
|
+
await runDeploy(args.slice(1));
|
|
59
|
+
break;
|
|
60
|
+
case "test": {
|
|
61
|
+
const { runTest } = await import("./cmd-test.js");
|
|
62
|
+
await runTest(args.slice(1));
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case "docs": {
|
|
66
|
+
const { runDocs } = await import("./cmd-docs.js");
|
|
67
|
+
await runDocs(args.slice(1));
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case "ai": {
|
|
71
|
+
const { runAI } = await import("./cmd-ai.js");
|
|
72
|
+
await runAI(args.slice(1));
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
case "upgrade": {
|
|
76
|
+
const { runUpgrade } = await import("./cmd-upgrade.js");
|
|
77
|
+
await runUpgrade(args.slice(1));
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case "help":
|
|
81
|
+
case void 0:
|
|
82
|
+
case "--help":
|
|
83
|
+
case "-h":
|
|
84
|
+
printHelp();
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
console.error(`Unknown command: ${command}`);
|
|
88
|
+
printHelp();
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function printHelp() {
|
|
93
|
+
console.log(`
|
|
94
|
+
gorsee - Full-stack TypeScript framework
|
|
95
|
+
`);
|
|
96
|
+
console.log(` Usage: gorsee <command> [options]
|
|
97
|
+
`);
|
|
98
|
+
console.log(" Commands:");
|
|
99
|
+
for (const [cmd, desc] of Object.entries(COMMANDS))
|
|
100
|
+
console.log(` ${cmd.padEnd(12)} ${desc}`);
|
|
101
|
+
console.log();
|
|
102
|
+
}
|
|
103
|
+
main().catch((err) => {
|
|
104
|
+
console.error(err);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function planReleaseVersion(input, channel) {
|
|
2
|
+
const parsed = parseVersion(input);
|
|
3
|
+
switch (channel) {
|
|
4
|
+
case "stable":
|
|
5
|
+
return `${parsed.major}.${parsed.minor}.${parsed.patch}`;
|
|
6
|
+
case "canary":
|
|
7
|
+
if (parsed.pre?.tag === "canary")
|
|
8
|
+
return `${parsed.major}.${parsed.minor}.${parsed.patch}-canary.${parsed.pre.number + 1}`;
|
|
9
|
+
if (parsed.pre)
|
|
10
|
+
return `${parsed.major}.${parsed.minor}.${parsed.patch}-canary.0`;
|
|
11
|
+
return `${parsed.major}.${parsed.minor}.${parsed.patch + 1}-canary.0`;
|
|
12
|
+
case "rc":
|
|
13
|
+
if (parsed.pre?.tag === "rc")
|
|
14
|
+
return `${parsed.major}.${parsed.minor}.${parsed.patch}-rc.${parsed.pre.number + 1}`;
|
|
15
|
+
if (parsed.pre)
|
|
16
|
+
return `${parsed.major}.${parsed.minor}.${parsed.patch}-rc.0`;
|
|
17
|
+
return `${parsed.major}.${parsed.minor}.${parsed.patch + 1}-rc.0`;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function parseVersion(input) {
|
|
21
|
+
const match = input.match(/^(\d+)\.(\d+)\.(\d+)(?:-(canary|rc)\.(\d+))?$/);
|
|
22
|
+
if (!match)
|
|
23
|
+
throw Error(`unsupported version format: ${input}`);
|
|
24
|
+
return {
|
|
25
|
+
major: Number(match[1]),
|
|
26
|
+
minor: Number(match[2]),
|
|
27
|
+
patch: Number(match[3]),
|
|
28
|
+
pre: match[4] ? {
|
|
29
|
+
tag: match[4],
|
|
30
|
+
number: Number(match[5])
|
|
31
|
+
} : void 0
|
|
32
|
+
};
|
|
33
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { createSignal, createComputed, createEffect, createResource, createDataQuery, createDataMutation, createStore, createLive, invalidateResource, invalidateAll, createMutation, } from "./reactive/index.js";
|
|
2
|
+
export { Suspense } from "./runtime/suspense.js";
|
|
3
|
+
export { Link } from "./runtime/link.js";
|
|
4
|
+
export { Head } from "./runtime/head.js";
|
|
5
|
+
export { navigate, onNavigate, beforeNavigate, getCurrentPath } from "./runtime/router.js";
|
|
6
|
+
export { RUNTIME_DEVTOOLS_SCHEMA_VERSION, createRuntimeDevtoolsSnapshot, renderRuntimeDevtoolsHTML, renderRuntimeDevtoolsOverlay, type RuntimeDevtoolsOptions, type RuntimeDevtoolsRouteEntry, type RuntimeDevtoolsRouteSummary, type RuntimeDevtoolsSnapshot, type RuntimeDevtoolsSummary, type RuntimeDevtoolsTopNode, } from "./runtime/devtools.js";
|
|
7
|
+
export { useFormAction, type FormActionResult, type FormState, type FormSubmitOptions } from "./runtime/form.js";
|
|
8
|
+
export { Image, getImageProps, buildImageSrcSet, getImageCandidateWidths, isAllowedRemoteImage, defaultImageLoader, type ImageProps, type ImageLoader, type ImageLoaderParams, type ImageRuntimeConfig, type ImageRemotePattern, type ImageFormat, } from "./runtime/image.js";
|
|
9
|
+
export { ErrorBoundary } from "./runtime/error-boundary.js";
|
|
10
|
+
export { island } from "./runtime/island.js";
|
|
11
|
+
export { createEventSource, type EventSourceSignal } from "./runtime/event-source.js";
|
|
12
|
+
/** @deprecated Import from "gorsee/routes" when route contracts are the primary concern. */
|
|
13
|
+
export { typedLink, typedNavigate, typedPrefetch, resolveTypedRouteTarget, buildSearchParams, buildTypedPath, createTypedRoute, extractRouteParamKeys, type TypedRouteDefinition, type TypedRouteTarget, } from "./runtime/typed-routes.js";
|
|
14
|
+
/** @deprecated Import from "gorsee/forms" when form contracts are the primary concern. */
|
|
15
|
+
export { defineForm, validateForm, validateAction, toFieldErrors, fieldAttrs, type FormField, type FormSchema, type ValidationResult, type ActionValidationResult, type ValidationError, } from "./runtime/validated-form.js";
|
|
16
|
+
export { setupI18n, loadLocale, getLocale, getLocales, getDefaultLocale, getFallbackLocales, setLocale, t, plural, negotiateLocale, resolveLocaleFromPath, stripLocalePrefix, withLocalePath, buildHreflangLinks, formatNumber, formatDate, formatRelativeTime, type I18nConfig, type LocaleNegotiationInput, type LocaleNegotiationResult, } from "./i18n/index.js";
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export {
|
|
2
|
+
createSignal,
|
|
3
|
+
createComputed,
|
|
4
|
+
createEffect,
|
|
5
|
+
createResource,
|
|
6
|
+
createDataQuery,
|
|
7
|
+
createDataMutation,
|
|
8
|
+
createStore,
|
|
9
|
+
createLive,
|
|
10
|
+
invalidateResource,
|
|
11
|
+
invalidateAll,
|
|
12
|
+
createMutation
|
|
13
|
+
} from "./reactive/index.js";
|
|
14
|
+
export { Suspense } from "./runtime/suspense.js";
|
|
15
|
+
export { Link } from "./runtime/link.js";
|
|
16
|
+
export { Head } from "./runtime/head.js";
|
|
17
|
+
export { navigate, onNavigate, beforeNavigate, getCurrentPath } from "./runtime/router.js";
|
|
18
|
+
export {
|
|
19
|
+
RUNTIME_DEVTOOLS_SCHEMA_VERSION,
|
|
20
|
+
createRuntimeDevtoolsSnapshot,
|
|
21
|
+
renderRuntimeDevtoolsHTML,
|
|
22
|
+
renderRuntimeDevtoolsOverlay
|
|
23
|
+
} from "./runtime/devtools.js";
|
|
24
|
+
export { useFormAction } from "./runtime/form.js";
|
|
25
|
+
export {
|
|
26
|
+
Image,
|
|
27
|
+
getImageProps,
|
|
28
|
+
buildImageSrcSet,
|
|
29
|
+
getImageCandidateWidths,
|
|
30
|
+
isAllowedRemoteImage,
|
|
31
|
+
defaultImageLoader
|
|
32
|
+
} from "./runtime/image.js";
|
|
33
|
+
export { ErrorBoundary } from "./runtime/error-boundary.js";
|
|
34
|
+
export { island } from "./runtime/island.js";
|
|
35
|
+
export { createEventSource } from "./runtime/event-source.js";
|
|
36
|
+
export {
|
|
37
|
+
typedLink,
|
|
38
|
+
typedNavigate,
|
|
39
|
+
typedPrefetch,
|
|
40
|
+
resolveTypedRouteTarget,
|
|
41
|
+
buildSearchParams,
|
|
42
|
+
buildTypedPath,
|
|
43
|
+
createTypedRoute,
|
|
44
|
+
extractRouteParamKeys
|
|
45
|
+
} from "./runtime/typed-routes.js";
|
|
46
|
+
export {
|
|
47
|
+
defineForm,
|
|
48
|
+
validateForm,
|
|
49
|
+
validateAction,
|
|
50
|
+
toFieldErrors,
|
|
51
|
+
fieldAttrs
|
|
52
|
+
} from "./runtime/validated-form.js";
|
|
53
|
+
export {
|
|
54
|
+
setupI18n,
|
|
55
|
+
loadLocale,
|
|
56
|
+
getLocale,
|
|
57
|
+
getLocales,
|
|
58
|
+
getDefaultLocale,
|
|
59
|
+
getFallbackLocales,
|
|
60
|
+
setLocale,
|
|
61
|
+
t,
|
|
62
|
+
plural,
|
|
63
|
+
negotiateLocale,
|
|
64
|
+
resolveLocaleFromPath,
|
|
65
|
+
stripLocalePrefix,
|
|
66
|
+
withLocalePath,
|
|
67
|
+
buildHreflangLinks,
|
|
68
|
+
formatNumber,
|
|
69
|
+
formatDate,
|
|
70
|
+
formatRelativeTime
|
|
71
|
+
} from "./i18n/index.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./index.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./index.js";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface ModuleImportFact {
|
|
2
|
+
specifier: string;
|
|
3
|
+
names: string[];
|
|
4
|
+
namespace?: string;
|
|
5
|
+
hasDefaultImport: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface ModuleAnalysisFacts {
|
|
8
|
+
exportedNames: Set<string>;
|
|
9
|
+
hasDefaultExport: boolean;
|
|
10
|
+
title: string;
|
|
11
|
+
meta: Record<string, unknown> | null;
|
|
12
|
+
exportedLiterals: Record<string, unknown>;
|
|
13
|
+
imports: ModuleImportFact[];
|
|
14
|
+
sourceFile: unknown;
|
|
15
|
+
}
|
|
16
|
+
export interface ModuleAnalysisBackend {
|
|
17
|
+
name: string;
|
|
18
|
+
analyzeModuleSource(filePath: string, content: string): ModuleAnalysisFacts;
|
|
19
|
+
}
|
|
20
|
+
export declare function createTypeScriptModuleAnalysisBackend(): ModuleAnalysisBackend;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
const NON_LITERAL = Symbol("non-literal");
|
|
3
|
+
export function createTypeScriptModuleAnalysisBackend() {
|
|
4
|
+
return {
|
|
5
|
+
name: "typescript",
|
|
6
|
+
analyzeModuleSource(filePath, content) {
|
|
7
|
+
const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, !0, ts.ScriptKind.TSX);
|
|
8
|
+
return {
|
|
9
|
+
exportedNames: collectExportedNames(sourceFile),
|
|
10
|
+
hasDefaultExport: hasDefaultExport(sourceFile),
|
|
11
|
+
title: extractTitle(sourceFile, content),
|
|
12
|
+
meta: extractMeta(sourceFile),
|
|
13
|
+
exportedLiterals: collectExportedLiterals(sourceFile),
|
|
14
|
+
imports: collectImports(sourceFile),
|
|
15
|
+
sourceFile
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function collectExportedNames(sourceFile) {
|
|
21
|
+
const names = new Set;
|
|
22
|
+
for (const statement of sourceFile.statements) {
|
|
23
|
+
if (ts.isFunctionDeclaration(statement) && hasExportModifier(statement) && statement.name) {
|
|
24
|
+
names.add(statement.name.text);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (ts.isVariableStatement(statement) && hasExportModifier(statement)) {
|
|
28
|
+
for (const declaration of statement.declarationList.declarations)
|
|
29
|
+
if (ts.isIdentifier(declaration.name))
|
|
30
|
+
names.add(declaration.name.text);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return names;
|
|
34
|
+
}
|
|
35
|
+
function hasDefaultExport(sourceFile) {
|
|
36
|
+
for (const statement of sourceFile.statements) {
|
|
37
|
+
if (ts.isExportAssignment(statement) && !statement.isExportEquals)
|
|
38
|
+
return !0;
|
|
39
|
+
if (hasDefaultModifier(statement))
|
|
40
|
+
return !0;
|
|
41
|
+
}
|
|
42
|
+
return !1;
|
|
43
|
+
}
|
|
44
|
+
function collectImports(sourceFile) {
|
|
45
|
+
const imports = [];
|
|
46
|
+
for (const statement of sourceFile.statements) {
|
|
47
|
+
if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier))
|
|
48
|
+
continue;
|
|
49
|
+
const names = [];
|
|
50
|
+
let namespace, hasDefaultImport = !1;
|
|
51
|
+
const clause = statement.importClause;
|
|
52
|
+
if (clause?.name)
|
|
53
|
+
hasDefaultImport = !0;
|
|
54
|
+
if (clause?.namedBindings)
|
|
55
|
+
if (ts.isNamespaceImport(clause.namedBindings))
|
|
56
|
+
namespace = clause.namedBindings.name.text;
|
|
57
|
+
else
|
|
58
|
+
for (const element of clause.namedBindings.elements)
|
|
59
|
+
names.push(element.name.text);
|
|
60
|
+
imports.push({
|
|
61
|
+
specifier: statement.moduleSpecifier.text,
|
|
62
|
+
names,
|
|
63
|
+
namespace,
|
|
64
|
+
hasDefaultImport
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return imports;
|
|
68
|
+
}
|
|
69
|
+
function hasExportModifier(node) {
|
|
70
|
+
if (!ts.canHaveModifiers(node))
|
|
71
|
+
return !1;
|
|
72
|
+
return ts.getModifiers(node)?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) ?? !1;
|
|
73
|
+
}
|
|
74
|
+
function hasDefaultModifier(node) {
|
|
75
|
+
if (!ts.canHaveModifiers(node))
|
|
76
|
+
return !1;
|
|
77
|
+
return ts.getModifiers(node)?.some((modifier) => modifier.kind === ts.SyntaxKind.DefaultKeyword) ?? !1;
|
|
78
|
+
}
|
|
79
|
+
function extractTitle(sourceFile, content) {
|
|
80
|
+
for (const statement of sourceFile.statements) {
|
|
81
|
+
const comment = getLeadingJSDocText(statement, content);
|
|
82
|
+
if (comment)
|
|
83
|
+
return comment;
|
|
84
|
+
}
|
|
85
|
+
return "";
|
|
86
|
+
}
|
|
87
|
+
function getLeadingJSDocText(node, content) {
|
|
88
|
+
const ranges = ts.getLeadingCommentRanges(content, node.getFullStart()) ?? [];
|
|
89
|
+
for (const range of ranges) {
|
|
90
|
+
const text = content.slice(range.pos, range.end);
|
|
91
|
+
if (!text.startsWith("/**"))
|
|
92
|
+
continue;
|
|
93
|
+
const normalized = text.replace(/^\/\*\*/, "").replace(/\*\/$/, "").split(`
|
|
94
|
+
`).map((line) => line.replace(/^\s*\*\s?/, "").trim()).filter(Boolean);
|
|
95
|
+
if (normalized.length > 0)
|
|
96
|
+
return normalized[0];
|
|
97
|
+
}
|
|
98
|
+
return "";
|
|
99
|
+
}
|
|
100
|
+
function extractMeta(sourceFile) {
|
|
101
|
+
const meta = collectExportedLiterals(sourceFile).meta;
|
|
102
|
+
return isPlainRecord(meta) ? meta : null;
|
|
103
|
+
}
|
|
104
|
+
function collectExportedLiterals(sourceFile) {
|
|
105
|
+
const result = {};
|
|
106
|
+
for (const statement of sourceFile.statements) {
|
|
107
|
+
if (!ts.isVariableStatement(statement) || !hasExportModifier(statement))
|
|
108
|
+
continue;
|
|
109
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
110
|
+
if (!ts.isIdentifier(declaration.name) || !declaration.initializer)
|
|
111
|
+
continue;
|
|
112
|
+
const value = literalFromExpression(declaration.initializer);
|
|
113
|
+
if (value !== NON_LITERAL)
|
|
114
|
+
result[declaration.name.text] = value;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
function literalFromExpression(expression) {
|
|
120
|
+
if (ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression))
|
|
121
|
+
return expression.text;
|
|
122
|
+
if (ts.isNumericLiteral(expression))
|
|
123
|
+
return Number(expression.text);
|
|
124
|
+
if (expression.kind === ts.SyntaxKind.TrueKeyword)
|
|
125
|
+
return !0;
|
|
126
|
+
if (expression.kind === ts.SyntaxKind.FalseKeyword)
|
|
127
|
+
return !1;
|
|
128
|
+
if (expression.kind === ts.SyntaxKind.NullKeyword)
|
|
129
|
+
return null;
|
|
130
|
+
if (ts.isObjectLiteralExpression(expression)) {
|
|
131
|
+
const result = {};
|
|
132
|
+
for (const property of expression.properties) {
|
|
133
|
+
if (!ts.isPropertyAssignment(property))
|
|
134
|
+
return NON_LITERAL;
|
|
135
|
+
const key = propertyNameText(property.name);
|
|
136
|
+
if (!key)
|
|
137
|
+
return NON_LITERAL;
|
|
138
|
+
const value = literalFromExpression(property.initializer);
|
|
139
|
+
if (value === NON_LITERAL)
|
|
140
|
+
return NON_LITERAL;
|
|
141
|
+
result[key] = value;
|
|
142
|
+
}
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
if (ts.isArrayLiteralExpression(expression)) {
|
|
146
|
+
const values = [];
|
|
147
|
+
for (const element of expression.elements) {
|
|
148
|
+
const value = literalFromExpression(element);
|
|
149
|
+
if (value === NON_LITERAL)
|
|
150
|
+
return NON_LITERAL;
|
|
151
|
+
values.push(value);
|
|
152
|
+
}
|
|
153
|
+
return values;
|
|
154
|
+
}
|
|
155
|
+
return NON_LITERAL;
|
|
156
|
+
}
|
|
157
|
+
function propertyNameText(name) {
|
|
158
|
+
if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))
|
|
159
|
+
return name.text;
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
function isPlainRecord(value) {
|
|
163
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
164
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ModuleAnalysisBackend } from "../analysis-backend.js";
|
|
2
|
+
export declare const EXPERIMENTAL_OXC_BACKEND_NAME = "experimental-oxc";
|
|
3
|
+
export interface ExperimentalOxcBackendOptions {
|
|
4
|
+
fallback: ModuleAnalysisBackend;
|
|
5
|
+
}
|
|
6
|
+
export declare function createExperimentalOxcModuleAnalysisBackend(options: ExperimentalOxcBackendOptions): ModuleAnalysisBackend;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const EXPERIMENTAL_OXC_BACKEND_NAME = "experimental-oxc";
|
|
2
|
+
export function createExperimentalOxcModuleAnalysisBackend(options) {
|
|
3
|
+
return {
|
|
4
|
+
name: EXPERIMENTAL_OXC_BACKEND_NAME,
|
|
5
|
+
analyzeModuleSource(filePath, content) {
|
|
6
|
+
return options.fallback.analyzeModuleSource(filePath, content);
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ModuleAnalysisBackend } from "../analysis-backend.js";
|
|
2
|
+
export declare const OXC_BACKEND_NAME = "oxc";
|
|
3
|
+
export declare const OXC_PACKAGE = "oxc-parser";
|
|
4
|
+
export interface OxcBackendState {
|
|
5
|
+
backend: typeof OXC_BACKEND_NAME;
|
|
6
|
+
packageName: typeof OXC_PACKAGE;
|
|
7
|
+
implementation: "oxc-parser";
|
|
8
|
+
available: true;
|
|
9
|
+
fallbackBackend: string;
|
|
10
|
+
reason: string | null;
|
|
11
|
+
}
|
|
12
|
+
export interface OxcBackendOptions {
|
|
13
|
+
fallback: ModuleAnalysisBackend;
|
|
14
|
+
}
|
|
15
|
+
export declare function createOxcModuleAnalysisBackend(options: OxcBackendOptions): ModuleAnalysisBackend;
|
|
16
|
+
export declare function getOxcBackendState(options: OxcBackendOptions): OxcBackendState;
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { parseSync } from "oxc-parser";
|
|
2
|
+
export const OXC_BACKEND_NAME = "oxc", OXC_PACKAGE = "oxc-parser";
|
|
3
|
+
export function createOxcModuleAnalysisBackend(options) {
|
|
4
|
+
return {
|
|
5
|
+
name: OXC_BACKEND_NAME,
|
|
6
|
+
analyzeModuleSource(filePath, content) {
|
|
7
|
+
const result = parseSync(filePath, content, {
|
|
8
|
+
lang: detectParserLang(filePath),
|
|
9
|
+
sourceType: "module",
|
|
10
|
+
astType: "ts"
|
|
11
|
+
});
|
|
12
|
+
if (result.errors.length > 0)
|
|
13
|
+
return options.fallback.analyzeModuleSource(filePath, content);
|
|
14
|
+
const program = result.program;
|
|
15
|
+
return {
|
|
16
|
+
exportedNames: collectExportedNames(program),
|
|
17
|
+
hasDefaultExport: hasDefaultExport(program),
|
|
18
|
+
title: extractTitle(program, result.comments, content),
|
|
19
|
+
meta: extractMeta(program),
|
|
20
|
+
exportedLiterals: collectExportedLiterals(program),
|
|
21
|
+
imports: collectImports(result.module.staticImports),
|
|
22
|
+
sourceFile: program
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function getOxcBackendState(options) {
|
|
28
|
+
return {
|
|
29
|
+
backend: OXC_BACKEND_NAME,
|
|
30
|
+
packageName: OXC_PACKAGE,
|
|
31
|
+
implementation: "oxc-parser",
|
|
32
|
+
available: !0,
|
|
33
|
+
fallbackBackend: options.fallback.name,
|
|
34
|
+
reason: null
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function detectParserLang(filePath) {
|
|
38
|
+
if (filePath.endsWith(".tsx"))
|
|
39
|
+
return "tsx";
|
|
40
|
+
if (filePath.endsWith(".ts"))
|
|
41
|
+
return "ts";
|
|
42
|
+
if (filePath.endsWith(".jsx"))
|
|
43
|
+
return "jsx";
|
|
44
|
+
return "js";
|
|
45
|
+
}
|
|
46
|
+
function collectImports(staticImports) {
|
|
47
|
+
return staticImports.map((entry) => {
|
|
48
|
+
const names = [];
|
|
49
|
+
let namespace, hasDefaultImport = !1;
|
|
50
|
+
for (const specifier of entry.entries) {
|
|
51
|
+
if (specifier.importName.kind === "Default") {
|
|
52
|
+
hasDefaultImport = !0;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (specifier.importName.kind === "NamespaceObject") {
|
|
56
|
+
namespace = specifier.localName.value;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
names.push(specifier.localName.value);
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
specifier: entry.moduleRequest.value,
|
|
63
|
+
names,
|
|
64
|
+
namespace,
|
|
65
|
+
hasDefaultImport
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function collectExportedNames(program) {
|
|
70
|
+
const names = new Set;
|
|
71
|
+
for (const statement of program.body) {
|
|
72
|
+
if (statement.type === "ExportNamedDeclaration") {
|
|
73
|
+
const declaration = asNode(statement.declaration), declarationId = asNode(declaration?.id);
|
|
74
|
+
if (declaration?.type === "FunctionDeclaration" && identifierName(declarationId))
|
|
75
|
+
names.add(identifierName(declarationId));
|
|
76
|
+
if (declaration?.type === "VariableDeclaration")
|
|
77
|
+
for (const declarator of asArray(declaration.declarations)) {
|
|
78
|
+
const name = identifierName(asNode(declarator.id));
|
|
79
|
+
if (name)
|
|
80
|
+
names.add(name);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (statement.type === "ExportDefaultDeclaration") {
|
|
84
|
+
const declaration = asNode(statement.declaration), declarationId = asNode(declaration?.id);
|
|
85
|
+
if (declaration?.type === "FunctionDeclaration" && identifierName(declarationId))
|
|
86
|
+
names.add(identifierName(declarationId));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return names;
|
|
90
|
+
}
|
|
91
|
+
function hasDefaultExport(program) {
|
|
92
|
+
return program.body.some((statement) => statement.type === "ExportDefaultDeclaration");
|
|
93
|
+
}
|
|
94
|
+
function extractTitle(program, comments, content) {
|
|
95
|
+
const firstStatementStart = typeof program.body[0]?.start === "number" ? program.body[0].start : content.length, jsDoc = comments.filter((comment) => comment.type === "Block" && comment.end <= firstStatementStart).map((comment) => content.slice(comment.start, comment.end)).find((comment) => comment.startsWith("/**"));
|
|
96
|
+
if (!jsDoc)
|
|
97
|
+
return "";
|
|
98
|
+
return jsDoc.replace(/^\/\*\*/, "").replace(/\*\/$/, "").split(`
|
|
99
|
+
`).map((line) => line.replace(/^\s*\*\s?/, "").trim()).filter(Boolean)[0] ?? "";
|
|
100
|
+
}
|
|
101
|
+
function extractMeta(program) {
|
|
102
|
+
const literals = collectExportedLiterals(program);
|
|
103
|
+
return isPlainRecord(literals.meta) ? literals.meta : null;
|
|
104
|
+
}
|
|
105
|
+
function collectExportedLiterals(program) {
|
|
106
|
+
const result = {};
|
|
107
|
+
for (const statement of program.body) {
|
|
108
|
+
if (statement.type !== "ExportNamedDeclaration")
|
|
109
|
+
continue;
|
|
110
|
+
const declaration = asNode(statement.declaration);
|
|
111
|
+
if (declaration?.type !== "VariableDeclaration")
|
|
112
|
+
continue;
|
|
113
|
+
for (const declarator of asArray(declaration.declarations)) {
|
|
114
|
+
const name = identifierName(asNode(declarator.id));
|
|
115
|
+
if (!name)
|
|
116
|
+
continue;
|
|
117
|
+
const value = literalFromExpression(asNode(declarator.init));
|
|
118
|
+
if (value !== NON_LITERAL)
|
|
119
|
+
result[name] = value;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
const NON_LITERAL = Symbol("non-literal");
|
|
125
|
+
function literalFromExpression(node) {
|
|
126
|
+
if (!node)
|
|
127
|
+
return NON_LITERAL;
|
|
128
|
+
switch (node.type) {
|
|
129
|
+
case "Literal":
|
|
130
|
+
return node.value ?? null;
|
|
131
|
+
case "TemplateLiteral":
|
|
132
|
+
if (asArray(node.expressions).length > 0)
|
|
133
|
+
return NON_LITERAL;
|
|
134
|
+
return templateElementCooked(asNode(asArray(node.quasis)[0])) ?? "";
|
|
135
|
+
case "ObjectExpression": {
|
|
136
|
+
const result = {};
|
|
137
|
+
for (const property of asArray(node.properties)) {
|
|
138
|
+
if (property.type !== "Property")
|
|
139
|
+
return NON_LITERAL;
|
|
140
|
+
const key = propertyKeyName(asNode(property.key));
|
|
141
|
+
if (!key)
|
|
142
|
+
return NON_LITERAL;
|
|
143
|
+
const value = literalFromExpression(asNode(property.value));
|
|
144
|
+
if (value === NON_LITERAL)
|
|
145
|
+
return NON_LITERAL;
|
|
146
|
+
result[key] = value;
|
|
147
|
+
}
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
case "ArrayExpression": {
|
|
151
|
+
const result = [];
|
|
152
|
+
for (const element of asArray(node.elements)) {
|
|
153
|
+
const value = literalFromExpression(asNode(element));
|
|
154
|
+
if (value === NON_LITERAL)
|
|
155
|
+
return NON_LITERAL;
|
|
156
|
+
result.push(value);
|
|
157
|
+
}
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
default:
|
|
161
|
+
return NON_LITERAL;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function propertyKeyName(node) {
|
|
165
|
+
if (!node)
|
|
166
|
+
return null;
|
|
167
|
+
if (node.type === "Identifier")
|
|
168
|
+
return stringOrNull(node.name);
|
|
169
|
+
if (node.type === "Literal") {
|
|
170
|
+
if (typeof node.value === "string" || typeof node.value === "number")
|
|
171
|
+
return String(node.value);
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
function identifierName(node) {
|
|
176
|
+
if (!node || node.type !== "Identifier")
|
|
177
|
+
return null;
|
|
178
|
+
return stringOrNull(node.name);
|
|
179
|
+
}
|
|
180
|
+
function asNode(value) {
|
|
181
|
+
return value && typeof value === "object" ? value : null;
|
|
182
|
+
}
|
|
183
|
+
function asArray(value) {
|
|
184
|
+
return Array.isArray(value) ? value : [];
|
|
185
|
+
}
|
|
186
|
+
function stringOrNull(value) {
|
|
187
|
+
return typeof value === "string" ? value : null;
|
|
188
|
+
}
|
|
189
|
+
function templateElementCooked(node) {
|
|
190
|
+
const value = node?.value;
|
|
191
|
+
if (!value || typeof value !== "object")
|
|
192
|
+
return null;
|
|
193
|
+
const cooked = value.cooked;
|
|
194
|
+
return typeof cooked === "string" ? cooked : null;
|
|
195
|
+
}
|
|
196
|
+
function isPlainRecord(value) {
|
|
197
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
198
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ModuleAnalysisBackend } from "../analysis-backend.js";
|
|
2
|
+
export interface RegisterBuiltInCompilerBackendsOptions {
|
|
3
|
+
includeExperimentalOxc?: boolean;
|
|
4
|
+
includeOxc?: boolean;
|
|
5
|
+
fallbackBackend?: ModuleAnalysisBackend;
|
|
6
|
+
}
|
|
7
|
+
export declare function registerBuiltInCompilerBackends(options?: RegisterBuiltInCompilerBackendsOptions): string[];
|