Skip to content

Commit 29909d7

Browse files
authored
fix: handle bom in text and json (#1739)
* fix: handle bom in text and json * add unit tests
1 parent 70f592d commit 29909d7

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"dependencies": {
4040
"whatwg-url": "^5.0.0"
4141
},
42-
"peerDependencies": {
42+
"peerDependencies": {
4343
"encoding": "^0.1.0"
4444
},
4545
"peerDependenciesMeta": {

src/body.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,9 @@ Body.prototype = {
114114
* @return Promise
115115
*/
116116
json() {
117-
return consumeBody.call(this).then((buffer) => {
118-
try {
119-
return JSON.parse(buffer.toString());
117+
return this.text().then((text) => {
118+
try{
119+
return JSON.parse(text);
120120
} catch (err) {
121121
return Body.Promise.reject(new FetchError(`invalid json response body at ${this.url} reason: ${err.message}`, 'invalid-json'));
122122
}
@@ -129,7 +129,7 @@ Body.prototype = {
129129
* @return Promise
130130
*/
131131
text() {
132-
return consumeBody.call(this).then(buffer => buffer.toString());
132+
return consumeBody.call(this).then(buffer => new TextDecoder().decode(buffer));
133133
},
134134

135135
/**

test/test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2479,6 +2479,21 @@ describe('Response', function () {
24792479
expect(res.headers.get('a')).to.equal('1');
24802480
});
24812481

2482+
it('should decode responses containing BOM to json', async () => {
2483+
const json = await new Response('\uFEFF{"a":1}').json();
2484+
expect(json.a).to.equal(1);
2485+
});
2486+
2487+
it('should decode responses containing BOM to text', async () => {
2488+
const text = await new Response('\uFEFF{"a":1}').text();
2489+
expect(text).to.equal('{"a":1}');
2490+
});
2491+
2492+
it('should keep BOM when getting raw bytes', async () => {
2493+
const ab = await new Response('\uFEFF{"a":1}').arrayBuffer();
2494+
expect(ab.byteLength).to.equal(10);
2495+
});
2496+
24822497
it('should support text() method', function() {
24832498
const res = new Response('a=1');
24842499
return res.text().then(result => {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy