Dev Build / cleanup (push) Canceled after 0s
Dev Build / typecheck (push) Canceled after 0s
Dev Build / build (linux-arm64, ubuntu-24.04-arm, linux-arm64) (push) Canceled after 0s
Dev Build / build (linux-x64, ubuntu-latest, linux-x64) (push) Canceled after 0s
Dev Build / build (win-x64, windows-latest, win32-x64) (push) Canceled after 0s
Dev Build / dispatch-dev-docker (push) Skipped
62 lines
1.4 KiB
Plaintext
62 lines
1.4 KiB
Plaintext
export * from '@tanstack/store'
|
|
|
|
export { useStore } from './useStore'
|
|
|
|
export function shallow<T>(objA: T, objB: T) {
|
|
if (Object.is(objA, objB)) {
|
|
return true
|
|
}
|
|
|
|
if (
|
|
typeof objA !== 'object' ||
|
|
objA === null ||
|
|
typeof objB !== 'object' ||
|
|
objB === null
|
|
) {
|
|
return false
|
|
}
|
|
|
|
if (objA instanceof Map && objB instanceof Map) {
|
|
if (objA.size !== objB.size) return false
|
|
for (const [k, v] of objA) {
|
|
if (!objB.has(k) || !Object.is(v, objB.get(k))) return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
if (objA instanceof Set && objB instanceof Set) {
|
|
if (objA.size !== objB.size) return false
|
|
for (const v of objA) {
|
|
if (!objB.has(v)) return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
if (objA instanceof Date && objB instanceof Date) {
|
|
if (objA.getTime() !== objB.getTime()) return false
|
|
return true
|
|
}
|
|
|
|
const keysA = getOwnKeys(objA)
|
|
if (keysA.length !== getOwnKeys(objB).length) {
|
|
return false
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
for (let i = 0; i < keysA.length; i++) {
|
|
if (
|
|
!Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||
|
|
!Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])
|
|
) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
function getOwnKeys(obj: object): Array<string | symbol> {
|
|
return (Object.keys(obj) as Array<string | symbol>).concat(
|
|
Object.getOwnPropertySymbols(obj),
|
|
)
|
|
}
|