fix(wasm): support inlined WASM in Node < v16 (fix #8620) #8622
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Node < v16 do not provide a global
atob()
function for decoding base64 strings, and must useBuffer.from()
instead. Furthermore,Buffer.from(str, 'base64').toString()
is much faster thanatob()
in Node. Thus, prefer to useBuffer.from()
if possible.Description
This fixes #8620 for Vite 3. The bug is caused because Vite generates code that uses
atob()
, which is available only on Node.js 16+. This PR solves this by:Buffer.from()
if it exists. This is faster thanatob()
(see below), so the code prioritizes it.atob()
before using it.Note that
Buffer.from()
is much faster thanatob()
:This is because
atob()
is intentionally unoptimized. (See rationale)Additional context
vite-plugin-wasm has the same bug (see Menci/vite-plugin-wasm#3).
What is the purpose of this pull request?
Before submitting the PR, please make sure you do the following
fixes #123
).