INIT
This commit is contained in:
+22
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* Hash using djb2
|
||||
* @param {import('types').StrictBody[]} values
|
||||
*/
|
||||
export function hash(...values) {
|
||||
let hash = 5381;
|
||||
|
||||
for (const value of values) {
|
||||
if (typeof value === 'string') {
|
||||
let i = value.length;
|
||||
while (i) hash = (hash * 33) ^ value.charCodeAt(--i);
|
||||
} else if (ArrayBuffer.isView(value)) {
|
||||
const buffer = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
||||
let i = buffer.length;
|
||||
while (i) hash = (hash * 33) ^ buffer[--i];
|
||||
} else {
|
||||
throw new TypeError('value must be a string or TypedArray');
|
||||
}
|
||||
}
|
||||
|
||||
return (hash >>> 0).toString(36);
|
||||
}
|
||||
Reference in New Issue
Block a user