{"version":3,"file":"hashing.mjs","names":[],"sources":["../src/hashing/Base36.ts"],"sourcesContent":["import { MemoryCache } from '../cache';\n\n/**\n * Minimum input length required for caching to provide actually be effective.\n */\nconst MIN_RECOMMENDED_INPUT_CACHING_LENGTH = 500;\n\n/**\n * Create a short human-readable 6 character hash(-like) string for the provided input string.\n * Useful for taking long IDs or other hard to read text and transforming it into a format that's easier to compare\n * by a human for equality.\n * @example\n * base36Hash('foobar') // -> 'azcwfp'\n */\nexport function base36Hash(input: string, {\n    cache = 'auto' as HashingCacheMode,\n    calculateHash = _calculateHash,\n} = {}): string {\n    let shouldUseCache = cache;\n    \n    if (cache === 'auto') {\n        shouldUseCache = input.length > MIN_RECOMMENDED_INPUT_CACHING_LENGTH;\n    }\n    \n    if (shouldUseCache === false) {\n        return calculateHash(input);\n    }\n    \n    return MemoryCache.remember({\n        handler: () => calculateHash(input),\n        key: `base36Hash:${input}`,\n        ttlSeconds: 120,\n    })\n}\n\nexport type HashingCacheMode = boolean | 'auto';\n\n// @__NO_SIDE_EFFECTS__\nfunction _calculateHash(input: string) {\n    let hash = 0;\n    for (let i = 0; i < input.length; i++) {\n        const char = input.charCodeAt(i);\n        hash = (((hash << 5) - hash) + char) % Number.MAX_SAFE_INTEGER;\n        hash = hash & hash; // Convert to 32-bit integer\n    }\n    // Convert to base36 (alphanumeric)\n    return Math.abs(hash).toString(36).padEnd(6, '0');\n}\n"],"mappings":";;;;;;;AAKA,MAAM,uCAAuC;;;;;;;;AAS7C,SAAgB,WAAW,OAAe,EACtC,QAAQ,QACR,gBAAgB,mBAChB,EAAE,EAAU;CACZ,IAAI,iBAAiB;AAErB,KAAI,UAAU,OACV,kBAAiB,MAAM,SAAS;AAGpC,KAAI,mBAAmB,MACnB,QAAO,cAAc,MAAM;AAG/B,QAAO,YAAY,SAAS;EACxB,eAAe,cAAc,MAAM;EACnC,KAAK,cAAc;EACnB,YAAY;EACf,CAAC;;;AAMN,SAAS,eAAe,OAAe;CACnC,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACnC,MAAM,OAAO,MAAM,WAAW,EAAE;AAChC,WAAU,QAAQ,KAAK,OAAQ,QAAQ,OAAO;AAC9C,SAAO,OAAO;;AAGlB,QAAO,KAAK,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,OAAO,GAAG,IAAI"}