mcpField
E
effect

effect

github.com/anomalyco开发225.3k86 次安装今天更新
代码仓库

关于 effect

面向使用 Effect 构建类型化、可组合 TypeScript 服务、模式和工作流的代码库。它要求贡献者查证当前 Effect v4 API,并遵循仓库规范,而非凭记忆作答。

主要功能

  1. 01依据 Effect v4 源码核实 API
  2. 02遵循本地代码与命名模式
  3. 03服务、模式和处理器编写指引
  4. 04Effect 测试与实时测试模式
  5. 05避免不安全类型转换和旧版 API

适用场景

  1. 01实现基于 Effect 的 TypeScript 工作流
  2. 02添加服务方法或模式
  3. 03编写 Effect 服务及平台行为测试

安装

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

$npx skills add https://github.com/anomalyco/opencode --skill effect

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

详细介绍

Effect

此代码库使用 Effect 构建类型安全、可组合的 TypeScript 服务、Schema 和工作流。

唯一事实来源

使用当前的 Effect v4 源码,不要依赖记忆或旧版 Effect v2/v3 示例。

  1. 如果 .opencode/references/effect 不存在,请将 https://github.com/Effect-TS/effect 克隆到该目录。请在项目中执行此操作,而不是在 skill 文件夹中。
  2. 在回答或实现 Effect 特定代码之前,搜索 .opencode/references/effect,查找准确的 API、示例、测试和命名模式。
  3. 引入新模式之前,也要检查现有代码库,了解项目本地的风格。
  4. 优先参考具体的源文件或附近的代码库示例来回答和实现。

指南

  • 优先使用当前的 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