/** * 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