@sepiariver/unique-set 3.1.2 → 3.1.3
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.
- package/dist/index.js +20 -17
- package/dist/index.mjs +20 -17
- package/index.ts +21 -17
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -82,20 +82,20 @@ var _shash = (value, hash) => {
|
|
|
82
82
|
return hash;
|
|
83
83
|
}
|
|
84
84
|
if (value instanceof Map) {
|
|
85
|
-
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
hash = _shash(k, hash);
|
|
91
|
-
hash = _shash(v, hash);
|
|
85
|
+
let mapHash = 0;
|
|
86
|
+
for (const [k, v] of value) {
|
|
87
|
+
let entryHash = _shash(k, 2166136261);
|
|
88
|
+
entryHash = _shash(v, entryHash);
|
|
89
|
+
mapHash = mapHash + entryHash | 0;
|
|
92
90
|
}
|
|
93
|
-
return hash;
|
|
91
|
+
return _mix(hash, mapHash);
|
|
94
92
|
}
|
|
95
93
|
if (value instanceof Set) {
|
|
96
|
-
|
|
97
|
-
for (const v of value)
|
|
98
|
-
|
|
94
|
+
let setHash = 0;
|
|
95
|
+
for (const v of value) {
|
|
96
|
+
setHash = setHash + _shash(v, 2166136261) | 0;
|
|
97
|
+
}
|
|
98
|
+
return _mix(hash, setHash);
|
|
99
99
|
}
|
|
100
100
|
if (value instanceof Date) {
|
|
101
101
|
hash = _mix(hash, 20);
|
|
@@ -108,12 +108,15 @@ var _shash = (value, hash) => {
|
|
|
108
108
|
return _mixStr(hash, value.toString());
|
|
109
109
|
}
|
|
110
110
|
hash = _mix(hash, 19);
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
111
|
+
let objHash = 0;
|
|
112
|
+
const keys = Object.keys(value);
|
|
113
|
+
for (let i = 0; i < keys.length; i++) {
|
|
114
|
+
const key = keys[i];
|
|
115
|
+
let pairHash = _mixStr(2166136261, key);
|
|
116
|
+
pairHash = _shash(value[key], pairHash);
|
|
117
|
+
objHash = objHash + pairHash | 0;
|
|
118
|
+
}
|
|
119
|
+
return _mix(hash, objHash);
|
|
117
120
|
};
|
|
118
121
|
var MapSet = class {
|
|
119
122
|
#map;
|
package/dist/index.mjs
CHANGED
|
@@ -46,20 +46,20 @@ var _shash = (value, hash) => {
|
|
|
46
46
|
return hash;
|
|
47
47
|
}
|
|
48
48
|
if (value instanceof Map) {
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
hash = _shash(k, hash);
|
|
55
|
-
hash = _shash(v, hash);
|
|
49
|
+
let mapHash = 0;
|
|
50
|
+
for (const [k, v] of value) {
|
|
51
|
+
let entryHash = _shash(k, 2166136261);
|
|
52
|
+
entryHash = _shash(v, entryHash);
|
|
53
|
+
mapHash = mapHash + entryHash | 0;
|
|
56
54
|
}
|
|
57
|
-
return hash;
|
|
55
|
+
return _mix(hash, mapHash);
|
|
58
56
|
}
|
|
59
57
|
if (value instanceof Set) {
|
|
60
|
-
|
|
61
|
-
for (const v of value)
|
|
62
|
-
|
|
58
|
+
let setHash = 0;
|
|
59
|
+
for (const v of value) {
|
|
60
|
+
setHash = setHash + _shash(v, 2166136261) | 0;
|
|
61
|
+
}
|
|
62
|
+
return _mix(hash, setHash);
|
|
63
63
|
}
|
|
64
64
|
if (value instanceof Date) {
|
|
65
65
|
hash = _mix(hash, 20);
|
|
@@ -72,12 +72,15 @@ var _shash = (value, hash) => {
|
|
|
72
72
|
return _mixStr(hash, value.toString());
|
|
73
73
|
}
|
|
74
74
|
hash = _mix(hash, 19);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
let objHash = 0;
|
|
76
|
+
const keys = Object.keys(value);
|
|
77
|
+
for (let i = 0; i < keys.length; i++) {
|
|
78
|
+
const key = keys[i];
|
|
79
|
+
let pairHash = _mixStr(2166136261, key);
|
|
80
|
+
pairHash = _shash(value[key], pairHash);
|
|
81
|
+
objHash = objHash + pairHash | 0;
|
|
82
|
+
}
|
|
83
|
+
return _mix(hash, objHash);
|
|
81
84
|
};
|
|
82
85
|
var MapSet = class {
|
|
83
86
|
#map;
|
package/index.ts
CHANGED
|
@@ -56,20 +56,20 @@ const _shash = (value: unknown, hash: number): number => {
|
|
|
56
56
|
return hash;
|
|
57
57
|
}
|
|
58
58
|
if (value instanceof Map) {
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
hash = _shash(k, hash);
|
|
65
|
-
hash = _shash(v, hash);
|
|
59
|
+
let mapHash = 0;
|
|
60
|
+
for (const [k, v] of value) {
|
|
61
|
+
let entryHash = _shash(k, 0x811c9dc5);
|
|
62
|
+
entryHash = _shash(v, entryHash);
|
|
63
|
+
mapHash = (mapHash + entryHash) | 0; // order-independent hash by summing entry hashes (32-bit)
|
|
66
64
|
}
|
|
67
|
-
return hash;
|
|
65
|
+
return _mix(hash, mapHash);
|
|
68
66
|
}
|
|
69
67
|
if (value instanceof Set) {
|
|
70
|
-
|
|
71
|
-
for (const v of value)
|
|
72
|
-
|
|
68
|
+
let setHash = 0;
|
|
69
|
+
for (const v of value) {
|
|
70
|
+
setHash = (setHash + _shash(v, 0x811c9dc5)) | 0; // order-independent hash by summing element hashes (32-bit)
|
|
71
|
+
}
|
|
72
|
+
return _mix(hash, setHash);
|
|
73
73
|
}
|
|
74
74
|
if (value instanceof Date) {
|
|
75
75
|
hash = _mix(hash, 0x14);
|
|
@@ -82,14 +82,18 @@ const _shash = (value: unknown, hash: number): number => {
|
|
|
82
82
|
return _mixStr(hash, value.toString());
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
// Plain object
|
|
85
|
+
// Plain object: order-independent
|
|
86
86
|
hash = _mix(hash, 0x13);
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
let objHash = 0;
|
|
88
|
+
const keys = Object.keys(value as object);
|
|
89
|
+
for (let i = 0; i < keys.length; i++) {
|
|
90
|
+
const key = keys[i]!;
|
|
91
|
+
let pairHash = _mixStr(0x811c9dc5, key);
|
|
92
|
+
pairHash = _shash((value as Record<string, unknown>)[key], pairHash);
|
|
93
|
+
objHash = (objHash + pairHash) | 0;
|
|
91
94
|
}
|
|
92
|
-
|
|
95
|
+
|
|
96
|
+
return _mix(hash, objHash);
|
|
93
97
|
};
|
|
94
98
|
|
|
95
99
|
export class MapSet<T> {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sepiariver/unique-set",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.3",
|
|
4
4
|
"description": "A Set-like collection that deduplicates by deep value equality using a streaming structural hash and fast-deep-equal.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|