Skip to content

更新历史

3.1

3.1 围绕可撤销删除、节点复制与多形态树,新增回收站(逻辑删除)、copyNode、跨树操作与多根树。

新特性

  • 回收站(逻辑删除):通过 recyclebin 配置启用。deleteNode(node, { recycle: true }) 将子树连同内部结构移入回收站(复用移动算法,事务原子),clearRecycleBin() 一键清空;所有读取与写方法支持 includeRecyclebin 视角参数——默认视角下站内节点逻辑不存在,true 时可作为普通节点操作(恢复 = 站内视角读出 + moveNode 移出)。
  • 节点复制 copyNode:整个操作在事务内以固定条数的集合 SQL 完成,数据库访问次数与后代数量无关;支持仅复制自身(includeDescendants: false)、字段过滤(fields)与跨树复制(options.treeId)。
  • 跨树移动moveNode 支持 options.treeId 跨树移动子树;toNode 缺省时迁出为该 treeId 新树的根;canMoveTo 同步支持跨树判定。
  • 多根树 MultiRootFlexTreeManager:以隐藏根实现用户视角的多顶层节点树,level 自动归一化,单树操作原样可用。
  • countField 后代数量:所有查询方法与导出方法(toJson/toList)支持 countField 参数,由数据库端按 (rightValue - leftValue - 1) / 2 直接计算,不受 level 截断影响;回收站场景下为可见口径。
  • 新增 sql.js 适配器flextree-sqljs-adapter):基于 sql.js,在浏览器(wasm)中运行完整树结构。

3.0

3.0 是一次围绕数据安全、数据库兼容性与开发体验的重大升级。

新特性

  • 事务化写入与并发脏读修复write 内部的所有操作现由数据库事务包裹,任一失败整体回滚;并通过写事务上下文隔离与读守卫,避免写操作过程中并发读取到中间态(脏读)。
  • 单例模式FlexTreeManager.getInstance 基于表名返回同一个实例,避免重复创建。
  • 节点事件:新增 node:addednode:deletednode:clearednode:updatednode:moved 等节点级事件。
  • 树遍历 forEach:支持 DFS / BFS 两种模式,可中断、可限制层级、可指定起点。
  • 树修复 repair:基于 level 重建被破坏的左右值结构,并自动校验完整性。
  • 嵌套批量添加addNodes 支持通过 children 字段一次性添加整棵子树。
  • FlexTree 懒加载:新增 lazy 选项,节点可按需加载。
  • 树导出FlexTreeManager 新增 getTree / toJson / toList 便捷方法。
  • 细粒度校验verify 基于纯 SQL 校验,覆盖节点总数、值完整性、基本关系、唯一性、层级关系。
  • 新增 Bun SQLite 适配器flextree-bun-sqlite-adapter)。
  • 类型增强treeId 支持 string;新增 FlexTreeNodeInput 嵌套输入类型。

改进

  • 工具链从 pnpm 迁移至 Bun,测试迁移至 Bun Test
  • 升级 TypeScript 至 6、oxlint 至 1.76。
  • 测试用例内联至各包 __tests__/,并新增一整套共享测试工具。

破坏性变更

  • 适配器接口:readyconnected,新增必需方法 transaction 与可选字段 type
  • FlexTreeManagerready()connected()assertDriverReady()assertConnected()
  • 移除 sqlstring 依赖,改用内置 SQL 转义器。
  • 要求 TypeScript 6 及以上。

2.x 及更早版本

详见 GitHub Releases