-
Notifications
You must be signed in to change notification settings - Fork 29.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
btoa() and atob() #3462
Comments
I'd be up for writing a bunch of tests if people want to see this happen |
While I understand the desire on this, it could just as easily be implemented as a userland module that registers the globals. I'm -0 on adding it in to core. |
I think I'm -1 on this for the same reason. |
function btoa(str) {
if (Buffer.byteLength(str) !== str.length)
throw new Error('bad string!');
return Buffer(str, 'binary').toString('base64');
} Think that will about cover it. Update: actually, that's a bad length check and I'm too tired to work the correct one. we'd probably have to expose |
I'd rather not add more globals, ever if possible. |
The fact that you are linking to a userland package that already gets over a 1000 downloads a week (via npm) is solid evidence that the need for this, in core at least, is very minimal |
By the way: Why doesn't v8 provide functions like these? |
They're browser extensions, they're not part of the ECMAScript spec: https://html.spec.whatwg.org/multipage/webappapis.html#atob |
Feel free to continue discussing, but given the -1's, I'm closing. |
btoa is only available on browsers: nodejs/node#3462
In fact, that's because everyone uses the packages ~500k downloads per month |
Regarding the above. Isn't the fact that thousands of users are using a userland package for this a reason to include it rather than the reverse? Perhaps I'm confused but if the userland package had very few downloads wouldn't you find yourself saying; "well no one really seems to need this". I know I would. A bit lost on the reasoning. |
The reasoning here is that the situation seems quite well for everyone without something being provided by Node core. |
Yes but isn't the existance of a rarely used userland package also a valid reason to say it shouldn't go into core? So if either a userland package is used a lot (per your comment) or a little (per mine) it shouldn't be in node core. How then does that have any bearing on the question at all? |
looking at WHAT spec btoa/atob only handle strings with 8bits, so emoji etc. will throw errors, likely those APIs are not sufficient, but I do not see a web API that does universal base64 transformation except FileReader.prototype.readAsDataURL. |
for base 64 there is https://en.wikipedia.org/wiki/Base64#RFC_4648 I have helped to maintain a library that has quite a bit of usage in this space https://github.com/brianloveswords/base64url with 877k weekly downloads. Could be worth looking at that for API inspiration |
Signed-off-by: James M Snell <jasnell@gmail.com> Fixes: nodejs#3462
Opened a pr that implemented this and the immediate reaction was meh given that our current mechanisms for this are better and it's something that is easily handled by userland. Closing the issue as it's not something we're likely to land. |
In nodejs/citgm#852 (comment) it was flagged that there are some new globals in node v16 including |
@devinivy these landed already, so I think it's safe for lab to start tracking them as allowed globals. |
It's weird, so most people were against it but it landed anyway under the radar.. |
@Tofandel ... there is no "under the radar" here. All changes go through the same review and approval process before landing, and all discussions/reviews are public. |
All major browsers expose the
btoa
andatob
globals for encoding ASCII strings as base64 and vice versa. It'd be beneficial for the "isomorphic" javascript topic if we'd provide these too:As for the implementation, we can't
Buffer('string').toString('base64')
because that would encode unicode whileatob
andbtoa
must per spec throw on charcodes > 255. https://github.com/mathiasbynens/base64 looks like a solid implemenation we could pretty much drop in.The text was updated successfully, but these errors were encountered: