https://github.com/opensly/deep-equal-check
Fast deep equality checker for modern JavaScript and TypeScript – robust, configurable, and safe for all data types.
https://github.com/opensly/deep-equal-check
deep-equal deep-equals javascript
Last synced: 8 months ago
JSON representation
Fast deep equality checker for modern JavaScript and TypeScript – robust, configurable, and safe for all data types.
- Host: GitHub
- URL: https://github.com/opensly/deep-equal-check
- Owner: opensly
- License: mit
- Created: 2025-07-19T17:55:14.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-07-20T06:40:37.000Z (8 months ago)
- Last Synced: 2025-07-20T08:29:01.499Z (8 months ago)
- Topics: deep-equal, deep-equals, javascript
- Language: TypeScript
- Homepage:
- Size: 58.6 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# deep-equal-check
Fast deep equality checker for modern JavaScript and TypeScript – robust, configurable, and safe for all data types.
## Features
- **3-10x faster** than popular alternatives (16.7M ops/sec)
- **Zero dependencies** - completely self-contained
- **TypeScript first** - comprehensive type definitions
- **Highly configurable** - customizable comparison options
- **Circular reference safe** - prevents infinite recursion
- **Universal** - works in Node.js, browsers, JavaScript & TypeScript projects
- **Hybrid optimization** - combines fast paths with robust structure
## Installation
```bash
npm install deep-equal-check
```
## Quick Start
### TypeScript/ES Modules
```typescript
import deepEqualCheck from 'deep-equal-check';
// Basic usage
deepEqualCheck({a: 1}, {a: 1}); // true
deepEqualCheck([1, 2, 3], [1, 2, 3]); // true
// Complex objects
const obj1 = {
date: new Date('2023-01-01'),
regex: /test/gi,
set: new Set([1, 2, 3]),
map: new Map([['key', 'value']])
};
const obj2 = {
date: new Date('2023-01-01'),
regex: /test/gi,
set: new Set([1, 2, 3]),
map: new Map([['key', 'value']])
};
deepEqualCheck(obj1, obj2); // true
```
### JavaScript/CommonJS
```javascript
const deepEqualCheck = require('deep-equal-check');
// Basic usage
deepEqualCheck({a: 1}, {a: 1}); // true
deepEqualCheck([1, 2, 3], [1, 2, 3]); // true
// With options
deepEqualCheck(NaN, NaN, { nanEqual: true }); // true
deepEqualCheck(+0, -0, { strictZero: true }); // false
```
## Performance
Run the built-in benchmark:
```bash
npm run benchmark
```
## Architecture
The library uses a **hybrid optimization strategy** that combines:
- **Fast inline paths** for primitives, arrays, dates, and regex
- **Modular structure** for complex cases (sets, maps, objects)
- **Order-independent comparisons** for collections
- **Circular reference detection** with proper WeakMap handling
### Supported Types
- ✅ **Primitives** (numbers, strings, booleans, null, undefined)
- ✅ **Arrays** (including nested and mixed types)
- ✅ **Objects** (plain objects, custom constructors)
- ✅ **ES6+ Types** (Set, Map, TypedArray, ArrayBuffer)
- ✅ **Built-in Objects** (Date, RegExp, Error)
- ✅ **Boxed Primitives** (String, Number, Boolean)
- ✅ **Circular References** (with infinite recursion protection)
### Performance Results
- **16.7M operations/second** - Basic operations (simple cases)
- **9.0M operations/second** - Mixed operations (complex cases)
- **6.3x faster** than lodash/isEqual
- **5.0x faster** than deep-eql
- **Competitive** with fast-deep-equal (with circular reference support)
- **Strong performance** on complex data types (Sets, Maps, nested objects)
### Run Comparative Benchmarks
```bash
npx ts-node --project benchmark/tsconfig.json benchmark/compare-libraries.ts
```
## License
MIT