deep-eql
Advanced tools
Comparing version 2.0.2 to 3.0.0
313
deep-eql.js
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.deepEqual = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
'use strict'; | ||
/* globals Symbol: true, Uint8Array: true, WeakMap: true */ | ||
/* globals Symbol: false, Uint8Array: false, WeakMap: false */ | ||
/*! | ||
@@ -10,46 +10,22 @@ * deep-eql | ||
/*! | ||
* Module dependencies | ||
*/ | ||
var type = require('type-detect'); | ||
function FakeMap() { | ||
this.clear(); | ||
this._key = 'chai/deep-eql__' + Math.random() + Date.now(); | ||
} | ||
FakeMap.prototype = { | ||
clear: function clearMap() { | ||
this.keys = []; | ||
this.values = []; | ||
return this; | ||
get: function getMap(key) { | ||
return key[this._key]; | ||
}, | ||
set: function setMap(key, value) { | ||
var index = this.keys.indexOf(key); | ||
if (index >= 0) { | ||
this.values[index] = value; | ||
} else { | ||
this.keys.push(key); | ||
this.values.push(value); | ||
if (!Object.isFrozen(key)) { | ||
Object.defineProperty(key, this._key, { | ||
value: value, | ||
configurable: true, | ||
}); | ||
} | ||
return this; | ||
}, | ||
get: function getMap(key) { | ||
return this.values[this.keys.indexOf(key)]; | ||
}, | ||
delete: function deleteMap(key) { | ||
var index = this.keys.indexOf(key); | ||
if (index >= 0) { | ||
this.values = this.values.slice(0, index).concat(this.values.slice(index + 1)); | ||
this.keys = this.keys.slice(0, index).concat(this.keys.slice(index + 1)); | ||
} | ||
return this; | ||
}, | ||
}; | ||
var MemoizeMap = null; | ||
if (typeof WeakMap === 'function') { | ||
MemoizeMap = WeakMap; | ||
} else { | ||
MemoizeMap = FakeMap; | ||
} | ||
var MemoizeMap = typeof WeakMap === 'function' ? WeakMap : FakeMap; | ||
/*! | ||
@@ -486,2 +462,3 @@ * Check to see if the MemoizeMap has recorded a result of the two operands | ||
'use strict'; | ||
/* ! | ||
@@ -492,8 +469,5 @@ * type-detect | ||
*/ | ||
var getPrototypeOfExists = typeof Object.getPrototypeOf === 'function'; | ||
var promiseExists = typeof Promise === 'function'; | ||
var globalObject = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : self; // eslint-disable-line | ||
var isDom = 'location' in globalObject && 'document' in globalObject; | ||
var htmlElementExists = typeof HTMLElement !== 'undefined'; | ||
var isArrayExists = typeof Array.isArray === 'function'; | ||
var symbolExists = typeof Symbol !== 'undefined'; | ||
@@ -509,7 +483,7 @@ var mapExists = typeof Map !== 'undefined'; | ||
var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; | ||
var setIteratorPrototype = getPrototypeOfExists && setEntriesExists && Object.getPrototypeOf(new Set().entries()); | ||
var mapIteratorPrototype = getPrototypeOfExists && mapEntriesExists && Object.getPrototypeOf(new Map().entries()); | ||
var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries()); | ||
var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries()); | ||
var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; | ||
var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); | ||
var stringIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; | ||
var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function'; | ||
var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); | ||
@@ -584,3 +558,6 @@ var toStringLeftSliceLength = 8; | ||
*/ | ||
if (isArrayExists && Array.isArray(obj)) { | ||
if ( | ||
Array.isArray(obj) && | ||
(symbolToStringTagExists === false || !(Symbol.toStringTag in obj)) | ||
) { | ||
return 'Array'; | ||
@@ -650,3 +627,3 @@ } | ||
*/ | ||
if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'BLOCKQUOTE') { | ||
if (obj instanceof HTMLElement && obj.tagName === 'BLOCKQUOTE') { | ||
return 'HTMLQuoteElement'; | ||
@@ -667,3 +644,3 @@ } | ||
*/ | ||
if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'TD') { | ||
if (obj instanceof HTMLElement && obj.tagName === 'TD') { | ||
return 'HTMLTableDataCellElement'; | ||
@@ -684,3 +661,3 @@ } | ||
*/ | ||
if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'TH') { | ||
if (obj instanceof HTMLElement && obj.tagName === 'TH') { | ||
return 'HTMLTableHeaderCellElement'; | ||
@@ -717,138 +694,136 @@ } | ||
if (getPrototypeOfExists) { | ||
var objPrototype = Object.getPrototypeOf(obj); | ||
/* ! Speed optimisation | ||
* Pre: | ||
* regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) | ||
* regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) | ||
* Post: | ||
* regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) | ||
* regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) | ||
*/ | ||
if (objPrototype === RegExp.prototype) { | ||
return 'RegExp'; | ||
} | ||
var objPrototype = Object.getPrototypeOf(obj); | ||
/* ! Speed optimisation | ||
* Pre: | ||
* regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) | ||
* regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) | ||
* Post: | ||
* regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) | ||
* regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) | ||
*/ | ||
if (objPrototype === RegExp.prototype) { | ||
return 'RegExp'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* date x 2,130,074 ops/sec ±4.42% (68 runs sampled) | ||
* Post: | ||
* date x 3,953,779 ops/sec ±1.35% (77 runs sampled) | ||
*/ | ||
if (objPrototype === Date.prototype) { | ||
return 'Date'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* date x 2,130,074 ops/sec ±4.42% (68 runs sampled) | ||
* Post: | ||
* date x 3,953,779 ops/sec ±1.35% (77 runs sampled) | ||
*/ | ||
if (objPrototype === Date.prototype) { | ||
return 'Date'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) | ||
* ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": | ||
* Test: `Object.prototype.toString.call(Promise.resolve())`` | ||
* - Chrome <=47 === "[object Object]" | ||
* - Edge <=20 === "[object Object]" | ||
* - Firefox 29-Latest === "[object Promise]" | ||
* - Safari 7.1-Latest === "[object Promise]" | ||
*/ | ||
if (promiseExists && objPrototype === Promise.prototype) { | ||
return 'Promise'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) | ||
* ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": | ||
* Test: `Object.prototype.toString.call(Promise.resolve())`` | ||
* - Chrome <=47 === "[object Object]" | ||
* - Edge <=20 === "[object Object]" | ||
* - Firefox 29-Latest === "[object Promise]" | ||
* - Safari 7.1-Latest === "[object Promise]" | ||
*/ | ||
if (promiseExists && objPrototype === Promise.prototype) { | ||
return 'Promise'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* set x 2,222,186 ops/sec ±1.31% (82 runs sampled) | ||
* Post: | ||
* set x 4,545,879 ops/sec ±1.13% (83 runs sampled) | ||
*/ | ||
if (setExists && objPrototype === Set.prototype) { | ||
return 'Set'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* set x 2,222,186 ops/sec ±1.31% (82 runs sampled) | ||
* Post: | ||
* set x 4,545,879 ops/sec ±1.13% (83 runs sampled) | ||
*/ | ||
if (setExists && objPrototype === Set.prototype) { | ||
return 'Set'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* map x 2,396,842 ops/sec ±1.59% (81 runs sampled) | ||
* Post: | ||
* map x 4,183,945 ops/sec ±6.59% (82 runs sampled) | ||
*/ | ||
if (mapExists && objPrototype === Map.prototype) { | ||
return 'Map'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* map x 2,396,842 ops/sec ±1.59% (81 runs sampled) | ||
* Post: | ||
* map x 4,183,945 ops/sec ±6.59% (82 runs sampled) | ||
*/ | ||
if (mapExists && objPrototype === Map.prototype) { | ||
return 'Map'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) | ||
* Post: | ||
* weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) | ||
*/ | ||
if (weakSetExists && objPrototype === WeakSet.prototype) { | ||
return 'WeakSet'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) | ||
* Post: | ||
* weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) | ||
*/ | ||
if (weakSetExists && objPrototype === WeakSet.prototype) { | ||
return 'WeakSet'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) | ||
* Post: | ||
* weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) | ||
*/ | ||
if (weakMapExists && objPrototype === WeakMap.prototype) { | ||
return 'WeakMap'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) | ||
* Post: | ||
* weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) | ||
*/ | ||
if (weakMapExists && objPrototype === WeakMap.prototype) { | ||
return 'WeakMap'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) | ||
* ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": | ||
* Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (dataViewExists && objPrototype === DataView.prototype) { | ||
return 'DataView'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) | ||
* ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": | ||
* Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (dataViewExists && objPrototype === DataView.prototype) { | ||
return 'DataView'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) | ||
* ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": | ||
* Test: `Object.prototype.toString.call(new Map().entries())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (mapExists && objPrototype === mapIteratorPrototype) { | ||
return 'Map Iterator'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) | ||
* ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": | ||
* Test: `Object.prototype.toString.call(new Map().entries())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (mapExists && objPrototype === mapIteratorPrototype) { | ||
return 'Map Iterator'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) | ||
* ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": | ||
* Test: `Object.prototype.toString.call(new Set().entries())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (setExists && objPrototype === setIteratorPrototype) { | ||
return 'Set Iterator'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) | ||
* ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": | ||
* Test: `Object.prototype.toString.call(new Set().entries())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (setExists && objPrototype === setIteratorPrototype) { | ||
return 'Set Iterator'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) | ||
* ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": | ||
* Test: `Object.prototype.toString.call([][Symbol.iterator]())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { | ||
return 'Array Iterator'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) | ||
* ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": | ||
* Test: `Object.prototype.toString.call([][Symbol.iterator]())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { | ||
return 'Array Iterator'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) | ||
* ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": | ||
* Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (stringIteratorExists && objPrototype === stringIteratorPrototype) { | ||
return 'String Iterator'; | ||
} | ||
/* ! Spec Conformance | ||
* (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) | ||
* ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": | ||
* Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` | ||
* - Edge <=13 === "[object Object]" | ||
*/ | ||
if (stringIteratorExists && objPrototype === stringIteratorPrototype) { | ||
return 'String Iterator'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) | ||
* Post: | ||
* object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) | ||
*/ | ||
if (objPrototype === null) { | ||
return 'Object'; | ||
} | ||
/* ! Speed optimisation | ||
* Pre: | ||
* object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) | ||
* Post: | ||
* object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) | ||
*/ | ||
if (objPrototype === null) { | ||
return 'Object'; | ||
} | ||
@@ -855,0 +830,0 @@ |
46
index.js
'use strict'; | ||
/* globals Symbol: true, Uint8Array: true, WeakMap: true */ | ||
/* globals Symbol: false, Uint8Array: false, WeakMap: false */ | ||
/*! | ||
@@ -9,46 +9,22 @@ * deep-eql | ||
/*! | ||
* Module dependencies | ||
*/ | ||
var type = require('type-detect'); | ||
function FakeMap() { | ||
this.clear(); | ||
this._key = 'chai/deep-eql__' + Math.random() + Date.now(); | ||
} | ||
FakeMap.prototype = { | ||
clear: function clearMap() { | ||
this.keys = []; | ||
this.values = []; | ||
return this; | ||
get: function getMap(key) { | ||
return key[this._key]; | ||
}, | ||
set: function setMap(key, value) { | ||
var index = this.keys.indexOf(key); | ||
if (index >= 0) { | ||
this.values[index] = value; | ||
} else { | ||
this.keys.push(key); | ||
this.values.push(value); | ||
if (!Object.isFrozen(key)) { | ||
Object.defineProperty(key, this._key, { | ||
value: value, | ||
configurable: true, | ||
}); | ||
} | ||
return this; | ||
}, | ||
get: function getMap(key) { | ||
return this.values[this.keys.indexOf(key)]; | ||
}, | ||
delete: function deleteMap(key) { | ||
var index = this.keys.indexOf(key); | ||
if (index >= 0) { | ||
this.values = this.values.slice(0, index).concat(this.values.slice(index + 1)); | ||
this.keys = this.keys.slice(0, index).concat(this.keys.slice(index + 1)); | ||
} | ||
return this; | ||
}, | ||
}; | ||
var MemoizeMap = null; | ||
if (typeof WeakMap === 'function') { | ||
MemoizeMap = WeakMap; | ||
} else { | ||
MemoizeMap = FakeMap; | ||
} | ||
var MemoizeMap = typeof WeakMap === 'function' ? WeakMap : FakeMap; | ||
/*! | ||
@@ -55,0 +31,0 @@ * Check to see if the MemoizeMap has recorded a result of the two operands |
@@ -51,2 +51,3 @@ { | ||
"spaced-comment": 0, | ||
"no-underscore-dangle": 0, | ||
"no-use-before-define": 0 | ||
@@ -56,3 +57,3 @@ } | ||
"dependencies": { | ||
"type-detect": "^3.0.0" | ||
"type-detect": "^4.0.0" | ||
}, | ||
@@ -90,3 +91,3 @@ "devDependencies": { | ||
}, | ||
"version": "2.0.2" | ||
"version": "3.0.0" | ||
} |
@@ -47,2 +47,7 @@ <h1 align=center> | ||
/> | ||
</a><a href="https://github.com/nodejs/LTS#lts-schedule1"> | ||
<img | ||
alt="Supported Node Version: 4+" | ||
src="https://img.shields.io/badge/node-4+-43853d.svg?style=flat-square" | ||
/> | ||
</a> | ||
@@ -101,3 +106,3 @@ <br/> | ||
- Strict equality for non-traversable nodes according to [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). | ||
- Strict equality for non-traversable nodes according to [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is): | ||
- `eql(NaN, NaN).should.be.true;` | ||
@@ -111,1 +116,4 @@ - `eql(-0, +0).should.be.false;` | ||
- `eql([], Array.prototype.slice.call(arguments)).should.be.true;` | ||
- Error objects are compared by reference (see https://github.com/chaijs/chai/issues/608): | ||
- `eql(new Error('msg'), new Error('msg')).should.be.false;` | ||
- `var err = new Error('msg'); eql(err, err).should.be.true;` |
117
53949
1185
+ Addedtype-detect@4.0.8(transitive)
- Removedtype-detect@3.0.0(transitive)
Updatedtype-detect@^4.0.0