fast-is-equal 1.2.5 → 1.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ export declare function fastIsEqual(a: any, b: any): boolean;
package/dist/index.js ADDED
@@ -0,0 +1,425 @@
1
+ // Pre-defined constants to avoid repeated string comparisons
2
+ const TYPEOF_OBJECT = 'object';
3
+ const TYPEOF_FUNCTION = 'function';
4
+ const TYPEOF_NUMBER = 'number';
5
+ const TYPEOF_STRING = 'string';
6
+ const TYPEOF_BOOLEAN = 'boolean';
7
+ const TYPEOF_SYMBOL = 'symbol';
8
+ const TYPEOF_BIGINT = 'bigint';
9
+ // Inline NaN check for maximum speed
10
+ const isNaN = Number.isNaN;
11
+ // Cache for constructor checks
12
+ const dateConstructor = Date;
13
+ const regExpConstructor = RegExp;
14
+ const mapConstructor = Map;
15
+ const setConstructor = Set;
16
+ const arrayBufferConstructor = ArrayBuffer;
17
+ const promiseConstructor = Promise;
18
+ const errorConstructor = Error;
19
+ const dataViewConstructor = DataView;
20
+ export function fastIsEqual(a, b) {
21
+ // Fast path for strict equality
22
+ if (a === b)
23
+ return true;
24
+ // Handle null/undefined early with single comparison
25
+ if (a == null || b == null)
26
+ return false;
27
+ // Get types once
28
+ const typeA = typeof a;
29
+ // Type mismatch = not equal (avoid second typeof if possible)
30
+ if (typeA === TYPEOF_NUMBER) {
31
+ // Optimize number comparison - avoid typeof b when possible
32
+ return typeof b === TYPEOF_NUMBER && isNaN(a) && isNaN(b);
33
+ }
34
+ if (typeA === TYPEOF_STRING || typeA === TYPEOF_BOOLEAN || typeA === TYPEOF_FUNCTION || typeA === TYPEOF_SYMBOL || typeA === TYPEOF_BIGINT) {
35
+ return false; // We know a !== b from first check
36
+ }
37
+ // Now check if b is also object
38
+ if (typeof b !== TYPEOF_OBJECT)
39
+ return false;
40
+ // At this point, we know both are objects
41
+ // Array check using fastest method
42
+ const aIsArray = Array.isArray(a);
43
+ if (aIsArray !== Array.isArray(b))
44
+ return false;
45
+ // Constructor check
46
+ const aCtor = a.constructor;
47
+ if (aCtor !== b.constructor)
48
+ return false;
49
+ // Fast path for arrays - highly optimized
50
+ if (aIsArray) {
51
+ const len = a.length;
52
+ if (len !== b.length)
53
+ return false;
54
+ // Empty arrays
55
+ if (len === 0)
56
+ return true;
57
+ // Small arrays - unroll loop with minimal overhead
58
+ if (len < 8) {
59
+ for (let i = 0; i < len; i++) {
60
+ // Sparse array check
61
+ const hasA = i in a;
62
+ if (hasA !== (i in b))
63
+ return false;
64
+ if (!hasA)
65
+ continue;
66
+ const elemA = a[i];
67
+ const elemB = b[i];
68
+ // Fast path for identical elements
69
+ if (elemA === elemB)
70
+ continue;
71
+ // Null check
72
+ if (elemA == null || elemB == null)
73
+ return false;
74
+ // Type check
75
+ const elemTypeA = typeof elemA;
76
+ if (elemTypeA !== typeof elemB)
77
+ return false;
78
+ // Number special case
79
+ if (elemTypeA === TYPEOF_NUMBER) {
80
+ if (!(isNaN(elemA) && isNaN(elemB)))
81
+ return false;
82
+ continue;
83
+ }
84
+ // Primitive comparison
85
+ if (elemTypeA !== TYPEOF_OBJECT && elemTypeA !== TYPEOF_FUNCTION) {
86
+ return false;
87
+ }
88
+ // Need deep comparison - use minimal visited map
89
+ if (!deepEqual(elemA, elemB, new Map()))
90
+ return false;
91
+ }
92
+ return true;
93
+ }
94
+ // Large arrays - use deep equal
95
+ return deepEqual(a, b, new Map());
96
+ }
97
+ // Handle built-in types inline for common cases
98
+ if (aCtor === dateConstructor) {
99
+ return a.getTime() === b.getTime();
100
+ }
101
+ if (aCtor === regExpConstructor) {
102
+ return a.source === b.source && a.flags === b.flags;
103
+ }
104
+ // For all other objects, use deep comparison
105
+ return deepEqual(a, b, new Map());
106
+ }
107
+ function deepEqual(valA, valB, visited) {
108
+ // Fast equality check
109
+ if (valA === valB)
110
+ return true;
111
+ // Null check
112
+ if (valA == null || valB == null)
113
+ return false;
114
+ // Type check
115
+ const typeA = typeof valA;
116
+ if (typeA !== typeof valB)
117
+ return false;
118
+ // Primitive types
119
+ if (typeA === TYPEOF_NUMBER) {
120
+ return isNaN(valA) && isNaN(valB);
121
+ }
122
+ if (typeA !== TYPEOF_OBJECT && typeA !== TYPEOF_FUNCTION) {
123
+ return false;
124
+ }
125
+ // Check visited - optimized with single lookup
126
+ const visitedVal = visited.get(valA);
127
+ if (visitedVal !== undefined)
128
+ return visitedVal === valB;
129
+ if (visited.has(valB))
130
+ return false;
131
+ // Constructor check
132
+ const ctorA = valA.constructor;
133
+ if (ctorA !== valB.constructor)
134
+ return false;
135
+ // Date - inline comparison
136
+ if (ctorA === dateConstructor) {
137
+ return valA.getTime() === valB.getTime();
138
+ }
139
+ // RegExp - inline comparison
140
+ if (ctorA === regExpConstructor) {
141
+ return valA.source === valB.source && valA.flags === valB.flags;
142
+ }
143
+ // Promise and Error - reference equality only
144
+ if (ctorA === promiseConstructor || ctorA === errorConstructor) {
145
+ return false;
146
+ }
147
+ // Arrays - optimized
148
+ if (Array.isArray(valA)) {
149
+ const len = valA.length;
150
+ if (len !== valB.length)
151
+ return false;
152
+ // Mark visited early
153
+ visited.set(valA, valB);
154
+ visited.set(valB, valA);
155
+ // Empty arrays
156
+ if (len === 0)
157
+ return true;
158
+ // Optimized loop - check primitives first for early exit
159
+ for (let i = 0; i < len; i++) {
160
+ // Sparse array handling
161
+ const hasA = i in valA;
162
+ if (hasA !== (i in valB))
163
+ return false;
164
+ if (!hasA)
165
+ continue;
166
+ const elemA = valA[i];
167
+ const elemB = valB[i];
168
+ if (elemA !== elemB && !deepEqual(elemA, elemB, visited)) {
169
+ return false;
170
+ }
171
+ }
172
+ return true;
173
+ }
174
+ // Map - optimized
175
+ if (ctorA === mapConstructor) {
176
+ const mapA = valA;
177
+ const mapB = valB;
178
+ if (mapA.size !== mapB.size)
179
+ return false;
180
+ // Empty maps
181
+ if (mapA.size === 0)
182
+ return true;
183
+ visited.set(valA, valB);
184
+ visited.set(valB, valA);
185
+ // Optimized iteration
186
+ for (const [key, valueA] of mapA) {
187
+ // Fast primitive key path
188
+ const keyType = typeof key;
189
+ if (keyType !== TYPEOF_OBJECT && keyType !== TYPEOF_FUNCTION) {
190
+ if (!mapB.has(key))
191
+ return false;
192
+ const valueB = mapB.get(key);
193
+ if (valueA !== valueB && !deepEqual(valueA, valueB, visited)) {
194
+ return false;
195
+ }
196
+ }
197
+ else {
198
+ // Complex key - need full search
199
+ let found = false;
200
+ for (const [keyB, valueB] of mapB) {
201
+ if (deepEqual(key, keyB, visited) && deepEqual(valueA, valueB, visited)) {
202
+ found = true;
203
+ break;
204
+ }
205
+ }
206
+ if (!found)
207
+ return false;
208
+ }
209
+ }
210
+ return true;
211
+ }
212
+ // Set - highly optimized
213
+ if (ctorA === setConstructor) {
214
+ const setA = valA;
215
+ const setB = valB;
216
+ if (setA.size !== setB.size)
217
+ return false;
218
+ // Empty sets
219
+ if (setA.size === 0)
220
+ return true;
221
+ // Early visited check
222
+ visited.set(valA, valB);
223
+ visited.set(valB, valA);
224
+ // For equal sets, we can optimize by checking if all primitives exist first
225
+ let hasPrimitives = false;
226
+ let hasObjects = false;
227
+ // First pass - categorize and check primitives
228
+ for (const val of setA) {
229
+ const valType = typeof val;
230
+ if (valType === TYPEOF_OBJECT || valType === TYPEOF_FUNCTION) {
231
+ hasObjects = true;
232
+ }
233
+ else {
234
+ hasPrimitives = true;
235
+ if (!setB.has(val))
236
+ return false; // Fast fail for primitives
237
+ }
238
+ }
239
+ // If only primitives, we're done
240
+ if (!hasObjects)
241
+ return true;
242
+ // For objects, create arrays for matching
243
+ const objectsA = [];
244
+ const objectsB = [];
245
+ for (const val of setA) {
246
+ const valType = typeof val;
247
+ if (valType === TYPEOF_OBJECT || valType === TYPEOF_FUNCTION) {
248
+ objectsA.push(val);
249
+ }
250
+ }
251
+ for (const val of setB) {
252
+ const valType = typeof val;
253
+ if (valType === TYPEOF_OBJECT || valType === TYPEOF_FUNCTION) {
254
+ objectsB.push(val);
255
+ }
256
+ }
257
+ // Match objects
258
+ const used = new Uint8Array(objectsB.length);
259
+ for (const valA of objectsA) {
260
+ let found = false;
261
+ for (let j = 0; j < objectsB.length; j++) {
262
+ if (!used[j]) {
263
+ const newVisited = new Map(visited);
264
+ if (deepEqual(valA, objectsB[j], newVisited)) {
265
+ used[j] = 1;
266
+ found = true;
267
+ break;
268
+ }
269
+ }
270
+ }
271
+ if (!found)
272
+ return false;
273
+ }
274
+ return true;
275
+ }
276
+ // ArrayBuffer - optimized
277
+ if (ctorA === arrayBufferConstructor) {
278
+ const bufA = valA;
279
+ const bufB = valB;
280
+ const byteLength = bufA.byteLength;
281
+ if (byteLength !== bufB.byteLength)
282
+ return false;
283
+ const viewA = new Uint8Array(bufA);
284
+ const viewB = new Uint8Array(bufB);
285
+ // Unroll loop for better performance on larger buffers
286
+ let i = 0;
287
+ const unrollEnd = byteLength - 7;
288
+ for (; i < unrollEnd; i += 8) {
289
+ if (viewA[i] !== viewB[i] ||
290
+ viewA[i + 1] !== viewB[i + 1] ||
291
+ viewA[i + 2] !== viewB[i + 2] ||
292
+ viewA[i + 3] !== viewB[i + 3] ||
293
+ viewA[i + 4] !== viewB[i + 4] ||
294
+ viewA[i + 5] !== viewB[i + 5] ||
295
+ viewA[i + 6] !== viewB[i + 6] ||
296
+ viewA[i + 7] !== viewB[i + 7]) {
297
+ return false;
298
+ }
299
+ }
300
+ // Handle remaining bytes
301
+ for (; i < byteLength; i++) {
302
+ if (viewA[i] !== viewB[i])
303
+ return false;
304
+ }
305
+ return true;
306
+ }
307
+ // DataView - optimized
308
+ if (ctorA === dataViewConstructor) {
309
+ const viewA = valA;
310
+ const viewB = valB;
311
+ if (viewA.byteLength !== viewB.byteLength || viewA.byteOffset !== viewB.byteOffset) {
312
+ return false;
313
+ }
314
+ // Compare the underlying buffer data
315
+ for (let i = 0; i < viewA.byteLength; i++) {
316
+ if (viewA.getUint8(i) !== viewB.getUint8(i))
317
+ return false;
318
+ }
319
+ return true;
320
+ }
321
+ // TypedArrays
322
+ if (ArrayBuffer.isView(valA)) {
323
+ const arrA = valA;
324
+ const arrB = valB;
325
+ const len = arrA.length;
326
+ if (len !== arrB.length)
327
+ return false;
328
+ // Small typed arrays
329
+ if (len < 16) {
330
+ for (let i = 0; i < len; i++) {
331
+ if (arrA[i] !== arrB[i])
332
+ return false;
333
+ }
334
+ return true;
335
+ }
336
+ // Large typed arrays - unroll loop
337
+ let i = 0;
338
+ const unrollLen = len - 3;
339
+ for (; i < unrollLen; i += 4) {
340
+ if (arrA[i] !== arrB[i] ||
341
+ arrA[i + 1] !== arrB[i + 1] ||
342
+ arrA[i + 2] !== arrB[i + 2] ||
343
+ arrA[i + 3] !== arrB[i + 3]) {
344
+ return false;
345
+ }
346
+ }
347
+ // Handle remaining
348
+ for (; i < len; i++) {
349
+ if (arrA[i] !== arrB[i])
350
+ return false;
351
+ }
352
+ return true;
353
+ }
354
+ // Plain objects - highly optimized
355
+ visited.set(valA, valB);
356
+ visited.set(valB, valA);
357
+ // Get keys efficiently
358
+ const keysA = Object.keys(valA);
359
+ const keysALen = keysA.length;
360
+ // Quick length check
361
+ if (keysALen !== Object.keys(valB).length)
362
+ return false;
363
+ // Empty objects - check symbols
364
+ if (keysALen === 0) {
365
+ const checkSymbols = Object.getOwnPropertySymbols !== undefined;
366
+ if (checkSymbols) {
367
+ const symbolsA = Object.getOwnPropertySymbols(valA);
368
+ if (symbolsA.length !== Object.getOwnPropertySymbols(valB).length) {
369
+ return false;
370
+ }
371
+ // Check symbol properties
372
+ for (let i = 0; i < symbolsA.length; i++) {
373
+ const sym = symbolsA[i];
374
+ if (!(sym in valB) || !deepEqual(valA[sym], valB[sym], visited)) {
375
+ return false;
376
+ }
377
+ }
378
+ }
379
+ return true;
380
+ }
381
+ // Optimized property checking - batch primitive checks
382
+ for (let i = 0; i < keysALen; i++) {
383
+ const key = keysA[i];
384
+ // Use in operator for fastest check
385
+ if (!(key in valB))
386
+ return false;
387
+ const propA = valA[key];
388
+ const propB = valB[key];
389
+ // Quick primitive equality check
390
+ if (propA !== propB) {
391
+ // Only do deep comparison if needed
392
+ const propTypeA = typeof propA;
393
+ if (propTypeA === TYPEOF_OBJECT || propTypeA === TYPEOF_FUNCTION) {
394
+ if (!deepEqual(propA, propB, visited))
395
+ return false;
396
+ }
397
+ else if (propTypeA === TYPEOF_NUMBER) {
398
+ if (!(isNaN(propA) && isNaN(propB)))
399
+ return false;
400
+ }
401
+ else {
402
+ return false;
403
+ }
404
+ }
405
+ }
406
+ // Check for symbols only if likely to have them
407
+ const checkSymbols = Object.getOwnPropertySymbols !== undefined;
408
+ if (checkSymbols) {
409
+ const symbolsA = Object.getOwnPropertySymbols(valA);
410
+ if (symbolsA.length > 0) {
411
+ if (symbolsA.length !== Object.getOwnPropertySymbols(valB).length) {
412
+ return false;
413
+ }
414
+ // Check symbol properties
415
+ for (let i = 0; i < symbolsA.length; i++) {
416
+ const sym = symbolsA[i];
417
+ if (!(sym in valB) || !deepEqual(valA[sym], valB[sym], visited)) {
418
+ return false;
419
+ }
420
+ }
421
+ }
422
+ }
423
+ return true;
424
+ }
425
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fast-is-equal",
3
- "version": "1.2.5",
3
+ "version": "1.2.6",
4
4
  "description": "Blazing-fast equality checks, minus the baggage. A lean, standalone alternative to Lodash's isEqual—because speed matters.",
5
5
  "keywords": [
6
6
  "deep-equal",
@@ -52,6 +52,7 @@
52
52
  "test": "jest",
53
53
  "test:cov": "jest --coverage --maxWorkers=2 --coverageReporters=\"json-summary\" --coverageReporters=\"html\"",
54
54
  "build": "rimraf dist && tsc",
55
+ "prepublishOnly": "npm run build",
55
56
  "benchmark": "ts-node --project tsconfig.node.json benchmarks/fastIsEqual.benchmark.ts"
56
57
  },
57
58
  "files": [