`fast-deep-equal` package in Puck codebase.
In this article, we review fast-deep-equal package in Puck codebase. We will look at:
-
What is fast-deep-equal package?
-
Usage in Puck codebase.

What is fast-deep-equal package?
fast-deep-equal package the fastest deep equality check with Date, RegExp and ES6 Map, Set and typed arrays support.
Install
npm install fast-deep-equal
Features
-
ES5 compatible
-
works in node.js (8+) and browsers (IE9+)
-
checks equality of Date and RegExp objects by value.
ES6 equal (require('fast-deep-equal/es6')) also supports:
-
Maps
-
Sets
-
Typed arrays
Usage
var equal = require('fast-deep-equal'); console.log(equal({foo: 'bar'}, {foo: 'bar'})); // true
To support ES6 Maps, Sets and Typed arrays equality use:
var equal = require('fast-deep-equal/es6'); console.log(equal(Int16Array([1, 2]), Int16Array([1, 2]))); // true
To use with React (avoiding the traversal of React elements’ _owner property that contains circular references and is not needed when comparing the elements — borrowed from react-fast-compare):
var equal = require('fast-deep-equal/react'); var equal = require('fast-deep-equal/es6/react');
Learn more about fast-deep-equal.
Usage in Puck codebase.
In puck/packages/core/lib/get-changed.ts, you will find the following code:
import { ComponentData } from "../types"; import fdeq from "fast-deep-equal"; export const getChanged = ( newItem: Omit<Partial<ComponentData<any>>, "type"> | undefined, oldItem: Omit<Partial<ComponentData<any>>, "type"> | null | undefined ) => { return newItem ? Object.keys(newItem.props || {}).reduce((acc, item) => { const newItemProps = newItem?.props || {}; const oldItemProps = oldItem?.props || {}; return { ...acc, [item]: !fdeq(oldItemProps[item], newItemProps[item]), }; }, {}) : {}; };
This code tells us that you could import something like fdeq from the fast-deep-equal.
About me:
Hey, my name is Ramu Narasinga. Email: ramu.narasinga@gmail.com
Tired of AI-generated code that works but nobody understands?
I spent 3+ years studying OSS codebases and wrote 350+ articles on what makes them production-grade. I built an open source tool that reviews your PR against your existing codebase patterns.
Your codebase. Your patterns. Enforced.