Files
agent/.agent/skills/tech-stack/bun-solid-elysia/SKILL.md

5.0 KiB
Raw Blame History

name, description, tags
name description tags
bun-solid-elysia-stack High-performance SSR stack using Bun, SolidJS, Elysia, and Shadcn-solid
bun
solid
elysia
shadcn
ssr

🚀 Bun + SolidJS + ElysiaJS + Shadcn 技术栈规范

🛡️ 核心架构与约束 (Architecture & Constraints)

1. 运行时与构建 (Bun.js)

  • Runtime:强制使用 Bun.serve() 作为 HTTP 服务器。
  • Build: 使用 Bun.build() 及其插件系统。
  • Testing: 必须使用 bun:test 替代 Jest/Vitest。
  • Database: 强制使用 TypeORM + SQLite。必须使用 Repository 模式进行数据访问,禁止在 Controller 中直接编写 SQL。
  • Package Manager: 必须使用 bun install / add / run。严禁使用 npmyarn

2. 前端框架 (SolidJS & Solid Start)

  • Reactivity:
    • 严禁解构 Props (会导致响应式丢失)。必须使用 props.valuesplitProps
    • 严禁使用 mcp_chrome-devtools 调试时依赖 React DevTools 思维。Solid 是细粒度更新,无 VDOM diff。
    • 控制流: 必须使用 <Show>, <For>, <Switch> 等内置组件,禁止使用 array.map() 或三元运算符直接渲染列表/条件。
  • SSR/Hydration:
    • 服务端数据预取必须在 routeDatacreateServerData$ 中完成。
    • 禁止在 onMount 中执行影响首屏内容的操作(会导致水合不匹配)。

3. 后端服务 (ElysiaJS)

  • Type Safety: 必须使用 t.Object / t.String 等 Elysia 类型系统定义 DTO。
  • Validation:所有 API 必须有 schema 验证。
  • Performance: 路由注册应当利用 Elysia 的 AOT 编译特性,避免动态路由过度嵌套。

4. UI 组件库 (Shadcn-solid + Tailwind)

  • Styling:
    • 禁止书写 style 属性或 CSS 文件。必须使用 Tailwind Utility Classes。
    • 必须使用 cn() (clsx + tailwind-merge) 处理动态类名。
  • Components:
    • 优先复用 Shadcn-solid 组件。
    • 自定义组件必须支持 classclassList 属性透传。
  • Dark Mode: 必须通过 CSS 变量和 Tailwind dark: 前缀适配深色模式。

5. 移动端适配与国际化 (Mobile & i18n)

  • Responsive Design:
    • 必须采用 Mobile-First 策略:默认样式为移动端,使用 mm:, lg: 等断点覆盖 PC 端样式。
    • 严禁使用固定像素宽度 (px) 定义主要容器,必须使用百分比、rem 或 Tailwind 的 container/w-full
    • 交互适配Touch事件与Hover状态必须兼容使用 @media (hover: hover) 处理仅 PC 显示的交互)。
  • Internationalization (i18n):
    • 必须集成 @solid-primitives/i18n 或 Solid Start 官方推荐的 i18n 方案。
    • 严禁在 JSX 中硬编码文本。所有文案必须提取到 dictionarieslocales 资源文件中。
    • SSR支持: 服务端必须解析请求头 Accept-Language 或 URL 前缀,在 SSR 阶段注入当前语言字典,杜绝客户端水合时的内容闪烁。

🔍 代码审计要点 (@code-spec)

当 @code-spec 执行审计时,必须检查以下条目:

  1. 响应式丢失检查:
    • 检查组件 Props 是否被解构? (e.g. const { name } = props -> )
  2. 控制流优化:
    • 检查是否使用了 <For> 而不是 .map()? (Solid 的 <For> 对 keyed items 做了优化)
  3. 类型安全:
    • Elysia 路由是否有 body, query, paramst.* 定义?
  4. Bun 兼容性:
    • 是否引用了 Node.js 特有且 Bun 未实现的 API? (需查阅 Bun 兼容性表)
  5. 样式规范:
    • 是否存在硬编码颜色值? (应使用 CSS 变量如 bg-background text-primary)
  6. 国际化规范:
    • 检查组件中是否存在硬编码的中文/英文字符串? ( <span>登录</span> -> <span>{t('login')}</span>)
  7. 响应式检查:
    • 检查是否通过 md:, lg: 等断点处理了布局变化? 是否存在大块固定 px 宽度的容器?
  8. ORM 规范:
    • 是否正确使用了 TypeORM 的 @Entity 定义模型?
    • 是否通过 Repository 进行数据操作? (严禁裸写 SQL)

🧪 测试与验收标准 (@qa-tester)

当 @qa-tester 执行测试时,必须验证以下指标:

1. 性能指标 (Performance)

  • SSR 渲染耗时: < 50ms (利用 Bun 高性能 RSC 渲染)
  • 首屏加载 (LCP): < 1.0s
  • 水合错误 (Hydration): 控制台 0 Error/Warning

2. 功能测试

  • 路由跳转: 必须是 SPA 模式(无全页刷新)。
  • 表单交互: 提交后必须有 Loading 状态,支持 Enter 提交。

3. 兼容性

  • No-JS 支持: 核心内容在禁用 JavaScript 时必须可见 (SSR 直出)。
  • 浏览器: Chrome, Safari, Firefox 最新版。

4. 多端与多语言测试

  • Viewport: 必须覆盖 iPhone SE (375px), iPad Mini (768px), Desktop (1280px+)。
  • Touch: 移动端下按钮点击区域必须 >= 44x44px。
  • i18n:
    • 切换语言必须即时生效(或路由跳转)。
    • 刷新页面后,当前语言状态必须保持。
    • 检查是否存在未翻译的原始 Key 显示在界面上。