{"version":3,"file":"base64-buffer.mjs","names":[],"sources":["../../src/utils/base64-buffer.ts"],"sourcesContent":["interface SplitResult {\n  iv: Uint8Array;\n  cipher: Uint8Array<ArrayBuffer>;\n}\n\n/**\n * @description Convert Uint8Array to base64\n * @param {Uint8Array} bytes\n * @returns {string} `string`\n */\nexport function encodeBase64(bytes: Uint8Array): string {\n  /* v8 ignore start -- @preserve */\n  if (typeof Buffer !== 'undefined') {\n    return Buffer.from(bytes).toString('base64');\n  }\n\n  let binary = '';\n\n  for (const byte of bytes) {\n    binary += String.fromCharCode(byte);\n  }\n\n  return globalThis.btoa(binary);\n  /* v8 ignore stop -- @preserve */\n}\n\n/**\n * @description Convert base64 to Uint8Array\n * @param {string} base64\n * @returns {Uint8Array} `Uint8Array`\n */\nexport function decodeBase64(base64: string): Uint8Array {\n  /* v8 ignore start -- @preserve */\n  if (typeof Buffer !== 'undefined') {\n    return new Uint8Array(Buffer.from(base64, 'base64'));\n  }\n\n  const binary = globalThis.atob(base64);\n\n  return Uint8Array.from(binary, (char) => char.charCodeAt(0));\n  /* v8 ignore stop -- @preserve */\n}\n\n/**\n * @description Convert ArrayBuffer to base64\n * @param {ArrayBuffer} buffer\n * @returns `string`\n */\nexport function arrayBufferToBase64(buffer: ArrayBuffer): string {\n  return encodeBase64(new Uint8Array(buffer));\n}\n\n/**\n * @description Convert base64 to ArrayBuffer\n * @param {string} base64\n * @returns {ArrayBuffer} `ArrayBuffer`\n */\nexport function base64ToArrayBuffer(base64: string): ArrayBuffer {\n  return decodeBase64(base64).buffer as ArrayBuffer;\n}\n\n/**\n * @description Concat iv and cipher\n * @param {Uint8Array} iv\n * @param {ArrayBuffer} encrypted\n * @returns {ArrayBuffer} `ArrayBuffer`\n */\nexport function concat(\n  iv: Uint8Array,\n  encrypted:\n    | ArrayBuffer\n    | Uint8Array<ArrayBuffer>\n    | Uint8Array<ArrayBufferLike>\n    | (Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>),\n): ArrayBuffer {\n  const cipher = new Uint8Array(encrypted);\n\n  const result = new Uint8Array(iv.length + cipher.length);\n\n  result.set(iv);\n  result.set(cipher, iv.length);\n\n  return result.buffer;\n}\n\n/**\n * @description Split iv and cipher\n * @param {ArrayBuffer} buffer\n * @param {number} ivLength\n * @returns {SplitResult} `SplitResult`\n */\nexport function split(buffer: ArrayBuffer, ivLength: number): SplitResult {\n  const bytes = new Uint8Array(buffer);\n\n  return {\n    iv: bytes.slice(0, ivLength),\n    cipher: bytes.slice(ivLength),\n  };\n}\n\n/**\n * @description Convert ArrayBuffer to hex\n * @param {ArrayBuffer} buffer\n * @returns {string} `string`\n */\nexport function bufferToHex(buffer: ArrayBuffer): string {\n  const bytes = new Uint8Array(buffer);\n\n  let hex = '';\n\n  for (const byte of bytes) {\n    hex += byte.toString(16).padStart(2, '0');\n  }\n\n  return hex;\n}\n"],"mappings":"AAUA,SAAgB,EAAa,EAA2B,CAEtD,GAAI,OAAO,OAAW,IACpB,OAAO,OAAO,KAAK,CAAK,CAAC,CAAC,SAAS,QAAQ,EAG7C,IAAI,EAAS,GAEb,IAAK,IAAM,KAAQ,EACjB,GAAU,OAAO,aAAa,CAAI,EAGpC,OAAO,WAAW,KAAK,CAAM,CAE/B,CAOA,SAAgB,EAAa,EAA4B,CAEvD,GAAI,OAAO,OAAW,IACpB,OAAO,IAAI,WAAW,OAAO,KAAK,EAAQ,QAAQ,CAAC,EAGrD,IAAM,EAAS,WAAW,KAAK,CAAM,EAErC,OAAO,WAAW,KAAK,EAAS,GAAS,EAAK,WAAW,CAAC,CAAC,CAE7D,CAOA,SAAgB,EAAoB,EAA6B,CAC/D,OAAO,EAAa,IAAI,WAAW,CAAM,CAAC,CAC5C,CAOA,SAAgB,EAAoB,EAA6B,CAC/D,OAAO,EAAa,CAAM,CAAC,CAAC,MAC9B,CAQA,SAAgB,EACd,EACA,EAKa,CACb,IAAM,EAAS,IAAI,WAAW,CAAS,EAEjC,EAAS,IAAI,WAAW,EAAG,OAAS,EAAO,MAAM,EAKvD,OAHA,EAAO,IAAI,CAAE,EACb,EAAO,IAAI,EAAQ,EAAG,MAAM,EAErB,EAAO,MAChB,CAQA,SAAgB,EAAM,EAAqB,EAA+B,CACxE,IAAM,EAAQ,IAAI,WAAW,CAAM,EAEnC,MAAO,CACL,GAAI,EAAM,MAAM,EAAG,CAAQ,EAC3B,OAAQ,EAAM,MAAM,CAAQ,CAC9B,CACF,CAOA,SAAgB,EAAY,EAA6B,CACvD,IAAM,EAAQ,IAAI,WAAW,CAAM,EAE/B,EAAM,GAEV,IAAK,IAAM,KAAQ,EACjB,GAAO,EAAK,SAAS,EAAE,CAAC,CAAC,SAAS,EAAG,GAAG,EAG1C,OAAO,CACT"}