inray 0.0.2 → 0.0.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/LICENSE.md +1 -0
- package/README.md +132 -32
- package/dist/caching/mod.d.ts +2 -0
- package/dist/caching/mod.d.ts.map +1 -0
- package/dist/caching/mod.js +2 -0
- package/dist/caching/mod.js.map +1 -0
- package/dist/caching/src/cache.d.ts +89 -0
- package/dist/caching/src/cache.d.ts.map +1 -0
- package/dist/caching/src/cache.js +309 -0
- package/dist/caching/src/cache.js.map +1 -0
- package/dist/caching/src/hashing/cache.d.ts +92 -0
- package/dist/caching/src/hashing/cache.d.ts.map +1 -0
- package/dist/caching/src/hashing/cache.js +119 -0
- package/dist/caching/src/hashing/cache.js.map +1 -0
- package/dist/caching/src/hashing/hooks/eventified.d.ts +157 -0
- package/dist/caching/src/hashing/hooks/eventified.d.ts.map +1 -0
- package/dist/caching/src/hashing/hooks/eventified.js +333 -0
- package/dist/caching/src/hashing/hooks/eventified.js.map +1 -0
- package/dist/caching/src/hashing/hooks/index.d.ts +199 -0
- package/dist/caching/src/hashing/hooks/index.d.ts.map +1 -0
- package/dist/caching/src/hashing/hooks/index.js +383 -0
- package/dist/caching/src/hashing/hooks/index.js.map +1 -0
- package/dist/caching/src/hashing/hooks/types.d.ts +217 -0
- package/dist/caching/src/hashing/hooks/types.d.ts.map +1 -0
- package/dist/caching/src/hashing/hooks/types.js +10 -0
- package/dist/caching/src/hashing/hooks/types.js.map +1 -0
- package/dist/caching/src/hashing/index.d.ts +236 -0
- package/dist/caching/src/hashing/index.d.ts.map +1 -0
- package/dist/caching/src/hashing/index.js +447 -0
- package/dist/caching/src/hashing/index.js.map +1 -0
- package/dist/caching/src/hashing/providers/crc.d.ts +15 -0
- package/dist/caching/src/hashing/providers/crc.d.ts.map +1 -0
- package/dist/caching/src/hashing/providers/crc.js +49 -0
- package/dist/caching/src/hashing/providers/crc.js.map +1 -0
- package/dist/caching/src/hashing/providers/crypto.d.ts +19 -0
- package/dist/caching/src/hashing/providers/crypto.d.ts.map +1 -0
- package/dist/caching/src/hashing/providers/crypto.js +28 -0
- package/dist/caching/src/hashing/providers/crypto.js.map +1 -0
- package/dist/caching/src/hashing/providers/djb2.d.ts +60 -0
- package/dist/caching/src/hashing/providers/djb2.d.ts.map +1 -0
- package/dist/caching/src/hashing/providers/djb2.js +92 -0
- package/dist/caching/src/hashing/providers/djb2.js.map +1 -0
- package/dist/caching/src/hashing/providers/fnv1.d.ts +33 -0
- package/dist/caching/src/hashing/providers/fnv1.d.ts.map +1 -0
- package/dist/caching/src/hashing/providers/fnv1.js +68 -0
- package/dist/caching/src/hashing/providers/fnv1.js.map +1 -0
- package/dist/caching/src/hashing/providers/murmur.d.ts +81 -0
- package/dist/caching/src/hashing/providers/murmur.d.ts.map +1 -0
- package/dist/caching/src/hashing/providers/murmur.js +173 -0
- package/dist/caching/src/hashing/providers/murmur.js.map +1 -0
- package/dist/caching/src/hashing/providers.d.ts +126 -0
- package/dist/caching/src/hashing/providers.d.ts.map +1 -0
- package/dist/caching/src/hashing/providers.js +163 -0
- package/dist/caching/src/hashing/providers.js.map +1 -0
- package/dist/caching/src/hashing/types.d.ts +340 -0
- package/dist/caching/src/hashing/types.d.ts.map +1 -0
- package/dist/caching/src/hashing/types.js +10 -0
- package/dist/caching/src/hashing/types.js.map +1 -0
- package/dist/caching/src/keyValue/capabilities.d.ts +161 -0
- package/dist/caching/src/keyValue/capabilities.d.ts.map +1 -0
- package/dist/caching/src/keyValue/capabilities.js +334 -0
- package/dist/caching/src/keyValue/capabilities.js.map +1 -0
- package/dist/caching/src/keyValue/event-manager.d.ts +27 -0
- package/dist/caching/src/keyValue/event-manager.d.ts.map +1 -0
- package/dist/caching/src/keyValue/event-manager.js +88 -0
- package/dist/caching/src/keyValue/event-manager.js.map +1 -0
- package/dist/caching/src/keyValue/generic-store.d.ts +243 -0
- package/dist/caching/src/keyValue/generic-store.d.ts.map +1 -0
- package/dist/caching/src/keyValue/generic-store.js +295 -0
- package/dist/caching/src/keyValue/generic-store.js.map +1 -0
- package/dist/caching/src/keyValue/hooks-manager.d.ts +21 -0
- package/dist/caching/src/keyValue/hooks-manager.d.ts.map +1 -0
- package/dist/caching/src/keyValue/hooks-manager.js +59 -0
- package/dist/caching/src/keyValue/hooks-manager.js.map +1 -0
- package/dist/caching/src/keyValue/index.d.ts +334 -0
- package/dist/caching/src/keyValue/index.d.ts.map +1 -0
- package/dist/caching/src/keyValue/index.js +796 -0
- package/dist/caching/src/keyValue/index.js.map +1 -0
- package/dist/caching/src/keyValue/serialize/serialize.d.ts +12 -0
- package/dist/caching/src/keyValue/serialize/serialize.d.ts.map +1 -0
- package/dist/caching/src/keyValue/serialize/serialize.js +64 -0
- package/dist/caching/src/keyValue/serialize/serialize.js.map +1 -0
- package/dist/caching/src/keyValue/stats-manager.d.ts +27 -0
- package/dist/caching/src/keyValue/stats-manager.d.ts.map +1 -0
- package/dist/caching/src/keyValue/stats-manager.js +64 -0
- package/dist/caching/src/keyValue/stats-manager.js.map +1 -0
- package/dist/caching/src/keyValue/types.d.ts +22 -0
- package/dist/caching/src/keyValue/types.d.ts.map +1 -0
- package/dist/caching/src/keyValue/types.js +11 -0
- package/dist/caching/src/keyValue/types.js.map +1 -0
- package/dist/caching/src/keyv-adapter.d.ts +40 -0
- package/dist/caching/src/keyv-adapter.d.ts.map +1 -0
- package/dist/caching/src/keyv-adapter.js +56 -0
- package/dist/caching/src/keyv-adapter.js.map +1 -0
- package/dist/caching/src/utils/cache-tags.d.ts +275 -0
- package/dist/caching/src/utils/cache-tags.d.ts.map +1 -0
- package/dist/caching/src/utils/cache-tags.js +407 -0
- package/dist/caching/src/utils/cache-tags.js.map +1 -0
- package/dist/caching/src/utils/cacheable-item-types.d.ts +35 -0
- package/dist/caching/src/utils/cacheable-item-types.d.ts.map +1 -0
- package/dist/caching/src/utils/cacheable-item-types.js +10 -0
- package/dist/caching/src/utils/cacheable-item-types.js.map +1 -0
- package/dist/caching/src/utils/coalesce-async.d.ts +29 -0
- package/dist/caching/src/utils/coalesce-async.d.ts.map +1 -0
- package/dist/caching/src/utils/coalesce-async.js +88 -0
- package/dist/caching/src/utils/coalesce-async.js.map +1 -0
- package/dist/caching/src/utils/hash.d.ts +55 -0
- package/dist/caching/src/utils/hash.d.ts.map +1 -0
- package/dist/caching/src/utils/hash.js +116 -0
- package/dist/caching/src/utils/hash.js.map +1 -0
- package/dist/caching/src/utils/index.d.ts +24 -0
- package/dist/caching/src/utils/index.d.ts.map +1 -0
- package/dist/caching/src/utils/index.js +21 -0
- package/dist/caching/src/utils/index.js.map +1 -0
- package/dist/caching/src/utils/is-keyv-instance.d.ts +10 -0
- package/dist/caching/src/utils/is-keyv-instance.d.ts.map +1 -0
- package/dist/caching/src/utils/is-keyv-instance.js +37 -0
- package/dist/caching/src/utils/is-keyv-instance.js.map +1 -0
- package/dist/caching/src/utils/is-object.d.ts +10 -0
- package/dist/caching/src/utils/is-object.d.ts.map +1 -0
- package/dist/caching/src/utils/is-object.js +13 -0
- package/dist/caching/src/utils/is-object.js.map +1 -0
- package/dist/caching/src/utils/less-than.d.ts +10 -0
- package/dist/caching/src/utils/less-than.d.ts.map +1 -0
- package/dist/caching/src/utils/less-than.js +13 -0
- package/dist/caching/src/utils/less-than.js.map +1 -0
- package/dist/caching/src/utils/memoize.d.ts +107 -0
- package/dist/caching/src/utils/memoize.d.ts.map +1 -0
- package/dist/caching/src/utils/memoize.js +201 -0
- package/dist/caching/src/utils/memoize.js.map +1 -0
- package/dist/caching/src/utils/mock-cacheable.d.ts +28 -0
- package/dist/caching/src/utils/mock-cacheable.d.ts.map +1 -0
- package/dist/caching/src/utils/mock-cacheable.js +87 -0
- package/dist/caching/src/utils/mock-cacheable.js.map +1 -0
- package/dist/caching/src/utils/run-if-fn.d.ts +12 -0
- package/dist/caching/src/utils/run-if-fn.d.ts.map +1 -0
- package/dist/caching/src/utils/run-if-fn.js +12 -0
- package/dist/caching/src/utils/run-if-fn.js.map +1 -0
- package/dist/caching/src/utils/shorthand-time.d.ts +27 -0
- package/dist/caching/src/utils/shorthand-time.d.ts.map +1 -0
- package/dist/caching/src/utils/shorthand-time.js +96 -0
- package/dist/caching/src/utils/shorthand-time.js.map +1 -0
- package/dist/caching/src/utils/sleep.d.ts +10 -0
- package/dist/caching/src/utils/sleep.d.ts.map +1 -0
- package/dist/caching/src/utils/sleep.js +11 -0
- package/dist/caching/src/utils/sleep.js.map +1 -0
- package/dist/caching/src/utils/stats.d.ts +354 -0
- package/dist/caching/src/utils/stats.d.ts.map +1 -0
- package/dist/caching/src/utils/stats.js +593 -0
- package/dist/caching/src/utils/stats.js.map +1 -0
- package/dist/caching/src/utils/ttl.d.ts +58 -0
- package/dist/caching/src/utils/ttl.d.ts.map +1 -0
- package/dist/caching/src/utils/ttl.js +77 -0
- package/dist/caching/src/utils/ttl.js.map +1 -0
- package/package.json +11 -3
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DJB2 hash algorithm implementation.
|
|
3
|
+
*
|
|
4
|
+
* DJB2 is a non-cryptographic hash function created by Daniel J. Bernstein.
|
|
5
|
+
* It produces a 32-bit hash value, making it suitable for hash tables and checksums,
|
|
6
|
+
* but NOT for cryptographic purposes.
|
|
7
|
+
*
|
|
8
|
+
* Algorithm: hash = hash * 33 + c (where c is each byte)
|
|
9
|
+
* Initial value: 5381
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { Hashery } from 'hashery';
|
|
14
|
+
* import { DJB2 } from 'hashery/providers/djb2';
|
|
15
|
+
*
|
|
16
|
+
* const hashery = new Hashery();
|
|
17
|
+
* hashery.providers.add(new DJB2());
|
|
18
|
+
*
|
|
19
|
+
* const hash = await hashery.toHash({ data: 'hello' }, 'djb2');
|
|
20
|
+
* console.log(hash); // "7c9df5ea"
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export class DJB2 {
|
|
24
|
+
/**
|
|
25
|
+
* The name identifier for this hash provider.
|
|
26
|
+
*/
|
|
27
|
+
get name() {
|
|
28
|
+
return 'djb2';
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Computes the DJB2 hash of the provided data synchronously.
|
|
32
|
+
*
|
|
33
|
+
* @param data - The data to hash (Uint8Array, ArrayBuffer, or DataView)
|
|
34
|
+
* @returns An 8-character lowercase hexadecimal string
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const djb2 = new DJB2();
|
|
39
|
+
* const data = new TextEncoder().encode('hello');
|
|
40
|
+
* const hash = djb2.toHashSync(data);
|
|
41
|
+
* console.log(hash); // "7c9df5ea"
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
toHashSync(data) {
|
|
45
|
+
// Convert BufferSource to Uint8Array for consistent processing
|
|
46
|
+
let bytes;
|
|
47
|
+
if (data instanceof Uint8Array) {
|
|
48
|
+
bytes = data;
|
|
49
|
+
}
|
|
50
|
+
else if (data instanceof ArrayBuffer) {
|
|
51
|
+
bytes = new Uint8Array(data);
|
|
52
|
+
}
|
|
53
|
+
else if (data instanceof DataView) {
|
|
54
|
+
bytes = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Fallback for other ArrayBufferView types (e.g., Int8Array, Uint16Array, etc.)
|
|
58
|
+
const view = data;
|
|
59
|
+
bytes = new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
|
|
60
|
+
}
|
|
61
|
+
// DJB2 algorithm
|
|
62
|
+
// Initial hash value: 5381
|
|
63
|
+
let hash = 5381;
|
|
64
|
+
// Process each byte: hash = hash * 33 + byte
|
|
65
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
66
|
+
hash = (hash << 5) + hash + bytes[i]; // hash * 33 + c
|
|
67
|
+
// Keep it as a 32-bit unsigned integer
|
|
68
|
+
hash = hash >>> 0;
|
|
69
|
+
}
|
|
70
|
+
// Convert to 8-character lowercase hexadecimal string
|
|
71
|
+
const hashHex = hash.toString(16).padStart(8, '0');
|
|
72
|
+
return hashHex;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Computes the DJB2 hash of the provided data.
|
|
76
|
+
*
|
|
77
|
+
* @param data - The data to hash (Uint8Array, ArrayBuffer, or DataView)
|
|
78
|
+
* @returns A Promise resolving to an 8-character lowercase hexadecimal string
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const djb2 = new DJB2();
|
|
83
|
+
* const data = new TextEncoder().encode('hello');
|
|
84
|
+
* const hash = await djb2.toHash(data);
|
|
85
|
+
* console.log(hash); // "7c9df5ea"
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
async toHash(data) {
|
|
89
|
+
return this.toHashSync(data);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=djb2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"djb2.js","sourceRoot":"","sources":["../../../../../src/caching/src/hashing/providers/djb2.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,IAAI;IACf;;OAEG;IACH,IAAW,IAAI;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,UAAU,CAAC,IAAkB;QAClC,+DAA+D;QAC/D,IAAI,KAAiB,CAAC;QAEtB,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;YAC/B,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;YACvC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,YAAY,QAAQ,EAAE,CAAC;YACpC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,gFAAgF;YAChF,MAAM,IAAI,GAAG,IAAuB,CAAC;YACrC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC;QAED,iBAAiB;QACjB,2BAA2B;QAC3B,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,6CAA6C;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YACtD,uCAAuC;YACvC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC;QACpB,CAAC;QAED,sDAAsD;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAEnD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,KAAK,CAAC,MAAM,CAAC,IAAkB;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { HashProvider } from '../types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* FNV-1 (Fowler-Noll-Vo) hash algorithm implementation.
|
|
4
|
+
*
|
|
5
|
+
* FNV-1 is a non-cryptographic hash function created by Glenn Fowler, Landon Curt Noll,
|
|
6
|
+
* and Kiem-Phong Vo. It produces a 32-bit hash value, making it suitable for hash tables
|
|
7
|
+
* and checksums, but NOT for cryptographic purposes.
|
|
8
|
+
*
|
|
9
|
+
* Algorithm: hash = (hash * FNV_prime) XOR octet_of_data
|
|
10
|
+
* FNV-1 32-bit offset basis: 2166136261
|
|
11
|
+
* FNV-1 32-bit prime: 16777619
|
|
12
|
+
*/
|
|
13
|
+
export declare class FNV1 implements HashProvider {
|
|
14
|
+
/**
|
|
15
|
+
* The name identifier for this hash provider.
|
|
16
|
+
*/
|
|
17
|
+
get name(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Computes the FNV-1 hash of the provided data synchronously.
|
|
20
|
+
*
|
|
21
|
+
* @param data - The data to hash (Uint8Array, ArrayBuffer, or DataView)
|
|
22
|
+
* @returns An 8-character lowercase hexadecimal string
|
|
23
|
+
*/
|
|
24
|
+
toHashSync(data: BufferSource): string;
|
|
25
|
+
/**
|
|
26
|
+
* Computes the FNV-1 hash of the provided data.
|
|
27
|
+
*
|
|
28
|
+
* @param data - The data to hash (Uint8Array, ArrayBuffer, or DataView)
|
|
29
|
+
* @returns A Promise resolving to an 8-character lowercase hexadecimal string
|
|
30
|
+
*/
|
|
31
|
+
toHash(data: BufferSource): Promise<string>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=fnv1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fnv1.d.ts","sourceRoot":"","sources":["../../../../../src/caching/src/hashing/providers/fnv1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,qBAAa,IAAK,YAAW,YAAY;IACvC;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IAqC7C;;;;;OAKG;IACU,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;CAGzD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FNV-1 (Fowler-Noll-Vo) hash algorithm implementation.
|
|
3
|
+
*
|
|
4
|
+
* FNV-1 is a non-cryptographic hash function created by Glenn Fowler, Landon Curt Noll,
|
|
5
|
+
* and Kiem-Phong Vo. It produces a 32-bit hash value, making it suitable for hash tables
|
|
6
|
+
* and checksums, but NOT for cryptographic purposes.
|
|
7
|
+
*
|
|
8
|
+
* Algorithm: hash = (hash * FNV_prime) XOR octet_of_data
|
|
9
|
+
* FNV-1 32-bit offset basis: 2166136261
|
|
10
|
+
* FNV-1 32-bit prime: 16777619
|
|
11
|
+
*/
|
|
12
|
+
export class FNV1 {
|
|
13
|
+
/**
|
|
14
|
+
* The name identifier for this hash provider.
|
|
15
|
+
*/
|
|
16
|
+
get name() {
|
|
17
|
+
return 'fnv1';
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Computes the FNV-1 hash of the provided data synchronously.
|
|
21
|
+
*
|
|
22
|
+
* @param data - The data to hash (Uint8Array, ArrayBuffer, or DataView)
|
|
23
|
+
* @returns An 8-character lowercase hexadecimal string
|
|
24
|
+
*/
|
|
25
|
+
toHashSync(data) {
|
|
26
|
+
// Convert BufferSource to Uint8Array for consistent processing
|
|
27
|
+
let bytes;
|
|
28
|
+
if (data instanceof Uint8Array) {
|
|
29
|
+
bytes = data;
|
|
30
|
+
}
|
|
31
|
+
else if (data instanceof ArrayBuffer) {
|
|
32
|
+
bytes = new Uint8Array(data);
|
|
33
|
+
}
|
|
34
|
+
else if (data instanceof DataView) {
|
|
35
|
+
bytes = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Fallback for other ArrayBufferView types (e.g., Int8Array, Uint16Array, etc.)
|
|
39
|
+
const view = data;
|
|
40
|
+
bytes = new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
|
|
41
|
+
}
|
|
42
|
+
// FNV-1 algorithm constants
|
|
43
|
+
const FNV_OFFSET_BASIS = 2166136261; // 32-bit offset basis
|
|
44
|
+
const FNV_PRIME = 16777619; // 32-bit FNV prime
|
|
45
|
+
// Initialize hash with FNV offset basis
|
|
46
|
+
let hash = FNV_OFFSET_BASIS;
|
|
47
|
+
// Process each byte: hash = (hash * FNV_prime) XOR byte
|
|
48
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
49
|
+
hash = hash * FNV_PRIME;
|
|
50
|
+
hash = hash ^ bytes[i];
|
|
51
|
+
// Keep it as a 32-bit unsigned integer
|
|
52
|
+
hash = hash >>> 0;
|
|
53
|
+
}
|
|
54
|
+
// Convert to 8-character lowercase hexadecimal string
|
|
55
|
+
const hashHex = hash.toString(16).padStart(8, '0');
|
|
56
|
+
return hashHex;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Computes the FNV-1 hash of the provided data.
|
|
60
|
+
*
|
|
61
|
+
* @param data - The data to hash (Uint8Array, ArrayBuffer, or DataView)
|
|
62
|
+
* @returns A Promise resolving to an 8-character lowercase hexadecimal string
|
|
63
|
+
*/
|
|
64
|
+
async toHash(data) {
|
|
65
|
+
return this.toHashSync(data);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=fnv1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fnv1.js","sourceRoot":"","sources":["../../../../../src/caching/src/hashing/providers/fnv1.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,OAAO,IAAI;IACf;;OAEG;IACH,IAAW,IAAI;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,UAAU,CAAC,IAAkB;QAClC,+DAA+D;QAC/D,IAAI,KAAiB,CAAC;QAEtB,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;YAC/B,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;YACvC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,YAAY,QAAQ,EAAE,CAAC;YACpC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,gFAAgF;YAChF,MAAM,IAAI,GAAG,IAAuB,CAAC;YACrC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC;QAED,4BAA4B;QAC5B,MAAM,gBAAgB,GAAG,UAAU,CAAC,CAAC,sBAAsB;QAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,mBAAmB;QAE/C,wCAAwC;QACxC,IAAI,IAAI,GAAG,gBAAgB,CAAC;QAE5B,wDAAwD;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;YACxB,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,uCAAuC;YACvC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC;QACpB,CAAC;QAED,sDAAsD;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAEnD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,MAAM,CAAC,IAAkB;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { HashProvider } from '../types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Murmur 32-bit hash algorithm implementation.
|
|
4
|
+
*
|
|
5
|
+
* Murmur is a non-cryptographic hash function based on MurmurHash3 by Austin Appleby.
|
|
6
|
+
* It produces a 32-bit hash value with excellent distribution and performance,
|
|
7
|
+
* making it suitable for hash tables, bloom filters, and checksums,
|
|
8
|
+
* but NOT for cryptographic purposes.
|
|
9
|
+
*
|
|
10
|
+
* This implementation uses the MurmurHash3_x86_32 variant.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { Hashery } from 'hashery';
|
|
15
|
+
* import { Murmur } from 'hashery/providers/murmur';
|
|
16
|
+
*
|
|
17
|
+
* const hashery = new Hashery();
|
|
18
|
+
* hashery.providers.add(new Murmur());
|
|
19
|
+
*
|
|
20
|
+
* const hash = await hashery.toHash({ data: 'hello' }, 'murmur');
|
|
21
|
+
* console.log(hash); // "248bfa47"
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class Murmur implements HashProvider {
|
|
25
|
+
private _seed;
|
|
26
|
+
/**
|
|
27
|
+
* Creates a new Murmur instance.
|
|
28
|
+
*
|
|
29
|
+
* @param seed - Optional seed value for the hash (default: 0)
|
|
30
|
+
*/
|
|
31
|
+
constructor(seed?: number);
|
|
32
|
+
/**
|
|
33
|
+
* The name identifier for this hash provider.
|
|
34
|
+
*/
|
|
35
|
+
get name(): string;
|
|
36
|
+
/**
|
|
37
|
+
* Gets the current seed value used for hashing.
|
|
38
|
+
*/
|
|
39
|
+
get seed(): number;
|
|
40
|
+
/**
|
|
41
|
+
* Computes the Murmur 32-bit hash of the provided data synchronously.
|
|
42
|
+
*
|
|
43
|
+
* @param data - The data to hash (Uint8Array, ArrayBuffer, or DataView)
|
|
44
|
+
* @returns An 8-character lowercase hexadecimal string
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const murmur = new Murmur();
|
|
49
|
+
* const data = new TextEncoder().encode('hello');
|
|
50
|
+
* const hash = murmur.toHashSync(data);
|
|
51
|
+
* console.log(hash); // "248bfa47"
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
toHashSync(data: BufferSource): string;
|
|
55
|
+
/**
|
|
56
|
+
* Computes the Murmur 32-bit hash of the provided data.
|
|
57
|
+
*
|
|
58
|
+
* @param data - The data to hash (Uint8Array, ArrayBuffer, or DataView)
|
|
59
|
+
* @returns A Promise resolving to an 8-character lowercase hexadecimal string
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const murmur = new Murmur();
|
|
64
|
+
* const data = new TextEncoder().encode('hello');
|
|
65
|
+
* const hash = await murmur.toHash(data);
|
|
66
|
+
* console.log(hash); // "248bfa47"
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
toHash(data: BufferSource): Promise<string>;
|
|
70
|
+
/**
|
|
71
|
+
* 32-bit integer multiplication with proper overflow handling.
|
|
72
|
+
* @private
|
|
73
|
+
*/
|
|
74
|
+
private _imul;
|
|
75
|
+
/**
|
|
76
|
+
* Left rotate a 32-bit integer.
|
|
77
|
+
* @private
|
|
78
|
+
*/
|
|
79
|
+
private _rotl32;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=murmur.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"murmur.d.ts","sourceRoot":"","sources":["../../../../../src/caching/src/hashing/providers/murmur.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,MAAO,YAAW,YAAY;IACzC,OAAO,CAAC,KAAK,CAAS;IAEtB;;;;OAIG;gBACS,IAAI,GAAE,MAAU;IAI5B;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;;;;;;;;;;OAaG;IACI,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IA+E7C;;;;;;;;;;;;;OAaG;IACU,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxD;;;OAGG;IACH,OAAO,CAAC,KAAK;IAqBb;;;OAGG;IACH,OAAO,CAAC,OAAO;CAGhB"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Murmur 32-bit hash algorithm implementation.
|
|
3
|
+
*
|
|
4
|
+
* Murmur is a non-cryptographic hash function based on MurmurHash3 by Austin Appleby.
|
|
5
|
+
* It produces a 32-bit hash value with excellent distribution and performance,
|
|
6
|
+
* making it suitable for hash tables, bloom filters, and checksums,
|
|
7
|
+
* but NOT for cryptographic purposes.
|
|
8
|
+
*
|
|
9
|
+
* This implementation uses the MurmurHash3_x86_32 variant.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { Hashery } from 'hashery';
|
|
14
|
+
* import { Murmur } from 'hashery/providers/murmur';
|
|
15
|
+
*
|
|
16
|
+
* const hashery = new Hashery();
|
|
17
|
+
* hashery.providers.add(new Murmur());
|
|
18
|
+
*
|
|
19
|
+
* const hash = await hashery.toHash({ data: 'hello' }, 'murmur');
|
|
20
|
+
* console.log(hash); // "248bfa47"
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export class Murmur {
|
|
24
|
+
_seed;
|
|
25
|
+
/**
|
|
26
|
+
* Creates a new Murmur instance.
|
|
27
|
+
*
|
|
28
|
+
* @param seed - Optional seed value for the hash (default: 0)
|
|
29
|
+
*/
|
|
30
|
+
constructor(seed = 0) {
|
|
31
|
+
this._seed = seed >>> 0; // Ensure it's a 32-bit unsigned integer
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The name identifier for this hash provider.
|
|
35
|
+
*/
|
|
36
|
+
get name() {
|
|
37
|
+
return 'murmur';
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Gets the current seed value used for hashing.
|
|
41
|
+
*/
|
|
42
|
+
get seed() {
|
|
43
|
+
return this._seed;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Computes the Murmur 32-bit hash of the provided data synchronously.
|
|
47
|
+
*
|
|
48
|
+
* @param data - The data to hash (Uint8Array, ArrayBuffer, or DataView)
|
|
49
|
+
* @returns An 8-character lowercase hexadecimal string
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const murmur = new Murmur();
|
|
54
|
+
* const data = new TextEncoder().encode('hello');
|
|
55
|
+
* const hash = murmur.toHashSync(data);
|
|
56
|
+
* console.log(hash); // "248bfa47"
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
toHashSync(data) {
|
|
60
|
+
// Convert BufferSource to Uint8Array for consistent processing
|
|
61
|
+
let bytes;
|
|
62
|
+
if (data instanceof Uint8Array) {
|
|
63
|
+
bytes = data;
|
|
64
|
+
}
|
|
65
|
+
else if (data instanceof ArrayBuffer) {
|
|
66
|
+
bytes = new Uint8Array(data);
|
|
67
|
+
}
|
|
68
|
+
else if (data instanceof DataView) {
|
|
69
|
+
bytes = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// Fallback for other ArrayBufferView types (e.g., Int8Array, Uint16Array, etc.)
|
|
73
|
+
const view = data;
|
|
74
|
+
bytes = new Uint8Array(view.buffer, view.byteOffset, view.byteLength);
|
|
75
|
+
}
|
|
76
|
+
// MurmurHash3_x86_32 algorithm
|
|
77
|
+
const c1 = 0xcc9e2d51;
|
|
78
|
+
const c2 = 0x1b873593;
|
|
79
|
+
const length = bytes.length;
|
|
80
|
+
const nblocks = Math.floor(length / 4);
|
|
81
|
+
let h1 = this._seed;
|
|
82
|
+
// Process 4-byte blocks
|
|
83
|
+
for (let i = 0; i < nblocks; i++) {
|
|
84
|
+
const index = i * 4;
|
|
85
|
+
let k1 = (bytes[index] & 0xff) |
|
|
86
|
+
((bytes[index + 1] & 0xff) << 8) |
|
|
87
|
+
((bytes[index + 2] & 0xff) << 16) |
|
|
88
|
+
((bytes[index + 3] & 0xff) << 24);
|
|
89
|
+
k1 = this._imul(k1, c1);
|
|
90
|
+
k1 = this._rotl32(k1, 15);
|
|
91
|
+
k1 = this._imul(k1, c2);
|
|
92
|
+
h1 ^= k1;
|
|
93
|
+
h1 = this._rotl32(h1, 13);
|
|
94
|
+
h1 = this._imul(h1, 5) + 0xe6546b64;
|
|
95
|
+
}
|
|
96
|
+
// Process remaining bytes
|
|
97
|
+
const tail = nblocks * 4;
|
|
98
|
+
let k1 = 0;
|
|
99
|
+
switch (length & 3) {
|
|
100
|
+
case 3:
|
|
101
|
+
k1 ^= (bytes[tail + 2] & 0xff) << 16;
|
|
102
|
+
// fallthrough
|
|
103
|
+
case 2:
|
|
104
|
+
k1 ^= (bytes[tail + 1] & 0xff) << 8;
|
|
105
|
+
// fallthrough
|
|
106
|
+
case 1:
|
|
107
|
+
k1 ^= bytes[tail] & 0xff;
|
|
108
|
+
k1 = this._imul(k1, c1);
|
|
109
|
+
k1 = this._rotl32(k1, 15);
|
|
110
|
+
k1 = this._imul(k1, c2);
|
|
111
|
+
h1 ^= k1;
|
|
112
|
+
}
|
|
113
|
+
// Finalization
|
|
114
|
+
h1 ^= length;
|
|
115
|
+
h1 ^= h1 >>> 16;
|
|
116
|
+
h1 = this._imul(h1, 0x85ebca6b);
|
|
117
|
+
h1 ^= h1 >>> 13;
|
|
118
|
+
h1 = this._imul(h1, 0xc2b2ae35);
|
|
119
|
+
h1 ^= h1 >>> 16;
|
|
120
|
+
// Convert to unsigned 32-bit integer
|
|
121
|
+
h1 = h1 >>> 0;
|
|
122
|
+
// Convert to 8-character lowercase hexadecimal string
|
|
123
|
+
const hashHex = h1.toString(16).padStart(8, '0');
|
|
124
|
+
return hashHex;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Computes the Murmur 32-bit hash of the provided data.
|
|
128
|
+
*
|
|
129
|
+
* @param data - The data to hash (Uint8Array, ArrayBuffer, or DataView)
|
|
130
|
+
* @returns A Promise resolving to an 8-character lowercase hexadecimal string
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* const murmur = new Murmur();
|
|
135
|
+
* const data = new TextEncoder().encode('hello');
|
|
136
|
+
* const hash = await murmur.toHash(data);
|
|
137
|
+
* console.log(hash); // "248bfa47"
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
async toHash(data) {
|
|
141
|
+
return this.toHashSync(data);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 32-bit integer multiplication with proper overflow handling.
|
|
145
|
+
* @private
|
|
146
|
+
*/
|
|
147
|
+
_imul(a, b) {
|
|
148
|
+
// Use Math.imul if available, otherwise fallback to manual implementation
|
|
149
|
+
/* v8 ignore next -- @preserve */
|
|
150
|
+
if (Math.imul) {
|
|
151
|
+
return Math.imul(a, b);
|
|
152
|
+
}
|
|
153
|
+
// Manual 32-bit multiplication
|
|
154
|
+
/* v8 ignore next -- @preserve */
|
|
155
|
+
const ah = (a >>> 16) & 0xffff;
|
|
156
|
+
/* v8 ignore next -- @preserve */
|
|
157
|
+
const al = a & 0xffff;
|
|
158
|
+
/* v8 ignore next -- @preserve */
|
|
159
|
+
const bh = (b >>> 16) & 0xffff;
|
|
160
|
+
/* v8 ignore next -- @preserve */
|
|
161
|
+
const bl = b & 0xffff;
|
|
162
|
+
/* v8 ignore next -- @preserve */
|
|
163
|
+
return (al * bl + (((ah * bl + al * bh) << 16) >>> 0)) | 0;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Left rotate a 32-bit integer.
|
|
167
|
+
* @private
|
|
168
|
+
*/
|
|
169
|
+
_rotl32(x, r) {
|
|
170
|
+
return (x << r) | (x >>> (32 - r));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=murmur.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"murmur.js","sourceRoot":"","sources":["../../../../../src/caching/src/hashing/providers/murmur.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Original library: hashery (v1.5.1)
|
|
3
|
+
* - Copyright (c) 2025 Jared Wray
|
|
4
|
+
*
|
|
5
|
+
* Modified and integrated in "Inray":
|
|
6
|
+
* - Evgeniy Bushin
|
|
7
|
+
*/
|
|
8
|
+
/***/
|
|
9
|
+
import type { HashProvider, HashProvidersGetOptions, HashProvidersOptions } from './types.ts';
|
|
10
|
+
/**
|
|
11
|
+
* Manages a collection of hash providers for the Hashery system.
|
|
12
|
+
* Provides methods to add, remove, and load multiple hash providers.
|
|
13
|
+
*/
|
|
14
|
+
export declare class HashProviders {
|
|
15
|
+
private _providers;
|
|
16
|
+
private _getFuzzy;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a new HashProviders instance.
|
|
19
|
+
* @param options - Optional configuration including initial providers to load
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* const providers = new HashProviders({
|
|
23
|
+
* providers: [{ name: 'custom', toHash: async (data) => '...' }]
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
constructor(options?: HashProvidersOptions);
|
|
28
|
+
/**
|
|
29
|
+
* Loads multiple hash providers at once.
|
|
30
|
+
* Each provider is added to the internal map using its name as the key.
|
|
31
|
+
* @param providers - Array of HashProvider objects to load
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* const providers = new HashProviders();
|
|
35
|
+
* providers.loadProviders([
|
|
36
|
+
* { name: 'md5', toHash: async (data) => '...' },
|
|
37
|
+
* { name: 'sha1', toHash: async (data) => '...' }
|
|
38
|
+
* ]);
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
loadProviders(providers: Array<HashProvider>): void;
|
|
42
|
+
/**
|
|
43
|
+
* Gets the internal Map of all registered hash providers.
|
|
44
|
+
* @returns Map of provider names to HashProvider objects
|
|
45
|
+
*/
|
|
46
|
+
get providers(): Map<string, HashProvider>;
|
|
47
|
+
/**
|
|
48
|
+
* Sets the internal Map of hash providers, replacing all existing providers.
|
|
49
|
+
* @param providers - Map of provider names to HashProvider objects
|
|
50
|
+
*/
|
|
51
|
+
set providers(providers: Map<string, HashProvider>);
|
|
52
|
+
/**
|
|
53
|
+
* Gets an array of all provider names.
|
|
54
|
+
* @returns Array of provider names
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* const providers = new HashProviders();
|
|
58
|
+
* providers.add({ name: 'sha256', toHash: async (data) => '...' });
|
|
59
|
+
* providers.add({ name: 'md5', toHash: async (data) => '...' });
|
|
60
|
+
* console.log(providers.names); // ['sha256', 'md5']
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
get names(): Array<string>;
|
|
64
|
+
/**
|
|
65
|
+
* Gets a hash provider by name with optional fuzzy matching.
|
|
66
|
+
*
|
|
67
|
+
* Fuzzy matching (enabled by default) attempts to find providers by:
|
|
68
|
+
* 1. Exact match (after trimming whitespace)
|
|
69
|
+
* 2. Case-insensitive match (lowercase)
|
|
70
|
+
* 3. Dash-removed match (e.g., "SHA-256" matches "sha256")
|
|
71
|
+
*
|
|
72
|
+
* @param name - The name of the provider to retrieve
|
|
73
|
+
* @param options - Optional configuration for the get operation
|
|
74
|
+
* @param options.fuzzy - Enable/disable fuzzy matching (overrides constructor setting)
|
|
75
|
+
* @returns The HashProvider if found, undefined otherwise
|
|
76
|
+
* @example
|
|
77
|
+
* ```ts
|
|
78
|
+
* const providers = new HashProviders();
|
|
79
|
+
* providers.add({ name: 'sha256', toHash: async (data) => '...' });
|
|
80
|
+
*
|
|
81
|
+
* // Exact match
|
|
82
|
+
* const provider = providers.get('sha256');
|
|
83
|
+
*
|
|
84
|
+
* // Fuzzy match (case-insensitive)
|
|
85
|
+
* const provider2 = providers.get('SHA256');
|
|
86
|
+
*
|
|
87
|
+
* // Fuzzy match (with dash)
|
|
88
|
+
* const provider3 = providers.get('SHA-256');
|
|
89
|
+
*
|
|
90
|
+
* // Disable fuzzy matching
|
|
91
|
+
* const provider4 = providers.get('SHA256', { fuzzy: false }); // returns undefined
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
get(name: string, options?: HashProvidersGetOptions): HashProvider | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* Adds a single hash provider to the collection.
|
|
97
|
+
* If a provider with the same name already exists, it will be replaced.
|
|
98
|
+
* @param provider - The HashProvider object to add
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* const providers = new HashProviders();
|
|
102
|
+
* providers.add({
|
|
103
|
+
* name: 'custom-hash',
|
|
104
|
+
* toHash: async (data) => {
|
|
105
|
+
* // Custom hashing logic
|
|
106
|
+
* return 'hash-result';
|
|
107
|
+
* }
|
|
108
|
+
* });
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
add(provider: HashProvider): void;
|
|
112
|
+
/**
|
|
113
|
+
* Removes a hash provider from the collection by name.
|
|
114
|
+
* @param name - The name of the provider to remove
|
|
115
|
+
* @returns true if the provider was found and removed, false otherwise
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* const providers = new HashProviders();
|
|
119
|
+
* providers.add({ name: 'custom', toHash: async (data) => '...' });
|
|
120
|
+
* const removed = providers.remove('custom'); // returns true
|
|
121
|
+
* const removed2 = providers.remove('nonexistent'); // returns false
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
remove(name: string): boolean;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../../src/caching/src/hashing/providers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,KAAK;AAEL,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE9F;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAwC;IAC1D,OAAO,CAAC,SAAS,CAAQ;IAEzB;;;;;;;;;OASG;gBACS,OAAO,CAAC,EAAE,oBAAoB;IAU1C;;;;;;;;;;;;OAYG;IACI,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;IAMnD;;;OAGG;IACH,IAAW,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAEhD;IAED;;;OAGG;IACH,IAAW,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAExD;IAED;;;;;;;;;;OAUG;IACH,IAAW,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAEhC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,YAAY,GAAG,SAAS;IAwBrF;;;;;;;;;;;;;;;OAeG;IACI,GAAG,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIxC;;;;;;;;;;;OAWG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGrC"}
|