diff options
-rw-r--r-- | CHANGELOG.md | 5 | ||||
-rw-r--r-- | src/gleam_stdlib.mjs | 6 | ||||
-rw-r--r-- | test/gleam/bit_array_test.gleam | 8 |
3 files changed, 13 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index ea30f7d..8847122 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,8 +18,9 @@ - The behaviour of the string trim functions is now consistent across targets. - `iterator.yield` now yields values without waiting for the next one to become available. -- Base64 encoding speed improvements. Encoding of bit arrays over ~100KiB to - Base64 on JavaScript no longer throws an exception. +- Improved bit array Base64 encoding and decoding speed on JavaScript. +- Fixed a bug where Base64 encoding a bit array larger than ~100KiB would throw + an exception on JavaScript. ## v0.38.0 - 2024-05-24 diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs index c4111f9..d067cec 100644 --- a/src/gleam_stdlib.mjs +++ b/src/gleam_stdlib.mjs @@ -551,7 +551,11 @@ export function encode64(bit_array, padding) { export function decode64(sBase64) { try { const binString = atob(sBase64); - const array = Uint8Array.from(binString, (c) => c.charCodeAt(0)); + const length = binString.length; + const array = new Uint8Array(length); + for (let i = 0; i < length; i++) { + array[i] = binString.charCodeAt(i); + } return new Ok(new BitArray(array)); } catch { return new Error(Nil); diff --git a/test/gleam/bit_array_test.gleam b/test/gleam/bit_array_test.gleam index 1c3e7db..6693752 100644 --- a/test/gleam/bit_array_test.gleam +++ b/test/gleam/bit_array_test.gleam @@ -162,11 +162,13 @@ pub fn base64_encode_test() { |> bit_array.base64_encode(True) |> should.equal("") - string.repeat("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 1024 * 32) + string.repeat("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 1024 * 32) |> bit_array.from_string |> bit_array.base64_encode(True) - |> string.length - |> should.equal(1_398_104) + |> should.equal(string.repeat( + "QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB", + 1024 * 32, + )) } pub fn base64_decode_test() { |