Skip to content

Update esbuild's __toBinary helper to use Uint8Array.fromBase64 if available #4286

@dragoncoder047

Description

@dragoncoder047

I am implementing something where it would be useful to have a base64-to-uint8array decoder at runtime. Since I'm already loading a few assets with the 'binary' loader, esbuild includes its own fast base64 decoder. However when I try to access it using its name __toBinary esbuild renames it to __toBinary2 because it thinks my __toBinary is something else in the global scope and so it should not clobber that. I could just paste esbuild's implementation into my own files, but esbuild doesn't (can't) remove the second copy which just seems a little dumb. Is there any way to allow module code to reference the same functions that esbuild has when the same thing needs to be done? If not, can one be added?

__toBinary getting renamed:
https://esbuild.github.io/try/#YgAwLjI1LjkALS1sb2FkZXI6LmJpbj1iaW5hcnkgLS1idW5kbGUgLS1mb3JtYXQ9ZXNtAGUAZW50cnkuanMAaW1wb3J0IHggZnJvbSAiLi9mb28uYmluIjsKY29uc29sZS5sb2coX190b0JpbmFyeSgiYWFhYSIpKTsKY29uc29sZS5sb2coeCk7AABmb28uYmluAGFhYWE

__toBinary included twice:
https://esbuild.github.io/try/#YgAwLjI1LjkALS1sb2FkZXI6LmJpbj1iaW5hcnkgLS1idW5kbGUgLS1mb3JtYXQ9ZXNtAGUAZW50cnkuanMAaW1wb3J0IHggZnJvbSAiLi9mb28uYmluIjsKaW1wb3J0IF9fdG9CaW5hcnkgZnJvbSAiLi90b0JpbmFyeS5qcyIKY29uc29sZS5sb2coX190b0JpbmFyeSgiYWFhYSIpKTsKY29uc29sZS5sb2coeCk7AABmb28uYmluAGFhYWEAAHRvQmluYXJ5LmpzAHZhciB0YWJsZSA9IG5ldyBVaW50OEFycmF5KDEyOCk7CmZvciAodmFyIGkgPSAwOyBpIDwgNjQ7IGkrKykgdGFibGVbaSA8IDI2ID8gaSArIDY1IDogaSA8IDUyID8gaSArIDcxIDogaSA8IDYyID8gaSAtIDQgOiBpICogNCAtIDIwNV0gPSBpOwoKZXhwb3J0IGRlZmF1bHQgKGJhc2U2NCkgPT4gewogICAgdmFyIG4gPSBiYXNlNjQubGVuZ3RoLCBieXRlcyA9IG5ldyBVaW50OEFycmF5KChuIC0gKGJhc2U2NFtuIC0gMV0gPT0gIj0iKSAtIChiYXNlNjRbbiAtIDJdID09ICI9IikpICogMyAvIDQgfCAwKTsKICAgIGZvciAodmFyIGkyID0gMCwgaiA9IDA7IGkyIDwgbjsgKSB7CiAgICAgICAgdmFyIGMwID0gdGFibGVbYmFzZTY0LmNoYXJDb2RlQXQoaTIrKyldLCBjMSA9IHRhYmxlW2Jhc2U2NC5jaGFyQ29kZUF0KGkyKyspXTsKICAgICAgICB2YXIgYzIgPSB0YWJsZVtiYXNlNjQuY2hhckNvZGVBdChpMisrKV0sIGMzID0gdGFibGVbYmFzZTY0LmNoYXJDb2RlQXQoaTIrKyldOwogICAgICAgIGJ5dGVzW2orK10gPSBjMCA8PCAyIHwgYzEgPj4gNDsKICAgICAgICBieXRlc1tqKytdID0gYzEgPDwgNCB8IGMyID4+IDI7CiAgICAgICAgYnl0ZXNbaisrXSA9IGMyIDw8IDYgfCBjMzsKICAgIH0KICAgIHJldHVybiBieXRlczsKfTs

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions