mcpField
T
trpc-patterns

trpc-patterns

github.com/blogic-cz开发374 次安装2 天前更新
代码仓库

关于 trpc-patterns

面向使用 TypeScript 和 tRPC 的开发者,提供 blogic-template-ts 风格的路由与过程实现规范。涵盖输入模式、访问控制、中间件、错误处理及类型推断。

主要功能

  1. 01内联简单输入模式
  2. 02按访问需求选择基础过程
  3. 03组合中间件并扩展上下文
  4. 04使用标准化应用错误
  5. 05依赖路由定义推断类型

适用场景

  1. 01实现或重构 tRPC 路由
  2. 02为过程配置身份验证与组织成员检查
  3. 03统一路由和中间件的错误处理

安装

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

$npx skills add https://github.com/blogic-cz/blogic-marketplace --skill trpc-patterns

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

包含的文件

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

references/
custom-procedures.md
error-handling.md
middleware-patterns.md
simple-schemas.md

详细介绍

TRPC 模式

概述

使用 blogic-template-ts 中成熟的模式实现 TRPC 路由器,涵盖输入架构、过程选择、中间件组合和错误处理。

何时使用此技能

在实现或重构 TRPC 路由器和过程时使用此技能,尤其是在选择基础过程、添加授权中间件或统一错误处理时。

核心规则

1) 将简单架构内联

直接在过程中定义简单的输入架构。

使用项目枚举和共享类型,而不是硬编码字符串字面量。

protectedProcedure.input(z.object({ organizationId: z.string().min(1) }));

遵循以下规则:

  • 将简单明了的架构内联。
  • 复用项目包中的共享枚举/类型。
  • 只有在复用需求或复杂度足以支持时,才提取架构常量。

在 references/simple-schemas.md 中查看详细示例。

2) 选择范围最窄的有效基础过程

按以下顺序选择基础过程:

  1. 根据访问要求选择,而不是为了实现方便。
  2. 无需身份验证时,选择 publicProcedure。
  3. 任何已通过身份验证的用户都可以访问时,选择 protectedProcedure。
  4. 需要全局管理员角色时,选择 adminProcedure。
  5. 需要基于 organizationId 限定成员资格时,选择 protectedMemberAccessProcedure。
  6. 只有在现有过程都无法表达所需访问规则时,才使用 .use() 构建自定义过程。

应用以下决策树:

  • 无需身份验证 -> publicProcedure
  • 需要身份验证,但不限定组织范围 -> protectedProcedure
  • 仅限全局管理员执行的操作 -> adminProcedure
  • 限定组织范围且需要检查成员资格的操作 -> protectedMemberAccessProcedure
  • 还需检查角色/权限/资源 -> 在最接近的基础过程上添加中间件

在 references/custom-procedures.md 中查看完整的过程示例和上下文行为。

3) 使用上下文增强组合中间件

使用 .use() 创建可复用的中间件,并始终通过 opts.next(...) 继续执行。

const procedure = protectedProcedure.use(async (opts) => opts.next({ ctx: {} }));

遵循以下规则:

  • 根据职责命名中间件函数。
  • 仅使用下游处理程序所需的值来增强上下文。
  • 优先基于现有基础过程构建,而不是引入新的过程。

在 references/middleware-patterns.md 中查看高级中间件模式。

4) 抛出标准化应用错误

从项目基础设施中导入并抛出标准化错误辅助函数。

if (!resource) throw notFoundError("Resource not found");

遵循以下规则:

  • 抛出基于辅助函数的错误(badRequestError、unauthorizedError、forbiddenError、notFoundError)。
  • 如果项目已有错误辅助函数,不要在路由和中间件代码中手动实例化 TRPCError。
  • 错误消息应以操作为导向,并针对具体领域。

在 references/error-handling.md 中查看完整模式。

5) 将导入视为项目约定

对于 blogic-template-ts 仓库,请遵循以下约定:

  • 从项目包中导入共享领域枚举/类型(例如 @project/common)。
  • 从项目基础设施模块中导入标准化错误辅助函数(例如 @/infrastructure/errors)。

在此生态系统之外工作时,请将这些约定映射到目标代码库中的等效模块。

类型推断指南

依赖后端路由器定义提供的静态 TypeScript 推断。

遵循以下规则:

  • 以一致的方式导出根路由器类型。
  • 将路由器类型导入前端 TRPC 客户端配置。
  • 避免手动定义与推断出的 TRPC 类型重复的端点响应/输入类型。

在 references/custom-procedures.md 中查看更多示例,并保持路由器导出方式一致。

范围边界

此技能专注于 TRPC 路由器结构、访问控制、中间件和错误处理。

将查询级性能调优(JOIN 策略、批量读取、减少 N+1、索引)交由 performance-optimization 技能处理。

资源

阅读长篇示例和实现细节:

  • references/simple-schemas.md - 内联模式的完整示例
  • references/custom-procedures.md - 基本过程的行为和上下文增强
  • references/middleware-patterns.md - 高级中间件组合模式
  • references/error-handling.md - 基于辅助函数的错误模式详解

如需查询和数据库性能方面的指导,请加载 performance-optimization 技能。

评论

支持 Markdown