| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| const toBinaryString = (text) => { |
| if (typeof TextEncoder !== 'undefined') { |
| const bytes = new TextEncoder().encode(text); |
| let binary = ''; |
|
|
| bytes.forEach((byte) => { |
| binary += String.fromCharCode(byte); |
| }); |
|
|
| return binary; |
| } |
|
|
| return encodeURIComponent(text).replace(/%([0-9A-F]{2})/g, (_, hex) => |
| String.fromCharCode(parseInt(hex, 16)), |
| ); |
| }; |
|
|
| export const encodeToBase64 = (value) => { |
| const input = value == null ? '' : String(value); |
|
|
| if (typeof window === 'undefined') { |
| if (typeof Buffer !== 'undefined') { |
| return Buffer.from(input, 'utf-8').toString('base64'); |
| } |
| if ( |
| typeof globalThis !== 'undefined' && |
| typeof globalThis.btoa === 'function' |
| ) { |
| return globalThis.btoa(toBinaryString(input)); |
| } |
| throw new Error( |
| 'Base64 encoding is unavailable in the current environment', |
| ); |
| } |
|
|
| return window.btoa(toBinaryString(input)); |
| }; |
|
|