@blumintinc/microdiff

中文文档
1.1.0发布于 2026/04/30MITTypeScriptESM + CJS零依赖近 30 天下载 4528

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

中文使用文档
文档目录6 节
  1. 这个叉子加了什么
  2. 为什么这个叉子存在
  3. 安装
  4. 使用量
  5. API 密码
  6. 许可证

@ blumintinc/ microdiff

小,快,零依赖 深潜水道与 可插接的原子型识别. 叉线 Async Banana/微缩写 时间 v1.5.0。 。 。 .

这个叉子加了什么

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

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.

安装

npm install @blumintinc/microdiff

使用量

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

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数字 :

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数字/字符串强制.
defaultIsTimestampShapeFirestore 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 共发布 2 个版本,首次发布于 2026/04/29;过去 12 个月发布了 2 个版本。

版本发布日期距今
1.1.0latest2026/04/306 个月前
1.0.02026/04/296 个月前

关于 @blumintinc/microdiff 的常见问题

@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 和提交记录判断。