export function shallowEqual(a: unknown, b: unknown): boolean {
if (Object.is(a, b)) {
return true
}
if (!isObjectLike(a) || !isObjectLike(b)) {
return false
}
const aKeys = Object.keys(a)
const bKeys = Object.keys(b)
if (aKeys.length !== bKeys.length) {
return false
}
for (const key of aKeys) {
if (!Object.prototype.hasOwnProperty.call(b, key)) {
return false
}
if (!Object.is(a[key], b[key])) {
return false
}
}
return true
}
function isObjectLike(value: unknown): value is Record<string, unknown> {
return typeof value === "object" && value !== null
}