{"version":3,"file":"shorten-uuid.modern.mjs","sources":["../src/shorten-uuid.ts"],"sourcesContent":["export default function uuidShorten(\n  characters: string = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz',\n) {\n  const charToIndex = new Map<string, number>()\n  const charToIndexAscii = new Int16Array(128)\n  charToIndexAscii.fill(-1)\n  let canUseAsciiLookup = true\n\n  for (let i = 0; i < characters.length; i++) {\n    const ch = characters[i]\n\n    if (!charToIndex.has(ch)) {\n      charToIndex.set(ch, i)\n    }\n\n    if (canUseAsciiLookup) {\n      if (ch.length !== 1) {\n        canUseAsciiLookup = false\n      } else {\n        const code = ch.charCodeAt(0)\n        if (code >= 128) {\n          canUseAsciiLookup = false\n        } else if (charToIndexAscii[code] === -1) {\n          charToIndexAscii[code] = i\n        }\n      }\n    }\n  }\n\n  function indexOfChar(ch: string) {\n    if (canUseAsciiLookup && ch.length === 1) {\n      const code = ch.charCodeAt(0)\n      if (code < 128) {\n        return charToIndexAscii[code]\n      }\n    }\n\n    const v = charToIndex.get(ch)\n    return v === undefined ? -1 : v\n  }\n\n  function encodeIntTo64(int: number) {\n    if (int <= 0) return ''\n\n    let out = ''\n    while (int > 0) {\n      out = characters[int & 0x3f] + out\n      int >>>= 6\n    }\n    return out\n  }\n\n  function decode64ToInt(base64String: string) {\n    const len = base64String.length\n    let int = 0\n    for (let i = 0; i < len; i++) {\n      int <<= 6\n      int += indexOfChar(base64String[i])\n    }\n    return int\n  }\n\n  function encodeUint16To64Fixed3(int: number) {\n    const v = int >>> 0\n    return (\n      characters[(v >>> 12) & 0x3f]\n      + characters[(v >>> 6) & 0x3f]\n      + characters[v & 0x3f]\n    )\n  }\n\n  function decode64Fixed3ToUint16(base64String3: string) {\n    const a = indexOfChar(base64String3[0])\n    const b = indexOfChar(base64String3[1])\n    const c = indexOfChar(base64String3[2])\n    return (a << 12) | (b << 6) | c\n  }\n\n  return {\n    encode(uuid: string) {\n      const stripDashed = uuid.replace(/-/g, '')\n      let out = ''\n      for (let i = 0; i < 8; i++) {\n        out += encodeUint16To64Fixed3(\n          parseInt(stripDashed.substr(i * 4, 4), 16),\n        )\n      }\n      return out\n    },\n\n    decode(shortString: string) {\n      let out = ''\n      for (let i = 0; i < 8; i++) {\n        if (i > 1 && i < 6) {\n          out += '-'\n        }\n        out += decode64Fixed3ToUint16(\n          shortString.substr(i * 3, 3),\n        ).toString(16).padStart(4, '0')\n      }\n      return out\n    },\n\n    encodeIntTo64,\n    decode64ToInt,\n  }\n}\n"],"names":["uuidShorten","characters","charToIndex","Map","charToIndexAscii","Int16Array","fill","canUseAsciiLookup","i","length","ch","has","set","code","charCodeAt","indexOfChar","v","get","undefined","encodeUint16To64Fixed3","int","decode64Fixed3ToUint16","base64String3","encode","uuid","stripDashed","replace","out","parseInt","substr","decode","shortString","toString","padStart","encodeIntTo64","decode64ToInt","base64String","len"],"mappings":"SAAwBA,EACtBC,EAAqB,oEAErB,MAAMC,EAAc,IAAIC,IAClBC,EAAmB,IAAIC,WAAW,KACxCD,EAAiBE,MAAM,GACvB,IAAIC,GAAoB,EAExB,IAAK,IAAIC,EAAI,EAAGA,EAAIP,EAAWQ,OAAQD,IAAK,CAC1C,MAAME,EAAKT,EAAWO,GAMtB,GAJKN,EAAYS,IAAID,IACnBR,EAAYU,IAAIF,EAAIF,GAGlBD,EACF,GAAkB,IAAdG,EAAGD,OACLF,GAAoB,MACf,CACL,MAAMM,EAAOH,EAAGI,WAAW,GACvBD,GAAQ,IACVN,GAAoB,GACiB,IAA5BH,EAAiBS,KAC1BT,EAAiBS,GAAQL,EAE5B,CAEJ,CAED,SAASO,EAAYL,GACnB,GAAIH,GAAmC,IAAdG,EAAGD,OAAc,CACxC,MAAMI,EAAOH,EAAGI,WAAW,GAC3B,GAAID,EAAO,IACT,OAAOT,EAAiBS,EAE3B,CAED,MAAMG,EAAId,EAAYe,IAAIP,GAC1B,YAAaQ,IAANF,GAAmB,EAAIA,CAC/B,CAuBD,SAASG,EAAuBC,GAC9B,MAAMJ,EAAII,IAAQ,EAClB,OACEnB,EAAYe,IAAM,GAAM,IACtBf,EAAYe,IAAM,EAAK,IACvBf,EAAe,GAAJe,EAEhB,CAED,SAASK,EAAuBC,GAI9B,OAHUP,EAAYO,EAAc,KAGvB,GAFHP,EAAYO,EAAc,KAEX,EADfP,EAAYO,EAAc,GAErC,CAED,MAAO,CACLC,MAAAA,CAAOC,GACL,MAAMC,EAAcD,EAAKE,QAAQ,KAAM,IACvC,IAAIC,EAAM,GACV,IAAK,IAAInB,EAAI,EAAGA,EAAI,EAAGA,IACrBmB,GAAOR,EACLS,SAASH,EAAYI,OAAW,EAAJrB,EAAO,GAAI,KAG3C,OAAOmB,CACR,EAEDG,MAAAA,CAAOC,GACL,IAAIJ,EAAM,GACV,IAAK,IAAInB,EAAI,EAAGA,EAAI,EAAGA,IACjBA,EAAI,GAAKA,EAAI,IACfmB,GAAO,KAETA,GAAON,EACLU,EAAYF,OAAW,EAAJrB,EAAO,IAC1BwB,SAAS,IAAIC,SAAS,EAAG,KAE7B,OAAON,CACR,EAEDO,cA9DF,SAAuBd,GACrB,GAAIA,GAAO,EAAG,MAAO,GAErB,IAAIO,EAAM,GACV,KAAOP,EAAM,GACXO,EAAM1B,EAAiB,GAANmB,GAAcO,EAC/BP,KAAS,EAEX,OAAOO,CACR,EAsDCQ,cApDF,SAAuBC,GACrB,MAAMC,EAAMD,EAAa3B,OACzB,IAAIW,EAAM,EACV,IAAK,IAAIZ,EAAI,EAAGA,EAAI6B,EAAK7B,IACvBY,IAAQ,EACRA,GAAOL,EAAYqB,EAAa5B,IAElC,OAAOY,CACR,EA8CF"}