@punks/cli 0.1.16 → 1.0.1
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/AGENTS.md +10 -0
- package/README.md +64 -0
- package/dist/data/AGENTS.md +123 -0
- package/dist/data/catalog/lint.ts +349 -0
- package/dist/data/catalog/packs.ts +44 -0
- package/dist/data/catalog/skills.ts +47 -0
- package/dist/data/catalog/tools.ts +22 -0
- package/dist/data/hooks/format-edited-file.mjs +554 -0
- package/dist/data/hooks/format-edited-file.py +157 -0
- package/dist/data/hooks/format-edited-file.sh +37 -0
- package/dist/data/hooks/require-tests-for-pr.mjs +144 -0
- package/dist/data/scripts/sync-subagents.mjs +420 -0
- package/dist/data/subagents/manifest.mjs +253 -0
- package/dist/index.js +46400 -0
- package/dist/skills/agnostic/backend/backend-domain-structure/SKILL.md +50 -0
- package/dist/skills/agnostic/backend/backend-domain-structure/agents/openai.yaml +4 -0
- package/dist/skills/agnostic/backend/backend-domain-structure/references/layout.md +167 -0
- package/dist/skills/agnostic/backend/backend-recoverable-actions/SKILL.md +49 -0
- package/dist/skills/agnostic/backend/backend-recoverable-actions/agents/openai.yaml +4 -0
- package/dist/skills/agnostic/backend/backend-recoverable-actions/references/strategy-matrix.md +34 -0
- package/dist/skills/agnostic/backend/backend-recoverable-actions/references/test-matrix.md +34 -0
- package/dist/skills/agnostic/docs/docs-maintenance/SKILL.md +193 -0
- package/dist/skills/agnostic/docs/docs-maintenance/agents/openai.yaml +4 -0
- package/dist/skills/agnostic/docs/docs-maintenance/references/concept-pages.md +48 -0
- package/dist/skills/agnostic/docs/docs-maintenance/references/flow-pages.md +41 -0
- package/dist/skills/agnostic/frontend/agent-browser/.clawdhub/origin.json +7 -0
- package/dist/skills/agnostic/frontend/agent-browser/SKILL.md +229 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/authentication.md +202 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/commands.md +259 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/proxy-support.md +188 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/session-management.md +193 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/snapshot-refs.md +194 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/video-recording.md +173 -0
- package/dist/skills/agnostic/frontend/agent-browser/templates/authenticated-session.sh +97 -0
- package/dist/skills/agnostic/frontend/agent-browser/templates/capture-workflow.sh +69 -0
- package/dist/skills/agnostic/frontend/agent-browser/templates/form-automation.sh +62 -0
- package/dist/skills/agnostic/frontend/design-taste-frontend/SKILL.md +226 -0
- package/dist/skills/agnostic/frontend/frontend-domain-structure/SKILL.md +55 -0
- package/dist/skills/agnostic/frontend/frontend-domain-structure/agents/openai.yaml +4 -0
- package/dist/skills/agnostic/frontend/frontend-domain-structure/references/react/structure.md +102 -0
- package/dist/skills/agnostic/frontend/frontend-domain-structure/references/structure.md +257 -0
- package/dist/skills/agnostic/frontend/gpt-taste/SKILL.md +74 -0
- package/dist/skills/agnostic/frontend/image-taste-frontend/SKILL.md +1102 -0
- package/dist/skills/agnostic/frontend/redesign-existing-projects/SKILL.md +178 -0
- package/dist/skills/agnostic/planning/create-plan/REFERENCE.md +37 -0
- package/dist/skills/agnostic/planning/create-plan/SKILL.md +69 -0
- package/dist/skills/agnostic/planning/create-plan/references/backlog-sync.md +44 -0
- package/dist/skills/agnostic/planning/create-plan/references/grill-phase.md +86 -0
- package/dist/skills/agnostic/planning/create-plan/references/plan-schema.md +66 -0
- package/dist/skills/agnostic/planning/create-plan/references/planner-phase.md +39 -0
- package/dist/skills/agnostic/planning/create-plan/references/stop-conditions.md +18 -0
- package/dist/skills/agnostic/planning/create-plan/references/tdd-phase.md +26 -0
- package/dist/skills/agnostic/planning/create-spec/SKILL.md +57 -0
- package/dist/skills/agnostic/planning/create-spec/assets/SPEC-TEMPLATE.md +91 -0
- package/dist/skills/agnostic/planning/create-spec/references/discovery.md +44 -0
- package/dist/skills/agnostic/planning/create-spec/references/folder-naming.md +27 -0
- package/dist/skills/agnostic/planning/create-spec/references/handoff.md +47 -0
- package/dist/skills/agnostic/planning/create-spec/references/questioning.md +41 -0
- package/dist/skills/agnostic/planning/create-spec/references/spec-quality-bar.md +58 -0
- package/dist/skills/agnostic/planning/create-spec/references/wiki-bookkeeping.md +26 -0
- package/dist/skills/agnostic/planning/grill-me/SKILL.md +28 -0
- package/dist/skills/agnostic/planning/implement-spec/SKILL.md +72 -0
- package/dist/skills/agnostic/planning/implement-spec/assets/IMPLEMENTATION-NOTES-TEMPLATE.md +47 -0
- package/dist/skills/agnostic/planning/implement-spec/references/lifecycle.md +149 -0
- package/dist/skills/agnostic/planning/implement-spec/references/parallel-orchestration.md +102 -0
- package/dist/skills/agnostic/planning/implement-spec/references/parallel-worker-brief.md +65 -0
- package/dist/skills/agnostic/planning/implement-spec/references/parallel.md +56 -0
- package/dist/skills/agnostic/planning/implement-spec/references/sequential.md +28 -0
- package/dist/skills/agnostic/planning/swarm-planner/SKILL.md +179 -0
- package/dist/skills/agnostic/quality/simplify/SKILL.md +14 -0
- package/dist/skills/agnostic/quality/tdd/SKILL.md +107 -0
- package/dist/skills/agnostic/quality/tdd/deep-modules.md +33 -0
- package/dist/skills/agnostic/quality/tdd/interface-design.md +31 -0
- package/dist/skills/agnostic/quality/tdd/mocking.md +59 -0
- package/dist/skills/agnostic/quality/tdd/refactoring.md +10 -0
- package/dist/skills/agnostic/quality/tdd/tests.md +61 -0
- package/dist/skills/agnostic/requirements/requirements-grill/SKILL.md +42 -0
- package/dist/skills/agnostic/requirements/requirements-grill/references/artifact-output.md +73 -0
- package/dist/skills/agnostic/requirements/requirements-grill/references/grilling-flow.md +57 -0
- package/dist/skills/agnostic/requirements/requirements-grill/references/wiki-output.md +94 -0
- package/dist/skills/agnostic/requirements/write-backlog/EXAMPLES.md +67 -0
- package/dist/skills/agnostic/requirements/write-backlog/REFERENCE.md +253 -0
- package/dist/skills/agnostic/requirements/write-backlog/SKILL.md +68 -0
- package/dist/skills/agnostic/requirements/write-backlog/assets/concepts/backlog-model.md +69 -0
- package/dist/skills/agnostic/requirements/write-backlog/assets/concepts/story-shape.md +66 -0
- package/dist/skills/agnostic/requirements/write-backlog/assets/providers/azure-devops-create-payload.md +63 -0
- package/dist/skills/agnostic/requirements/write-backlog/assets/providers/github-issues-create-payload.md +48 -0
- package/dist/skills/agnostic/requirements/write-backlog/assets/providers/linear-create-payload.md +76 -0
- package/dist/skills/agnostic/research/improve-codebase-architecture/REFERENCE.md +78 -0
- package/dist/skills/agnostic/research/improve-codebase-architecture/SKILL.md +76 -0
- package/dist/skills/agnostic/research/parallel-research/SKILL.md +68 -0
- package/dist/skills/agnostic/research/parallel-research/agents/openai.yaml +4 -0
- package/dist/skills/agnostic/subagents/swarm-planner/SKILL.md +179 -0
- package/dist/skills/agnostic/write-a-skill/SKILL.md +117 -0
- package/dist/skills/frameworks/better-auth/better-auth-best-practices/SKILL.md +166 -0
- package/dist/skills/frameworks/better-auth/better-auth-security-best-practices/SKILL.MD +432 -0
- package/dist/skills/frameworks/effect/effect-authoring/SKILL.md +116 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/branded-types.md +98 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/effect-atom-patterns.md +257 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/effect-primitives.md +144 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/error-patterns.md +156 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/otel-patterns.md +113 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/test-patterns.md +146 -0
- package/dist/skills/frameworks/effect/effect-backend-structure/SKILL.md +96 -0
- package/dist/skills/frameworks/effect/effect-backend-structure/agents/openai.yaml +4 -0
- package/dist/skills/frameworks/effect/effect-backend-structure/references/layout.md +68 -0
- package/dist/skills/frameworks/effect/effect-best-practices/SKILL.md +517 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/anti-patterns.md +392 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/effect-atom-patterns.md +653 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/error-patterns.md +464 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/language-server.md +287 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/layer-patterns.md +495 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/observability-patterns.md +342 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/rpc-cluster-patterns.md +418 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/schema-patterns.md +353 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/service-patterns.md +299 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/SKILL.md +65 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/agents/openai.yaml +4 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/references/flow-examples.md +154 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/references/source-backed-primitives.md +104 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/references/strategy-matrix.md +34 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/references/test-matrix.md +36 -0
- package/dist/skills/frameworks/elysia/elysiajs/SKILL.md +475 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/basic.ts +9 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/body-parser.ts +33 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/complex.ts +112 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/cookie.ts +45 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/error.ts +38 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/file.ts +10 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/guard.ts +34 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/map-response.ts +15 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/redirect.ts +6 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/rename.ts +32 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/schema.ts +61 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/state.ts +6 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/upload-file.ts +20 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/websocket.ts +25 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/ai-sdk.md +92 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/astro.md +59 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/better-auth.md +117 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/cloudflare-worker.md +95 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/deno.md +34 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/drizzle.md +258 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/expo.md +95 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/nextjs.md +103 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/nodejs.md +64 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/nuxt.md +67 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/prisma.md +93 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/react-email.md +134 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/sveltekit.md +53 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/tanstack-start.md +87 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/vercel.md +55 -0
- package/dist/skills/frameworks/elysia/elysiajs/patterns/mvc.md +380 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/bearer.md +30 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/cors.md +141 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/cron.md +265 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/graphql-apollo.md +90 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/graphql-yoga.md +87 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/html.md +188 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/jwt.md +197 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/openapi.md +246 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/opentelemetry.md +167 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/server-timing.md +71 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/static.md +84 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/bun-fullstack-dev-server.md +129 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/cookie.md +187 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/deployment.md +413 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/eden.md +158 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/lifecycle.md +198 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/macro.md +83 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/plugin.md +207 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/route.md +331 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/testing.md +385 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/validation.md +491 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/websocket.md +250 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/.github/workflows/branch-protection.yml +24 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/.github/workflows/deploy.yml +61 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/AGENTS.md +5958 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/SKILL.md +130 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-dto-serialization.md +182 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-interceptors.md +202 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-pipes.md +205 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-versioning.md +191 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-avoid-circular-deps.md +80 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-feature-modules.md +82 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-module-sharing.md +141 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-single-responsibility.md +106 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-use-events.md +108 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-use-repository-pattern.md +97 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-avoid-n-plus-one.md +139 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-use-migrations.md +129 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-use-transactions.md +140 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-graceful-shutdown.md +222 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-use-config-module.md +167 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-use-logging.md +232 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-avoid-service-locator.md +104 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-interface-segregation.md +165 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-liskov-substitution.md +221 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-prefer-constructor-injection.md +86 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-scope-awareness.md +94 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-use-interfaces-tokens.md +101 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-handle-async-errors.md +125 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-throw-http-exceptions.md +114 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-use-exception-filters.md +140 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-health-checks.md +226 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-patterns.md +167 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-queues.md +252 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-async-hooks.md +109 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-lazy-loading.md +121 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-optimize-database.md +131 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-use-caching.md +128 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-auth-jwt.md +146 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-rate-limiting.md +125 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-sanitize-output.md +139 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-use-guards.md +135 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-validate-all-input.md +150 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-e2e-supertest.md +178 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-mock-external-services.md +179 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-use-testing-module.md +153 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/build-agents.ts +299 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/build.sh +16 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/package-lock.json +237 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/package.json +15 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/SKILL.md +208 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/authentication.md +166 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/controllers-routing.md +111 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/dtos-validation.md +153 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/migration-from-express.md +1237 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/services-di.md +140 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/testing-patterns.md +186 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/SKILL.md +153 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/async-patterns.md +87 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/bundling.md +180 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/data-patterns.md +297 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/debug-tricks.md +105 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/directives.md +73 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/error-handling.md +227 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/file-conventions.md +140 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/font.md +245 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/functions.md +108 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/hydration-error.md +91 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/image.md +173 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/metadata.md +301 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/parallel-routes.md +287 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/route-handlers.md +146 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/rsc-boundaries.md +159 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/runtime-selection.md +39 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/scripts.md +141 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/self-hosting.md +371 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/suspense-boundaries.md +67 -0
- package/dist/skills/frameworks/nextjs/next-cache-components/SKILL.md +360 -0
- package/dist/skills/frameworks/react/async-react-patterns/SKILL.md +78 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/AGENTS.md +946 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/SKILL.md +89 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/AGENTS.md +3750 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/SKILL.md +148 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/.claude-plugin/plugin.json +12 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/SKILL.md +1058 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/assets/example-template.txt +14 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/best-practices.md +304 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/common-patterns.md +271 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/example-reference.md +26 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/testing.md +282 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/top-errors.md +332 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/typescript-patterns.md +291 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/v4-to-v5-migration.md +231 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/rules/tanstack-query.md +126 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/scripts/example-script.sh +15 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/custom-hooks-pattern.tsx +281 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/devtools-setup.tsx +248 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/error-boundary.tsx +243 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/package.json +31 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/provider-setup.tsx +50 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/query-client-config.ts +72 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-infinite-query.tsx +214 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-mutation-basic.tsx +201 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-mutation-optimistic.tsx +234 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-query-basic.tsx +119 -0
- package/dist/skills/frameworks/trpc/tanstack-query/.claude-plugin/plugin.json +12 -0
- package/dist/skills/frameworks/trpc/tanstack-query/SKILL.md +1058 -0
- package/dist/skills/frameworks/trpc/tanstack-query/assets/example-template.txt +14 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/best-practices.md +304 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/common-patterns.md +271 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/example-reference.md +26 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/testing.md +282 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/top-errors.md +332 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/typescript-patterns.md +291 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/v4-to-v5-migration.md +231 -0
- package/dist/skills/frameworks/trpc/tanstack-query/rules/tanstack-query.md +126 -0
- package/dist/skills/frameworks/trpc/tanstack-query/scripts/example-script.sh +15 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/custom-hooks-pattern.tsx +281 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/devtools-setup.tsx +248 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/error-boundary.tsx +243 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/package.json +31 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/provider-setup.tsx +50 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/query-client-config.ts +72 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/use-infinite-query.tsx +214 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/use-mutation-basic.tsx +201 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/use-mutation-optimistic.tsx +234 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/use-query-basic.tsx +119 -0
- package/dist/skills/frameworks/turborepo/turborepo/SKILL.md +914 -0
- package/dist/skills/frameworks/turborepo/turborepo/command/turborepo.md +70 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/RULE.md +241 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/dependencies.md +246 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/packages.md +335 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/structure.md +270 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/boundaries/RULE.md +126 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/caching/RULE.md +107 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/caching/gotchas.md +169 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/caching/remote-cache.md +127 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/ci/RULE.md +79 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/ci/github-actions.md +162 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/ci/patterns.md +145 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/ci/vercel.md +103 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/cli/RULE.md +100 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/cli/commands.md +297 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/configuration/RULE.md +211 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/configuration/global-options.md +187 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/configuration/gotchas.md +348 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/configuration/tasks.md +285 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/environment/RULE.md +96 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/environment/gotchas.md +141 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/environment/modes.md +101 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/filtering/RULE.md +148 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/filtering/patterns.md +152 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/watch/RULE.md +99 -0
- package/docs/README.md +20 -0
- package/docs/reference/dp-requirements.md +210 -0
- package/docs/runbooks/dp-cli-scaffolding.md +187 -0
- package/package.json +25 -50
- package/.eslintignore +0 -4
- package/.eslintrc +0 -127
- package/.prettierignore +0 -4
- package/.prettierrc +0 -7
- package/bin/abstractions/builder.d.ts +0 -4
- package/bin/abstractions/builder.js +0 -7
- package/bin/builders/dotnet/base.d.ts +0 -18
- package/bin/builders/dotnet/base.js +0 -47
- package/bin/builders/dotnet/entity-configuration/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-configuration/index.js +0 -29
- package/bin/builders/dotnet/entity-converter/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-converter/index.js +0 -29
- package/bin/builders/dotnet/entity-model-create/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-model-create/index.js +0 -29
- package/bin/builders/dotnet/entity-model-dto/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-model-dto/index.js +0 -29
- package/bin/builders/dotnet/entity-model-list-item-dto/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-model-list-item-dto/index.js +0 -29
- package/bin/builders/dotnet/entity-model-update/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-model-update/index.js +0 -29
- package/bin/builders/dotnet/entity-search-parameters/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-search-parameters/index.js +0 -29
- package/bin/builders/dotnet/entity-search-query-builder/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-search-query-builder/index.js +0 -29
- package/bin/builders/dotnet/firestore-connector/index.d.ts +0 -8
- package/bin/builders/dotnet/firestore-connector/index.js +0 -29
- package/bin/builders/dotnet/firestore-mapper/index.d.ts +0 -8
- package/bin/builders/dotnet/firestore-mapper/index.js +0 -29
- package/bin/builders/dotnet/types.d.ts +0 -10
- package/bin/builders/dotnet/types.js +0 -3
- package/bin/commands/entity-add/__test__/dotnet/common.d.ts +0 -2
- package/bin/commands/entity-add/__test__/dotnet/common.js +0 -11
- package/bin/commands/entity-add/__test__/dotnet/render.configuration.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.configuration.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.converter.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.converter.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.firestore-connector.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.firestore-connector.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.firestore-mapper.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.firestore-mapper.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.model-create.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.model-create.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.model-dto.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.model-dto.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.model-list-item-dto.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.model-list-item-dto.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.model-update.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.model-update.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.search-parameters.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.search-parameters.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.search-query.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.search-query.spec.js +0 -22
- package/bin/commands/entity-add/index.d.ts +0 -26
- package/bin/commands/entity-add/index.js +0 -44
- package/bin/logging/index.d.ts +0 -8
- package/bin/logging/index.js +0 -28
- package/bin/providers/rendering/base.d.ts +0 -3
- package/bin/providers/rendering/base.js +0 -7
- package/bin/providers/rendering/factory.d.ts +0 -5
- package/bin/providers/rendering/factory.js +0 -16
- package/bin/providers/rendering/handlebars.d.ts +0 -4
- package/bin/providers/rendering/handlebars.js +0 -16
- package/bin/renderer/index.d.ts +0 -6
- package/bin/renderer/index.js +0 -27
- package/bin/run.d.ts +0 -2
- package/bin/run.js +0 -70
- package/bin/services/folders.d.ts +0 -1
- package/bin/services/folders.js +0 -31
- package/bin/types/commands.d.ts +0 -5
- package/bin/types/commands.js +0 -3
- package/bin/utils/collections.d.ts +0 -1
- package/bin/utils/collections.js +0 -6
- package/bin/utils/files.d.ts +0 -3
- package/bin/utils/files.js +0 -19
- package/bin/utils/strings.d.ts +0 -4
- package/bin/utils/strings.js +0 -22
- package/bin/utils/text.d.ts +0 -1
- package/bin/utils/text.js +0 -8
- package/em-cli +0 -0
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.configuration.spec.ts.snap +0 -49
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.converter.spec.ts.snap +0 -53
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.firestore-connector.spec.ts.snap +0 -20
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.firestore-mapper.spec.ts.snap +0 -29
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-create.spec.ts.snap +0 -10
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-dto.spec.ts.snap +0 -9
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-list-item-dto.spec.ts.snap +0 -11
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-update.spec.ts.snap +0 -11
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.search-parameters.spec.ts.snap +0 -29
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.search-query.spec.ts.snap +0 -42
- package/templates/dotnet/NewEntity/Configuration/<PluralizedEntity>Configuration.cs.template +0 -48
- package/templates/dotnet/NewEntity/Connectors/<PluralizedEntity>FirestoreConnector.cs.template +0 -15
- package/templates/dotnet/NewEntity/Converters/<PluralizedEntity>Converter.cs.template +0 -48
- package/templates/dotnet/NewEntity/Mappers/<PluralizedEntity>FirestoreMapper.cs.template +0 -25
- package/templates/dotnet/NewEntity/Models/<Entity>CreateInput.cs.template +0 -6
- package/templates/dotnet/NewEntity/Models/<Entity>Dto.cs.template +0 -5
- package/templates/dotnet/NewEntity/Models/<Entity>ListItemDto.cs.template +0 -6
- package/templates/dotnet/NewEntity/Models/<Entity>UpdateInput.cs.template +0 -6
- package/templates/dotnet/NewEntity/Search/<PluralizedEntity>QueryBuilder.cs.template +0 -38
- package/templates/dotnet/NewEntity/Search/<PluralizedEntity>SearchParameters.cs.template +0 -24
- package/tsconfig.json +0 -25
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Elysia, t } from 'elysia'
|
|
2
|
+
|
|
3
|
+
new Elysia()
|
|
4
|
+
.state('name', 'salt')
|
|
5
|
+
.get('/', ({ store: { name } }) => `Hi ${name}`, {
|
|
6
|
+
query: t.Object({
|
|
7
|
+
name: t.String()
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
// If query 'name' is not preset, skip the whole handler
|
|
11
|
+
.guard(
|
|
12
|
+
{
|
|
13
|
+
query: t.Object({
|
|
14
|
+
name: t.String()
|
|
15
|
+
})
|
|
16
|
+
},
|
|
17
|
+
(app) =>
|
|
18
|
+
app
|
|
19
|
+
// Query type is inherited from guard
|
|
20
|
+
.get('/profile', ({ query }) => `Hi`)
|
|
21
|
+
// Store is inherited
|
|
22
|
+
.post('/name', ({ store: { name }, body, query }) => name, {
|
|
23
|
+
body: t.Object({
|
|
24
|
+
id: t.Number({
|
|
25
|
+
minimum: 5
|
|
26
|
+
}),
|
|
27
|
+
username: t.String(),
|
|
28
|
+
profile: t.Object({
|
|
29
|
+
name: t.String()
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
})
|
|
33
|
+
)
|
|
34
|
+
.listen(3000)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Elysia } from 'elysia'
|
|
2
|
+
|
|
3
|
+
const prettyJson = new Elysia()
|
|
4
|
+
.mapResponse(({ response }) => {
|
|
5
|
+
if (response instanceof Object)
|
|
6
|
+
return new Response(JSON.stringify(response, null, 4))
|
|
7
|
+
})
|
|
8
|
+
.as('scoped')
|
|
9
|
+
|
|
10
|
+
new Elysia()
|
|
11
|
+
.use(prettyJson)
|
|
12
|
+
.get('/', () => ({
|
|
13
|
+
hello: 'world'
|
|
14
|
+
}))
|
|
15
|
+
.listen(3000)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Elysia, t } from 'elysia'
|
|
2
|
+
|
|
3
|
+
// ? Elysia#83 | Proposal: Standardized way of renaming third party plugin-scoped stuff
|
|
4
|
+
// this would be a plugin provided by a third party
|
|
5
|
+
const myPlugin = new Elysia()
|
|
6
|
+
.decorate('myProperty', 42)
|
|
7
|
+
.model('salt', t.String())
|
|
8
|
+
|
|
9
|
+
new Elysia()
|
|
10
|
+
.use(
|
|
11
|
+
myPlugin
|
|
12
|
+
// map decorator, rename "myProperty" to "renamedProperty"
|
|
13
|
+
.decorate(({ myProperty, ...decorators }) => ({
|
|
14
|
+
renamedProperty: myProperty,
|
|
15
|
+
...decorators
|
|
16
|
+
}))
|
|
17
|
+
// map model, rename "salt" to "pepper"
|
|
18
|
+
.model(({ salt, ...models }) => ({
|
|
19
|
+
...models,
|
|
20
|
+
pepper: t.String()
|
|
21
|
+
}))
|
|
22
|
+
// Add prefix
|
|
23
|
+
.prefix('decorator', 'unstable')
|
|
24
|
+
)
|
|
25
|
+
.get(
|
|
26
|
+
'/mapped',
|
|
27
|
+
({ unstableRenamedProperty }) => unstableRenamedProperty
|
|
28
|
+
)
|
|
29
|
+
.post('/pepper', ({ body }) => body, {
|
|
30
|
+
body: 'pepper',
|
|
31
|
+
// response: t.String()
|
|
32
|
+
})
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Elysia, t } from 'elysia'
|
|
2
|
+
|
|
3
|
+
const app = new Elysia()
|
|
4
|
+
.model({
|
|
5
|
+
name: t.Object({
|
|
6
|
+
name: t.String()
|
|
7
|
+
}),
|
|
8
|
+
b: t.Object({
|
|
9
|
+
response: t.Number()
|
|
10
|
+
}),
|
|
11
|
+
authorization: t.Object({
|
|
12
|
+
authorization: t.String()
|
|
13
|
+
})
|
|
14
|
+
})
|
|
15
|
+
// Strictly validate response
|
|
16
|
+
.get('/', () => 'hi')
|
|
17
|
+
// Strictly validate body and response
|
|
18
|
+
.post('/', ({ body, query }) => body.id, {
|
|
19
|
+
body: t.Object({
|
|
20
|
+
id: t.Number(),
|
|
21
|
+
username: t.String(),
|
|
22
|
+
profile: t.Object({
|
|
23
|
+
name: t.String()
|
|
24
|
+
})
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
// Strictly validate query, params, and body
|
|
28
|
+
.get('/query/:id', ({ query: { name }, params }) => name, {
|
|
29
|
+
query: t.Object({
|
|
30
|
+
name: t.String()
|
|
31
|
+
}),
|
|
32
|
+
params: t.Object({
|
|
33
|
+
id: t.String()
|
|
34
|
+
}),
|
|
35
|
+
response: {
|
|
36
|
+
200: t.String(),
|
|
37
|
+
300: t.Object({
|
|
38
|
+
error: t.String()
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
.guard(
|
|
43
|
+
{
|
|
44
|
+
headers: 'authorization'
|
|
45
|
+
},
|
|
46
|
+
(app) =>
|
|
47
|
+
app
|
|
48
|
+
.derive(({ headers }) => ({
|
|
49
|
+
userId: headers.authorization
|
|
50
|
+
}))
|
|
51
|
+
.get('/', ({ userId }) => 'A')
|
|
52
|
+
.post('/id/:id', ({ query, body, params, userId }) => body, {
|
|
53
|
+
params: t.Object({
|
|
54
|
+
id: t.Number()
|
|
55
|
+
}),
|
|
56
|
+
transform({ params }) {
|
|
57
|
+
params.id = +params.id
|
|
58
|
+
}
|
|
59
|
+
})
|
|
60
|
+
)
|
|
61
|
+
.listen(3000)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Elysia, t } from 'elysia'
|
|
2
|
+
|
|
3
|
+
const app = new Elysia()
|
|
4
|
+
.post('/single', ({ body: { file } }) => file, {
|
|
5
|
+
body: t.Object({
|
|
6
|
+
file: t.File({
|
|
7
|
+
maxSize: '1m'
|
|
8
|
+
})
|
|
9
|
+
})
|
|
10
|
+
})
|
|
11
|
+
.post(
|
|
12
|
+
'/multiple',
|
|
13
|
+
({ body: { files } }) => files.reduce((a, b) => a + b.size, 0),
|
|
14
|
+
{
|
|
15
|
+
body: t.Object({
|
|
16
|
+
files: t.Files()
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
.listen(3000)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Elysia } from 'elysia'
|
|
2
|
+
|
|
3
|
+
const app = new Elysia()
|
|
4
|
+
.state('start', 'here')
|
|
5
|
+
.ws('/ws', {
|
|
6
|
+
open(ws) {
|
|
7
|
+
ws.subscribe('asdf')
|
|
8
|
+
console.log('Open Connection:', ws.id)
|
|
9
|
+
},
|
|
10
|
+
close(ws) {
|
|
11
|
+
console.log('Closed Connection:', ws.id)
|
|
12
|
+
},
|
|
13
|
+
message(ws, message) {
|
|
14
|
+
ws.publish('asdf', message)
|
|
15
|
+
ws.send(message)
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
.get('/publish/:publish', ({ params: { publish: text } }) => {
|
|
19
|
+
app.server!.publish('asdf', text)
|
|
20
|
+
|
|
21
|
+
return text
|
|
22
|
+
})
|
|
23
|
+
.listen(3000, (server) => {
|
|
24
|
+
console.log(`http://${server.hostname}:${server.port}`)
|
|
25
|
+
})
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# AI SDK Integration
|
|
2
|
+
|
|
3
|
+
## What It Is
|
|
4
|
+
Seamless integration with Vercel AI SDK via response streaming.
|
|
5
|
+
|
|
6
|
+
## Response Streaming
|
|
7
|
+
Return `ReadableStream` or `Response` directly:
|
|
8
|
+
```typescript
|
|
9
|
+
import { streamText } from 'ai'
|
|
10
|
+
import { openai } from '@ai-sdk/openai'
|
|
11
|
+
|
|
12
|
+
new Elysia().get('/', () => {
|
|
13
|
+
const stream = streamText({
|
|
14
|
+
model: openai('gpt-5'),
|
|
15
|
+
system: 'You are Yae Miko from Genshin Impact',
|
|
16
|
+
prompt: 'Hi! How are you doing?'
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
return stream.textStream // ReadableStream
|
|
20
|
+
// or
|
|
21
|
+
return stream.toUIMessageStream() // UI Message Stream
|
|
22
|
+
})
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Elysia auto-handles stream.
|
|
26
|
+
|
|
27
|
+
## Server-Sent Events
|
|
28
|
+
Wrap `ReadableStream` with `sse`:
|
|
29
|
+
```typescript
|
|
30
|
+
import { sse } from 'elysia'
|
|
31
|
+
|
|
32
|
+
.get('/', () => {
|
|
33
|
+
const stream = streamText({ /* ... */ })
|
|
34
|
+
|
|
35
|
+
return sse(stream.textStream)
|
|
36
|
+
// or
|
|
37
|
+
return sse(stream.toUIMessageStream())
|
|
38
|
+
})
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Each chunk → SSE.
|
|
42
|
+
|
|
43
|
+
## As Response
|
|
44
|
+
Return stream directly (no Eden type safety):
|
|
45
|
+
```typescript
|
|
46
|
+
.get('/', () => {
|
|
47
|
+
const stream = streamText({ /* ... */ })
|
|
48
|
+
|
|
49
|
+
return stream.toTextStreamResponse()
|
|
50
|
+
// or
|
|
51
|
+
return stream.toUIMessageStreamResponse() // Uses SSE
|
|
52
|
+
})
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Manual Streaming
|
|
56
|
+
Generator function for control:
|
|
57
|
+
```typescript
|
|
58
|
+
import { sse } from 'elysia'
|
|
59
|
+
|
|
60
|
+
.get('/', async function* () {
|
|
61
|
+
const stream = streamText({ /* ... */ })
|
|
62
|
+
|
|
63
|
+
for await (const data of stream.textStream)
|
|
64
|
+
yield sse({ data, event: 'message' })
|
|
65
|
+
|
|
66
|
+
yield sse({ event: 'done' })
|
|
67
|
+
})
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Fetch for Unsupported Models
|
|
71
|
+
Direct fetch with streaming proxy:
|
|
72
|
+
```typescript
|
|
73
|
+
.get('/', () => {
|
|
74
|
+
return fetch('https://api.openai.com/v1/chat/completions', {
|
|
75
|
+
method: 'POST',
|
|
76
|
+
headers: {
|
|
77
|
+
'Content-Type': 'application/json',
|
|
78
|
+
Authorization: `Bearer ${process.env.OPENAI_API_KEY}`
|
|
79
|
+
},
|
|
80
|
+
body: JSON.stringify({
|
|
81
|
+
model: 'gpt-5',
|
|
82
|
+
stream: true,
|
|
83
|
+
messages: [
|
|
84
|
+
{ role: 'system', content: 'You are Yae Miko' },
|
|
85
|
+
{ role: 'user', content: 'Hi! How are you doing?' }
|
|
86
|
+
]
|
|
87
|
+
})
|
|
88
|
+
})
|
|
89
|
+
})
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Elysia auto-proxies fetch response with streaming.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Astro Integration - SKILLS.md
|
|
2
|
+
|
|
3
|
+
## What It Is
|
|
4
|
+
Run Elysia on Astro via Astro Endpoint.
|
|
5
|
+
|
|
6
|
+
## Setup
|
|
7
|
+
1. Set output to server:
|
|
8
|
+
```javascript
|
|
9
|
+
// astro.config.mjs
|
|
10
|
+
export default defineConfig({
|
|
11
|
+
output: 'server'
|
|
12
|
+
})
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
2. Create `pages/[...slugs].ts`
|
|
16
|
+
3. Define Elysia server + export handlers:
|
|
17
|
+
```typescript
|
|
18
|
+
// pages/[...slugs].ts
|
|
19
|
+
import { Elysia, t } from 'elysia'
|
|
20
|
+
|
|
21
|
+
const app = new Elysia()
|
|
22
|
+
.get('/api', () => 'hi')
|
|
23
|
+
.post('/api', ({ body }) => body, {
|
|
24
|
+
body: t.Object({ name: t.String() })
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
const handle = ({ request }: { request: Request }) => app.handle(request)
|
|
28
|
+
|
|
29
|
+
export const GET = handle
|
|
30
|
+
export const POST = handle
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
WinterCG compliance - works normally.
|
|
34
|
+
|
|
35
|
+
Recommended: Run Astro on Bun (Elysia designed for Bun).
|
|
36
|
+
|
|
37
|
+
## Prefix for Non-Root
|
|
38
|
+
If placed in `pages/api/[...slugs].ts`, set prefix:
|
|
39
|
+
```typescript
|
|
40
|
+
// pages/api/[...slugs].ts
|
|
41
|
+
const app = new Elysia({ prefix: '/api' })
|
|
42
|
+
.get('/', () => 'hi')
|
|
43
|
+
|
|
44
|
+
const handle = ({ request }: { request: Request }) => app.handle(request)
|
|
45
|
+
|
|
46
|
+
export const GET = handle
|
|
47
|
+
export const POST = handle
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Ensures routing works in any location.
|
|
51
|
+
|
|
52
|
+
## Benefits
|
|
53
|
+
Co-location of frontend + backend. End-to-end type safety with Eden.
|
|
54
|
+
|
|
55
|
+
## pnpm
|
|
56
|
+
Manual install:
|
|
57
|
+
```bash
|
|
58
|
+
pnpm add @sinclair/typebox openapi-types
|
|
59
|
+
```
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Better Auth Integration
|
|
2
|
+
Elysia + Better Auth integration guide
|
|
3
|
+
|
|
4
|
+
## What It Is
|
|
5
|
+
Framework-agnostic TypeScript auth/authz. Comprehensive features + plugin ecosystem.
|
|
6
|
+
|
|
7
|
+
## Setup
|
|
8
|
+
```typescript
|
|
9
|
+
import { betterAuth } from 'better-auth'
|
|
10
|
+
import { Pool } from 'pg'
|
|
11
|
+
|
|
12
|
+
export const auth = betterAuth({
|
|
13
|
+
database: new Pool()
|
|
14
|
+
})
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Handler Mounting
|
|
18
|
+
```typescript
|
|
19
|
+
import { auth } from './auth'
|
|
20
|
+
|
|
21
|
+
new Elysia()
|
|
22
|
+
.mount(auth.handler) // http://localhost:3000/api/auth
|
|
23
|
+
.listen(3000)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Custom Endpoint
|
|
27
|
+
```typescript
|
|
28
|
+
// Mount with prefix
|
|
29
|
+
.mount('/auth', auth.handler) // http://localhost:3000/auth/api/auth
|
|
30
|
+
|
|
31
|
+
// Customize basePath
|
|
32
|
+
export const auth = betterAuth({
|
|
33
|
+
basePath: '/api' // http://localhost:3000/auth/api
|
|
34
|
+
})
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Cannot set `basePath` to empty or `/`.
|
|
38
|
+
|
|
39
|
+
## OpenAPI Integration
|
|
40
|
+
Extract docs from Better Auth:
|
|
41
|
+
```typescript
|
|
42
|
+
import { openAPI } from 'better-auth/plugins'
|
|
43
|
+
|
|
44
|
+
let _schema: ReturnType<typeof auth.api.generateOpenAPISchema>
|
|
45
|
+
const getSchema = async () => (_schema ??= auth.api.generateOpenAPISchema())
|
|
46
|
+
|
|
47
|
+
export const OpenAPI = {
|
|
48
|
+
getPaths: (prefix = '/auth/api') =>
|
|
49
|
+
getSchema().then(({ paths }) => {
|
|
50
|
+
const reference: typeof paths = Object.create(null)
|
|
51
|
+
|
|
52
|
+
for (const path of Object.keys(paths)) {
|
|
53
|
+
const key = prefix + path
|
|
54
|
+
reference[key] = paths[path]
|
|
55
|
+
|
|
56
|
+
for (const method of Object.keys(paths[path])) {
|
|
57
|
+
const operation = (reference[key] as any)[method]
|
|
58
|
+
operation.tags = ['Better Auth']
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return reference
|
|
63
|
+
}) as Promise<any>,
|
|
64
|
+
components: getSchema().then(({ components }) => components) as Promise<any>
|
|
65
|
+
} as const
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Apply to Elysia:
|
|
69
|
+
```typescript
|
|
70
|
+
new Elysia().use(openapi({
|
|
71
|
+
documentation: {
|
|
72
|
+
components: await OpenAPI.components,
|
|
73
|
+
paths: await OpenAPI.getPaths()
|
|
74
|
+
}
|
|
75
|
+
}))
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## CORS
|
|
79
|
+
```typescript
|
|
80
|
+
import { cors } from '@elysiajs/cors'
|
|
81
|
+
|
|
82
|
+
new Elysia()
|
|
83
|
+
.use(cors({
|
|
84
|
+
origin: 'http://localhost:3001',
|
|
85
|
+
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
|
86
|
+
credentials: true,
|
|
87
|
+
allowedHeaders: ['Content-Type', 'Authorization']
|
|
88
|
+
}))
|
|
89
|
+
.mount(auth.handler)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Macro for Auth
|
|
93
|
+
Use macro + resolve for session/user:
|
|
94
|
+
```typescript
|
|
95
|
+
const betterAuth = new Elysia({ name: 'better-auth' })
|
|
96
|
+
.mount(auth.handler)
|
|
97
|
+
.macro({
|
|
98
|
+
auth: {
|
|
99
|
+
async resolve({ status, request: { headers } }) {
|
|
100
|
+
const session = await auth.api.getSession({ headers })
|
|
101
|
+
|
|
102
|
+
if (!session) return status(401)
|
|
103
|
+
|
|
104
|
+
return {
|
|
105
|
+
user: session.user,
|
|
106
|
+
session: session.session
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
new Elysia()
|
|
113
|
+
.use(betterAuth)
|
|
114
|
+
.get('/user', ({ user }) => user, { auth: true })
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Access `user` and `session` in all routes.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
|
|
2
|
+
# Cloudflare Worker Integration
|
|
3
|
+
|
|
4
|
+
## What It Is
|
|
5
|
+
**Experimental** Cloudflare Worker adapter for Elysia.
|
|
6
|
+
|
|
7
|
+
## Setup
|
|
8
|
+
1. Install Wrangler:
|
|
9
|
+
```bash
|
|
10
|
+
wrangler init elysia-on-cloudflare
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
2. Apply adapter + compile:
|
|
14
|
+
```typescript
|
|
15
|
+
import { Elysia } from 'elysia'
|
|
16
|
+
import { CloudflareAdapter } from 'elysia/adapter/cloudflare-worker'
|
|
17
|
+
|
|
18
|
+
export default new Elysia({
|
|
19
|
+
adapter: CloudflareAdapter
|
|
20
|
+
})
|
|
21
|
+
.get('/', () => 'Hello Cloudflare Worker!')
|
|
22
|
+
.compile() // Required
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
3. Set compatibility date (min `2025-06-01`):
|
|
26
|
+
```json
|
|
27
|
+
// wrangler.json
|
|
28
|
+
{
|
|
29
|
+
"name": "elysia-on-cloudflare",
|
|
30
|
+
"main": "src/index.ts",
|
|
31
|
+
"compatibility_date": "2025-06-01"
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
4. Dev server:
|
|
36
|
+
```bash
|
|
37
|
+
wrangler dev
|
|
38
|
+
# http://localhost:8787
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
No `nodejs_compat` flag needed.
|
|
42
|
+
|
|
43
|
+
## Limitations
|
|
44
|
+
1. `Elysia.file` + Static Plugin don't work (no `fs` module)
|
|
45
|
+
2. OpenAPI Type Gen doesn't work (no `fs` module)
|
|
46
|
+
3. Cannot define Response before server start
|
|
47
|
+
4. Cannot inline values:
|
|
48
|
+
```typescript
|
|
49
|
+
// ❌ Throws error
|
|
50
|
+
.get('/', 'Hello Elysia')
|
|
51
|
+
|
|
52
|
+
// ✅ Works
|
|
53
|
+
.get('/', () => 'Hello Elysia')
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Static Files
|
|
57
|
+
Use Cloudflare's built-in static serving:
|
|
58
|
+
```json
|
|
59
|
+
// wrangler.json
|
|
60
|
+
{
|
|
61
|
+
"assets": { "directory": "public" }
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Structure:
|
|
66
|
+
```
|
|
67
|
+
├─ public
|
|
68
|
+
│ ├─ kyuukurarin.mp4
|
|
69
|
+
│ └─ static/mika.webp
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Access:
|
|
73
|
+
- `http://localhost:8787/kyuukurarin.mp4`
|
|
74
|
+
- `http://localhost:8787/static/mika.webp`
|
|
75
|
+
|
|
76
|
+
## Binding
|
|
77
|
+
Import env from `cloudflare:workers`:
|
|
78
|
+
```typescript
|
|
79
|
+
import { env } from 'cloudflare:workers'
|
|
80
|
+
|
|
81
|
+
export default new Elysia({ adapter: CloudflareAdapter })
|
|
82
|
+
.get('/', () => `Hello ${await env.KV.get('my-key')}`)
|
|
83
|
+
.compile()
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## AoT Compilation
|
|
87
|
+
As of Elysia 1.4.7, AoT works with Cloudflare Worker. Drop `aot: false` flag.
|
|
88
|
+
|
|
89
|
+
Cloudflare now supports Function compilation during startup.
|
|
90
|
+
|
|
91
|
+
## pnpm
|
|
92
|
+
Manual install:
|
|
93
|
+
```bash
|
|
94
|
+
pnpm add @sinclair/typebox openapi-types
|
|
95
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Deno Integration
|
|
2
|
+
Run Elysia on Deno
|
|
3
|
+
|
|
4
|
+
## What It Is
|
|
5
|
+
Run Elysia on Deno via Web Standard Request/Response.
|
|
6
|
+
|
|
7
|
+
## Setup
|
|
8
|
+
Wrap `Elysia.fetch` in `Deno.serve`:
|
|
9
|
+
```typescript
|
|
10
|
+
import { Elysia } from 'elysia'
|
|
11
|
+
|
|
12
|
+
const app = new Elysia()
|
|
13
|
+
.get('/', () => 'Hello Elysia')
|
|
14
|
+
.listen(3000)
|
|
15
|
+
|
|
16
|
+
Deno.serve(app.fetch)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Run:
|
|
20
|
+
```bash
|
|
21
|
+
deno serve --watch src/index.ts
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Port Config
|
|
25
|
+
```typescript
|
|
26
|
+
Deno.serve(app.fetch) // Default
|
|
27
|
+
Deno.serve({ port: 8787 }, app.fetch) // Custom port
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## pnpm
|
|
31
|
+
[Inference] pnpm doesn't auto-install peer deps. Manual install required:
|
|
32
|
+
```bash
|
|
33
|
+
pnpm add @sinclair/typebox openapi-types
|
|
34
|
+
```
|