diff --git a/src/build/base64-impl-browser.spec.ts b/src/build/base64-impl-browser.spec.ts index 6078d0c3b..ddd2f9a75 100644 --- a/src/build/base64-impl-browser.spec.ts +++ b/src/build/base64-impl-browser.spec.ts @@ -52,6 +52,11 @@ describe('base64-impl/browser', function () { it('should encode boolean strings', function () { expect(base64.base64Encode('true')).toBe('dHJ1ZQ==') }) + + it('should encode a large string', function () { + const str = 'Hello 🌍'.repeat(20000) + expect(base64.base64Encode(str)).toBe(Buffer.from(str).toString('base64')) + }) }) describe('#base64Decode()', function () { diff --git a/src/build/base64-impl-browser.ts b/src/build/base64-impl-browser.ts index 100cf9f21..48ce759c7 100644 --- a/src/build/base64-impl-browser.ts +++ b/src/build/base64-impl-browser.ts @@ -1,6 +1,11 @@ export function base64Encode (str: string): string { - return btoa(String.fromCharCode(...new TextEncoder().encode(str))) + const bytes = new TextEncoder().encode(str) + let binary = '' + for (let i = 0; i < bytes.length; i += 0x8000) { + binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000)) + } + return btoa(binary) } export function base64Decode (str: string): string {