# @blumintinc/microdiff 中文文档

规范地址：https://npmcn.com/package/%40blumintinc/microdiff/

版本：1\.1\.0
npm 元数据更新时间：2026-04-29T17:57:01.724Z
中文译文更新时间：2026-11-08T09:06:23.983Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40blumintinc/microdiff
原文对照：https://npmcn.com/package/%40blumintinc/microdiff/?lang=original
项目主页：https://github.com/BluMintInc/microdiff#readme
源码仓库：https://github.com/BluMintInc/microdiff

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：28.2 kB，7 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2026-04-29T01:29:37.015Z
- 最新版本发布：2026-04-29T17:57:01.562Z
- 近 30 天下载量：4528（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：2（近 12 个月 2 个）

## 中文简介

有可插接的原子型识别器的小型,快,零相依性的深度diff. Async Banana分叉/米克罗德夫.

## 安装

```sh
npm install @blumintinc/microdiff
```

也可以使用：`pnpm add @blumintinc/microdiff`、`yarn add @blumintinc/microdiff`、`bun add @blumintinc/microdiff`

## README

# @ blumintinc/ microdiff

小,快,零依赖 深潜水道与 **可插接的原子型识别**. 叉线 [Async Banana/微缩写](https://github.com/AsyncBanana/microdiff) 时间 `v1.5.0`。 。 。 .

## 这个叉子加了什么

关于 `diff()` API 让调用者配置哪些值作为原子叶处理(按值比较,从未重现为):

```ts
interface MicrodiffOptions {
  cyclesFix: boolean;
  isAtomic: (value: object) => boolean;
  isEqualAtomic: (a: unknown, b: unknown) => boolean;
}
```

-   **`isAtomic(value)`** ——回归 `true` 治疗 `value` 作为一叶.
-   **`isEqualAtomic(a, b)`** ——两个原子值的平等测试. `Object.is` 参考文献/NAN 平等情况 `diff()`,所以这只处理价值相等但差异化的参考案例.

省略时,两个选项都回到已公布的默认值(`defaultIsAtomic`, (中文(简体) ), `defaultEqualAtomic`) (中文(简体) ). 默认将下列作为原子处理:

-   `Date`, (中文(简体) ), `RegExp`, (中文(简体) ), `String`, (中文(简体) ), `Number` (上游微差平价)
-   `Temporal.*` 家庭(上游微差平价)
-   **时间戳形状** (实数 `firebase-admin/firestore` 实例 **财务报告和审定财务报表** 简单 `{_seconds, _nanoseconds}` 留下的地图 `structuredClone` 编号 : `deepmerge`() ——在 `1.1.0`

Firestore Timestamp 识别为结构( 否) `firebase-admin` 由于BluMint的主要消费者是Firestore公司(Firestore),因此默认是依赖性). 覆盖 `isAtomic` (返回数) `false`要禁用 .

## 为什么这个叉子存在

上游微维夫硬码在模块范围中将其原子类型列表. 没有延伸钩子。 供我们使用 `Timestamp` 在文档中嵌入的例,上游降入了 Timestamp 的 `_seconds` 编号 : `_nanoseconds` 私人田地和按财产分配 `CHANGE` diffs —— 以畸形的 Firestore 写作实现. 叉子暴露了现有的复发门 作为呼叫器提供的上游,让消费者可以教 `diff()` 关于他们自己的原子类型——另外将Firestore Timestamp识别建为默认.

没有任何选项的呼叫是严格意义上的上游超级集:对于所有上游手柄来说都是一样的,再加上正确处理Firestore Timerstamp.

## 安装

```sh
npm install @blumintinc/microdiff
```

## 使用量

Firestore Timerstamps 默认为原子(不需要选项):

```ts
import diff from "@blumintinc/microdiff";
import { Timestamp } from "firebase-admin/firestore";

const before = { lastUpdated: Timestamp.fromMillis(1000) };
const after = { lastUpdated: Timestamp.fromMillis(2000) };

diff(before, after);
// → [{ type: "CHANGE", path: ["lastUpdated"], value: <Timestamp 2000>, oldValue: <Timestamp 1000> }]
//   No `_seconds`/`_nanoseconds` descent. Timestamp identity preserved in `value` and `oldValue`.
```

通过扩展将额外的自定义类作为原子 `defaultIsAtomic`数字 :

```ts
import diff, { defaultIsAtomic, defaultEqualAtomic } from "@blumintinc/microdiff";
import { GeoPoint } from "firebase-admin/firestore";

const isGeoPoint = (v: object) => v instanceof GeoPoint;

diff(before, after, {
  isAtomic: (v) => isGeoPoint(v) || defaultIsAtomic(v),
  isEqualAtomic: (a, b) => {
    if (isGeoPoint(a as object) && isGeoPoint(b as object)) {
      return (a as GeoPoint).isEqual(b as GeoPoint);
    }
    return defaultEqualAtomic(a, b);
  },
});
```

注意组成模式:延伸 `defaultIsAtomic` 而不是替换它,否则 `Date` 编号 : `RegExp` 编号 : `Temporal.*` / Firestore Timerstamps 失去原子状态.

## API 密码

| 导出 | 说明 |
| --- | --- |
| `diff` (默认) | 深潜功能. drop-in API-可与上游微分兼容. |
| `defaultIsAtomic` | 默认上游. 匹配 `Date`, (中文(简体) ), `RegExp`, (中文(简体) ), `String`, (中文(简体) ), `Number`, (中文(简体) ), `Temporal.*`,以及Firestore Timerstamp的形状. |
| `defaultEqualAtomic` | 默认平等. 时间戳通过 `defaultTimestampToMillis`; 临时通过 `String()`; 丰富类型通过NaN-aware数字/字符串强制. |
| `defaultIsTimestampShape` | Firestore Timerstamps的结构鸭型上游(真例+平相图形状). |
| `defaultTimestampToMillis` | 从任何Firestore Timerstamp形状中提取出划时代的 ms . |
| `defaultRichTypes` | 冻结 `readonly string[]` 四个丰富类型的构建者名称. |
| `defaultTemporalTypes` | 冻结 `readonly string[]` 临时 API 构建器名称 `globalThis.Temporal`。 。 。 . |
| `Difference<TData>` | 歧视工会 `DifferenceCreate` 编号 : `DifferenceRemove` 编号 : `DifferenceChange`常规 `TData` 用于输入路径和值. |
| `MicrodiffOptions` | 选项形状。 所有字段均可通过 `Partial<MicrodiffOptions>` 在呼叫现场. |

## 许可证

麻省理工,从上游保存。 见 `LICENSE` 包括 BluMint 修改通知在内的全文.

## 常见问题

### @blumintinc/microdiff 是什么？

有可插接的原子型识别器的小型,快,零相依性的深度diff\. Async Banana分叉/米克罗德夫\.

### 如何安装 @blumintinc/microdiff？

在项目目录运行 npm install @blumintinc/microdiff，或使用 pnpm add / yarn add / bun add。

### @blumintinc/microdiff 支持 TypeScript 吗？

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

### @blumintinc/microdiff 支持 ESM 还是 CommonJS？

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

### @blumintinc/microdiff 可以商用吗？

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

### @blumintinc/microdiff 的下载量有多少？

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

### @blumintinc/microdiff 还在维护吗？

最新版本 1\.1\.0 发布于 2026/04/30（6 个月前）；至今共发布 2 个版本，其中过去 12 个月发布了 2 个；首次发布于 2026/04/29。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

