@@ -58,13 +58,20 @@ function readableNodeToWeb(nodeStream, instance) {
58
58
// TODO: Should we only do Buffer.from() if chunk is a UInt8Array?
59
59
// Potentially it makes more sense for down-stream consumers of fetch to cast to Buffer, instead?
60
60
// if(isUInt8Array(chunk)) {
61
- controller . enqueue ( Buffer . from ( chunk ) ) ;
61
+ controller . enqueue ( new Uint8Array ( Buffer . from ( chunk ) ) ) ;
62
62
63
63
// HELP WANTED: The node-web-streams package pauses the nodeStream here, however,
64
64
// if we do that, then it gets permanently paused. Why?
65
65
// nodeStream.pause();
66
66
} ) ;
67
- nodeStream . on ( 'end' , ( ) => controller . close ( ) ) ;
67
+ nodeStream . on ( 'end' , ( ) => {
68
+ controller . close ( ) ;
69
+
70
+ const pending = controller . byobRequest ;
71
+ if ( pending ) {
72
+ pending . respond ( 0 ) ;
73
+ }
74
+ } ) ;
68
75
nodeStream . on ( 'error' , ( err ) => {
69
76
controller . error ( new FetchError ( `Invalid response body while trying to fetch ${ instance . url } : ${ err . message } ` , 'system' , err ) )
70
77
} ) ;
@@ -74,7 +81,8 @@ function readableNodeToWeb(nodeStream, instance) {
74
81
} ,
75
82
cancel ( reason ) {
76
83
nodeStream . pause ( ) ;
77
- }
84
+ } ,
85
+ type : "bytes"
78
86
} ) ;
79
87
}
80
88
@@ -92,7 +100,7 @@ export function createReadableStream(instance) {
92
100
// TODO: Should we only do Buffer.from() if chunk is a UInt8Array?
93
101
// Potentially it makes more sense for down-stream consumers of fetch to cast to Buffer, instead?
94
102
// if(isUInt8Array(chunk)) {
95
- controller . enqueue ( Buffer . from ( chunk ) )
103
+ controller . enqueue ( new Uint8Array ( Buffer . from ( chunk ) ) ) ;
96
104
}
97
105
} ) ) ;
98
106
}
@@ -107,46 +115,47 @@ export function createReadableStream(instance) {
107
115
switch ( bodyType ) {
108
116
case "String" :
109
117
// body is a string:
110
- controller . enqueue ( Buffer . from ( body ) ) ;
118
+ controller . enqueue ( new Uint8Array ( Buffer . from ( body ) ) ) ;
111
119
controller . close ( ) ;
112
120
break ;
113
121
case "URLSearchParams" :
114
122
// body is a URLSearchParams
115
- controller . enqueue ( Buffer . from ( body . toString ( ) ) ) ;
123
+ controller . enqueue ( new Uint8Array ( Buffer . from ( body . toString ( ) ) ) ) ;
116
124
controller . close ( ) ;
117
125
break ;
118
126
case "Blob" :
119
127
// body is blob
120
- controller . enqueue ( Buffer . from ( body [ BUFFER ] ) ) ;
128
+ controller . enqueue ( new Uint8Array ( Buffer . from ( body [ BUFFER ] ) ) ) ;
121
129
controller . close ( ) ;
122
130
break ;
123
131
case "Buffer" :
124
132
// body is Buffer
125
- controller . enqueue ( Buffer . from ( body ) )
133
+ controller . enqueue ( new Uint8Array ( Buffer . from ( body ) ) ) ;
126
134
controller . close ( ) ;
127
135
break ;
128
136
case "ArrayBuffer" :
129
137
// body is ArrayBuffer
130
- controller . enqueue ( Buffer . from ( body ) )
138
+ controller . enqueue ( new Uint8Array ( Buffer . from ( body ) ) ) ;
131
139
controller . close ( ) ;
132
140
break ;
133
141
case "ArrayBufferView" :
134
142
// body is ArrayBufferView
135
- controller . enqueue ( Buffer . from ( body . buffer ) )
143
+ controller . enqueue ( new Uint8Array ( Buffer . from ( body . buffer ) ) ) ;
136
144
controller . close ( ) ;
137
145
break ;
138
146
case "FormData" :
139
- controller . enqueue ( Buffer . from ( body . toString ( ) ) ) ;
147
+ controller . enqueue ( new Uint8Array ( Buffer . from ( body . toString ( ) ) ) ) ;
140
148
controller . close ( ) ;
141
149
break ;
142
150
case "other" :
143
- controller . enqueue ( Buffer . from ( String ( body ) ) ) ;
151
+ controller . enqueue ( new Uint8Array ( Buffer . from ( String ( body ) ) ) ) ;
144
152
controller . close ( ) ;
145
153
break ;
146
154
default :
147
155
throw new Error ( "createReadableStream received an instance body that getTypeOfBody could not understand" ) ;
148
156
}
149
- }
157
+ } ,
158
+ type : "bytes"
150
159
} ) ;
151
160
152
161
return readable ;
0 commit comments