Skip to content

Commit 3e6582f

Browse files
committed
fix: mirage does not support anything
1 parent 3d0b2af commit 3e6582f

File tree

1 file changed

+57
-53
lines changed

1 file changed

+57
-53
lines changed

packages/request/src/fetch.ts

+57-53
Original file line numberDiff line numberDiff line change
@@ -146,73 +146,77 @@ const Fetch = {
146146
return null as T;
147147
}
148148

149-
const reader = response.body!.getReader();
150-
const decoder = new TextDecoder();
151149
let text = '';
152-
let isStreaming = context.hasRequestedStream;
153-
let stream: TransformStream | null = isStreaming ? new TransformStream() : null;
154-
let writer = stream?.writable.getWriter();
155-
156-
if (isStreaming) {
157-
// Listen for the abort event on the AbortSignal
158-
context.request.signal?.addEventListener('abort', () => {
159-
if (!isStreaming) {
160-
return;
161-
}
162-
void stream!.writable.abort('Request Aborted');
163-
void stream!.readable.cancel('Request Aborted');
164-
});
165-
context.setStream(stream!.readable);
166-
}
167-
168-
// eslint-disable-next-line no-constant-condition
169-
while (true) {
170-
// we manually read the stream instead of using `response.json()`
171-
// or `response.text()` because if we need to stream the body
172-
// we need to be able to pass the stream along efficiently.
173-
const { done, value } = await reader.read();
174-
if (done) {
175-
if (isStreaming) {
176-
isStreaming = false;
177-
await writer!.ready;
178-
await writer!.close();
179-
}
180-
break;
181-
}
182-
text += decoder.decode(value, { stream: true });
150+
// if we are in a mirage context, we cannot support streaming
151+
if (IS_MAYBE_MIRAGE()) {
152+
text = await response.text();
153+
} else {
154+
const reader = response.body!.getReader();
155+
const decoder = new TextDecoder();
156+
let isStreaming = context.hasRequestedStream;
157+
let stream: TransformStream | null = isStreaming ? new TransformStream() : null;
158+
let writer = stream?.writable.getWriter();
183159

184-
// if we are streaming, we want to pass the stream along
185160
if (isStreaming) {
186-
await writer!.ready;
187-
await writer!.write(value);
188-
} else if (context.hasRequestedStream) {
189-
const encode = new TextEncoder();
190-
isStreaming = true;
191-
stream = new TransformStream();
192161
// Listen for the abort event on the AbortSignal
193-
// eslint-disable-next-line @typescript-eslint/no-loop-func
194162
context.request.signal?.addEventListener('abort', () => {
195163
if (!isStreaming) {
196164
return;
197165
}
198166
void stream!.writable.abort('Request Aborted');
199167
void stream!.readable.cancel('Request Aborted');
200168
});
201-
context.setStream(stream.readable);
202-
writer = stream.writable.getWriter();
203-
await writer.ready;
204-
await writer.write(encode.encode(text));
205-
await writer.ready;
206-
await writer.write(value);
169+
context.setStream(stream!.readable);
207170
}
208-
}
209171

210-
if (isStreaming) {
211-
isStreaming = false;
212-
await writer!.ready;
213-
await writer!.close();
214-
}
172+
// eslint-disable-next-line no-constant-condition
173+
while (true) {
174+
// we manually read the stream instead of using `response.json()`
175+
// or `response.text()` because if we need to stream the body
176+
// we need to be able to pass the stream along efficiently.
177+
const { done, value } = await reader.read();
178+
if (done) {
179+
if (isStreaming) {
180+
isStreaming = false;
181+
await writer!.ready;
182+
await writer!.close();
183+
}
184+
break;
185+
}
186+
text += decoder.decode(value, { stream: true });
215187

188+
// if we are streaming, we want to pass the stream along
189+
if (isStreaming) {
190+
await writer!.ready;
191+
await writer!.write(value);
192+
} else if (context.hasRequestedStream) {
193+
const encode = new TextEncoder();
194+
isStreaming = true;
195+
stream = new TransformStream();
196+
// Listen for the abort event on the AbortSignal
197+
// eslint-disable-next-line @typescript-eslint/no-loop-func
198+
context.request.signal?.addEventListener('abort', () => {
199+
if (!isStreaming) {
200+
return;
201+
}
202+
void stream!.writable.abort('Request Aborted');
203+
void stream!.readable.cancel('Request Aborted');
204+
});
205+
context.setStream(stream.readable);
206+
writer = stream.writable.getWriter();
207+
await writer.ready;
208+
await writer.write(encode.encode(text));
209+
await writer.ready;
210+
await writer.write(value);
211+
}
212+
}
213+
214+
if (isStreaming) {
215+
isStreaming = false;
216+
await writer!.ready;
217+
await writer!.close();
218+
}
219+
}
216220
// if we are an error, we will want to throw
217221
if (isError) {
218222
let errorPayload: object | undefined;

0 commit comments

Comments
 (0)