import { Doc } from '@hcengineering/core' import { deepEqual } from 'fast-equals' export function equalExceptKeys<T extends Doc> (a: T | T[], b: T | T[], keys: (keyof T)[]): boolean { function equal (a: T, b: T): boolean { const _a = { ...a } const _b = { ...b } for (const key of keys) { // eslint-disable-next-line @typescript-eslint/no-dynamic-delete if (key in _a) delete _a[key] // eslint-disable-next-line @typescript-eslint/no-dynamic-delete if (key in _b) delete _b[key] } return deepEqual(_a, _b) } if (Array.isArray(a) && Array.isArray(b)) { if (a.length !== b.length) { return false } for (let i = 0; i < a.length; i++) { if (!equal(a[i], b[i])) { return false } } return true } if (!Array.isArray(a) && !Array.isArray(b)) { return equal(a, b) } return false }