@punks/cli 0.1.16 → 1.0.0

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.
Files changed (508) hide show
  1. package/AGENTS.md +10 -0
  2. package/README.md +64 -0
  3. package/dist/data/AGENTS.md +123 -0
  4. package/dist/data/catalog/lint.ts +349 -0
  5. package/dist/data/catalog/packs.ts +44 -0
  6. package/dist/data/catalog/skills.ts +47 -0
  7. package/dist/data/catalog/tools.ts +22 -0
  8. package/dist/data/hooks/format-edited-file.mjs +554 -0
  9. package/dist/data/hooks/format-edited-file.py +157 -0
  10. package/dist/data/hooks/format-edited-file.sh +37 -0
  11. package/dist/data/hooks/require-tests-for-pr.mjs +144 -0
  12. package/dist/data/scripts/sync-subagents.mjs +420 -0
  13. package/dist/data/subagents/manifest.mjs +253 -0
  14. package/dist/index.js +46415 -0
  15. package/dist/skills/agnostic/backend/backend-domain-structure/SKILL.md +50 -0
  16. package/dist/skills/agnostic/backend/backend-domain-structure/agents/openai.yaml +4 -0
  17. package/dist/skills/agnostic/backend/backend-domain-structure/references/layout.md +167 -0
  18. package/dist/skills/agnostic/backend/backend-recoverable-actions/SKILL.md +49 -0
  19. package/dist/skills/agnostic/backend/backend-recoverable-actions/agents/openai.yaml +4 -0
  20. package/dist/skills/agnostic/backend/backend-recoverable-actions/references/strategy-matrix.md +34 -0
  21. package/dist/skills/agnostic/backend/backend-recoverable-actions/references/test-matrix.md +34 -0
  22. package/dist/skills/agnostic/docs/docs-maintenance/SKILL.md +193 -0
  23. package/dist/skills/agnostic/docs/docs-maintenance/agents/openai.yaml +4 -0
  24. package/dist/skills/agnostic/docs/docs-maintenance/references/concept-pages.md +48 -0
  25. package/dist/skills/agnostic/docs/docs-maintenance/references/flow-pages.md +41 -0
  26. package/dist/skills/agnostic/frontend/agent-browser/.clawdhub/origin.json +7 -0
  27. package/dist/skills/agnostic/frontend/agent-browser/SKILL.md +229 -0
  28. package/dist/skills/agnostic/frontend/agent-browser/references/authentication.md +202 -0
  29. package/dist/skills/agnostic/frontend/agent-browser/references/commands.md +259 -0
  30. package/dist/skills/agnostic/frontend/agent-browser/references/proxy-support.md +188 -0
  31. package/dist/skills/agnostic/frontend/agent-browser/references/session-management.md +193 -0
  32. package/dist/skills/agnostic/frontend/agent-browser/references/snapshot-refs.md +194 -0
  33. package/dist/skills/agnostic/frontend/agent-browser/references/video-recording.md +173 -0
  34. package/dist/skills/agnostic/frontend/agent-browser/templates/authenticated-session.sh +97 -0
  35. package/dist/skills/agnostic/frontend/agent-browser/templates/capture-workflow.sh +69 -0
  36. package/dist/skills/agnostic/frontend/agent-browser/templates/form-automation.sh +62 -0
  37. package/dist/skills/agnostic/frontend/design-taste-frontend/SKILL.md +226 -0
  38. package/dist/skills/agnostic/frontend/frontend-domain-structure/SKILL.md +55 -0
  39. package/dist/skills/agnostic/frontend/frontend-domain-structure/agents/openai.yaml +4 -0
  40. package/dist/skills/agnostic/frontend/frontend-domain-structure/references/react/structure.md +102 -0
  41. package/dist/skills/agnostic/frontend/frontend-domain-structure/references/structure.md +257 -0
  42. package/dist/skills/agnostic/frontend/gpt-taste/SKILL.md +74 -0
  43. package/dist/skills/agnostic/frontend/image-taste-frontend/SKILL.md +1102 -0
  44. package/dist/skills/agnostic/frontend/redesign-existing-projects/SKILL.md +178 -0
  45. package/dist/skills/agnostic/planning/create-plan/REFERENCE.md +37 -0
  46. package/dist/skills/agnostic/planning/create-plan/SKILL.md +69 -0
  47. package/dist/skills/agnostic/planning/create-plan/references/backlog-sync.md +44 -0
  48. package/dist/skills/agnostic/planning/create-plan/references/grill-phase.md +86 -0
  49. package/dist/skills/agnostic/planning/create-plan/references/plan-schema.md +66 -0
  50. package/dist/skills/agnostic/planning/create-plan/references/planner-phase.md +39 -0
  51. package/dist/skills/agnostic/planning/create-plan/references/stop-conditions.md +18 -0
  52. package/dist/skills/agnostic/planning/create-plan/references/tdd-phase.md +26 -0
  53. package/dist/skills/agnostic/planning/create-spec/SKILL.md +57 -0
  54. package/dist/skills/agnostic/planning/create-spec/assets/SPEC-TEMPLATE.md +91 -0
  55. package/dist/skills/agnostic/planning/create-spec/references/discovery.md +44 -0
  56. package/dist/skills/agnostic/planning/create-spec/references/folder-naming.md +27 -0
  57. package/dist/skills/agnostic/planning/create-spec/references/handoff.md +47 -0
  58. package/dist/skills/agnostic/planning/create-spec/references/questioning.md +41 -0
  59. package/dist/skills/agnostic/planning/create-spec/references/spec-quality-bar.md +58 -0
  60. package/dist/skills/agnostic/planning/create-spec/references/wiki-bookkeeping.md +26 -0
  61. package/dist/skills/agnostic/planning/grill-me/SKILL.md +28 -0
  62. package/dist/skills/agnostic/planning/implement-spec/SKILL.md +72 -0
  63. package/dist/skills/agnostic/planning/implement-spec/assets/IMPLEMENTATION-NOTES-TEMPLATE.md +47 -0
  64. package/dist/skills/agnostic/planning/implement-spec/references/lifecycle.md +149 -0
  65. package/dist/skills/agnostic/planning/implement-spec/references/parallel-orchestration.md +102 -0
  66. package/dist/skills/agnostic/planning/implement-spec/references/parallel-worker-brief.md +65 -0
  67. package/dist/skills/agnostic/planning/implement-spec/references/parallel.md +56 -0
  68. package/dist/skills/agnostic/planning/implement-spec/references/sequential.md +28 -0
  69. package/dist/skills/agnostic/planning/swarm-planner/SKILL.md +179 -0
  70. package/dist/skills/agnostic/quality/simplify/SKILL.md +14 -0
  71. package/dist/skills/agnostic/quality/tdd/SKILL.md +107 -0
  72. package/dist/skills/agnostic/quality/tdd/deep-modules.md +33 -0
  73. package/dist/skills/agnostic/quality/tdd/interface-design.md +31 -0
  74. package/dist/skills/agnostic/quality/tdd/mocking.md +59 -0
  75. package/dist/skills/agnostic/quality/tdd/refactoring.md +10 -0
  76. package/dist/skills/agnostic/quality/tdd/tests.md +61 -0
  77. package/dist/skills/agnostic/requirements/requirements-grill/SKILL.md +42 -0
  78. package/dist/skills/agnostic/requirements/requirements-grill/references/artifact-output.md +73 -0
  79. package/dist/skills/agnostic/requirements/requirements-grill/references/grilling-flow.md +57 -0
  80. package/dist/skills/agnostic/requirements/requirements-grill/references/wiki-output.md +94 -0
  81. package/dist/skills/agnostic/requirements/write-backlog/EXAMPLES.md +67 -0
  82. package/dist/skills/agnostic/requirements/write-backlog/REFERENCE.md +253 -0
  83. package/dist/skills/agnostic/requirements/write-backlog/SKILL.md +68 -0
  84. package/dist/skills/agnostic/requirements/write-backlog/assets/concepts/backlog-model.md +69 -0
  85. package/dist/skills/agnostic/requirements/write-backlog/assets/concepts/story-shape.md +66 -0
  86. package/dist/skills/agnostic/requirements/write-backlog/assets/providers/azure-devops-create-payload.md +63 -0
  87. package/dist/skills/agnostic/requirements/write-backlog/assets/providers/github-issues-create-payload.md +48 -0
  88. package/dist/skills/agnostic/requirements/write-backlog/assets/providers/linear-create-payload.md +76 -0
  89. package/dist/skills/agnostic/research/improve-codebase-architecture/REFERENCE.md +78 -0
  90. package/dist/skills/agnostic/research/improve-codebase-architecture/SKILL.md +76 -0
  91. package/dist/skills/agnostic/research/parallel-research/SKILL.md +68 -0
  92. package/dist/skills/agnostic/research/parallel-research/agents/openai.yaml +4 -0
  93. package/dist/skills/agnostic/subagents/swarm-planner/SKILL.md +179 -0
  94. package/dist/skills/agnostic/write-a-skill/SKILL.md +117 -0
  95. package/dist/skills/frameworks/better-auth/better-auth-best-practices/SKILL.md +166 -0
  96. package/dist/skills/frameworks/better-auth/better-auth-security-best-practices/SKILL.MD +432 -0
  97. package/dist/skills/frameworks/effect/effect-authoring/SKILL.md +116 -0
  98. package/dist/skills/frameworks/effect/effect-authoring/references/branded-types.md +98 -0
  99. package/dist/skills/frameworks/effect/effect-authoring/references/effect-atom-patterns.md +257 -0
  100. package/dist/skills/frameworks/effect/effect-authoring/references/effect-primitives.md +144 -0
  101. package/dist/skills/frameworks/effect/effect-authoring/references/error-patterns.md +156 -0
  102. package/dist/skills/frameworks/effect/effect-authoring/references/otel-patterns.md +113 -0
  103. package/dist/skills/frameworks/effect/effect-authoring/references/test-patterns.md +146 -0
  104. package/dist/skills/frameworks/effect/effect-backend-structure/SKILL.md +96 -0
  105. package/dist/skills/frameworks/effect/effect-backend-structure/agents/openai.yaml +4 -0
  106. package/dist/skills/frameworks/effect/effect-backend-structure/references/layout.md +68 -0
  107. package/dist/skills/frameworks/effect/effect-best-practices/SKILL.md +517 -0
  108. package/dist/skills/frameworks/effect/effect-best-practices/references/anti-patterns.md +392 -0
  109. package/dist/skills/frameworks/effect/effect-best-practices/references/effect-atom-patterns.md +653 -0
  110. package/dist/skills/frameworks/effect/effect-best-practices/references/error-patterns.md +464 -0
  111. package/dist/skills/frameworks/effect/effect-best-practices/references/language-server.md +287 -0
  112. package/dist/skills/frameworks/effect/effect-best-practices/references/layer-patterns.md +495 -0
  113. package/dist/skills/frameworks/effect/effect-best-practices/references/observability-patterns.md +342 -0
  114. package/dist/skills/frameworks/effect/effect-best-practices/references/rpc-cluster-patterns.md +418 -0
  115. package/dist/skills/frameworks/effect/effect-best-practices/references/schema-patterns.md +353 -0
  116. package/dist/skills/frameworks/effect/effect-best-practices/references/service-patterns.md +299 -0
  117. package/dist/skills/frameworks/effect/effect-recoverable-actions/SKILL.md +65 -0
  118. package/dist/skills/frameworks/effect/effect-recoverable-actions/agents/openai.yaml +4 -0
  119. package/dist/skills/frameworks/effect/effect-recoverable-actions/references/flow-examples.md +154 -0
  120. package/dist/skills/frameworks/effect/effect-recoverable-actions/references/source-backed-primitives.md +104 -0
  121. package/dist/skills/frameworks/effect/effect-recoverable-actions/references/strategy-matrix.md +34 -0
  122. package/dist/skills/frameworks/effect/effect-recoverable-actions/references/test-matrix.md +36 -0
  123. package/dist/skills/frameworks/elysia/elysiajs/SKILL.md +475 -0
  124. package/dist/skills/frameworks/elysia/elysiajs/examples/basic.ts +9 -0
  125. package/dist/skills/frameworks/elysia/elysiajs/examples/body-parser.ts +33 -0
  126. package/dist/skills/frameworks/elysia/elysiajs/examples/complex.ts +112 -0
  127. package/dist/skills/frameworks/elysia/elysiajs/examples/cookie.ts +45 -0
  128. package/dist/skills/frameworks/elysia/elysiajs/examples/error.ts +38 -0
  129. package/dist/skills/frameworks/elysia/elysiajs/examples/file.ts +10 -0
  130. package/dist/skills/frameworks/elysia/elysiajs/examples/guard.ts +34 -0
  131. package/dist/skills/frameworks/elysia/elysiajs/examples/map-response.ts +15 -0
  132. package/dist/skills/frameworks/elysia/elysiajs/examples/redirect.ts +6 -0
  133. package/dist/skills/frameworks/elysia/elysiajs/examples/rename.ts +32 -0
  134. package/dist/skills/frameworks/elysia/elysiajs/examples/schema.ts +61 -0
  135. package/dist/skills/frameworks/elysia/elysiajs/examples/state.ts +6 -0
  136. package/dist/skills/frameworks/elysia/elysiajs/examples/upload-file.ts +20 -0
  137. package/dist/skills/frameworks/elysia/elysiajs/examples/websocket.ts +25 -0
  138. package/dist/skills/frameworks/elysia/elysiajs/integrations/ai-sdk.md +92 -0
  139. package/dist/skills/frameworks/elysia/elysiajs/integrations/astro.md +59 -0
  140. package/dist/skills/frameworks/elysia/elysiajs/integrations/better-auth.md +117 -0
  141. package/dist/skills/frameworks/elysia/elysiajs/integrations/cloudflare-worker.md +95 -0
  142. package/dist/skills/frameworks/elysia/elysiajs/integrations/deno.md +34 -0
  143. package/dist/skills/frameworks/elysia/elysiajs/integrations/drizzle.md +258 -0
  144. package/dist/skills/frameworks/elysia/elysiajs/integrations/expo.md +95 -0
  145. package/dist/skills/frameworks/elysia/elysiajs/integrations/nextjs.md +103 -0
  146. package/dist/skills/frameworks/elysia/elysiajs/integrations/nodejs.md +64 -0
  147. package/dist/skills/frameworks/elysia/elysiajs/integrations/nuxt.md +67 -0
  148. package/dist/skills/frameworks/elysia/elysiajs/integrations/prisma.md +93 -0
  149. package/dist/skills/frameworks/elysia/elysiajs/integrations/react-email.md +134 -0
  150. package/dist/skills/frameworks/elysia/elysiajs/integrations/sveltekit.md +53 -0
  151. package/dist/skills/frameworks/elysia/elysiajs/integrations/tanstack-start.md +87 -0
  152. package/dist/skills/frameworks/elysia/elysiajs/integrations/vercel.md +55 -0
  153. package/dist/skills/frameworks/elysia/elysiajs/patterns/mvc.md +380 -0
  154. package/dist/skills/frameworks/elysia/elysiajs/plugins/bearer.md +30 -0
  155. package/dist/skills/frameworks/elysia/elysiajs/plugins/cors.md +141 -0
  156. package/dist/skills/frameworks/elysia/elysiajs/plugins/cron.md +265 -0
  157. package/dist/skills/frameworks/elysia/elysiajs/plugins/graphql-apollo.md +90 -0
  158. package/dist/skills/frameworks/elysia/elysiajs/plugins/graphql-yoga.md +87 -0
  159. package/dist/skills/frameworks/elysia/elysiajs/plugins/html.md +188 -0
  160. package/dist/skills/frameworks/elysia/elysiajs/plugins/jwt.md +197 -0
  161. package/dist/skills/frameworks/elysia/elysiajs/plugins/openapi.md +246 -0
  162. package/dist/skills/frameworks/elysia/elysiajs/plugins/opentelemetry.md +167 -0
  163. package/dist/skills/frameworks/elysia/elysiajs/plugins/server-timing.md +71 -0
  164. package/dist/skills/frameworks/elysia/elysiajs/plugins/static.md +84 -0
  165. package/dist/skills/frameworks/elysia/elysiajs/references/bun-fullstack-dev-server.md +129 -0
  166. package/dist/skills/frameworks/elysia/elysiajs/references/cookie.md +187 -0
  167. package/dist/skills/frameworks/elysia/elysiajs/references/deployment.md +413 -0
  168. package/dist/skills/frameworks/elysia/elysiajs/references/eden.md +158 -0
  169. package/dist/skills/frameworks/elysia/elysiajs/references/lifecycle.md +198 -0
  170. package/dist/skills/frameworks/elysia/elysiajs/references/macro.md +83 -0
  171. package/dist/skills/frameworks/elysia/elysiajs/references/plugin.md +207 -0
  172. package/dist/skills/frameworks/elysia/elysiajs/references/route.md +331 -0
  173. package/dist/skills/frameworks/elysia/elysiajs/references/testing.md +385 -0
  174. package/dist/skills/frameworks/elysia/elysiajs/references/validation.md +491 -0
  175. package/dist/skills/frameworks/elysia/elysiajs/references/websocket.md +250 -0
  176. package/dist/skills/frameworks/nestjs/nestjs-best-practices/.github/workflows/branch-protection.yml +24 -0
  177. package/dist/skills/frameworks/nestjs/nestjs-best-practices/.github/workflows/deploy.yml +61 -0
  178. package/dist/skills/frameworks/nestjs/nestjs-best-practices/AGENTS.md +5958 -0
  179. package/dist/skills/frameworks/nestjs/nestjs-best-practices/SKILL.md +130 -0
  180. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-dto-serialization.md +182 -0
  181. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-interceptors.md +202 -0
  182. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-pipes.md +205 -0
  183. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-versioning.md +191 -0
  184. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-avoid-circular-deps.md +80 -0
  185. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-feature-modules.md +82 -0
  186. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-module-sharing.md +141 -0
  187. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-single-responsibility.md +106 -0
  188. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-use-events.md +108 -0
  189. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-use-repository-pattern.md +97 -0
  190. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-avoid-n-plus-one.md +139 -0
  191. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-use-migrations.md +129 -0
  192. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-use-transactions.md +140 -0
  193. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-graceful-shutdown.md +222 -0
  194. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-use-config-module.md +167 -0
  195. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-use-logging.md +232 -0
  196. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-avoid-service-locator.md +104 -0
  197. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-interface-segregation.md +165 -0
  198. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-liskov-substitution.md +221 -0
  199. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-prefer-constructor-injection.md +86 -0
  200. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-scope-awareness.md +94 -0
  201. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-use-interfaces-tokens.md +101 -0
  202. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-handle-async-errors.md +125 -0
  203. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-throw-http-exceptions.md +114 -0
  204. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-use-exception-filters.md +140 -0
  205. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-health-checks.md +226 -0
  206. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-patterns.md +167 -0
  207. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-queues.md +252 -0
  208. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-async-hooks.md +109 -0
  209. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-lazy-loading.md +121 -0
  210. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-optimize-database.md +131 -0
  211. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-use-caching.md +128 -0
  212. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-auth-jwt.md +146 -0
  213. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-rate-limiting.md +125 -0
  214. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-sanitize-output.md +139 -0
  215. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-use-guards.md +135 -0
  216. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-validate-all-input.md +150 -0
  217. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-e2e-supertest.md +178 -0
  218. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-mock-external-services.md +179 -0
  219. package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-use-testing-module.md +153 -0
  220. package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/build-agents.ts +299 -0
  221. package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/build.sh +16 -0
  222. package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/package-lock.json +237 -0
  223. package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/package.json +15 -0
  224. package/dist/skills/frameworks/nestjs/nestjs-expert/SKILL.md +208 -0
  225. package/dist/skills/frameworks/nestjs/nestjs-expert/references/authentication.md +166 -0
  226. package/dist/skills/frameworks/nestjs/nestjs-expert/references/controllers-routing.md +111 -0
  227. package/dist/skills/frameworks/nestjs/nestjs-expert/references/dtos-validation.md +153 -0
  228. package/dist/skills/frameworks/nestjs/nestjs-expert/references/migration-from-express.md +1237 -0
  229. package/dist/skills/frameworks/nestjs/nestjs-expert/references/services-di.md +140 -0
  230. package/dist/skills/frameworks/nestjs/nestjs-expert/references/testing-patterns.md +186 -0
  231. package/dist/skills/frameworks/nextjs/next-best-practices/SKILL.md +153 -0
  232. package/dist/skills/frameworks/nextjs/next-best-practices/async-patterns.md +87 -0
  233. package/dist/skills/frameworks/nextjs/next-best-practices/bundling.md +180 -0
  234. package/dist/skills/frameworks/nextjs/next-best-practices/data-patterns.md +297 -0
  235. package/dist/skills/frameworks/nextjs/next-best-practices/debug-tricks.md +105 -0
  236. package/dist/skills/frameworks/nextjs/next-best-practices/directives.md +73 -0
  237. package/dist/skills/frameworks/nextjs/next-best-practices/error-handling.md +227 -0
  238. package/dist/skills/frameworks/nextjs/next-best-practices/file-conventions.md +140 -0
  239. package/dist/skills/frameworks/nextjs/next-best-practices/font.md +245 -0
  240. package/dist/skills/frameworks/nextjs/next-best-practices/functions.md +108 -0
  241. package/dist/skills/frameworks/nextjs/next-best-practices/hydration-error.md +91 -0
  242. package/dist/skills/frameworks/nextjs/next-best-practices/image.md +173 -0
  243. package/dist/skills/frameworks/nextjs/next-best-practices/metadata.md +301 -0
  244. package/dist/skills/frameworks/nextjs/next-best-practices/parallel-routes.md +287 -0
  245. package/dist/skills/frameworks/nextjs/next-best-practices/route-handlers.md +146 -0
  246. package/dist/skills/frameworks/nextjs/next-best-practices/rsc-boundaries.md +159 -0
  247. package/dist/skills/frameworks/nextjs/next-best-practices/runtime-selection.md +39 -0
  248. package/dist/skills/frameworks/nextjs/next-best-practices/scripts.md +141 -0
  249. package/dist/skills/frameworks/nextjs/next-best-practices/self-hosting.md +371 -0
  250. package/dist/skills/frameworks/nextjs/next-best-practices/suspense-boundaries.md +67 -0
  251. package/dist/skills/frameworks/nextjs/next-cache-components/SKILL.md +360 -0
  252. package/dist/skills/frameworks/react/async-react-patterns/SKILL.md +78 -0
  253. package/dist/skills/frameworks/react/vercel-composition-patterns/AGENTS.md +946 -0
  254. package/dist/skills/frameworks/react/vercel-composition-patterns/SKILL.md +89 -0
  255. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  256. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
  257. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  258. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
  259. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
  260. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-context-interface.md +191 -0
  261. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
  262. package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-lift-state.md +125 -0
  263. package/dist/skills/frameworks/react/vercel-react-best-practices/AGENTS.md +3750 -0
  264. package/dist/skills/frameworks/react/vercel-react-best-practices/SKILL.md +148 -0
  265. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  266. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  267. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  268. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  269. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  270. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  271. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  272. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  273. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-parallel.md +28 -0
  274. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  275. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  276. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  277. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  278. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  279. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  280. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  281. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  282. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  283. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  284. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  285. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  286. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  287. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  288. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  289. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  290. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  291. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  292. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  293. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  294. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  295. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  296. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  297. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  298. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  299. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  300. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  301. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  302. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  303. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  304. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  305. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  306. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  307. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  308. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  309. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  310. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  311. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  312. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  313. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  314. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  315. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  316. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  317. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  318. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  319. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  320. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  321. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  322. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  323. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  324. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  325. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  326. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  327. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  328. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  329. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  330. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
  331. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  332. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  333. package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-serialization.md +38 -0
  334. package/dist/skills/frameworks/tanstack-query/tanstack-query/.claude-plugin/plugin.json +12 -0
  335. package/dist/skills/frameworks/tanstack-query/tanstack-query/SKILL.md +1058 -0
  336. package/dist/skills/frameworks/tanstack-query/tanstack-query/assets/example-template.txt +14 -0
  337. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/best-practices.md +304 -0
  338. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/common-patterns.md +271 -0
  339. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/example-reference.md +26 -0
  340. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/testing.md +282 -0
  341. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/top-errors.md +332 -0
  342. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/typescript-patterns.md +291 -0
  343. package/dist/skills/frameworks/tanstack-query/tanstack-query/references/v4-to-v5-migration.md +231 -0
  344. package/dist/skills/frameworks/tanstack-query/tanstack-query/rules/tanstack-query.md +126 -0
  345. package/dist/skills/frameworks/tanstack-query/tanstack-query/scripts/example-script.sh +15 -0
  346. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/custom-hooks-pattern.tsx +281 -0
  347. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/devtools-setup.tsx +248 -0
  348. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/error-boundary.tsx +243 -0
  349. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/package.json +31 -0
  350. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/provider-setup.tsx +50 -0
  351. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/query-client-config.ts +72 -0
  352. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-infinite-query.tsx +214 -0
  353. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-mutation-basic.tsx +201 -0
  354. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-mutation-optimistic.tsx +234 -0
  355. package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-query-basic.tsx +119 -0
  356. package/dist/skills/frameworks/trpc/tanstack-query/.claude-plugin/plugin.json +12 -0
  357. package/dist/skills/frameworks/trpc/tanstack-query/SKILL.md +1058 -0
  358. package/dist/skills/frameworks/trpc/tanstack-query/assets/example-template.txt +14 -0
  359. package/dist/skills/frameworks/trpc/tanstack-query/references/best-practices.md +304 -0
  360. package/dist/skills/frameworks/trpc/tanstack-query/references/common-patterns.md +271 -0
  361. package/dist/skills/frameworks/trpc/tanstack-query/references/example-reference.md +26 -0
  362. package/dist/skills/frameworks/trpc/tanstack-query/references/testing.md +282 -0
  363. package/dist/skills/frameworks/trpc/tanstack-query/references/top-errors.md +332 -0
  364. package/dist/skills/frameworks/trpc/tanstack-query/references/typescript-patterns.md +291 -0
  365. package/dist/skills/frameworks/trpc/tanstack-query/references/v4-to-v5-migration.md +231 -0
  366. package/dist/skills/frameworks/trpc/tanstack-query/rules/tanstack-query.md +126 -0
  367. package/dist/skills/frameworks/trpc/tanstack-query/scripts/example-script.sh +15 -0
  368. package/dist/skills/frameworks/trpc/tanstack-query/templates/custom-hooks-pattern.tsx +281 -0
  369. package/dist/skills/frameworks/trpc/tanstack-query/templates/devtools-setup.tsx +248 -0
  370. package/dist/skills/frameworks/trpc/tanstack-query/templates/error-boundary.tsx +243 -0
  371. package/dist/skills/frameworks/trpc/tanstack-query/templates/package.json +31 -0
  372. package/dist/skills/frameworks/trpc/tanstack-query/templates/provider-setup.tsx +50 -0
  373. package/dist/skills/frameworks/trpc/tanstack-query/templates/query-client-config.ts +72 -0
  374. package/dist/skills/frameworks/trpc/tanstack-query/templates/use-infinite-query.tsx +214 -0
  375. package/dist/skills/frameworks/trpc/tanstack-query/templates/use-mutation-basic.tsx +201 -0
  376. package/dist/skills/frameworks/trpc/tanstack-query/templates/use-mutation-optimistic.tsx +234 -0
  377. package/dist/skills/frameworks/trpc/tanstack-query/templates/use-query-basic.tsx +119 -0
  378. package/dist/skills/frameworks/turborepo/turborepo/SKILL.md +914 -0
  379. package/dist/skills/frameworks/turborepo/turborepo/command/turborepo.md +70 -0
  380. package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/RULE.md +241 -0
  381. package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/dependencies.md +246 -0
  382. package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/packages.md +335 -0
  383. package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/structure.md +270 -0
  384. package/dist/skills/frameworks/turborepo/turborepo/references/boundaries/RULE.md +126 -0
  385. package/dist/skills/frameworks/turborepo/turborepo/references/caching/RULE.md +107 -0
  386. package/dist/skills/frameworks/turborepo/turborepo/references/caching/gotchas.md +169 -0
  387. package/dist/skills/frameworks/turborepo/turborepo/references/caching/remote-cache.md +127 -0
  388. package/dist/skills/frameworks/turborepo/turborepo/references/ci/RULE.md +79 -0
  389. package/dist/skills/frameworks/turborepo/turborepo/references/ci/github-actions.md +162 -0
  390. package/dist/skills/frameworks/turborepo/turborepo/references/ci/patterns.md +145 -0
  391. package/dist/skills/frameworks/turborepo/turborepo/references/ci/vercel.md +103 -0
  392. package/dist/skills/frameworks/turborepo/turborepo/references/cli/RULE.md +100 -0
  393. package/dist/skills/frameworks/turborepo/turborepo/references/cli/commands.md +297 -0
  394. package/dist/skills/frameworks/turborepo/turborepo/references/configuration/RULE.md +211 -0
  395. package/dist/skills/frameworks/turborepo/turborepo/references/configuration/global-options.md +187 -0
  396. package/dist/skills/frameworks/turborepo/turborepo/references/configuration/gotchas.md +348 -0
  397. package/dist/skills/frameworks/turborepo/turborepo/references/configuration/tasks.md +285 -0
  398. package/dist/skills/frameworks/turborepo/turborepo/references/environment/RULE.md +96 -0
  399. package/dist/skills/frameworks/turborepo/turborepo/references/environment/gotchas.md +141 -0
  400. package/dist/skills/frameworks/turborepo/turborepo/references/environment/modes.md +101 -0
  401. package/dist/skills/frameworks/turborepo/turborepo/references/filtering/RULE.md +148 -0
  402. package/dist/skills/frameworks/turborepo/turborepo/references/filtering/patterns.md +152 -0
  403. package/dist/skills/frameworks/turborepo/turborepo/references/watch/RULE.md +99 -0
  404. package/dist/tsconfig.tsbuildinfo +1 -0
  405. package/docs/README.md +20 -0
  406. package/docs/reference/dp-requirements.md +210 -0
  407. package/docs/runbooks/dp-cli-scaffolding.md +187 -0
  408. package/package.json +24 -50
  409. package/.eslintignore +0 -4
  410. package/.eslintrc +0 -127
  411. package/.prettierignore +0 -4
  412. package/.prettierrc +0 -7
  413. package/bin/abstractions/builder.d.ts +0 -4
  414. package/bin/abstractions/builder.js +0 -7
  415. package/bin/builders/dotnet/base.d.ts +0 -18
  416. package/bin/builders/dotnet/base.js +0 -47
  417. package/bin/builders/dotnet/entity-configuration/index.d.ts +0 -8
  418. package/bin/builders/dotnet/entity-configuration/index.js +0 -29
  419. package/bin/builders/dotnet/entity-converter/index.d.ts +0 -8
  420. package/bin/builders/dotnet/entity-converter/index.js +0 -29
  421. package/bin/builders/dotnet/entity-model-create/index.d.ts +0 -8
  422. package/bin/builders/dotnet/entity-model-create/index.js +0 -29
  423. package/bin/builders/dotnet/entity-model-dto/index.d.ts +0 -8
  424. package/bin/builders/dotnet/entity-model-dto/index.js +0 -29
  425. package/bin/builders/dotnet/entity-model-list-item-dto/index.d.ts +0 -8
  426. package/bin/builders/dotnet/entity-model-list-item-dto/index.js +0 -29
  427. package/bin/builders/dotnet/entity-model-update/index.d.ts +0 -8
  428. package/bin/builders/dotnet/entity-model-update/index.js +0 -29
  429. package/bin/builders/dotnet/entity-search-parameters/index.d.ts +0 -8
  430. package/bin/builders/dotnet/entity-search-parameters/index.js +0 -29
  431. package/bin/builders/dotnet/entity-search-query-builder/index.d.ts +0 -8
  432. package/bin/builders/dotnet/entity-search-query-builder/index.js +0 -29
  433. package/bin/builders/dotnet/firestore-connector/index.d.ts +0 -8
  434. package/bin/builders/dotnet/firestore-connector/index.js +0 -29
  435. package/bin/builders/dotnet/firestore-mapper/index.d.ts +0 -8
  436. package/bin/builders/dotnet/firestore-mapper/index.js +0 -29
  437. package/bin/builders/dotnet/types.d.ts +0 -10
  438. package/bin/builders/dotnet/types.js +0 -3
  439. package/bin/commands/entity-add/__test__/dotnet/common.d.ts +0 -2
  440. package/bin/commands/entity-add/__test__/dotnet/common.js +0 -11
  441. package/bin/commands/entity-add/__test__/dotnet/render.configuration.spec.d.ts +0 -1
  442. package/bin/commands/entity-add/__test__/dotnet/render.configuration.spec.js +0 -22
  443. package/bin/commands/entity-add/__test__/dotnet/render.converter.spec.d.ts +0 -1
  444. package/bin/commands/entity-add/__test__/dotnet/render.converter.spec.js +0 -22
  445. package/bin/commands/entity-add/__test__/dotnet/render.firestore-connector.spec.d.ts +0 -1
  446. package/bin/commands/entity-add/__test__/dotnet/render.firestore-connector.spec.js +0 -22
  447. package/bin/commands/entity-add/__test__/dotnet/render.firestore-mapper.spec.d.ts +0 -1
  448. package/bin/commands/entity-add/__test__/dotnet/render.firestore-mapper.spec.js +0 -22
  449. package/bin/commands/entity-add/__test__/dotnet/render.model-create.spec.d.ts +0 -1
  450. package/bin/commands/entity-add/__test__/dotnet/render.model-create.spec.js +0 -22
  451. package/bin/commands/entity-add/__test__/dotnet/render.model-dto.spec.d.ts +0 -1
  452. package/bin/commands/entity-add/__test__/dotnet/render.model-dto.spec.js +0 -22
  453. package/bin/commands/entity-add/__test__/dotnet/render.model-list-item-dto.spec.d.ts +0 -1
  454. package/bin/commands/entity-add/__test__/dotnet/render.model-list-item-dto.spec.js +0 -22
  455. package/bin/commands/entity-add/__test__/dotnet/render.model-update.spec.d.ts +0 -1
  456. package/bin/commands/entity-add/__test__/dotnet/render.model-update.spec.js +0 -22
  457. package/bin/commands/entity-add/__test__/dotnet/render.search-parameters.spec.d.ts +0 -1
  458. package/bin/commands/entity-add/__test__/dotnet/render.search-parameters.spec.js +0 -22
  459. package/bin/commands/entity-add/__test__/dotnet/render.search-query.spec.d.ts +0 -1
  460. package/bin/commands/entity-add/__test__/dotnet/render.search-query.spec.js +0 -22
  461. package/bin/commands/entity-add/index.d.ts +0 -26
  462. package/bin/commands/entity-add/index.js +0 -44
  463. package/bin/logging/index.d.ts +0 -8
  464. package/bin/logging/index.js +0 -28
  465. package/bin/providers/rendering/base.d.ts +0 -3
  466. package/bin/providers/rendering/base.js +0 -7
  467. package/bin/providers/rendering/factory.d.ts +0 -5
  468. package/bin/providers/rendering/factory.js +0 -16
  469. package/bin/providers/rendering/handlebars.d.ts +0 -4
  470. package/bin/providers/rendering/handlebars.js +0 -16
  471. package/bin/renderer/index.d.ts +0 -6
  472. package/bin/renderer/index.js +0 -27
  473. package/bin/run.d.ts +0 -2
  474. package/bin/run.js +0 -70
  475. package/bin/services/folders.d.ts +0 -1
  476. package/bin/services/folders.js +0 -31
  477. package/bin/types/commands.d.ts +0 -5
  478. package/bin/types/commands.js +0 -3
  479. package/bin/utils/collections.d.ts +0 -1
  480. package/bin/utils/collections.js +0 -6
  481. package/bin/utils/files.d.ts +0 -3
  482. package/bin/utils/files.js +0 -19
  483. package/bin/utils/strings.d.ts +0 -4
  484. package/bin/utils/strings.js +0 -22
  485. package/bin/utils/text.d.ts +0 -1
  486. package/bin/utils/text.js +0 -8
  487. package/em-cli +0 -0
  488. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.configuration.spec.ts.snap +0 -49
  489. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.converter.spec.ts.snap +0 -53
  490. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.firestore-connector.spec.ts.snap +0 -20
  491. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.firestore-mapper.spec.ts.snap +0 -29
  492. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-create.spec.ts.snap +0 -10
  493. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-dto.spec.ts.snap +0 -9
  494. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-list-item-dto.spec.ts.snap +0 -11
  495. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-update.spec.ts.snap +0 -11
  496. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.search-parameters.spec.ts.snap +0 -29
  497. package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.search-query.spec.ts.snap +0 -42
  498. package/templates/dotnet/NewEntity/Configuration/<PluralizedEntity>Configuration.cs.template +0 -48
  499. package/templates/dotnet/NewEntity/Connectors/<PluralizedEntity>FirestoreConnector.cs.template +0 -15
  500. package/templates/dotnet/NewEntity/Converters/<PluralizedEntity>Converter.cs.template +0 -48
  501. package/templates/dotnet/NewEntity/Mappers/<PluralizedEntity>FirestoreMapper.cs.template +0 -25
  502. package/templates/dotnet/NewEntity/Models/<Entity>CreateInput.cs.template +0 -6
  503. package/templates/dotnet/NewEntity/Models/<Entity>Dto.cs.template +0 -5
  504. package/templates/dotnet/NewEntity/Models/<Entity>ListItemDto.cs.template +0 -6
  505. package/templates/dotnet/NewEntity/Models/<Entity>UpdateInput.cs.template +0 -6
  506. package/templates/dotnet/NewEntity/Search/<PluralizedEntity>QueryBuilder.cs.template +0 -38
  507. package/templates/dotnet/NewEntity/Search/<PluralizedEntity>SearchParameters.cs.template +0 -24
  508. package/tsconfig.json +0 -25
@@ -0,0 +1,475 @@
1
+ ---
2
+ name: elysiajs
3
+ description: Create backend with ElysiaJS, a type-safe, high-performance framework.
4
+ ---
5
+
6
+ # ElysiaJS Development Skill
7
+
8
+ Always consult [elysiajs.com/llms.txt](https://elysiajs.com/llms.txt) for code examples and latest API.
9
+
10
+ ## Overview
11
+
12
+ ElysiaJS is a TypeScript framework for building Bun-first (but not limited to Bun) type-safe, high-performance backend servers. This skill provides comprehensive guidance for developing with Elysia, including routing, validation, authentication, plugins, integrations, and deployment.
13
+
14
+ ## When to Use This Skill
15
+
16
+ Trigger this skill when the user asks to:
17
+ - Create or modify ElysiaJS routes, handlers, or servers
18
+ - Setup validation with TypeBox or other schema libraries (Zod, Valibot)
19
+ - Implement authentication (JWT, session-based, macros, guards)
20
+ - Add plugins (CORS, OpenAPI, Static files, JWT)
21
+ - Integrate with external services (Drizzle ORM, Better Auth, Next.js, Eden Treaty)
22
+ - Setup WebSocket endpoints for real-time features
23
+ - Create unit tests for Elysia instances
24
+ - Deploy Elysia servers to production
25
+
26
+ ## Quick Start
27
+ Quick scaffold:
28
+ ```bash
29
+ bun create elysia app
30
+ ```
31
+
32
+ ### Basic Server
33
+ ```typescript
34
+ import { Elysia, t, status } from 'elysia'
35
+
36
+ const app = new Elysia()
37
+ .get('/', () => 'Hello World')
38
+ .post('/user', ({ body }) => body, {
39
+ body: t.Object({
40
+ name: t.String(),
41
+ age: t.Number()
42
+ })
43
+ })
44
+ .get('/id/:id', ({ params: { id } }) => {
45
+ if(id > 1_000_000) return status(404, 'Not Found')
46
+
47
+ return id
48
+ }, {
49
+ params: t.Object({
50
+ id: t.Number({
51
+ minimum: 1
52
+ })
53
+ }),
54
+ response: {
55
+ 200: t.Number(),
56
+ 404: t.Literal('Not Found')
57
+ }
58
+ })
59
+ .listen(3000)
60
+ ```
61
+
62
+ ## Basic Usage
63
+
64
+ ### HTTP Methods
65
+ ```typescript
66
+ import { Elysia } from 'elysia'
67
+
68
+ new Elysia()
69
+ .get('/', 'GET')
70
+ .post('/', 'POST')
71
+ .put('/', 'PUT')
72
+ .patch('/', 'PATCH')
73
+ .delete('/', 'DELETE')
74
+ .options('/', 'OPTIONS')
75
+ .head('/', 'HEAD')
76
+ ```
77
+
78
+ ### Path Parameters
79
+ ```typescript
80
+ .get('/user/:id', ({ params: { id } }) => id)
81
+ .get('/post/:id/:slug', ({ params }) => params)
82
+ ```
83
+
84
+ ### Query Parameters
85
+ ```typescript
86
+ .get('/search', ({ query }) => query.q)
87
+ // GET /search?q=elysia → "elysia"
88
+ ```
89
+
90
+ ### Request Body
91
+ ```typescript
92
+ .post('/user', ({ body }) => body)
93
+ ```
94
+
95
+ ### Headers
96
+ ```typescript
97
+ .get('/', ({ headers }) => headers.authorization)
98
+ ```
99
+
100
+ ## TypeBox Validation
101
+
102
+ ### Basic Types
103
+ ```typescript
104
+ import { Elysia, t } from 'elysia'
105
+
106
+ .post('/user', ({ body }) => body, {
107
+ body: t.Object({
108
+ name: t.String(),
109
+ age: t.Number(),
110
+ email: t.String({ format: 'email' }),
111
+ website: t.Optional(t.String({ format: 'uri' }))
112
+ })
113
+ })
114
+ ```
115
+
116
+ ### Nested Objects
117
+ ```typescript
118
+ body: t.Object({
119
+ user: t.Object({
120
+ name: t.String(),
121
+ address: t.Object({
122
+ street: t.String(),
123
+ city: t.String()
124
+ })
125
+ })
126
+ })
127
+ ```
128
+
129
+ ### Arrays
130
+ ```typescript
131
+ body: t.Object({
132
+ tags: t.Array(t.String()),
133
+ users: t.Array(t.Object({
134
+ id: t.String(),
135
+ name: t.String()
136
+ }))
137
+ })
138
+ ```
139
+
140
+ ### File Upload
141
+ ```typescript
142
+ .post('/upload', ({ body }) => body.file, {
143
+ body: t.Object({
144
+ file: t.File({
145
+ type: 'image', // image/* mime types
146
+ maxSize: '5m' // 5 megabytes
147
+ }),
148
+ files: t.Files({ // Multiple files
149
+ type: ['image/png', 'image/jpeg']
150
+ })
151
+ })
152
+ })
153
+ ```
154
+
155
+ ### Response Validation
156
+ ```typescript
157
+ .get('/user/:id', ({ params: { id } }) => ({
158
+ id,
159
+ name: 'John',
160
+ email: 'john@example.com'
161
+ }), {
162
+ params: t.Object({
163
+ id: t.Number()
164
+ }),
165
+ response: {
166
+ 200: t.Object({
167
+ id: t.Number(),
168
+ name: t.String(),
169
+ email: t.String()
170
+ }),
171
+ 404: t.String()
172
+ }
173
+ })
174
+ ```
175
+
176
+ ## Standard Schema (Zod, Valibot, ArkType)
177
+
178
+ ### Zod
179
+ ```typescript
180
+ import { z } from 'zod'
181
+
182
+ .post('/user', ({ body }) => body, {
183
+ body: z.object({
184
+ name: z.string(),
185
+ age: z.number().min(0),
186
+ email: z.string().email()
187
+ })
188
+ })
189
+ ```
190
+
191
+ ## Error Handling
192
+
193
+ ```typescript
194
+ .get('/user/:id', ({ params: { id }, status }) => {
195
+ const user = findUser(id)
196
+
197
+ if (!user) {
198
+ return status(404, 'User not found')
199
+ }
200
+
201
+ return user
202
+ })
203
+ ```
204
+
205
+ ## Guards (Apply to Multiple Routes)
206
+
207
+ ```typescript
208
+ .guard({
209
+ params: t.Object({
210
+ id: t.Number()
211
+ })
212
+ }, app => app
213
+ .get('/user/:id', ({ params: { id } }) => id)
214
+ .delete('/user/:id', ({ params: { id } }) => id)
215
+ )
216
+ ```
217
+
218
+ ## Macro
219
+
220
+ ```typescript
221
+ .macro({
222
+ hi: (word: string) => ({
223
+ beforeHandle() { console.log(word) }
224
+ })
225
+ })
226
+ .get('/', () => 'hi', { hi: 'Elysia' })
227
+ ```
228
+
229
+ ### Project Structure (Recommended)
230
+ Elysia takes an unopinionated approach but based on user request. But without any specific preference, we recommend a feature-based and domain driven folder structure where each feature has its own folder containing controllers, services, and models.
231
+
232
+ ```
233
+ src/
234
+ ├── index.ts # Main server entry
235
+ ├── modules/
236
+ │ ├── auth/
237
+ │ │ ├── index.ts # Auth routes (Elysia instance)
238
+ │ │ ├── service.ts # Business logic
239
+ │ │ └── model.ts # TypeBox schemas/DTOs
240
+ │ └── user/
241
+ │ ├── index.ts
242
+ │ ├── service.ts
243
+ │ └── model.ts
244
+ └── plugins/
245
+ └── custom.ts
246
+
247
+ public/ # Static files (if using static plugin)
248
+ test/ # Unit tests
249
+ ```
250
+
251
+ Each file has its own responsibility as follows:
252
+ - **Controller (index.ts)**: Handle HTTP routing, request validation, and cookie.
253
+ - **Service (service.ts)**: Handle business logic, decoupled from Elysia controller if possible.
254
+ - **Model (model.ts)**: Define the data structure and validation for the request and response.
255
+
256
+ ## Best Practice
257
+ Elysia is unopinionated on design pattern, but if not provided, we can relies on MVC pattern pair with feature based folder structure.
258
+
259
+ - Controller:
260
+ - Prefers Elysia as a controller for HTTP dependant controller
261
+ - For non HTTP dependent, prefers service instead unless explicitly asked
262
+ - Use `onError` to handle local custom errors
263
+ - Register Model to Elysia instance via `Elysia.models({ ...models })` and prefix model by namespace `Elysia.prefix('model', 'Namespace.')
264
+ - Prefers Reference Model by name provided by Elysia instead of using an actual `Model.name`
265
+ - Service:
266
+ - Prefers class (or abstract class if possible)
267
+ - Prefers interface/type derive from `Model`
268
+ - Return `status` (`import { status } from 'elysia'`) for error
269
+ - Prefers `return Error` instead of `throw Error`
270
+ - Models:
271
+ - Always export validation model and type of validation model
272
+ - Custom Error should be in contains in Model
273
+
274
+ ## Elysia Key Concept
275
+ Elysia has a every important concepts/rules to understand before use.
276
+
277
+ ## Encapsulation - Isolates by Default
278
+
279
+ Lifecycles (hooks, middleware) **don't leak** between instances unless scoped.
280
+
281
+ **Scope levels:**
282
+ - `local` (default) - current instance + descendants
283
+ - `scoped` - parent + current + descendants
284
+ - `global` - all instances
285
+
286
+ ```ts
287
+ .onBeforeHandle(() => {}) // only local instance
288
+ .onBeforeHandle({ as: 'global' }, () => {}) // exports to all
289
+ ```
290
+
291
+ ## Method Chaining - Required for Types
292
+
293
+ **Must chain**. Each method returns new type reference.
294
+
295
+ ❌ Don't:
296
+ ```ts
297
+ const app = new Elysia()
298
+ app.state('build', 1) // loses type
299
+ app.get('/', ({ store }) => store.build) // build doesn't exists
300
+ ```
301
+
302
+ ✅ Do:
303
+ ```ts
304
+ new Elysia()
305
+ .state('build', 1)
306
+ .get('/', ({ store }) => store.build)
307
+ ```
308
+
309
+ ## Explicit Dependencies
310
+
311
+ Each instance independent. **Declare what you use.**
312
+
313
+ ```ts
314
+ const auth = new Elysia()
315
+ .decorate('Auth', Auth)
316
+ .model(Auth.models)
317
+
318
+ new Elysia()
319
+ .get('/', ({ Auth }) => Auth.getProfile()) // Auth doesn't exists
320
+
321
+ new Elysia()
322
+ .use(auth) // must declare
323
+ .get('/', ({ Auth }) => Auth.getProfile())
324
+ ```
325
+
326
+ **Global scope when:**
327
+ - No types added (cors, helmet)
328
+ - Global lifecycle (logging, tracing)
329
+
330
+ **Explicit when:**
331
+ - Adds types (state, models)
332
+ - Business logic (auth, db)
333
+
334
+ ## Deduplication
335
+
336
+ Plugins re-execute unless named:
337
+
338
+ ```ts
339
+ new Elysia() // rerun on `.use`
340
+ new Elysia({ name: 'ip' }) // runs once across all instances
341
+ ```
342
+
343
+ ## Order Matters
344
+
345
+ Events apply to routes **registered after** them.
346
+
347
+ ```ts
348
+ .onBeforeHandle(() => console.log('1'))
349
+ .get('/', () => 'hi') // has hook
350
+ .onBeforeHandle(() => console.log('2')) // doesn't affect '/'
351
+ ```
352
+
353
+ ## Type Inference
354
+
355
+ **Inline functions only** for accurate types.
356
+
357
+ For controllers, destructure in inline wrapper:
358
+
359
+ ```ts
360
+ .post('/', ({ body }) => Controller.greet(body), {
361
+ body: t.Object({ name: t.String() })
362
+ })
363
+ ```
364
+
365
+ Get type from schema:
366
+ ```ts
367
+ type MyType = typeof MyType.static
368
+ ```
369
+
370
+ ## Reference Model
371
+ Model can be reference by name, especially great for documenting an API
372
+ ```ts
373
+ new Elysia()
374
+ .model({
375
+ book: t.Object({
376
+ name: t.String()
377
+ })
378
+ })
379
+ .post('/', ({ body }) => body.name, {
380
+ body: 'book'
381
+ })
382
+ ```
383
+
384
+ Model can be renamed by using `.prefix` / `.suffix`
385
+ ```ts
386
+ new Elysia()
387
+ .model({
388
+ book: t.Object({
389
+ name: t.String()
390
+ })
391
+ })
392
+ .prefix('model', 'Namespace')
393
+ .post('/', ({ body }) => body.name, {
394
+ body: 'Namespace.Book'
395
+ })
396
+ ```
397
+
398
+ Once `prefix`, model name will be capitalized by default.
399
+
400
+ ## Technical Terms
401
+ The following are technical terms that is use for Elysia:
402
+ - `OpenAPI Type Gen` - function name `fromTypes` from `@elysiajs/openapi` for generating OpenAPI from types, see `plugins/openapi.md`
403
+ - `Eden`, `Eden Treaty` - e2e type safe RPC client for share type from backend to frontend
404
+
405
+ ## Resources
406
+ Use the following references as needed.
407
+
408
+ It's recommended to checkout `route.md` for as it contains the most important foundation building blocks with examples.
409
+
410
+ `plugin.md` and `validation.md` is important as well but can be check as needed.
411
+
412
+ ### references/
413
+ Detailed documentation split by topic:
414
+ - `bun-fullstack-dev-server.md` - Bun Fullstack Dev Server with HMR. React without bundler.
415
+ - `cookie.md` - Detailed documentation on cookie
416
+ - `deployment.md` - Production deployment guide / Docker
417
+ - `eden.md` - e2e type safe RPC client for share type from backend to frontend
418
+ - `guard.md` - Setting validation/lifecycle all at once
419
+ - `macro.md` - Compose multiple schema/lifecycle as a reusable Elysia via key-value (recommended for complex setup, eg. authentication, authorization, Role-based Access Check)
420
+ - `plugin.md` - Decouple part of Elysia into a standalone component
421
+ - `route.md` - Elysia foundation building block: Routing, Handler and Context
422
+ - `testing.md` - Unit tests with examples
423
+ - `validation.md` - Setup input/output validation and list of all custom validation rules
424
+ - `websocket.md` - Real-time features
425
+
426
+ ### plugins/
427
+ Detailed documentation, usage and configuration reference for official Elysia plugin:
428
+ - `bearer.md` - Add bearer capability to Elysia (`@elysiajs/bearer`)
429
+ - `cors.md` - Out of box configuration for CORS (`@elysiajs/cors`)
430
+ - `cron.md` - Run cron job with access to Elysia context (`@elysiajs/cron`)
431
+ - `graphql-apollo.md` - Integration GraphQL Apollo (`@elysiajs/graphql-apollo`)
432
+ - `graphql-yoga.md` - Integration with GraphQL Yoga (`@elysiajs/graphql-yoga`)
433
+ - `html.md` - HTML and JSX plugin setup and usage (`@elysiajs/html`)
434
+ - `jwt.md` - JWT / JWK plugin (`@elysiajs/jwt`)
435
+ - `openapi.md` - OpenAPI documentation and OpenAPI Type Gen / OpenAPI from types (`@elysiajs/openapi`)
436
+ - `opentelemetry.md` - OpenTelemetry, instrumentation, and record span utilities (`@elysiajs/opentelemetry`)
437
+ - `server-timing.md` - Server Timing metric for debug (`@elysiajs/server-timing`)
438
+ - `static.md` - Serve static files/folders for Elysia Server (`@elysiajs/static`)
439
+
440
+ ### integrations/
441
+ Guide to integrate Elysia with external library/runtime:
442
+ - `ai-sdk.md` - Using Vercel AI SDK with Elysia
443
+ - `astro.md` - Elysia in Astro API route
444
+ - `better-auth.md` - Integrate Elysia with better-auth
445
+ - `cloudflare-worker.md` - Elysia on Cloudflare Worker adapter
446
+ - `deno.md` - Elysia on Deno
447
+ - `drizzle.md` - Integrate Elysia with Drizzle ORM
448
+ - `expo.md` - Elysia in Expo API route
449
+ - `nextjs.md` - Elysia in Nextjs API route
450
+ - `nodejs.md` - Run Elysia on Node.js
451
+ - `nuxt.md` - Elysia on API route
452
+ - `prisma.md` - Integrate Elysia with Prisma
453
+ - `react-email.d` - Create and Send Email with React and Elysia
454
+ - `sveltekit.md` - Run Elysia on Svelte Kit API route
455
+ - `tanstack-start.md` - Run Elysia on Tanstack Start / React Query
456
+ - `vercel.md` - Deploy Elysia to Vercel
457
+
458
+ ### examples/ (optional)
459
+ - `basic.ts` - Basic Elysia example
460
+ - `body-parser.ts` - Custom body parser example via `.onParse`
461
+ - `complex.ts` - Comprehensive usage of Elysia server
462
+ - `cookie.ts` - Setting cookie
463
+ - `error.ts` - Error handling
464
+ - `file.ts` - Returning local file from server
465
+ - `guard.ts` - Setting mulitple validation schema and lifecycle
466
+ - `map-response.ts` - Custom response mapper
467
+ - `redirect.ts` - Redirect response
468
+ - `rename.ts` - Rename context's property
469
+ - `schema.ts` - Setup validation
470
+ - `state.ts` - Setup global state
471
+ - `upload-file.ts` - File upload with validation
472
+ - `websocket.ts` - Web Socket for realtime communication
473
+
474
+ ### patterns/ (optional)
475
+ - `patterns/mvc.md` - Detail guideline for using Elysia with MVC patterns
@@ -0,0 +1,9 @@
1
+ import { Elysia, t } from 'elysia'
2
+
3
+ new Elysia()
4
+ .get('/', 'Hello Elysia')
5
+ .post('/', ({ body: { name } }) => name, {
6
+ body: t.Object({
7
+ name: t.String()
8
+ })
9
+ })
@@ -0,0 +1,33 @@
1
+ import { Elysia, t } from 'elysia'
2
+
3
+ const app = new Elysia()
4
+ // Add custom body parser
5
+ .onParse(async ({ request, contentType }) => {
6
+ switch (contentType) {
7
+ case 'application/Elysia':
8
+ return request.text()
9
+ }
10
+ })
11
+ .post('/', ({ body: { username } }) => `Hi ${username}`, {
12
+ body: t.Object({
13
+ id: t.Number(),
14
+ username: t.String()
15
+ })
16
+ })
17
+ // Increase id by 1 from body before main handler
18
+ .post('/transform', ({ body }) => body, {
19
+ transform: ({ body }) => {
20
+ body.id = body.id + 1
21
+ },
22
+ body: t.Object({
23
+ id: t.Number(),
24
+ username: t.String()
25
+ }),
26
+ detail: {
27
+ summary: 'A'
28
+ }
29
+ })
30
+ .post('/mirror', ({ body }) => body)
31
+ .listen(3000)
32
+
33
+ console.log('🦊 Elysia is running at :8080')
@@ -0,0 +1,112 @@
1
+ import { Elysia, t, file } from 'elysia'
2
+
3
+ const loggerPlugin = new Elysia()
4
+ .get('/hi', () => 'Hi')
5
+ .decorate('log', () => 'A')
6
+ .decorate('date', () => new Date())
7
+ .state('fromPlugin', 'From Logger')
8
+ .use((app) => app.state('abc', 'abc'))
9
+
10
+ const app = new Elysia()
11
+ .onRequest(({ set }) => {
12
+ set.headers = {
13
+ 'Access-Control-Allow-Origin': '*'
14
+ }
15
+ })
16
+ .onError(({ code }) => {
17
+ if (code === 'NOT_FOUND')
18
+ return 'Not Found :('
19
+ })
20
+ .use(loggerPlugin)
21
+ .state('build', Date.now())
22
+ .get('/', 'Elysia')
23
+ .get('/tako', file('./example/takodachi.png'))
24
+ .get('/json', () => ({
25
+ hi: 'world'
26
+ }))
27
+ .get('/root/plugin/log', ({ log, store: { build } }) => {
28
+ log()
29
+
30
+ return build
31
+ })
32
+ .get('/wildcard/*', () => 'Hi Wildcard')
33
+ .get('/query', () => 'Elysia', {
34
+ beforeHandle: ({ query }) => {
35
+ console.log('Name:', query?.name)
36
+
37
+ if (query?.name === 'aom') return 'Hi saltyaom'
38
+ },
39
+ query: t.Object({
40
+ name: t.String()
41
+ })
42
+ })
43
+ .post('/json', async ({ body }) => body, {
44
+ body: t.Object({
45
+ name: t.String(),
46
+ additional: t.String()
47
+ })
48
+ })
49
+ .post('/transform-body', async ({ body }) => body, {
50
+ beforeHandle: (ctx) => {
51
+ ctx.body = {
52
+ ...ctx.body,
53
+ additional: 'Elysia'
54
+ }
55
+ },
56
+ body: t.Object({
57
+ name: t.String(),
58
+ additional: t.String()
59
+ })
60
+ })
61
+ .get('/id/:id', ({ params: { id } }) => id, {
62
+ transform({ params }) {
63
+ params.id = +params.id
64
+ },
65
+ params: t.Object({
66
+ id: t.Number()
67
+ })
68
+ })
69
+ .post('/new/:id', async ({ body, params }) => body, {
70
+ params: t.Object({
71
+ id: t.Number()
72
+ }),
73
+ body: t.Object({
74
+ username: t.String()
75
+ })
76
+ })
77
+ .get('/trailing-slash', () => 'A')
78
+ .group('/group', (app) =>
79
+ app
80
+ .onBeforeHandle(({ query }) => {
81
+ if (query?.name === 'aom') return 'Hi saltyaom'
82
+ })
83
+ .get('/', () => 'From Group')
84
+ .get('/hi', () => 'HI GROUP')
85
+ .get('/elysia', () => 'Welcome to Elysian Realm')
86
+ .get('/fbk', () => 'FuBuKing')
87
+ )
88
+ .get('/response-header', ({ set }) => {
89
+ set.status = 404
90
+ set.headers['a'] = 'b'
91
+
92
+ return 'A'
93
+ })
94
+ .get('/this/is/my/deep/nested/root', () => 'Hi')
95
+ .get('/build', ({ store: { build } }) => build)
96
+ .get('/ref', ({ date }) => date())
97
+ .get('/response', () => new Response('Hi'))
98
+ .get('/error', () => new Error('Something went wrong'))
99
+ .get('/401', ({ set }) => {
100
+ set.status = 401
101
+
102
+ return 'Status should be 401'
103
+ })
104
+ .get('/timeout', async () => {
105
+ await new Promise((resolve) => setTimeout(resolve, 2000))
106
+
107
+ return 'A'
108
+ })
109
+ .all('/all', () => 'hi')
110
+ .listen(8080, ({ hostname, port }) => {
111
+ console.log(`🦊 Elysia is running at http://${hostname}:${port}`)
112
+ })
@@ -0,0 +1,45 @@
1
+ import { Elysia, t } from 'elysia'
2
+
3
+ const app = new Elysia({
4
+ cookie: {
5
+ secrets: 'Fischl von Luftschloss Narfidort',
6
+ sign: ['name']
7
+ }
8
+ })
9
+ .get(
10
+ '/council',
11
+ ({ cookie: { council } }) =>
12
+ (council.value = [
13
+ {
14
+ name: 'Rin',
15
+ affilation: 'Administration'
16
+ }
17
+ ]),
18
+ {
19
+ cookie: t.Cookie({
20
+ council: t.Array(
21
+ t.Object({
22
+ name: t.String(),
23
+ affilation: t.String()
24
+ })
25
+ )
26
+ })
27
+ }
28
+ )
29
+ .get('/create', ({ cookie: { name } }) => (name.value = 'Himari'))
30
+ .get(
31
+ '/update',
32
+ ({ cookie: { name } }) => {
33
+ name.value = 'seminar: Rio'
34
+ name.value = 'seminar: Himari'
35
+ name.maxAge = 86400
36
+
37
+ return name.value
38
+ },
39
+ {
40
+ cookie: t.Cookie({
41
+ name: t.Optional(t.String())
42
+ })
43
+ }
44
+ )
45
+ .listen(3000)
@@ -0,0 +1,38 @@
1
+ import { Elysia, t } from 'elysia'
2
+
3
+ class CustomError extends Error {
4
+ constructor(public name: string) {
5
+ super(name)
6
+ }
7
+ }
8
+
9
+ new Elysia()
10
+ .error({
11
+ CUSTOM_ERROR: CustomError
12
+ })
13
+ // global handler
14
+ .onError(({ code, error, status }) => {
15
+ switch (code) {
16
+ case "CUSTOM_ERROR":
17
+ return status(401, { message: error.message })
18
+
19
+ case "NOT_FOUND":
20
+ return "Not found :("
21
+ }
22
+ })
23
+ .post('/', ({ body }) => body, {
24
+ body: t.Object({
25
+ username: t.String(),
26
+ password: t.String(),
27
+ nested: t.Optional(
28
+ t.Object({
29
+ hi: t.String()
30
+ })
31
+ )
32
+ }),
33
+ // local handler
34
+ error({ error }) {
35
+ console.log(error)
36
+ }
37
+ })
38
+ .listen(3000)