mirror: A fast canonicalisation utility for stable object equality
0

Configure Feed

Select the types of activity you want to include in your feed.

chore: formatting

Marais Rossouw (Jun 22, 2023, 2:24 PM +1000) 2216d58e ee332f01

+30 -19
+5 -1
bench/index.js
··· 8 8 const c = [1]; 9 9 // @ts-ignore 10 10 c.push(c); 11 - return { a: { b: ['c', new Set(['d', new Map([['e', 'f']]), c, 'g'])] }, d: new Date(), r: /a/ }; 11 + return { 12 + a: { b: ['c', new Set(['d', new Map([['e', 'f']]), c, 'g'])] }, 13 + d: new Date(), 14 + r: /a/, 15 + }; 12 16 }; 13 17 14 18 suite(
+1 -1
bench/pnpm-lock.yaml
··· 43 43 file:..: 44 44 resolution: {directory: .., type: directory} 45 45 name: object-identity 46 - version: 0.1.0 46 + version: 0.1.1 47 47 dev: false
+1 -1
src/index.test.ts
··· 92 92 }); 93 93 94 94 Objects('partial circular', () => { 95 - const o = {v: 1}; 95 + const o = { v: 1 }; 96 96 const a = ['a', o]; 97 97 assert.equal(identify(a), identify(a)); 98 98 });
+23 -16
src/index.ts
··· 7 7 let type = Object.prototype.toString.call(input); 8 8 9 9 if (input == null || typeof input !== 'object') return String(input); 10 - if (!(type === '[object RegExp]' || type === '[object Date]') && seen.has(input)) return seen.get(input)!; 10 + if (!(type === '[object RegExp]' || type === '[object Date]') && seen.has(input)) 11 + return seen.get(input)!; 11 12 seen.set(input, '~' + ++ref_index); 12 13 13 14 switch (type) { 14 15 case '[object Set]': 15 16 tmp = Array.from(input); 16 - case '[object Array]': { 17 - tmp ||= input; 18 - out += 'a'; 19 - for (; i < tmp.length; out += walk(tmp[i++], ref_index)); 20 - } break; 17 + case '[object Array]': 18 + { 19 + tmp ||= input; 20 + out += 'a'; 21 + for (; i < tmp.length; out += walk(tmp[i++], ref_index)); 22 + } 23 + break; 21 24 22 - case '[object Object]': { 23 - out += 'o'; 24 - tmp = Object.keys(input).sort(); 25 - for (; i < tmp.length; out += tmp[i] + walk(input[tmp[i++]], ref_index)); 26 - } break; 25 + case '[object Object]': 26 + { 27 + out += 'o'; 28 + tmp = Object.keys(input).sort(); 29 + for (; i < tmp.length; out += tmp[i] + walk(input[tmp[i++]], ref_index)); 30 + } 31 + break; 27 32 28 - case '[object Map]': { 29 - out += 'o'; 30 - tmp = Array.from((input as Map<string, unknown>).keys()).sort(); 31 - for (; i < tmp.length; out += tmp[i] + walk(input.get(tmp[i++]), ref_index)); 32 - } break; 33 + case '[object Map]': 34 + { 35 + out += 'o'; 36 + tmp = Array.from((input as Map<string, unknown>).keys()).sort(); 37 + for (; i < tmp.length; out += tmp[i] + walk(input.get(tmp[i++]), ref_index)); 38 + } 39 + break; 33 40 34 41 case '[object Date]': 35 42 return 'd' + +input;