@ 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数字/字符串强制. |
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 修改通知在内的全文.