{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Isomorphic base64url encoding/decoding utilities\n * Works in both browser and Node.js environments\n */\n\n// Check if we're in a browser environment\nconst isBrowser = typeof window !== \"undefined\" && typeof window.btoa !== \"undefined\";\n\n/**\n * Encode data to base64url format\n * @param data - String, Uint8Array, or ArrayLike data to encode\n * @returns base64url encoded string\n */\nexport function base64urlEncode(data: string | Uint8Array | ArrayLike<number>): string {\n  let base64: string;\n\n  if (isBrowser) {\n    // Browser environment using btoa\n    if (typeof data === \"string\") {\n      base64 = btoa(data);\n    } else {\n      // Convert Uint8Array or ArrayLike to string\n      base64 = btoa(String.fromCharCode(...Array.from(data)));\n    }\n  } else {\n    // Node.js environment using Buffer\n    if (typeof data === \"string\") {\n      base64 = Buffer.from(data, \"utf8\").toString(\"base64\");\n    } else {\n      base64 = Buffer.from(data).toString(\"base64\");\n    }\n  }\n\n  // Convert base64 to base64url\n  return base64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n}\n\n/**\n * Decode base64url string to Uint8Array\n * @param str - base64url encoded string\n * @returns decoded Uint8Array\n */\nexport function base64urlDecode(str: string): Uint8Array {\n  // Convert base64url to base64\n  const base64 = str\n    .replace(/-/g, \"+\")\n    .replace(/_/g, \"/\")\n    .padEnd(str.length + ((4 - (str.length % 4)) % 4), \"=\");\n\n  if (isBrowser) {\n    // Browser environment using atob\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n  } else {\n    // Node.js environment using Buffer\n    return new Uint8Array(Buffer.from(base64, \"base64\"));\n  }\n}\n\n/**\n * Decode base64url string to UTF-8 string\n * @param str - base64url encoded string\n * @returns decoded UTF-8 string\n */\nexport function base64urlDecodeToString(str: string): string {\n  const bytes = base64urlDecode(str);\n\n  if (isBrowser && typeof TextDecoder !== \"undefined\") {\n    return new TextDecoder().decode(bytes);\n  } else if (!isBrowser) {\n    // Node.js environment\n    return Buffer.from(bytes).toString(\"utf8\");\n  } else {\n    // Fallback for older browsers without TextDecoder\n    return String.fromCharCode(...bytes);\n  }\n}\n\n/**\n * Encode UTF-8 string to base64url format\n * @param str - UTF-8 string to encode\n * @returns base64url encoded string\n */\nexport function stringToBase64url(str: string): string {\n  if (isBrowser && typeof TextEncoder !== \"undefined\") {\n    const bytes = new TextEncoder().encode(str);\n    return base64urlEncode(bytes);\n  } else if (!isBrowser) {\n    // Node.js environment\n    return base64urlEncode(str);\n  } else {\n    // Fallback for older browsers without TextEncoder\n    return base64urlEncode(str);\n  }\n}\n"],"mappings":";AAMA,IAAM,YAAY,OAAO,WAAW,eAAe,OAAO,OAAO,SAAS;AAOnE,SAAS,gBAAgB,MAAuD;AACrF,MAAI;AAEJ,MAAI,WAAW;AAEb,QAAI,OAAO,SAAS,UAAU;AAC5B,eAAS,KAAK,IAAI;AAAA,IACpB,OAAO;AAEL,eAAS,KAAK,OAAO,aAAa,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC;AAAA,IACxD;AAAA,EACF,OAAO;AAEL,QAAI,OAAO,SAAS,UAAU;AAC5B,eAAS,OAAO,KAAK,MAAM,MAAM,EAAE,SAAS,QAAQ;AAAA,IACtD,OAAO;AACL,eAAS,OAAO,KAAK,IAAI,EAAE,SAAS,QAAQ;AAAA,IAC9C;AAAA,EACF;AAGA,SAAO,OAAO,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,EAAE;AACzE;AAOO,SAAS,gBAAgB,KAAyB;AAEvD,QAAM,SAAS,IACZ,QAAQ,MAAM,GAAG,EACjB,QAAQ,MAAM,GAAG,EACjB,OAAO,IAAI,UAAW,IAAK,IAAI,SAAS,KAAM,GAAI,GAAG;AAExD,MAAI,WAAW;AAEb,UAAM,eAAe,KAAK,MAAM;AAChC,UAAM,QAAQ,IAAI,WAAW,aAAa,MAAM;AAChD,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,YAAM,CAAC,IAAI,aAAa,WAAW,CAAC;AAAA,IACtC;AACA,WAAO;AAAA,EACT,OAAO;AAEL,WAAO,IAAI,WAAW,OAAO,KAAK,QAAQ,QAAQ,CAAC;AAAA,EACrD;AACF;AAOO,SAAS,wBAAwB,KAAqB;AAC3D,QAAM,QAAQ,gBAAgB,GAAG;AAEjC,MAAI,aAAa,OAAO,gBAAgB,aAAa;AACnD,WAAO,IAAI,YAAY,EAAE,OAAO,KAAK;AAAA,EACvC,WAAW,CAAC,WAAW;AAErB,WAAO,OAAO,KAAK,KAAK,EAAE,SAAS,MAAM;AAAA,EAC3C,OAAO;AAEL,WAAO,OAAO,aAAa,GAAG,KAAK;AAAA,EACrC;AACF;AAOO,SAAS,kBAAkB,KAAqB;AACrD,MAAI,aAAa,OAAO,gBAAgB,aAAa;AACnD,UAAM,QAAQ,IAAI,YAAY,EAAE,OAAO,GAAG;AAC1C,WAAO,gBAAgB,KAAK;AAAA,EAC9B,WAAW,CAAC,WAAW;AAErB,WAAO,gBAAgB,GAAG;AAAA,EAC5B,OAAO;AAEL,WAAO,gBAAgB,GAAG;AAAA,EAC5B;AACF;","names":[]}