@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: 中断错误类型

许可证

MIT