This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
FastEvent 是一个功能强大、类型安全、经过充分测试的事件发射器库,支持 Node.js 和浏览器环境。项目使用 TypeScript 开发,采用 Monorepo 架构。
-
packages/native: 核心包,包含 FastEvent 主实现
src/event.ts: FastEvent 核心类,事件监听器树管理src/scope.ts: FastEventScope 类,事件作用域实现src/types/index.ts: 核心类型定义src/executors/: 监听器执行器(parallel, race, series, waterfall, first, last, random, balance)src/pipes/: 监听器管道(queue, throttle, debounce, timeout, retry, memorize)src/eventbus/: EventBus 实现src/utils/: 工具函数src/__tests__/: 单元测试(320+ 测试用例,99%+ 覆盖率)src/__benchmarks__: 性能测试
-
packages/components: 基于lit开发的组件库
- 组件库采用
webawesome
- 组件库采用
- 监听器树结构: 事件监听器以树形结构存储,支持层级事件命名(如
user/login) - 通配符支持:
*匹配单级路径(如user/*匹配user/login)**匹配多级路径(如user/**匹配user/login,user/profile/update)
- 作用域(Scope): 共享父级监听器表,自动为事件名添加前缀,不是隔离的命名空间
- 执行器(Executor): 控制监听器的执行方式(并行、串行、竞速等)
- 管道(Pipe): 包装监听器函数以实现额外功能(队列、节流、重试等)
- 保留事件: 使用
retain: true保留最后一次事件数据,新订阅者立即接收
# 构建所有包
bun run build
# 或使用 turbo
turbo build
# 构建 native 包
cd packages/native && bun run build- 单元测试使用Bun Test API
- 类型测试使用@type-challenges/utils断言库,保存在@packages\native\src__tests__\types
# 运行所有测试
bun run test
# 运行测试并生成覆盖率报告
bun run test:coverage
# 运行单个测试文件
npx vitest run <test-file-path>
# 监听模式运行测试
npx vitestbun run bench# 启动文档开发服务器
bun run docs:dev
# 构建文档
bun run docs:build
# 预览文档
bun run docs:preview# 创建 changeset
bun run changeset
# 发布到 npm(先构建,再版本更新,最后发布)
bun run release
# 同步到 cnpm
bun run sync- 类型安全: 所有新功能必须有完整的 TypeScript 类型定义
- 测试覆盖: 必须为功能添加单元测试,确保覆盖率保持在 99%+
- 向后兼容: 不能破坏现有 API,新增功能通过可选参数或新方法实现
- 文档更新: 更新 README.md 和 docs/ 目录下的文档
-
src/event.ts: FastEvent 主类,包含事件订阅/发布的核心逻辑
_addListener: 添加监听器到树结构_traverseToPath: 遍历监听器树,支持通配符匹配_executeListeners: 执行匹配的监听器emit: 同步触发事件emitAsync: 异步触发事件(使用 Promise.allSettled)
-
src/scope.ts: FastEventScope 类
- 作用域不创建新的监听器表,而是共享父级的监听器表
bind: 绑定到 FastEvent 实例并设置前缀_getScopeListener: 包装监听器以处理前缀逻辑
项目使用高级 TypeScript 类型特性:
- 泛型约束: Events, Meta, Context 三个泛型参数
- 条件类型: 根据 Transform 配置动态推导消息类型
- 通配符展开:
ExpandWildcard,WildcardEvents等类型工具 - 作用域事件:
ScopeEvents用于推导作用域的事件类型
所有代码注释使用中文编写,保持与现有代码库一致。
项目使用 Changesets 进行版本管理:
- 使用
bun run changeset创建 changeset,描述变更内容 - 版本号会根据 changeset 自动升级(major/minor/patch)
- 发布前会自动生成 CHANGELOG.md
- 发布会同步到 cnpm 镜像
- 主包:
dist/index.js,dist/index.mjs,dist/index.d.ts - Executors:
dist/executors/* - Pipes:
dist/pipes/* - EventBus:
dist/eventbus/* - DevTools:
devTools.js,devTools.mjs
构建使用 tsup(基于 esbuild),输出 ESM 和 CJS 双格式,包含 TypeScript 类型定义和 source maps。
- 使用 Bun 作为包管理器(
bun@1.3.5) - Node.js 版本要求:ES2020+
- 测试框架:Vitest
- 代码风格:Biome(替代 ESLint/Prettier)
- CI/CD:使用 GitHub Actions