@viso/shared-fsm
v0.2.3
Published
一个轻量级、类型安全的有限状态机(Finite State Machine)实现,专为 TypeScript 项目设计。
Readme
@viso/shared-fsm
一个轻量级、类型安全的有限状态机(Finite State Machine)实现,专为 TypeScript 项目设计。
安装
npm install @viso/shared-fsm功能特点
- 🎯 类型安全: 完全基于 TypeScript 实现,提供完整的类型检查和智能提示
- 🪶 轻量级: 基于 shared-utils,体积小巧
- 🔄 状态管理: 完整的状态机实现,支持状态转换、事件系统
- 🛡️ 错误处理: 内置中断错误处理机制
- 🧪 经过测试: 完整的单元测试覆盖,确保稳定性和可靠性
- 📍 状态路径: 支持复杂的状态路径管理
使用方法
创建状态机
import { createFsm } from '@viso/shared-fsm'
// 定义状态类型
interface States {
idle: void
loading: void
success: string
error: Error
}
// 创建状态机
const fsm = createFsm<States>('idle')
// 状态转换
fsm.transition('loading')
fsm.transition('success', 'Operation completed')状态事件系统
// 监听状态变化
fsm.on('stateChange', (from, to, data) => {
console.log(`状态从 ${from} 转换到 ${to}`, data)
})
// 监听特定状态
fsm.onEnter('success', (data) => {
console.log('成功状态:', data)
})
fsm.onExit('loading', () => {
console.log('离开加载状态')
})错误处理
import { AbortError } from '@viso/shared-fsm'
try {
fsm.transition('error', new AbortError('操作被中断'))
} catch (error) {
if (error instanceof AbortError) {
console.log('中断错误:', error.message)
}
}API 参考
状态机核心
createFsm<States>(initialState): 创建状态机实例fsm.transition(state, data?): 状态转换fsm.getCurrentState(): 获取当前状态fsm.getStateData(): 获取当前状态数据
事件系统
fsm.on(event, handler): 注册事件监听器fsm.off(event, handler): 移除事件监听器fsm.onEnter(state, handler): 监听进入状态fsm.onExit(state, handler): 监听离开状态
状态路径
StatePath: 状态路径管理工具createStatePath(): 创建状态路径实例
错误处理
AbortError: 中断错误类型