mirror of
https://github.com/SukkaW/Surge.git
synced 2026-01-29 01:51:52 +08:00
Chore: add cache key to fs cache
This commit is contained in:
48
Build/lib/string-hash.ts
Normal file
48
Build/lib/string-hash.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* FNV-1a Hash implementation
|
||||
* @author Travis Webb (tjwebb) <me@traviswebb.com>
|
||||
*
|
||||
* Ported from https://github.com/tjwebb/fnv-plus/blob/master/index.js
|
||||
*
|
||||
* Simplified, optimized and add modified for 52 bit, which provides a larger hash space
|
||||
* and still making use of Javascript's 53-bit integer space.
|
||||
*/
|
||||
export const fnv1a52 = (str: string) => {
|
||||
const len = str.length;
|
||||
let i = 0,
|
||||
t0 = 0,
|
||||
v0 = 0x2325,
|
||||
t1 = 0,
|
||||
v1 = 0x8422,
|
||||
t2 = 0,
|
||||
v2 = 0x9CE4,
|
||||
t3 = 0,
|
||||
v3 = 0xCBF2;
|
||||
|
||||
while (i < len) {
|
||||
v0 ^= str.charCodeAt(i++);
|
||||
t0 = v0 * 435;
|
||||
t1 = v1 * 435;
|
||||
t2 = v2 * 435;
|
||||
t3 = v3 * 435;
|
||||
t2 += v0 << 8;
|
||||
t3 += v1 << 8;
|
||||
t1 += t0 >>> 16;
|
||||
v0 = t0 & 65535;
|
||||
t2 += t1 >>> 16;
|
||||
v1 = t1 & 65535;
|
||||
v3 = (t3 + (t2 >>> 16)) & 65535;
|
||||
v2 = t2 & 65535;
|
||||
}
|
||||
|
||||
return (
|
||||
(v3 & 15) * 281_474_976_710_656
|
||||
+ v2 * 4_294_967_296
|
||||
+ v1 * 65536
|
||||
+ (v0 ^ (v3 >> 4))
|
||||
);
|
||||
};
|
||||
|
||||
export const stringHash = (payload: string) => {
|
||||
return fnv1a52(payload).toString(36) + payload.length.toString(36);
|
||||
};
|
||||
Reference in New Issue
Block a user