@@ -6,9 +6,7 @@ const assert = require('assert')
6
6
const { Readable } = require ( 'stream' )
7
7
const { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require ( '../core/errors' )
8
8
const util = require ( '../core/util' )
9
- const { ReadableStreamFrom, toUSVString } = require ( '../core/util' )
10
-
11
- let Blob
9
+ const { ReadableStreamFrom } = require ( '../core/util' )
12
10
13
11
const kConsume = Symbol ( 'kConsume' )
14
12
const kReading = Symbol ( 'kReading' )
@@ -267,14 +265,35 @@ function consumeStart (consume) {
267
265
}
268
266
}
269
267
268
+ /**
269
+ * @param {Buffer[] } chunks
270
+ * @param {number } length
271
+ */
272
+ function chunksDecode ( chunks , length ) {
273
+ if ( chunks . length === 0 || length === 0 ) {
274
+ return ''
275
+ }
276
+ const buffer = chunks . length === 1 ? chunks [ 0 ] : Buffer . concat ( chunks , length )
277
+
278
+ const start =
279
+ buffer . length >= 3 &&
280
+ // Skip BOM.
281
+ buffer [ 0 ] === 0xef &&
282
+ buffer [ 1 ] === 0xbb &&
283
+ buffer [ 2 ] === 0xbf
284
+ ? 3
285
+ : 0
286
+ return buffer . utf8Slice ( start , buffer . length - start )
287
+ }
288
+
270
289
function consumeEnd ( consume ) {
271
290
const { type, body, resolve, stream, length } = consume
272
291
273
292
try {
274
293
if ( type === 'text' ) {
275
- resolve ( toUSVString ( Buffer . concat ( body ) ) )
294
+ resolve ( chunksDecode ( body , length ) )
276
295
} else if ( type === 'json' ) {
277
- resolve ( JSON . parse ( Buffer . concat ( body ) ) )
296
+ resolve ( JSON . parse ( chunksDecode ( body , length ) ) )
278
297
} else if ( type === 'arrayBuffer' ) {
279
298
const dst = new Uint8Array ( length )
280
299
@@ -286,9 +305,6 @@ function consumeEnd (consume) {
286
305
287
306
resolve ( dst . buffer )
288
307
} else if ( type === 'blob' ) {
289
- if ( ! Blob ) {
290
- Blob = require ( 'buffer' ) . Blob
291
- }
292
308
resolve ( new Blob ( body , { type : stream [ kContentType ] } ) )
293
309
}
294
310
0 commit comments