minimalistic-server 0.0.4 → 0.0.6
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/index.mjs +15 -10
- package/package.json +1 -1
package/index.mjs
CHANGED
|
@@ -1159,7 +1159,7 @@ export class FileResponse extends Response {
|
|
|
1159
1159
|
|
|
1160
1160
|
#dataPromise = null;
|
|
1161
1161
|
|
|
1162
|
-
#maxChunkSize =
|
|
1162
|
+
#maxChunkSize = 4 * 1024 * 1024;
|
|
1163
1163
|
#fragmentRequestMap = new WeakMap();
|
|
1164
1164
|
|
|
1165
1165
|
constructor(filePath, code = 200, contentType = null, cookies = null) {
|
|
@@ -1187,8 +1187,10 @@ export class FileResponse extends Response {
|
|
|
1187
1187
|
|
|
1188
1188
|
if (requestedFragment) {
|
|
1189
1189
|
return {
|
|
1190
|
-
'Content-Range': `bytes ${requestedFragment.offset}-${requestedFragment.offset + requestedFragment.size - 1}/${data.size}`,
|
|
1191
1190
|
...data.headers,
|
|
1191
|
+
'Content-Range': `bytes ${requestedFragment.offset}-${requestedFragment.offset + requestedFragment.size - 1}/${data.size}`,
|
|
1192
|
+
'Content-Length': `${requestedFragment.size}`,
|
|
1193
|
+
|
|
1192
1194
|
};
|
|
1193
1195
|
}
|
|
1194
1196
|
|
|
@@ -1231,7 +1233,7 @@ export class FileResponse extends Response {
|
|
|
1231
1233
|
.map(x => {
|
|
1232
1234
|
x = +x;
|
|
1233
1235
|
|
|
1234
|
-
if (isNaN(x) || x < Number.MIN_SAFE_INTEGER || x > Number.MAX_SAFE_INTEGER) {
|
|
1236
|
+
if (!x || isNaN(x) || x < Number.MIN_SAFE_INTEGER || x > Number.MAX_SAFE_INTEGER) {
|
|
1235
1237
|
return null;
|
|
1236
1238
|
}
|
|
1237
1239
|
|
|
@@ -1255,7 +1257,7 @@ export class FileResponse extends Response {
|
|
|
1255
1257
|
offset = data.size - 1;
|
|
1256
1258
|
}
|
|
1257
1259
|
|
|
1258
|
-
let size = (numbers[1] ?? (
|
|
1260
|
+
let size = (numbers[1] ?? (this.#maxChunkSize - 1 + offset)) - offset + 1;
|
|
1259
1261
|
|
|
1260
1262
|
if (size < 0) {
|
|
1261
1263
|
size = 0;
|
|
@@ -1290,15 +1292,10 @@ export class FileResponse extends Response {
|
|
|
1290
1292
|
|
|
1291
1293
|
filehandle = await fs.open(this.#filePath, 'r');
|
|
1292
1294
|
|
|
1293
|
-
if (requestedPosition > 0) {
|
|
1294
|
-
await filehandle.read(Buffer.alloc(0), 0, 0, requestedPosition);
|
|
1295
|
-
}
|
|
1296
|
-
|
|
1297
1295
|
for (let offset = 0; offset < requestedSize; offset += this.#maxChunkSize) {
|
|
1298
1296
|
const size = Math.min(this.#maxChunkSize, requestedSize - offset);
|
|
1299
|
-
const chunk = await filehandle.read(Buffer.alloc(size), 0, size);
|
|
1297
|
+
const chunk = await filehandle.read(Buffer.alloc(size), 0, size, offset + requestedPosition);
|
|
1300
1298
|
yield chunk.buffer;
|
|
1301
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
1302
1299
|
}
|
|
1303
1300
|
} finally {
|
|
1304
1301
|
filehandle?.close();
|
|
@@ -1459,7 +1456,15 @@ export function serve(routes, port = 80, staticFileDirectory = null) {
|
|
|
1459
1456
|
|
|
1460
1457
|
if (typeof body === 'function') {
|
|
1461
1458
|
for await (const chunk of body()) {
|
|
1459
|
+
if (res.closed) {
|
|
1460
|
+
break;
|
|
1461
|
+
}
|
|
1462
|
+
|
|
1462
1463
|
res.write(chunk);
|
|
1464
|
+
|
|
1465
|
+
while (res.writableNeedDrain && !res.closed) {
|
|
1466
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
1467
|
+
}
|
|
1463
1468
|
}
|
|
1464
1469
|
} else {
|
|
1465
1470
|
res.write(body);
|