关于 effect
面向使用 Effect 构建类型化、可组合 TypeScript 服务、模式和工作流的代码库。它要求贡献者查证当前 Effect v4 API,并遵循仓库规范,而非凭记忆作答。
主要功能
- 01依据 Effect v4 源码核实 API
- 02遵循本地代码与命名模式
- 03服务、模式和处理器编写指引
- 04Effect 测试与实时测试模式
- 05避免不安全类型转换和旧版 API
适用场景
- 01实现基于 Effect 的 TypeScript 工作流
- 02添加服务方法或模式
- 03编写 Effect 服务及平台行为测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ anomalyco/ opencode --skill effect安装后在 Claude Code 中输入/effect确认已加载。
详细介绍
Effect
此代码库使用 Effect 构建类型安全、可组合的 TypeScript 服务、Schema 和工作流。
唯一事实来源
使用当前的 Effect v4 源码,不要依赖记忆或旧版 Effect v2/v3 示例。
- 如果
.opencode/references/effect不存在,请将https://github.com/Effect-TS/effect克隆到该目录。请在项目中执行此操作,而不是在 skill 文件夹中。 - 在回答或实现 Effect 特定代码之前,搜索
.opencode/references/effect,查找准确的 API、示例、测试和命名模式。 - 引入新模式之前,也要检查现有代码库,了解项目本地的风格。
- 优先参考具体的源文件或附近的代码库示例来回答和实现。
指南
- 优先使用当前的 Effect v4 API 和项目本地模式,不要采用旧博客文章、示例或凭对包的记忆猜测。
- 对多步骤工作流,使用
Effect.gen(function* () { ... })。 - 添加可复用的服务方法或重要工作流时,使用
Effect.fn("Name")或Effect.fnUntraced(...)定义具名 Effect。 - API 和领域数据结构优先使用 Effect
Schema。建模新的错误类型时,使用品牌化 Schema 表示 ID,并使用Schema.TaggedErrorClass定义类型化领域错误。 - 保持 HTTP 处理程序精简:解码输入、读取请求上下文、调用服务并映射传输错误。将业务规则放在服务中。
- 在 Effect 服务代码中,如果周边代码已采用 Effect 感知的平台抽象和依赖项,就优先使用它们,而不是临时拼凑 Promise。
- 明确组合 layer。避免采用过于宽泛的隐式依赖注入方式,以免难以发现缺失的依赖项。
- 编写测试时,优先使用代码库现有的 Effect 测试辅助工具;对于文件系统、git、子进程、锁或计时行为,使用 live 测试。
- 不要仅为通过类型检查而引入
any、非空断言、未经检查的类型转换或旧版 Effect API。 - 不要凭记忆作答。请先对照
.opencode/references/effect或附近的代码进行核实。
测试模式
- 对于涉及 Effect 服务、layer、运行时上下文、作用域资源或平台集成的测试,使用
packages/core/test/lib/effect.ts中的testEffect(...)。 - 对于文件系统、git 仓库、HTTP 服务端、套接字、子进程、锁、真实时间及其他实时平台行为,使用
it.live(...)。 - 在
packages/core等包目录中运行测试;切勿在代码库根目录运行包测试。 - 优先使用显式测试 layer,而不是临时创建受管理的运行时。在测试文件中清晰呈现依赖项的注入过程。
- 使用带作用域的测试夹具和 finalizer 清理必须回收的资源,包括临时目录、标记、数据库、fiber、服务端和全局状态。
评论
支持 Markdown