@hono/node-server 1.17.1 → 1.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +55 -26
- package/dist/index.mjs +55 -26
- package/dist/listener.js +55 -26
- package/dist/listener.mjs +55 -26
- package/dist/server.js +55 -26
- package/dist/server.mjs +55 -26
- package/dist/utils.d.mts +3 -1
- package/dist/utils.d.ts +3 -1
- package/dist/utils.js +19 -10
- package/dist/utils.mjs +16 -9
- package/dist/vercel.js +55 -26
- package/dist/vercel.mjs +55 -26
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -291,17 +291,14 @@ Object.setPrototypeOf(Response2, GlobalResponse);
|
|
|
291
291
|
Object.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);
|
|
292
292
|
|
|
293
293
|
// src/utils.ts
|
|
294
|
-
function
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
return;
|
|
299
|
-
}
|
|
300
|
-
const reader = stream.getReader();
|
|
294
|
+
async function readWithoutBlocking(readPromise) {
|
|
295
|
+
return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);
|
|
296
|
+
}
|
|
297
|
+
function writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {
|
|
301
298
|
const handleError = () => {
|
|
302
299
|
};
|
|
303
300
|
writable.on("error", handleError);
|
|
304
|
-
reader.read().then(flow, handleStreamError);
|
|
301
|
+
(currentReadPromise ?? reader.read()).then(flow, handleStreamError);
|
|
305
302
|
return reader.closed.finally(() => {
|
|
306
303
|
writable.off("error", handleError);
|
|
307
304
|
});
|
|
@@ -327,6 +324,14 @@ function writeFromReadableStream(stream, writable) {
|
|
|
327
324
|
}
|
|
328
325
|
}
|
|
329
326
|
}
|
|
327
|
+
function writeFromReadableStream(stream, writable) {
|
|
328
|
+
if (stream.locked) {
|
|
329
|
+
throw new TypeError("ReadableStream is locked.");
|
|
330
|
+
} else if (writable.destroyed) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
return writeFromReadableStreamDefaultReader(stream.getReader(), writable);
|
|
334
|
+
}
|
|
330
335
|
var buildOutgoingHttpHeaders = (headers) => {
|
|
331
336
|
const res = {};
|
|
332
337
|
if (!(headers instanceof Headers)) {
|
|
@@ -368,8 +373,6 @@ global.fetch = (info, init) => {
|
|
|
368
373
|
|
|
369
374
|
// src/listener.ts
|
|
370
375
|
var outgoingEnded = Symbol("outgoingEnded");
|
|
371
|
-
var regBuffer = /^no$/i;
|
|
372
|
-
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
373
376
|
var handleRequestError = () => new Response(null, {
|
|
374
377
|
status: 400
|
|
375
378
|
});
|
|
@@ -441,23 +444,49 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => {
|
|
|
441
444
|
}
|
|
442
445
|
const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);
|
|
443
446
|
if (res.body) {
|
|
444
|
-
const
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
447
|
+
const reader = res.body.getReader();
|
|
448
|
+
const values = [];
|
|
449
|
+
let done = false;
|
|
450
|
+
let currentReadPromise = void 0;
|
|
451
|
+
let maxReadCount = 2;
|
|
452
|
+
for (let i = 0; i < maxReadCount; i++) {
|
|
453
|
+
currentReadPromise ||= reader.read();
|
|
454
|
+
const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {
|
|
455
|
+
console.error(e);
|
|
456
|
+
done = true;
|
|
457
|
+
});
|
|
458
|
+
if (!chunk) {
|
|
459
|
+
if (i === 1 && resHeaderRecord["transfer-encoding"] !== "chunked") {
|
|
460
|
+
await new Promise((resolve) => setTimeout(resolve));
|
|
461
|
+
maxReadCount = 3;
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
break;
|
|
465
|
+
}
|
|
466
|
+
currentReadPromise = void 0;
|
|
467
|
+
if (chunk.value) {
|
|
468
|
+
values.push(chunk.value);
|
|
469
|
+
}
|
|
470
|
+
if (chunk.done) {
|
|
471
|
+
done = true;
|
|
472
|
+
break;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
if (done && !("content-length" in resHeaderRecord)) {
|
|
476
|
+
resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0);
|
|
477
|
+
}
|
|
478
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
479
|
+
values.forEach((value) => {
|
|
480
|
+
;
|
|
481
|
+
outgoing.write(value);
|
|
482
|
+
});
|
|
483
|
+
if (done) {
|
|
484
|
+
outgoing.end();
|
|
456
485
|
} else {
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
486
|
+
if (values.length === 0) {
|
|
487
|
+
flushHeaders(outgoing);
|
|
488
|
+
}
|
|
489
|
+
await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);
|
|
461
490
|
}
|
|
462
491
|
} else if (resHeaderRecord[X_ALREADY_SENT]) {
|
|
463
492
|
} else {
|
package/dist/index.mjs
CHANGED
|
@@ -252,17 +252,14 @@ Object.setPrototypeOf(Response2, GlobalResponse);
|
|
|
252
252
|
Object.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);
|
|
253
253
|
|
|
254
254
|
// src/utils.ts
|
|
255
|
-
function
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
return;
|
|
260
|
-
}
|
|
261
|
-
const reader = stream.getReader();
|
|
255
|
+
async function readWithoutBlocking(readPromise) {
|
|
256
|
+
return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);
|
|
257
|
+
}
|
|
258
|
+
function writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {
|
|
262
259
|
const handleError = () => {
|
|
263
260
|
};
|
|
264
261
|
writable.on("error", handleError);
|
|
265
|
-
reader.read().then(flow, handleStreamError);
|
|
262
|
+
(currentReadPromise ?? reader.read()).then(flow, handleStreamError);
|
|
266
263
|
return reader.closed.finally(() => {
|
|
267
264
|
writable.off("error", handleError);
|
|
268
265
|
});
|
|
@@ -288,6 +285,14 @@ function writeFromReadableStream(stream, writable) {
|
|
|
288
285
|
}
|
|
289
286
|
}
|
|
290
287
|
}
|
|
288
|
+
function writeFromReadableStream(stream, writable) {
|
|
289
|
+
if (stream.locked) {
|
|
290
|
+
throw new TypeError("ReadableStream is locked.");
|
|
291
|
+
} else if (writable.destroyed) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
return writeFromReadableStreamDefaultReader(stream.getReader(), writable);
|
|
295
|
+
}
|
|
291
296
|
var buildOutgoingHttpHeaders = (headers) => {
|
|
292
297
|
const res = {};
|
|
293
298
|
if (!(headers instanceof Headers)) {
|
|
@@ -329,8 +334,6 @@ global.fetch = (info, init) => {
|
|
|
329
334
|
|
|
330
335
|
// src/listener.ts
|
|
331
336
|
var outgoingEnded = Symbol("outgoingEnded");
|
|
332
|
-
var regBuffer = /^no$/i;
|
|
333
|
-
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
334
337
|
var handleRequestError = () => new Response(null, {
|
|
335
338
|
status: 400
|
|
336
339
|
});
|
|
@@ -402,23 +405,49 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => {
|
|
|
402
405
|
}
|
|
403
406
|
const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);
|
|
404
407
|
if (res.body) {
|
|
405
|
-
const
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
408
|
+
const reader = res.body.getReader();
|
|
409
|
+
const values = [];
|
|
410
|
+
let done = false;
|
|
411
|
+
let currentReadPromise = void 0;
|
|
412
|
+
let maxReadCount = 2;
|
|
413
|
+
for (let i = 0; i < maxReadCount; i++) {
|
|
414
|
+
currentReadPromise ||= reader.read();
|
|
415
|
+
const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {
|
|
416
|
+
console.error(e);
|
|
417
|
+
done = true;
|
|
418
|
+
});
|
|
419
|
+
if (!chunk) {
|
|
420
|
+
if (i === 1 && resHeaderRecord["transfer-encoding"] !== "chunked") {
|
|
421
|
+
await new Promise((resolve) => setTimeout(resolve));
|
|
422
|
+
maxReadCount = 3;
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
break;
|
|
426
|
+
}
|
|
427
|
+
currentReadPromise = void 0;
|
|
428
|
+
if (chunk.value) {
|
|
429
|
+
values.push(chunk.value);
|
|
430
|
+
}
|
|
431
|
+
if (chunk.done) {
|
|
432
|
+
done = true;
|
|
433
|
+
break;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
if (done && !("content-length" in resHeaderRecord)) {
|
|
437
|
+
resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0);
|
|
438
|
+
}
|
|
439
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
440
|
+
values.forEach((value) => {
|
|
441
|
+
;
|
|
442
|
+
outgoing.write(value);
|
|
443
|
+
});
|
|
444
|
+
if (done) {
|
|
445
|
+
outgoing.end();
|
|
417
446
|
} else {
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
447
|
+
if (values.length === 0) {
|
|
448
|
+
flushHeaders(outgoing);
|
|
449
|
+
}
|
|
450
|
+
await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);
|
|
422
451
|
}
|
|
423
452
|
} else if (resHeaderRecord[X_ALREADY_SENT]) {
|
|
424
453
|
} else {
|
package/dist/listener.js
CHANGED
|
@@ -283,17 +283,14 @@ Object.setPrototypeOf(Response2, GlobalResponse);
|
|
|
283
283
|
Object.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);
|
|
284
284
|
|
|
285
285
|
// src/utils.ts
|
|
286
|
-
function
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
const reader = stream.getReader();
|
|
286
|
+
async function readWithoutBlocking(readPromise) {
|
|
287
|
+
return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);
|
|
288
|
+
}
|
|
289
|
+
function writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {
|
|
293
290
|
const handleError = () => {
|
|
294
291
|
};
|
|
295
292
|
writable.on("error", handleError);
|
|
296
|
-
reader.read().then(flow, handleStreamError);
|
|
293
|
+
(currentReadPromise ?? reader.read()).then(flow, handleStreamError);
|
|
297
294
|
return reader.closed.finally(() => {
|
|
298
295
|
writable.off("error", handleError);
|
|
299
296
|
});
|
|
@@ -319,6 +316,14 @@ function writeFromReadableStream(stream, writable) {
|
|
|
319
316
|
}
|
|
320
317
|
}
|
|
321
318
|
}
|
|
319
|
+
function writeFromReadableStream(stream, writable) {
|
|
320
|
+
if (stream.locked) {
|
|
321
|
+
throw new TypeError("ReadableStream is locked.");
|
|
322
|
+
} else if (writable.destroyed) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
return writeFromReadableStreamDefaultReader(stream.getReader(), writable);
|
|
326
|
+
}
|
|
322
327
|
var buildOutgoingHttpHeaders = (headers) => {
|
|
323
328
|
const res = {};
|
|
324
329
|
if (!(headers instanceof Headers)) {
|
|
@@ -360,8 +365,6 @@ global.fetch = (info, init) => {
|
|
|
360
365
|
|
|
361
366
|
// src/listener.ts
|
|
362
367
|
var outgoingEnded = Symbol("outgoingEnded");
|
|
363
|
-
var regBuffer = /^no$/i;
|
|
364
|
-
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
365
368
|
var handleRequestError = () => new Response(null, {
|
|
366
369
|
status: 400
|
|
367
370
|
});
|
|
@@ -433,23 +436,49 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => {
|
|
|
433
436
|
}
|
|
434
437
|
const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);
|
|
435
438
|
if (res.body) {
|
|
436
|
-
const
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
439
|
+
const reader = res.body.getReader();
|
|
440
|
+
const values = [];
|
|
441
|
+
let done = false;
|
|
442
|
+
let currentReadPromise = void 0;
|
|
443
|
+
let maxReadCount = 2;
|
|
444
|
+
for (let i = 0; i < maxReadCount; i++) {
|
|
445
|
+
currentReadPromise ||= reader.read();
|
|
446
|
+
const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {
|
|
447
|
+
console.error(e);
|
|
448
|
+
done = true;
|
|
449
|
+
});
|
|
450
|
+
if (!chunk) {
|
|
451
|
+
if (i === 1 && resHeaderRecord["transfer-encoding"] !== "chunked") {
|
|
452
|
+
await new Promise((resolve) => setTimeout(resolve));
|
|
453
|
+
maxReadCount = 3;
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
break;
|
|
457
|
+
}
|
|
458
|
+
currentReadPromise = void 0;
|
|
459
|
+
if (chunk.value) {
|
|
460
|
+
values.push(chunk.value);
|
|
461
|
+
}
|
|
462
|
+
if (chunk.done) {
|
|
463
|
+
done = true;
|
|
464
|
+
break;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
if (done && !("content-length" in resHeaderRecord)) {
|
|
468
|
+
resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0);
|
|
469
|
+
}
|
|
470
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
471
|
+
values.forEach((value) => {
|
|
472
|
+
;
|
|
473
|
+
outgoing.write(value);
|
|
474
|
+
});
|
|
475
|
+
if (done) {
|
|
476
|
+
outgoing.end();
|
|
448
477
|
} else {
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
478
|
+
if (values.length === 0) {
|
|
479
|
+
flushHeaders(outgoing);
|
|
480
|
+
}
|
|
481
|
+
await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);
|
|
453
482
|
}
|
|
454
483
|
} else if (resHeaderRecord[X_ALREADY_SENT]) {
|
|
455
484
|
} else {
|
package/dist/listener.mjs
CHANGED
|
@@ -249,17 +249,14 @@ Object.setPrototypeOf(Response2, GlobalResponse);
|
|
|
249
249
|
Object.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);
|
|
250
250
|
|
|
251
251
|
// src/utils.ts
|
|
252
|
-
function
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
return;
|
|
257
|
-
}
|
|
258
|
-
const reader = stream.getReader();
|
|
252
|
+
async function readWithoutBlocking(readPromise) {
|
|
253
|
+
return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);
|
|
254
|
+
}
|
|
255
|
+
function writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {
|
|
259
256
|
const handleError = () => {
|
|
260
257
|
};
|
|
261
258
|
writable.on("error", handleError);
|
|
262
|
-
reader.read().then(flow, handleStreamError);
|
|
259
|
+
(currentReadPromise ?? reader.read()).then(flow, handleStreamError);
|
|
263
260
|
return reader.closed.finally(() => {
|
|
264
261
|
writable.off("error", handleError);
|
|
265
262
|
});
|
|
@@ -285,6 +282,14 @@ function writeFromReadableStream(stream, writable) {
|
|
|
285
282
|
}
|
|
286
283
|
}
|
|
287
284
|
}
|
|
285
|
+
function writeFromReadableStream(stream, writable) {
|
|
286
|
+
if (stream.locked) {
|
|
287
|
+
throw new TypeError("ReadableStream is locked.");
|
|
288
|
+
} else if (writable.destroyed) {
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
return writeFromReadableStreamDefaultReader(stream.getReader(), writable);
|
|
292
|
+
}
|
|
288
293
|
var buildOutgoingHttpHeaders = (headers) => {
|
|
289
294
|
const res = {};
|
|
290
295
|
if (!(headers instanceof Headers)) {
|
|
@@ -326,8 +331,6 @@ global.fetch = (info, init) => {
|
|
|
326
331
|
|
|
327
332
|
// src/listener.ts
|
|
328
333
|
var outgoingEnded = Symbol("outgoingEnded");
|
|
329
|
-
var regBuffer = /^no$/i;
|
|
330
|
-
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
331
334
|
var handleRequestError = () => new Response(null, {
|
|
332
335
|
status: 400
|
|
333
336
|
});
|
|
@@ -399,23 +402,49 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => {
|
|
|
399
402
|
}
|
|
400
403
|
const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);
|
|
401
404
|
if (res.body) {
|
|
402
|
-
const
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
405
|
+
const reader = res.body.getReader();
|
|
406
|
+
const values = [];
|
|
407
|
+
let done = false;
|
|
408
|
+
let currentReadPromise = void 0;
|
|
409
|
+
let maxReadCount = 2;
|
|
410
|
+
for (let i = 0; i < maxReadCount; i++) {
|
|
411
|
+
currentReadPromise ||= reader.read();
|
|
412
|
+
const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {
|
|
413
|
+
console.error(e);
|
|
414
|
+
done = true;
|
|
415
|
+
});
|
|
416
|
+
if (!chunk) {
|
|
417
|
+
if (i === 1 && resHeaderRecord["transfer-encoding"] !== "chunked") {
|
|
418
|
+
await new Promise((resolve) => setTimeout(resolve));
|
|
419
|
+
maxReadCount = 3;
|
|
420
|
+
continue;
|
|
421
|
+
}
|
|
422
|
+
break;
|
|
423
|
+
}
|
|
424
|
+
currentReadPromise = void 0;
|
|
425
|
+
if (chunk.value) {
|
|
426
|
+
values.push(chunk.value);
|
|
427
|
+
}
|
|
428
|
+
if (chunk.done) {
|
|
429
|
+
done = true;
|
|
430
|
+
break;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
if (done && !("content-length" in resHeaderRecord)) {
|
|
434
|
+
resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0);
|
|
435
|
+
}
|
|
436
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
437
|
+
values.forEach((value) => {
|
|
438
|
+
;
|
|
439
|
+
outgoing.write(value);
|
|
440
|
+
});
|
|
441
|
+
if (done) {
|
|
442
|
+
outgoing.end();
|
|
414
443
|
} else {
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
444
|
+
if (values.length === 0) {
|
|
445
|
+
flushHeaders(outgoing);
|
|
446
|
+
}
|
|
447
|
+
await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);
|
|
419
448
|
}
|
|
420
449
|
} else if (resHeaderRecord[X_ALREADY_SENT]) {
|
|
421
450
|
} else {
|
package/dist/server.js
CHANGED
|
@@ -287,17 +287,14 @@ Object.setPrototypeOf(Response2, GlobalResponse);
|
|
|
287
287
|
Object.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);
|
|
288
288
|
|
|
289
289
|
// src/utils.ts
|
|
290
|
-
function
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
const reader = stream.getReader();
|
|
290
|
+
async function readWithoutBlocking(readPromise) {
|
|
291
|
+
return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);
|
|
292
|
+
}
|
|
293
|
+
function writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {
|
|
297
294
|
const handleError = () => {
|
|
298
295
|
};
|
|
299
296
|
writable.on("error", handleError);
|
|
300
|
-
reader.read().then(flow, handleStreamError);
|
|
297
|
+
(currentReadPromise ?? reader.read()).then(flow, handleStreamError);
|
|
301
298
|
return reader.closed.finally(() => {
|
|
302
299
|
writable.off("error", handleError);
|
|
303
300
|
});
|
|
@@ -323,6 +320,14 @@ function writeFromReadableStream(stream, writable) {
|
|
|
323
320
|
}
|
|
324
321
|
}
|
|
325
322
|
}
|
|
323
|
+
function writeFromReadableStream(stream, writable) {
|
|
324
|
+
if (stream.locked) {
|
|
325
|
+
throw new TypeError("ReadableStream is locked.");
|
|
326
|
+
} else if (writable.destroyed) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
return writeFromReadableStreamDefaultReader(stream.getReader(), writable);
|
|
330
|
+
}
|
|
326
331
|
var buildOutgoingHttpHeaders = (headers) => {
|
|
327
332
|
const res = {};
|
|
328
333
|
if (!(headers instanceof Headers)) {
|
|
@@ -364,8 +369,6 @@ global.fetch = (info, init) => {
|
|
|
364
369
|
|
|
365
370
|
// src/listener.ts
|
|
366
371
|
var outgoingEnded = Symbol("outgoingEnded");
|
|
367
|
-
var regBuffer = /^no$/i;
|
|
368
|
-
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
369
372
|
var handleRequestError = () => new Response(null, {
|
|
370
373
|
status: 400
|
|
371
374
|
});
|
|
@@ -437,23 +440,49 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => {
|
|
|
437
440
|
}
|
|
438
441
|
const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);
|
|
439
442
|
if (res.body) {
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
443
|
+
const reader = res.body.getReader();
|
|
444
|
+
const values = [];
|
|
445
|
+
let done = false;
|
|
446
|
+
let currentReadPromise = void 0;
|
|
447
|
+
let maxReadCount = 2;
|
|
448
|
+
for (let i = 0; i < maxReadCount; i++) {
|
|
449
|
+
currentReadPromise ||= reader.read();
|
|
450
|
+
const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {
|
|
451
|
+
console.error(e);
|
|
452
|
+
done = true;
|
|
453
|
+
});
|
|
454
|
+
if (!chunk) {
|
|
455
|
+
if (i === 1 && resHeaderRecord["transfer-encoding"] !== "chunked") {
|
|
456
|
+
await new Promise((resolve) => setTimeout(resolve));
|
|
457
|
+
maxReadCount = 3;
|
|
458
|
+
continue;
|
|
459
|
+
}
|
|
460
|
+
break;
|
|
461
|
+
}
|
|
462
|
+
currentReadPromise = void 0;
|
|
463
|
+
if (chunk.value) {
|
|
464
|
+
values.push(chunk.value);
|
|
465
|
+
}
|
|
466
|
+
if (chunk.done) {
|
|
467
|
+
done = true;
|
|
468
|
+
break;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
if (done && !("content-length" in resHeaderRecord)) {
|
|
472
|
+
resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0);
|
|
473
|
+
}
|
|
474
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
475
|
+
values.forEach((value) => {
|
|
476
|
+
;
|
|
477
|
+
outgoing.write(value);
|
|
478
|
+
});
|
|
479
|
+
if (done) {
|
|
480
|
+
outgoing.end();
|
|
452
481
|
} else {
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
482
|
+
if (values.length === 0) {
|
|
483
|
+
flushHeaders(outgoing);
|
|
484
|
+
}
|
|
485
|
+
await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);
|
|
457
486
|
}
|
|
458
487
|
} else if (resHeaderRecord[X_ALREADY_SENT]) {
|
|
459
488
|
} else {
|
package/dist/server.mjs
CHANGED
|
@@ -252,17 +252,14 @@ Object.setPrototypeOf(Response2, GlobalResponse);
|
|
|
252
252
|
Object.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);
|
|
253
253
|
|
|
254
254
|
// src/utils.ts
|
|
255
|
-
function
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
return;
|
|
260
|
-
}
|
|
261
|
-
const reader = stream.getReader();
|
|
255
|
+
async function readWithoutBlocking(readPromise) {
|
|
256
|
+
return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);
|
|
257
|
+
}
|
|
258
|
+
function writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {
|
|
262
259
|
const handleError = () => {
|
|
263
260
|
};
|
|
264
261
|
writable.on("error", handleError);
|
|
265
|
-
reader.read().then(flow, handleStreamError);
|
|
262
|
+
(currentReadPromise ?? reader.read()).then(flow, handleStreamError);
|
|
266
263
|
return reader.closed.finally(() => {
|
|
267
264
|
writable.off("error", handleError);
|
|
268
265
|
});
|
|
@@ -288,6 +285,14 @@ function writeFromReadableStream(stream, writable) {
|
|
|
288
285
|
}
|
|
289
286
|
}
|
|
290
287
|
}
|
|
288
|
+
function writeFromReadableStream(stream, writable) {
|
|
289
|
+
if (stream.locked) {
|
|
290
|
+
throw new TypeError("ReadableStream is locked.");
|
|
291
|
+
} else if (writable.destroyed) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
return writeFromReadableStreamDefaultReader(stream.getReader(), writable);
|
|
295
|
+
}
|
|
291
296
|
var buildOutgoingHttpHeaders = (headers) => {
|
|
292
297
|
const res = {};
|
|
293
298
|
if (!(headers instanceof Headers)) {
|
|
@@ -329,8 +334,6 @@ global.fetch = (info, init) => {
|
|
|
329
334
|
|
|
330
335
|
// src/listener.ts
|
|
331
336
|
var outgoingEnded = Symbol("outgoingEnded");
|
|
332
|
-
var regBuffer = /^no$/i;
|
|
333
|
-
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
334
337
|
var handleRequestError = () => new Response(null, {
|
|
335
338
|
status: 400
|
|
336
339
|
});
|
|
@@ -402,23 +405,49 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => {
|
|
|
402
405
|
}
|
|
403
406
|
const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);
|
|
404
407
|
if (res.body) {
|
|
405
|
-
const
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
408
|
+
const reader = res.body.getReader();
|
|
409
|
+
const values = [];
|
|
410
|
+
let done = false;
|
|
411
|
+
let currentReadPromise = void 0;
|
|
412
|
+
let maxReadCount = 2;
|
|
413
|
+
for (let i = 0; i < maxReadCount; i++) {
|
|
414
|
+
currentReadPromise ||= reader.read();
|
|
415
|
+
const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {
|
|
416
|
+
console.error(e);
|
|
417
|
+
done = true;
|
|
418
|
+
});
|
|
419
|
+
if (!chunk) {
|
|
420
|
+
if (i === 1 && resHeaderRecord["transfer-encoding"] !== "chunked") {
|
|
421
|
+
await new Promise((resolve) => setTimeout(resolve));
|
|
422
|
+
maxReadCount = 3;
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
break;
|
|
426
|
+
}
|
|
427
|
+
currentReadPromise = void 0;
|
|
428
|
+
if (chunk.value) {
|
|
429
|
+
values.push(chunk.value);
|
|
430
|
+
}
|
|
431
|
+
if (chunk.done) {
|
|
432
|
+
done = true;
|
|
433
|
+
break;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
if (done && !("content-length" in resHeaderRecord)) {
|
|
437
|
+
resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0);
|
|
438
|
+
}
|
|
439
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
440
|
+
values.forEach((value) => {
|
|
441
|
+
;
|
|
442
|
+
outgoing.write(value);
|
|
443
|
+
});
|
|
444
|
+
if (done) {
|
|
445
|
+
outgoing.end();
|
|
417
446
|
} else {
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
447
|
+
if (values.length === 0) {
|
|
448
|
+
flushHeaders(outgoing);
|
|
449
|
+
}
|
|
450
|
+
await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);
|
|
422
451
|
}
|
|
423
452
|
} else if (resHeaderRecord[X_ALREADY_SENT]) {
|
|
424
453
|
} else {
|
package/dist/utils.d.mts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { OutgoingHttpHeaders } from 'node:http';
|
|
2
2
|
import { Writable } from 'node:stream';
|
|
3
3
|
|
|
4
|
+
declare function readWithoutBlocking(readPromise: Promise<ReadableStreamReadResult<Uint8Array>>): Promise<ReadableStreamReadResult<Uint8Array> | undefined>;
|
|
5
|
+
declare function writeFromReadableStreamDefaultReader(reader: ReadableStreamDefaultReader<Uint8Array>, writable: Writable, currentReadPromise?: Promise<ReadableStreamReadResult<Uint8Array>> | undefined): Promise<void>;
|
|
4
6
|
declare function writeFromReadableStream(stream: ReadableStream<Uint8Array>, writable: Writable): Promise<void> | undefined;
|
|
5
7
|
declare const buildOutgoingHttpHeaders: (headers: Headers | HeadersInit | null | undefined) => OutgoingHttpHeaders;
|
|
6
8
|
|
|
7
|
-
export { buildOutgoingHttpHeaders, writeFromReadableStream };
|
|
9
|
+
export { buildOutgoingHttpHeaders, readWithoutBlocking, writeFromReadableStream, writeFromReadableStreamDefaultReader };
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { OutgoingHttpHeaders } from 'node:http';
|
|
2
2
|
import { Writable } from 'node:stream';
|
|
3
3
|
|
|
4
|
+
declare function readWithoutBlocking(readPromise: Promise<ReadableStreamReadResult<Uint8Array>>): Promise<ReadableStreamReadResult<Uint8Array> | undefined>;
|
|
5
|
+
declare function writeFromReadableStreamDefaultReader(reader: ReadableStreamDefaultReader<Uint8Array>, writable: Writable, currentReadPromise?: Promise<ReadableStreamReadResult<Uint8Array>> | undefined): Promise<void>;
|
|
4
6
|
declare function writeFromReadableStream(stream: ReadableStream<Uint8Array>, writable: Writable): Promise<void> | undefined;
|
|
5
7
|
declare const buildOutgoingHttpHeaders: (headers: Headers | HeadersInit | null | undefined) => OutgoingHttpHeaders;
|
|
6
8
|
|
|
7
|
-
export { buildOutgoingHttpHeaders, writeFromReadableStream };
|
|
9
|
+
export { buildOutgoingHttpHeaders, readWithoutBlocking, writeFromReadableStream, writeFromReadableStreamDefaultReader };
|
package/dist/utils.js
CHANGED
|
@@ -21,20 +21,19 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var utils_exports = {};
|
|
22
22
|
__export(utils_exports, {
|
|
23
23
|
buildOutgoingHttpHeaders: () => buildOutgoingHttpHeaders,
|
|
24
|
-
|
|
24
|
+
readWithoutBlocking: () => readWithoutBlocking,
|
|
25
|
+
writeFromReadableStream: () => writeFromReadableStream,
|
|
26
|
+
writeFromReadableStreamDefaultReader: () => writeFromReadableStreamDefaultReader
|
|
25
27
|
});
|
|
26
28
|
module.exports = __toCommonJS(utils_exports);
|
|
27
|
-
function
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
const reader = stream.getReader();
|
|
29
|
+
async function readWithoutBlocking(readPromise) {
|
|
30
|
+
return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);
|
|
31
|
+
}
|
|
32
|
+
function writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {
|
|
34
33
|
const handleError = () => {
|
|
35
34
|
};
|
|
36
35
|
writable.on("error", handleError);
|
|
37
|
-
reader.read().then(flow, handleStreamError);
|
|
36
|
+
(currentReadPromise ?? reader.read()).then(flow, handleStreamError);
|
|
38
37
|
return reader.closed.finally(() => {
|
|
39
38
|
writable.off("error", handleError);
|
|
40
39
|
});
|
|
@@ -60,6 +59,14 @@ function writeFromReadableStream(stream, writable) {
|
|
|
60
59
|
}
|
|
61
60
|
}
|
|
62
61
|
}
|
|
62
|
+
function writeFromReadableStream(stream, writable) {
|
|
63
|
+
if (stream.locked) {
|
|
64
|
+
throw new TypeError("ReadableStream is locked.");
|
|
65
|
+
} else if (writable.destroyed) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
return writeFromReadableStreamDefaultReader(stream.getReader(), writable);
|
|
69
|
+
}
|
|
63
70
|
var buildOutgoingHttpHeaders = (headers) => {
|
|
64
71
|
const res = {};
|
|
65
72
|
if (!(headers instanceof Headers)) {
|
|
@@ -82,5 +89,7 @@ var buildOutgoingHttpHeaders = (headers) => {
|
|
|
82
89
|
// Annotate the CommonJS export names for ESM import in node:
|
|
83
90
|
0 && (module.exports = {
|
|
84
91
|
buildOutgoingHttpHeaders,
|
|
85
|
-
|
|
92
|
+
readWithoutBlocking,
|
|
93
|
+
writeFromReadableStream,
|
|
94
|
+
writeFromReadableStreamDefaultReader
|
|
86
95
|
});
|
package/dist/utils.mjs
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
// src/utils.ts
|
|
2
|
-
function
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
const reader = stream.getReader();
|
|
2
|
+
async function readWithoutBlocking(readPromise) {
|
|
3
|
+
return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);
|
|
4
|
+
}
|
|
5
|
+
function writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {
|
|
9
6
|
const handleError = () => {
|
|
10
7
|
};
|
|
11
8
|
writable.on("error", handleError);
|
|
12
|
-
reader.read().then(flow, handleStreamError);
|
|
9
|
+
(currentReadPromise ?? reader.read()).then(flow, handleStreamError);
|
|
13
10
|
return reader.closed.finally(() => {
|
|
14
11
|
writable.off("error", handleError);
|
|
15
12
|
});
|
|
@@ -35,6 +32,14 @@ function writeFromReadableStream(stream, writable) {
|
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
34
|
}
|
|
35
|
+
function writeFromReadableStream(stream, writable) {
|
|
36
|
+
if (stream.locked) {
|
|
37
|
+
throw new TypeError("ReadableStream is locked.");
|
|
38
|
+
} else if (writable.destroyed) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
return writeFromReadableStreamDefaultReader(stream.getReader(), writable);
|
|
42
|
+
}
|
|
38
43
|
var buildOutgoingHttpHeaders = (headers) => {
|
|
39
44
|
const res = {};
|
|
40
45
|
if (!(headers instanceof Headers)) {
|
|
@@ -56,5 +61,7 @@ var buildOutgoingHttpHeaders = (headers) => {
|
|
|
56
61
|
};
|
|
57
62
|
export {
|
|
58
63
|
buildOutgoingHttpHeaders,
|
|
59
|
-
|
|
64
|
+
readWithoutBlocking,
|
|
65
|
+
writeFromReadableStream,
|
|
66
|
+
writeFromReadableStreamDefaultReader
|
|
60
67
|
};
|
package/dist/vercel.js
CHANGED
|
@@ -285,17 +285,14 @@ Object.setPrototypeOf(Response2, GlobalResponse);
|
|
|
285
285
|
Object.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);
|
|
286
286
|
|
|
287
287
|
// src/utils.ts
|
|
288
|
-
function
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
return;
|
|
293
|
-
}
|
|
294
|
-
const reader = stream.getReader();
|
|
288
|
+
async function readWithoutBlocking(readPromise) {
|
|
289
|
+
return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);
|
|
290
|
+
}
|
|
291
|
+
function writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {
|
|
295
292
|
const handleError = () => {
|
|
296
293
|
};
|
|
297
294
|
writable.on("error", handleError);
|
|
298
|
-
reader.read().then(flow, handleStreamError);
|
|
295
|
+
(currentReadPromise ?? reader.read()).then(flow, handleStreamError);
|
|
299
296
|
return reader.closed.finally(() => {
|
|
300
297
|
writable.off("error", handleError);
|
|
301
298
|
});
|
|
@@ -321,6 +318,14 @@ function writeFromReadableStream(stream, writable) {
|
|
|
321
318
|
}
|
|
322
319
|
}
|
|
323
320
|
}
|
|
321
|
+
function writeFromReadableStream(stream, writable) {
|
|
322
|
+
if (stream.locked) {
|
|
323
|
+
throw new TypeError("ReadableStream is locked.");
|
|
324
|
+
} else if (writable.destroyed) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
return writeFromReadableStreamDefaultReader(stream.getReader(), writable);
|
|
328
|
+
}
|
|
324
329
|
var buildOutgoingHttpHeaders = (headers) => {
|
|
325
330
|
const res = {};
|
|
326
331
|
if (!(headers instanceof Headers)) {
|
|
@@ -362,8 +367,6 @@ global.fetch = (info, init) => {
|
|
|
362
367
|
|
|
363
368
|
// src/listener.ts
|
|
364
369
|
var outgoingEnded = Symbol("outgoingEnded");
|
|
365
|
-
var regBuffer = /^no$/i;
|
|
366
|
-
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
367
370
|
var handleRequestError = () => new Response(null, {
|
|
368
371
|
status: 400
|
|
369
372
|
});
|
|
@@ -435,23 +438,49 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => {
|
|
|
435
438
|
}
|
|
436
439
|
const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);
|
|
437
440
|
if (res.body) {
|
|
438
|
-
const
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
441
|
+
const reader = res.body.getReader();
|
|
442
|
+
const values = [];
|
|
443
|
+
let done = false;
|
|
444
|
+
let currentReadPromise = void 0;
|
|
445
|
+
let maxReadCount = 2;
|
|
446
|
+
for (let i = 0; i < maxReadCount; i++) {
|
|
447
|
+
currentReadPromise ||= reader.read();
|
|
448
|
+
const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {
|
|
449
|
+
console.error(e);
|
|
450
|
+
done = true;
|
|
451
|
+
});
|
|
452
|
+
if (!chunk) {
|
|
453
|
+
if (i === 1 && resHeaderRecord["transfer-encoding"] !== "chunked") {
|
|
454
|
+
await new Promise((resolve) => setTimeout(resolve));
|
|
455
|
+
maxReadCount = 3;
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
458
|
+
break;
|
|
459
|
+
}
|
|
460
|
+
currentReadPromise = void 0;
|
|
461
|
+
if (chunk.value) {
|
|
462
|
+
values.push(chunk.value);
|
|
463
|
+
}
|
|
464
|
+
if (chunk.done) {
|
|
465
|
+
done = true;
|
|
466
|
+
break;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
if (done && !("content-length" in resHeaderRecord)) {
|
|
470
|
+
resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0);
|
|
471
|
+
}
|
|
472
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
473
|
+
values.forEach((value) => {
|
|
474
|
+
;
|
|
475
|
+
outgoing.write(value);
|
|
476
|
+
});
|
|
477
|
+
if (done) {
|
|
478
|
+
outgoing.end();
|
|
450
479
|
} else {
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
480
|
+
if (values.length === 0) {
|
|
481
|
+
flushHeaders(outgoing);
|
|
482
|
+
}
|
|
483
|
+
await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);
|
|
455
484
|
}
|
|
456
485
|
} else if (resHeaderRecord[X_ALREADY_SENT]) {
|
|
457
486
|
} else {
|
package/dist/vercel.mjs
CHANGED
|
@@ -249,17 +249,14 @@ Object.setPrototypeOf(Response2, GlobalResponse);
|
|
|
249
249
|
Object.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);
|
|
250
250
|
|
|
251
251
|
// src/utils.ts
|
|
252
|
-
function
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
return;
|
|
257
|
-
}
|
|
258
|
-
const reader = stream.getReader();
|
|
252
|
+
async function readWithoutBlocking(readPromise) {
|
|
253
|
+
return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);
|
|
254
|
+
}
|
|
255
|
+
function writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {
|
|
259
256
|
const handleError = () => {
|
|
260
257
|
};
|
|
261
258
|
writable.on("error", handleError);
|
|
262
|
-
reader.read().then(flow, handleStreamError);
|
|
259
|
+
(currentReadPromise ?? reader.read()).then(flow, handleStreamError);
|
|
263
260
|
return reader.closed.finally(() => {
|
|
264
261
|
writable.off("error", handleError);
|
|
265
262
|
});
|
|
@@ -285,6 +282,14 @@ function writeFromReadableStream(stream, writable) {
|
|
|
285
282
|
}
|
|
286
283
|
}
|
|
287
284
|
}
|
|
285
|
+
function writeFromReadableStream(stream, writable) {
|
|
286
|
+
if (stream.locked) {
|
|
287
|
+
throw new TypeError("ReadableStream is locked.");
|
|
288
|
+
} else if (writable.destroyed) {
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
return writeFromReadableStreamDefaultReader(stream.getReader(), writable);
|
|
292
|
+
}
|
|
288
293
|
var buildOutgoingHttpHeaders = (headers) => {
|
|
289
294
|
const res = {};
|
|
290
295
|
if (!(headers instanceof Headers)) {
|
|
@@ -326,8 +331,6 @@ global.fetch = (info, init) => {
|
|
|
326
331
|
|
|
327
332
|
// src/listener.ts
|
|
328
333
|
var outgoingEnded = Symbol("outgoingEnded");
|
|
329
|
-
var regBuffer = /^no$/i;
|
|
330
|
-
var regContentType = /^(application\/json\b|text\/(?!event-stream\b))/i;
|
|
331
334
|
var handleRequestError = () => new Response(null, {
|
|
332
335
|
status: 400
|
|
333
336
|
});
|
|
@@ -399,23 +402,49 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => {
|
|
|
399
402
|
}
|
|
400
403
|
const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);
|
|
401
404
|
if (res.body) {
|
|
402
|
-
const
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
405
|
+
const reader = res.body.getReader();
|
|
406
|
+
const values = [];
|
|
407
|
+
let done = false;
|
|
408
|
+
let currentReadPromise = void 0;
|
|
409
|
+
let maxReadCount = 2;
|
|
410
|
+
for (let i = 0; i < maxReadCount; i++) {
|
|
411
|
+
currentReadPromise ||= reader.read();
|
|
412
|
+
const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {
|
|
413
|
+
console.error(e);
|
|
414
|
+
done = true;
|
|
415
|
+
});
|
|
416
|
+
if (!chunk) {
|
|
417
|
+
if (i === 1 && resHeaderRecord["transfer-encoding"] !== "chunked") {
|
|
418
|
+
await new Promise((resolve) => setTimeout(resolve));
|
|
419
|
+
maxReadCount = 3;
|
|
420
|
+
continue;
|
|
421
|
+
}
|
|
422
|
+
break;
|
|
423
|
+
}
|
|
424
|
+
currentReadPromise = void 0;
|
|
425
|
+
if (chunk.value) {
|
|
426
|
+
values.push(chunk.value);
|
|
427
|
+
}
|
|
428
|
+
if (chunk.done) {
|
|
429
|
+
done = true;
|
|
430
|
+
break;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
if (done && !("content-length" in resHeaderRecord)) {
|
|
434
|
+
resHeaderRecord["content-length"] = values.reduce((acc, value) => acc + value.length, 0);
|
|
435
|
+
}
|
|
436
|
+
outgoing.writeHead(res.status, resHeaderRecord);
|
|
437
|
+
values.forEach((value) => {
|
|
438
|
+
;
|
|
439
|
+
outgoing.write(value);
|
|
440
|
+
});
|
|
441
|
+
if (done) {
|
|
442
|
+
outgoing.end();
|
|
414
443
|
} else {
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
444
|
+
if (values.length === 0) {
|
|
445
|
+
flushHeaders(outgoing);
|
|
446
|
+
}
|
|
447
|
+
await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);
|
|
419
448
|
}
|
|
420
449
|
} else if (resHeaderRecord[X_ALREADY_SENT]) {
|
|
421
450
|
} else {
|