
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
deep-obj-compare
Advanced tools
A lightweight utility for deep comparison of JavaScript objects utilizing typescript with detailed error reporting and path tracking
A lightweight TypeScript utility for deep comparison of JavaScript objects with detailed error reporting and path tracking.
npm install deep-obj-compare
import { compareObjects } from 'deep-obj-compare';
const expected = { name: 'Alice', age: 30, address: { city: 'NYC' } };
const actual = { name: 'Alice', age: 30, address: { city: 'LA' } };
const errors = compareObjects(expected, actual);
// Returns:
// [
// { path: 'address.city', type: 'Value Mismatch', expected: 'NYC', actual: 'LA' , message: 'Value Mismatch'}
// ]
compareObjects(objA, objB, config?)Compares two objects and returns an array of differences.
| Parameter | Type | Description |
|---|---|---|
objA | any | First object to compare |
objB | any | Second object to compare |
config | ComparisonConfig | Optional configuration |
interface ComparisonConfig {
nameA?: string; // Display name for first object (default: 'expected')
nameB?: string; // Display name for second object (default: 'actual')
}
const expected = { items: [1, 2, 3] };
const actual = { items: [1, 2, 4] };
compareObjects(expected, actual);
// [{ path: 'items[2]', type: 'Value Mismatch', expected: 3, actual: 4 ,message:'Value Mismatch'}]
const source = { status: 'active' };
const target = { status: 'pending' };
compareObjects(source, target, { nameA: 'source', nameB: 'target' });
// [{ path: 'status', type: 'Value Mismatch', source: 'active', target: 'pending',message:'Value Mismatch' }]
const expected = { x: 1, y: 2 };
const actual = { x: 1 };
compareObjects(expected, actual);
// [
// { path: '(root)', type: 'Key Length Mismatch' ,expected:2, actual:1 ,message: 'Key count mismatch'},
// { path: 'y', type: 'Missing Key', expected: 2, actual: undefined, message: 'Property "y" is missing in actual.y but exists in expected.y' },
// ]
const expected = { created: new Date('2024-01-01') };
const actual = { created: new Date('2024-06-01') };
compareObjects(expected, actual);
// [{ path: 'created', type: 'Date Mismatch', expected: '2024-01-01T00:00:00.000Z', actual: '2024-06-01T00:00:00.000Z',message: 'Dates do not match' }]
| Type | Description |
|---|---|
Type Mismatch | Different types (e.g., string vs number) |
Value Mismatch | Same type but different values |
Null Mismatch | One is null, the other is not |
Array Length Mismatch | Arrays have different lengths |
Key Length Mismatch | Objects have different number of keys |
Missing Key | Key exists in one object but not the other |
Date Mismatch | Date values differ |
RegExp Mismatch | Regular expressions differ |
NaN Mismatch | One is NaN, the other is not |
MIT © bennyh960
FAQs
A lightweight utility for deep comparison of JavaScript objects utilizing typescript with detailed error reporting and path tracking
We found that deep-obj-compare demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.