mcpField
E
elysia-architecture

elysia-architecture

github.com/dobroslavradosavljevic开发341 次安装2 天前更新
代码仓库

关于 elysia-architecture

用于组织 Elysia HTTP 应用的可移植架构技能,规定文件布局、命名和职责边界,适用于搭建、实施或审查功能模块;框架 API 细节则依赖最新版 Elysia 文档。

主要功能

  1. 01按领域组织功能模块
  2. 02分离路由、Schema 和领域逻辑
  3. 03保持路由文件精简聚焦
  4. 04规定导入方向与跨功能边界
  5. 05按技术栈加载对应扩展

适用场景

  1. 01搭建新的 Elysia 功能模块
  2. 02统一放置端点和 Schema
  3. 03依据架构规则审查应用目录结构
  4. 04划分路由与服务的职责边界

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dobroslavradosavljevic/skills --skill elysia-architecture

安装后在 Claude Code 中输入/elysia-architecture确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
checklist.md
examples.md
rules.md
tree.md
with-api-key-auth.md
with-capability-authz.md
with-cron.md
with-domain-packages.md
with-drizzle.md
with-effect.md
with-env.md
with-http-errors.md
with-observability.md
with-openapi.md
with-service-auth.md
with-session-auth.md
with-shared-plugins.md
with-vitest.md
with-webhooks.md

详细介绍

Elysia 架构

适用于 Elysia HTTP 应用的通用项目规范。单独使用此技能即可,不依赖其他技能。

**职责:**规定代码存放位置、文件夹和文件的命名方式,以及所有权边界。

**不属于此技能:**Elysia API 的特殊行为、插件生命周期细节、Eden、适配器或最新的框架文档。相关内容请优先参考当前的 Elysia 文档。

如果目标仓库已有架构文档(例如 AGENTS.md),且与此处冲突,除非用户要求迁移以符合此技能,否则以仓库规范为准。

技术栈默认设置(核心)

部分默认设置
运行时Bun(如果应用已使用 Node/适配器,也可以继续使用)
HTTP将 Elysia 功能插件放在 src/modules/<feature>/ 下
版本Elysia 1.4,且 ≥ 1.4.30(安全底线;绝不基于不可信输入构建路由 schema)。Elysia 2 仍处于 beta 阶段——稳定发布前,项目规范代码继续使用 1.4
模块布局routes/ + schema/ + 领域逻辑文件夹
测试仓库使用 Vitest 时,在 tests/ 下使用 Vitest(单元 / 集成项目)

领域逻辑可以使用纯 TypeScript 模块。存在相应技术栈时,加载匹配的 with-* 扩展(见下文)。

模式

  1. 脚手架搭建——根据 checklist.md + tree.md 创建新的功能模块。
  2. 应用规范——将新端点 / schema / 服务放在规范位置。
  3. 审查——对照 rules.md 检查目录结构;提出移动建议;不要另创一套并行布局。

硬性规则(核心)

  1. **功能模块 = src/modules/<feature>/。**按领域(billing、users)分组,而不是在应用根目录按技术层分组。
  2. 每个路由文件 = 一个导出的 const Elysia 插件,带有稳定的 name,通常只处理一个 HTTP 动词(或紧密相关的一组动词)。不要将无关的动词塞进同一个文件。不要 export function makeXRoutes(...)。
  3. routes/index.ts 仅作为挂载表——使用 .use(child)(+ prefix)。不要放处理器、领域逻辑或共享映射器。
  4. schema 放在 schema/ 下(按需使用 body、response、query、params)。不要把 DTO 堆进路由文件;如果 schema 已定义契约,也不要另行创建手写的响应接口。
  5. **路由保持精简。**HTTP 相关内容(认证守卫、状态映射、请求 / 响应)放在路由文件中;业务规则放在服务(或纯领域模块)中。
  6. **不要创建路由工厂 / 共享 HTTP 封装。**不要另造封装处理器的 makeSyncGet、mapXToHttp 或 utils/*-http.ts。在各自的路由文件中直接处理边界逻辑。
  7. 导入进程资源,不要注入。数据库、Effect 运行时、环境变量、队列等:使用 import { db } from "…"、import { runtime } from "…"。禁止使用 export function cmsRoutes(db: Db)、在功能路由上调用 .decorate("db", db) / .decorate("runtime", runtime),或通过挂载表参数传递这些值。共享包插件可以接收选项(来源、前缀);应用仍需导入各自的单例。
  8. **仅在 HTTP 边界映射失败。**公开响应体保持精简(例如 { error: string } + 状态码)。不要泄露内部原因。
  9. **不要为 HTTP 扩充 utils/。**优先使用 schema/、服务 / 领域逻辑,或直接在路由中处理边界逻辑。
  10. **命名:**文件夹使用名词 / 领域名称;文件使用动作或方面名称(create.ts、status.ts)。叶子名称不要重复父文件夹名称(billing/billing-status.ts → billing/routes/status.ts)。
  11. **导入方向:**routes → schema + services;services 不得导入 routes。跨功能依赖应通过 services / 共享包,而不是 route→route 导入。
  12. 挂载:从应用入口(或父功能的挂载表)挂载功能目录树。

详细说明、反模式和示例:rules.md、tree.md、examples.md。

渐进式披露

需求阅读
规范目录树和命名references/tree.md
强制执行规则并规避反模式references/rules.md
脚手架 / 审查清单references/checklist.md
优劣布局示例references/examples.md
可选的技术栈扩展下方的 扩展

扩展

仅当存在匹配的技术栈(或用户提出要求)时,才加载扩展。 扩展会添加规则,不会替代核心目录树。

适用情况扩展
Effect 服务 / Layers / 标记错误with-effect.md
T3 Env / 包不得读取 process.envwith-env.md
会话身份验证挂载 + { auth: true } 宏with-session-auth.md
能力 / 授权 / 身份权限with-capability-authz.md
jobs / 公共 API 上的 Bearer API 密钥with-api-key-auth.md
Drizzle 架构包 + 服务中的 DBwith-drizzle.md
从路由架构派生 OpenAPIwith-openapi.md
请求日志 + OTEL + Effect 追踪器with-observability.md
稳定的公共错误正文 + 边缘映射with-http-errors.md
packages/* 中的领域逻辑、应用模块中的 HTTPwith-domain-packages.md
共享与应用本地 Elysia 插件with-shared-plugins.md
进程内 cron 触发with-cron.md
Provider Webhookwith-webhooks.md
内部共享密钥路由with-service-auth.md
Vitest — Eden treaty(app) / 测试内容with-vitest.md

评论

支持 Markdown