@foblex/mutator

中文文档
1.0.8发布于 2025/12/07MITTypeScriptESM + CJS近 30 天下载 8209

Angular Signals state engine with deep patch + undo/redo and notifier.

原始使用文档
文档目录5 节
  1. 🚀 Quick Start
  2. 🔧 API Reference
  3. Types
  4. ⚙️ Undo Limit
  5. 📄 License

@foblex/mutator

Lightweight Angular Signals state engine with deep patching, undo/redo, and semantic notifier.

@foblex/mutator is a small TypeScript library built on top of signal() from @angular/core.
It allows you to mutate state (create / update / delete), supports undo/redo with history limits, and emits semantic updates via a notifier string.

FrameworkAngular 17 + (Signals)
Size< 2 KB min+gzip
Undo limit50 (customizable via constructor)
LicenseMIT

🚀 Quick Start

npm i @foblex/mutator
import { effect, inject, Injectable } from '@angular/core';
import { Mutator } from '@foblex/mutator';

// 1. Define your state shape
interface FlowState {
  nodes: Record<string, { x: number; y: number }>;
}

// 2. Create a store class extending Mutator
@Injectable({ providedIn: 'root' })
class FlowStore extends Mutator<FlowState> {}

// 3. Inject and initialize the store
const flow = inject(FlowStore);
flow.initialize({ nodes: {} });

// 4. React to changes with `effect()`
effect(() => {
  const { version, notifier } = flow.changes();
  console.log('Changed (v' + version + ') by', notifier);
  console.table(flow.getSnapshot().nodes);
});

// 5. Perform operations
flow.create({ nodes: { n1: { x: 0, y: 0 } } }, 'init');
flow.update({ nodes: { n1: { x: 100, y: 100 } } }, 'move');
flow.update({ nodes: { n1: { y: 200 } } }, 'drag');
flow.undo(); // ⬅️ back to y: 100
flow.redo(); // ➡️ forward to y: 200

🔧 API Reference

MethodDescription
initialize(base)Set initial state and clears history
create(patch, notifier?)Adds new data
update(patch, notifier?)Updates existing fields (deep merge)
delete(patch, notifier?)Removes keys deeply
undo() / redo()Undo / redo one step
getSnapshot()Current state (base + stack)
changes: Signal<{ version; notifier }>Version + source of change
canUndo / canRedo: Signal<boolean>Live flags for UI buttons

Types

interface MutatorChange {
  version: number;
  notifier: string | null;
}

type DeepPartial<T> = {
  [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
};

⚙️ Undo Limit

provideMutator({
  limit: 100, // Default is 50
})

📄 License

MIT © Foblex

版本与发布记录

@foblex/mutator 共发布 8 个版本,首次发布于 2025/07/20;过去 12 个月发布了 1 个版本。

版本发布日期距今
1.0.8latest2025/12/0711 个月前
1.0.72025/07/261.3 年前
1.0.62025/07/261.3 年前
1.0.52025/07/261.3 年前
1.0.42025/07/211.3 年前
1.0.32025/07/211.3 年前

关于 @foblex/mutator 的常见问题

@foblex/mutator 是什么?

Angular Signals state engine with deep patch + undo/redo and notifier.

如何安装 @foblex/mutator?

在项目目录运行 npm install @foblex/mutator,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@angular/common(>=17.0.0)、@angular/core(>=17.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@foblex/mutator 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@foblex/mutator 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@foblex/mutator 可以商用吗?

@foblex/mutator 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@foblex/mutator 的下载量有多少?

根据 npm 官方下载统计,@foblex/mutator 在 2026/10/15 – 2026/11/13 这 30 天内被下载 8,209 次,日均约 274 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@foblex/mutator 还在维护吗?

最新版本 1.0.8 发布于 2025/12/07(11 个月前);至今共发布 8 个版本,其中过去 12 个月发布了 1 个;首次发布于 2025/07/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。