Open source vector database with HNSW indexing, graph relationships, and metadata facets. Features CLI with professional augmentation registry integration for discovering extensions and capabilities.
45 lines
No EOL
1.4 KiB
JavaScript
45 lines
No EOL
1.4 KiB
JavaScript
/**
|
|
* Cross-platform crypto utilities
|
|
* Provides hashing functions that work in both Node.js and browser environments
|
|
*/
|
|
/**
|
|
* Simple string hash function that works in all environments
|
|
* Uses djb2 algorithm - fast and good distribution
|
|
* @param str - String to hash
|
|
* @returns Positive integer hash
|
|
*/
|
|
export function hashString(str) {
|
|
let hash = 5381;
|
|
for (let i = 0; i < str.length; i++) {
|
|
const char = str.charCodeAt(i);
|
|
hash = ((hash << 5) + hash) + char; // hash * 33 + char
|
|
}
|
|
// Ensure positive number
|
|
return Math.abs(hash);
|
|
}
|
|
/**
|
|
* Alternative: FNV-1a hash algorithm
|
|
* Good distribution and fast
|
|
* @param str - String to hash
|
|
* @returns Positive integer hash
|
|
*/
|
|
export function fnv1aHash(str) {
|
|
let hash = 2166136261;
|
|
for (let i = 0; i < str.length; i++) {
|
|
hash ^= str.charCodeAt(i);
|
|
hash = (hash * 16777619) >>> 0;
|
|
}
|
|
return hash;
|
|
}
|
|
/**
|
|
* Generate a deterministic hash for partitioning
|
|
* Uses the most appropriate algorithm for the environment
|
|
* @param input - Input string to hash
|
|
* @returns Positive integer hash suitable for modulo operations
|
|
*/
|
|
export function getPartitionHash(input) {
|
|
// Use djb2 by default as it's fast and has good distribution
|
|
// This ensures consistent partitioning across all environments
|
|
return hashString(input);
|
|
}
|
|
//# sourceMappingURL=crypto.js.map
|