@juzi/file-box 1.7.19 → 1.7.20
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/cjs/src/file-box.d.ts.map +1 -1
- package/dist/cjs/src/file-box.js +2 -2
- package/dist/cjs/src/file-box.js.map +1 -1
- package/dist/cjs/src/file-box.spec.d.ts.map +1 -1
- package/dist/cjs/src/file-box.spec.js +26 -2
- package/dist/cjs/src/file-box.spec.js.map +1 -1
- package/dist/cjs/src/misc.d.ts.map +1 -1
- package/dist/cjs/src/misc.js +126 -27
- package/dist/cjs/src/misc.js.map +1 -1
- package/dist/cjs/src/misc.spec.js +101 -14
- package/dist/cjs/src/misc.spec.js.map +1 -1
- package/dist/cjs/src/version.js +1 -1
- package/dist/cjs/tests/chunk-download.spec.d.ts +3 -0
- package/dist/cjs/tests/chunk-download.spec.d.ts.map +1 -0
- package/dist/cjs/tests/chunk-download.spec.js +302 -0
- package/dist/cjs/tests/chunk-download.spec.js.map +1 -0
- package/dist/cjs/tests/misc-error-handling.spec.d.ts +3 -0
- package/dist/cjs/tests/misc-error-handling.spec.d.ts.map +1 -0
- package/dist/cjs/tests/misc-error-handling.spec.js +258 -0
- package/dist/cjs/tests/misc-error-handling.spec.js.map +1 -0
- package/dist/esm/src/file-box.d.ts.map +1 -1
- package/dist/esm/src/file-box.js +2 -2
- package/dist/esm/src/file-box.js.map +1 -1
- package/dist/esm/src/file-box.spec.d.ts.map +1 -1
- package/dist/esm/src/file-box.spec.js +27 -3
- package/dist/esm/src/file-box.spec.js.map +1 -1
- package/dist/esm/src/misc.d.ts.map +1 -1
- package/dist/esm/src/misc.js +127 -28
- package/dist/esm/src/misc.js.map +1 -1
- package/dist/esm/src/misc.spec.js +101 -14
- package/dist/esm/src/misc.spec.js.map +1 -1
- package/dist/esm/src/version.js +1 -1
- package/dist/esm/tests/chunk-download.spec.d.ts +3 -0
- package/dist/esm/tests/chunk-download.spec.d.ts.map +1 -0
- package/dist/esm/tests/chunk-download.spec.js +300 -0
- package/dist/esm/tests/chunk-download.spec.js.map +1 -0
- package/dist/esm/tests/misc-error-handling.spec.d.ts +3 -0
- package/dist/esm/tests/misc-error-handling.spec.d.ts.map +1 -0
- package/dist/esm/tests/misc-error-handling.spec.js +256 -0
- package/dist/esm/tests/misc-error-handling.spec.js.map +1 -0
- package/package.json +10 -3
- package/src/file-box.spec.ts +34 -7
- package/src/file-box.ts +5 -5
- package/src/misc.spec.ts +111 -17
- package/src/misc.ts +110 -31
- package/src/version.ts +1 -1
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
import { createServer } from 'http';
|
|
3
|
+
import 'timers/promises';
|
|
4
|
+
import { test } from 'tstest';
|
|
5
|
+
import { httpStream, streamToBuffer } from '../src/misc.js';
|
|
6
|
+
test('should download file in chunks with range support', async (t) => {
|
|
7
|
+
const FILE_SIZE = 1024 * 1024; // 1MB
|
|
8
|
+
const fileContent = Buffer.alloc(FILE_SIZE, 'X');
|
|
9
|
+
const server = createServer((req, res) => {
|
|
10
|
+
const rangeHeader = req.headers.range;
|
|
11
|
+
if (rangeHeader) {
|
|
12
|
+
// Parse range header
|
|
13
|
+
const parts = rangeHeader.replace(/bytes=/, '').split('-');
|
|
14
|
+
const start = parseInt(parts[0], 10);
|
|
15
|
+
const end = parts[1] ? parseInt(parts[1], 10) : FILE_SIZE - 1;
|
|
16
|
+
const chunkSize = end - start + 1;
|
|
17
|
+
res.writeHead(206, {
|
|
18
|
+
'Accept-Ranges': 'bytes',
|
|
19
|
+
'Content-Length': chunkSize,
|
|
20
|
+
'Content-Range': `bytes ${start}-${end}/${FILE_SIZE}`,
|
|
21
|
+
'Content-Type': 'application/octet-stream',
|
|
22
|
+
});
|
|
23
|
+
res.end(fileContent.slice(start, end + 1));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// No range, send full file
|
|
27
|
+
res.writeHead(200, {
|
|
28
|
+
'Accept-Ranges': 'bytes',
|
|
29
|
+
'Content-Length': FILE_SIZE,
|
|
30
|
+
'Content-Type': 'application/octet-stream',
|
|
31
|
+
});
|
|
32
|
+
res.end(fileContent);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
36
|
+
await new Promise((resolve) => {
|
|
37
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
38
|
+
});
|
|
39
|
+
const url = `http://127.0.0.1:${port}/largefile`;
|
|
40
|
+
try {
|
|
41
|
+
// Set environment to enable chunk download
|
|
42
|
+
const originalChunkSize = process.env['FILEBOX_HTTP_CHUNK_SIZE'];
|
|
43
|
+
process.env['FILEBOX_HTTP_CHUNK_SIZE'] = String(512 * 1024); // 512KB chunks
|
|
44
|
+
const stream = await httpStream(url);
|
|
45
|
+
const buffer = await streamToBuffer(stream);
|
|
46
|
+
t.equal(buffer.length, FILE_SIZE, 'should download complete file');
|
|
47
|
+
t.ok(buffer.every(byte => byte === 88), 'should have correct content (all X)');
|
|
48
|
+
// Restore environment
|
|
49
|
+
if (originalChunkSize) {
|
|
50
|
+
process.env['FILEBOX_HTTP_CHUNK_SIZE'] = originalChunkSize;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
delete process.env['FILEBOX_HTTP_CHUNK_SIZE'];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
server.close();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
test('should handle chunk download with retry on failure', async (t) => {
|
|
61
|
+
const FILE_SIZE = 600 * 1024; // 600KB
|
|
62
|
+
const fileContent = Buffer.alloc(FILE_SIZE, 'Y');
|
|
63
|
+
let requestCount = 0;
|
|
64
|
+
let failedOnce = false;
|
|
65
|
+
const server = createServer((req, res) => {
|
|
66
|
+
requestCount++;
|
|
67
|
+
const rangeHeader = req.headers.range;
|
|
68
|
+
// Fail the first chunk request to test retry
|
|
69
|
+
if (rangeHeader && !failedOnce) {
|
|
70
|
+
failedOnce = true;
|
|
71
|
+
res.destroy(); // Simulate connection abort
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (rangeHeader) {
|
|
75
|
+
const parts = rangeHeader.replace(/bytes=/, '').split('-');
|
|
76
|
+
const start = parseInt(parts[0], 10);
|
|
77
|
+
const end = parts[1] ? parseInt(parts[1], 10) : FILE_SIZE - 1;
|
|
78
|
+
const chunkSize = end - start + 1;
|
|
79
|
+
res.writeHead(206, {
|
|
80
|
+
'Accept-Ranges': 'bytes',
|
|
81
|
+
'Content-Length': chunkSize,
|
|
82
|
+
'Content-Range': `bytes ${start}-${end}/${FILE_SIZE}`,
|
|
83
|
+
'Content-Type': 'application/octet-stream',
|
|
84
|
+
});
|
|
85
|
+
res.end(fileContent.slice(start, end + 1));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
res.writeHead(200, {
|
|
89
|
+
'Accept-Ranges': 'bytes',
|
|
90
|
+
'Content-Length': FILE_SIZE,
|
|
91
|
+
'Content-Type': 'application/octet-stream',
|
|
92
|
+
});
|
|
93
|
+
res.end(fileContent);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
97
|
+
await new Promise((resolve) => {
|
|
98
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
99
|
+
});
|
|
100
|
+
const url = `http://127.0.0.1:${port}/retry-file`;
|
|
101
|
+
try {
|
|
102
|
+
const originalChunkSize = process.env['FILEBOX_HTTP_CHUNK_SIZE'];
|
|
103
|
+
process.env['FILEBOX_HTTP_CHUNK_SIZE'] = String(300 * 1024); // 300KB chunks
|
|
104
|
+
const stream = await httpStream(url);
|
|
105
|
+
const buffer = await streamToBuffer(stream);
|
|
106
|
+
t.equal(buffer.length, FILE_SIZE, 'should complete download despite retry');
|
|
107
|
+
t.ok(buffer.every(byte => byte === 89), 'should have correct content (all Y)');
|
|
108
|
+
t.ok(requestCount > 2, 'should have made retry requests');
|
|
109
|
+
if (originalChunkSize) {
|
|
110
|
+
process.env['FILEBOX_HTTP_CHUNK_SIZE'] = originalChunkSize;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
delete process.env['FILEBOX_HTTP_CHUNK_SIZE'];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
server.close();
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
test('should handle server without range support', async (t) => {
|
|
121
|
+
const FILE_SIZE = 700 * 1024; // 700KB
|
|
122
|
+
const fileContent = Buffer.alloc(FILE_SIZE, 'Z');
|
|
123
|
+
const server = createServer((_req, res) => {
|
|
124
|
+
// Server doesn't support ranges
|
|
125
|
+
res.writeHead(200, {
|
|
126
|
+
'Content-Length': FILE_SIZE,
|
|
127
|
+
'Content-Type': 'application/octet-stream',
|
|
128
|
+
// No Accept-Ranges header
|
|
129
|
+
});
|
|
130
|
+
res.end(fileContent);
|
|
131
|
+
});
|
|
132
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
133
|
+
await new Promise((resolve) => {
|
|
134
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
135
|
+
});
|
|
136
|
+
const url = `http://127.0.0.1:${port}/no-range-file`;
|
|
137
|
+
try {
|
|
138
|
+
const stream = await httpStream(url);
|
|
139
|
+
const buffer = await streamToBuffer(stream);
|
|
140
|
+
t.equal(buffer.length, FILE_SIZE, 'should download via non-chunked method');
|
|
141
|
+
t.ok(buffer.every(byte => byte === 90), 'should have correct content (all Z)');
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
server.close();
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
test('should handle partial content with interrupted download', async (t) => {
|
|
148
|
+
const FILE_SIZE = 800 * 1024;
|
|
149
|
+
const fileContent = Buffer.alloc(FILE_SIZE, 'W');
|
|
150
|
+
let chunkRequestCount = 0;
|
|
151
|
+
const server = createServer((req, res) => {
|
|
152
|
+
const rangeHeader = req.headers.range;
|
|
153
|
+
if (rangeHeader) {
|
|
154
|
+
chunkRequestCount++;
|
|
155
|
+
const parts = rangeHeader.replace(/bytes=/, '').split('-');
|
|
156
|
+
const start = parseInt(parts[0], 10);
|
|
157
|
+
const end = parts[1] ? parseInt(parts[1], 10) : FILE_SIZE - 1;
|
|
158
|
+
const chunkSize = end - start + 1;
|
|
159
|
+
res.writeHead(206, {
|
|
160
|
+
'Accept-Ranges': 'bytes',
|
|
161
|
+
'Content-Length': chunkSize,
|
|
162
|
+
'Content-Range': `bytes ${start}-${end}/${FILE_SIZE}`,
|
|
163
|
+
'Content-Type': 'application/octet-stream',
|
|
164
|
+
});
|
|
165
|
+
// Send partial data then close for first chunk
|
|
166
|
+
if (chunkRequestCount === 1) {
|
|
167
|
+
const partial = fileContent.slice(start, start + Math.floor(chunkSize / 2));
|
|
168
|
+
res.write(partial);
|
|
169
|
+
setTimeout(() => res.destroy(), 50);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
res.end(fileContent.slice(start, end + 1));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
res.writeHead(200, {
|
|
177
|
+
'Accept-Ranges': 'bytes',
|
|
178
|
+
'Content-Length': FILE_SIZE,
|
|
179
|
+
});
|
|
180
|
+
res.end(fileContent);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
184
|
+
await new Promise((resolve) => {
|
|
185
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
186
|
+
});
|
|
187
|
+
const url = `http://127.0.0.1:${port}/interrupted-file`;
|
|
188
|
+
try {
|
|
189
|
+
const originalChunkSize = process.env['FILEBOX_HTTP_CHUNK_SIZE'];
|
|
190
|
+
process.env['FILEBOX_HTTP_CHUNK_SIZE'] = String(400 * 1024);
|
|
191
|
+
const stream = await httpStream(url);
|
|
192
|
+
const buffer = await streamToBuffer(stream);
|
|
193
|
+
t.equal(buffer.length, FILE_SIZE, 'should recover from interruption');
|
|
194
|
+
t.ok(chunkRequestCount >= 2, 'should have retried after interruption');
|
|
195
|
+
if (originalChunkSize) {
|
|
196
|
+
process.env['FILEBOX_HTTP_CHUNK_SIZE'] = originalChunkSize;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
delete process.env['FILEBOX_HTTP_CHUNK_SIZE'];
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
server.close();
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
test('should handle Content-Range parsing errors gracefully', async (t) => {
|
|
207
|
+
const FILE_SIZE = 100 * 1024;
|
|
208
|
+
const fileContent = Buffer.alloc(FILE_SIZE, 'T');
|
|
209
|
+
const server = createServer((req, res) => {
|
|
210
|
+
const rangeHeader = req.headers.range;
|
|
211
|
+
if (rangeHeader) {
|
|
212
|
+
const parts = rangeHeader.replace(/bytes=/, '').split('-');
|
|
213
|
+
const start = parseInt(parts[0], 10);
|
|
214
|
+
const end = parts[1] ? parseInt(parts[1], 10) : FILE_SIZE - 1;
|
|
215
|
+
const chunkSize = end - start + 1;
|
|
216
|
+
res.writeHead(206, {
|
|
217
|
+
'Accept-Ranges': 'bytes',
|
|
218
|
+
'Content-Length': chunkSize,
|
|
219
|
+
// Invalid Content-Range format
|
|
220
|
+
'Content-Range': 'invalid format',
|
|
221
|
+
});
|
|
222
|
+
res.end(fileContent.slice(start, end + 1));
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
res.writeHead(200, {
|
|
226
|
+
'Accept-Ranges': 'bytes',
|
|
227
|
+
'Content-Length': FILE_SIZE,
|
|
228
|
+
});
|
|
229
|
+
res.end(fileContent);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
233
|
+
await new Promise((resolve) => {
|
|
234
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
235
|
+
});
|
|
236
|
+
const url = `http://127.0.0.1:${port}/invalid-range-file`;
|
|
237
|
+
try {
|
|
238
|
+
const originalChunkSize = process.env['FILEBOX_HTTP_CHUNK_SIZE'];
|
|
239
|
+
process.env['FILEBOX_HTTP_CHUNK_SIZE'] = String(50 * 1024);
|
|
240
|
+
const stream = await httpStream(url);
|
|
241
|
+
const buffer = await streamToBuffer(stream);
|
|
242
|
+
// Should still work despite invalid Content-Range
|
|
243
|
+
t.equal(buffer.length, FILE_SIZE, 'should handle invalid Content-Range');
|
|
244
|
+
if (originalChunkSize) {
|
|
245
|
+
process.env['FILEBOX_HTTP_CHUNK_SIZE'] = originalChunkSize;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
delete process.env['FILEBOX_HTTP_CHUNK_SIZE'];
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
finally {
|
|
252
|
+
server.close();
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
test('should disable chunk download with NO_SLICE_DOWN env', async (t) => {
|
|
256
|
+
const FILE_SIZE = 900 * 1024;
|
|
257
|
+
const fileContent = Buffer.alloc(FILE_SIZE, 'N');
|
|
258
|
+
let rangeRequested = false;
|
|
259
|
+
const server = createServer((req, res) => {
|
|
260
|
+
if (req.headers.range) {
|
|
261
|
+
rangeRequested = true;
|
|
262
|
+
}
|
|
263
|
+
res.writeHead(200, {
|
|
264
|
+
'Accept-Ranges': 'bytes',
|
|
265
|
+
'Content-Length': FILE_SIZE,
|
|
266
|
+
});
|
|
267
|
+
res.end(fileContent);
|
|
268
|
+
});
|
|
269
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
270
|
+
await new Promise((resolve) => {
|
|
271
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
272
|
+
});
|
|
273
|
+
const url = `http://127.0.0.1:${port}/no-slice-file`;
|
|
274
|
+
try {
|
|
275
|
+
const originalNoSlice = process.env['FILEBOX_NO_SLICE_DOWN'];
|
|
276
|
+
const originalChunkSize = process.env['FILEBOX_HTTP_CHUNK_SIZE'];
|
|
277
|
+
process.env['FILEBOX_NO_SLICE_DOWN'] = 'true';
|
|
278
|
+
process.env['FILEBOX_HTTP_CHUNK_SIZE'] = String(300 * 1024);
|
|
279
|
+
const stream = await httpStream(url);
|
|
280
|
+
const buffer = await streamToBuffer(stream);
|
|
281
|
+
t.equal(buffer.length, FILE_SIZE, 'should download complete file');
|
|
282
|
+
t.notOk(rangeRequested, 'should not use range requests when disabled');
|
|
283
|
+
if (originalNoSlice) {
|
|
284
|
+
process.env['FILEBOX_NO_SLICE_DOWN'] = originalNoSlice;
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
delete process.env['FILEBOX_NO_SLICE_DOWN'];
|
|
288
|
+
}
|
|
289
|
+
if (originalChunkSize) {
|
|
290
|
+
process.env['FILEBOX_HTTP_CHUNK_SIZE'] = originalChunkSize;
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
delete process.env['FILEBOX_HTTP_CHUNK_SIZE'];
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
finally {
|
|
297
|
+
server.close();
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
//# sourceMappingURL=chunk-download.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-download.spec.js","sourceRoot":"","sources":["../../../tests/chunk-download.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"misc-error-handling.spec.d.ts","sourceRoot":"","sources":["../../../tests/misc-error-handling.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
import { createServer } from 'http';
|
|
3
|
+
import { setTimeout as delay } from 'timers/promises';
|
|
4
|
+
import { test } from 'tstest';
|
|
5
|
+
import { httpStream, streamToBuffer } from '../src/misc.js';
|
|
6
|
+
import { FileBox } from '../src/mod.js';
|
|
7
|
+
test('should handle connection abort gracefully', async (t) => {
|
|
8
|
+
const server = createServer((_req, res) => {
|
|
9
|
+
res.writeHead(200, { 'Content-Type': 'text/plain' });
|
|
10
|
+
res.write('Starting...');
|
|
11
|
+
// Simulate connection abort after short delay
|
|
12
|
+
setTimeout(() => {
|
|
13
|
+
res.destroy();
|
|
14
|
+
}, 100);
|
|
15
|
+
});
|
|
16
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
17
|
+
await new Promise((resolve) => {
|
|
18
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
19
|
+
});
|
|
20
|
+
const url = `http://127.0.0.1:${port}/test`;
|
|
21
|
+
try {
|
|
22
|
+
// 连接可能在拿到 response 之前或之后中断:两种路径都应当最终 reject
|
|
23
|
+
await t.rejects(async () => {
|
|
24
|
+
const stream = await httpStream(url);
|
|
25
|
+
return await streamToBuffer(stream);
|
|
26
|
+
}, 'should reject on connection abort');
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
server.close();
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
test('should handle timeout correctly', async (t) => {
|
|
33
|
+
const LONG_DELAY = 70000; // Longer than HTTP_RESPONSE_TIMEOUT (60s)
|
|
34
|
+
const server = createServer((_req, res) => {
|
|
35
|
+
res.writeHead(200, { 'Content-Type': 'text/plain' });
|
|
36
|
+
res.write('First chunk');
|
|
37
|
+
// Simulate very slow response
|
|
38
|
+
delay(LONG_DELAY)
|
|
39
|
+
.then(() => res.end('Second chunk'))
|
|
40
|
+
.catch(() => { });
|
|
41
|
+
});
|
|
42
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
43
|
+
await new Promise((resolve) => {
|
|
44
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
45
|
+
});
|
|
46
|
+
const url = `http://127.0.0.1:${port}/slow`;
|
|
47
|
+
try {
|
|
48
|
+
const fileBox = FileBox.fromUrl(url);
|
|
49
|
+
const streamPromise = fileBox.toStream();
|
|
50
|
+
// The stream should timeout during creation/reading
|
|
51
|
+
await t.rejects(async () => {
|
|
52
|
+
const stream = await streamPromise;
|
|
53
|
+
return await streamToBuffer(stream);
|
|
54
|
+
}, 'should timeout on slow response');
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
server.close();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
test('should handle successful large file download', async (t) => {
|
|
61
|
+
const CHUNK_SIZE = 1024;
|
|
62
|
+
const CHUNKS_COUNT = 100;
|
|
63
|
+
const TOTAL_SIZE = CHUNK_SIZE * CHUNKS_COUNT;
|
|
64
|
+
const server = createServer((_req, res) => {
|
|
65
|
+
res.writeHead(200, {
|
|
66
|
+
'Content-Length': String(TOTAL_SIZE),
|
|
67
|
+
'Content-Type': 'application/octet-stream',
|
|
68
|
+
});
|
|
69
|
+
let sent = 0;
|
|
70
|
+
const interval = setInterval(() => {
|
|
71
|
+
if (sent >= TOTAL_SIZE) {
|
|
72
|
+
clearInterval(interval);
|
|
73
|
+
res.end();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const chunk = Buffer.alloc(Math.min(CHUNK_SIZE, TOTAL_SIZE - sent), 'A');
|
|
77
|
+
res.write(chunk);
|
|
78
|
+
sent += chunk.length;
|
|
79
|
+
}, 10);
|
|
80
|
+
});
|
|
81
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
82
|
+
await new Promise((resolve) => {
|
|
83
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
84
|
+
});
|
|
85
|
+
const url = `http://127.0.0.1:${port}/largefile`;
|
|
86
|
+
try {
|
|
87
|
+
const stream = await httpStream(url);
|
|
88
|
+
const buffer = await streamToBuffer(stream);
|
|
89
|
+
t.equal(buffer.length, TOTAL_SIZE, 'should receive complete file');
|
|
90
|
+
t.ok(buffer.every(byte => byte === 65), 'should have correct content (all A)');
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
server.close();
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
test('should handle HTTP errors correctly', async (t) => {
|
|
97
|
+
const server = createServer((req, res) => {
|
|
98
|
+
if (req.url === '/404') {
|
|
99
|
+
res.writeHead(404);
|
|
100
|
+
res.end('Not Found');
|
|
101
|
+
}
|
|
102
|
+
else if (req.url === '/500') {
|
|
103
|
+
res.writeHead(500);
|
|
104
|
+
res.end('Internal Server Error');
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
108
|
+
await new Promise((resolve) => {
|
|
109
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
110
|
+
});
|
|
111
|
+
try {
|
|
112
|
+
// Test 404
|
|
113
|
+
const url404 = `http://127.0.0.1:${port}/404`;
|
|
114
|
+
const stream404 = await httpStream(url404);
|
|
115
|
+
const buffer404 = await streamToBuffer(stream404);
|
|
116
|
+
t.ok(buffer404.length > 0, 'should handle 404 response');
|
|
117
|
+
// Test 500
|
|
118
|
+
const url500 = `http://127.0.0.1:${port}/500`;
|
|
119
|
+
const stream500 = await httpStream(url500);
|
|
120
|
+
const buffer500 = await streamToBuffer(stream500);
|
|
121
|
+
t.ok(buffer500.length > 0, 'should handle 500 response');
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
server.close();
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
test('should clear timeout after successful request', async (t) => {
|
|
128
|
+
const server = createServer((_req, res) => {
|
|
129
|
+
res.writeHead(200, { 'Content-Type': 'text/plain' });
|
|
130
|
+
res.end('Success');
|
|
131
|
+
});
|
|
132
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
133
|
+
await new Promise((resolve) => {
|
|
134
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
135
|
+
});
|
|
136
|
+
const url = `http://127.0.0.1:${port}/test`;
|
|
137
|
+
try {
|
|
138
|
+
const stream = await httpStream(url);
|
|
139
|
+
const buffer = await streamToBuffer(stream);
|
|
140
|
+
t.equal(buffer.toString(), 'Success', 'should complete successfully');
|
|
141
|
+
// Wait a bit to ensure no timeout fires
|
|
142
|
+
await delay(100);
|
|
143
|
+
t.pass('timeout was properly cleared, no error after completion');
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
server.close();
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
test('should handle redirects correctly', async (t) => {
|
|
150
|
+
const server = createServer((req, res) => {
|
|
151
|
+
if (req.url === '/redirect') {
|
|
152
|
+
res.writeHead(302, { Location: '/final' });
|
|
153
|
+
res.end();
|
|
154
|
+
}
|
|
155
|
+
else if (req.url === '/final') {
|
|
156
|
+
res.writeHead(200);
|
|
157
|
+
res.end('Final destination');
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
161
|
+
await new Promise((resolve) => {
|
|
162
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
163
|
+
});
|
|
164
|
+
const url = `http://127.0.0.1:${port}/redirect`;
|
|
165
|
+
try {
|
|
166
|
+
const stream = await httpStream(url);
|
|
167
|
+
const buffer = await streamToBuffer(stream);
|
|
168
|
+
t.equal(buffer.toString(), 'Final destination', 'should follow redirect');
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
server.close();
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
test('should handle multiple concurrent requests', async (t) => {
|
|
175
|
+
const server = createServer((req, res) => {
|
|
176
|
+
res.writeHead(200, { 'Content-Type': 'text/plain' });
|
|
177
|
+
res.end(`Response for ${req.url}`);
|
|
178
|
+
});
|
|
179
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
180
|
+
await new Promise((resolve) => {
|
|
181
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
182
|
+
});
|
|
183
|
+
try {
|
|
184
|
+
const promises = Array.from({ length: 10 }, async (_, i) => {
|
|
185
|
+
const url = `http://127.0.0.1:${port}/test${i}`;
|
|
186
|
+
const stream = await httpStream(url);
|
|
187
|
+
const buffer = await streamToBuffer(stream);
|
|
188
|
+
return buffer.toString();
|
|
189
|
+
});
|
|
190
|
+
const results = await Promise.all(promises);
|
|
191
|
+
t.equal(results.length, 10, 'should handle all requests');
|
|
192
|
+
results.forEach((result, i) => {
|
|
193
|
+
t.equal(result, `Response for /test${i}`, `request ${i} should succeed`);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
server.close();
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
test('should handle early stream destruction', async (t) => {
|
|
201
|
+
const server = createServer((_req, res) => {
|
|
202
|
+
res.writeHead(200, { 'Content-Type': 'text/plain' });
|
|
203
|
+
res.write('Start');
|
|
204
|
+
// Send data slowly
|
|
205
|
+
let count = 0;
|
|
206
|
+
const interval = setInterval(() => {
|
|
207
|
+
if (count++ < 10) {
|
|
208
|
+
res.write('chunk');
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
clearInterval(interval);
|
|
212
|
+
res.end();
|
|
213
|
+
}
|
|
214
|
+
}, 50);
|
|
215
|
+
res.on('close', () => {
|
|
216
|
+
clearInterval(interval);
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
220
|
+
await new Promise((resolve) => {
|
|
221
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
222
|
+
});
|
|
223
|
+
const url = `http://127.0.0.1:${port}/test`;
|
|
224
|
+
try {
|
|
225
|
+
const stream = await httpStream(url);
|
|
226
|
+
// Destroy stream early
|
|
227
|
+
await delay(100);
|
|
228
|
+
stream.destroy();
|
|
229
|
+
// Wait a bit
|
|
230
|
+
await delay(200);
|
|
231
|
+
t.pass('stream destroyed without hanging');
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
server.close();
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
test('should handle empty response', async (t) => {
|
|
238
|
+
const server = createServer((_req, res) => {
|
|
239
|
+
res.writeHead(200, { 'Content-Length': '0' });
|
|
240
|
+
res.end();
|
|
241
|
+
});
|
|
242
|
+
const port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;
|
|
243
|
+
await new Promise((resolve) => {
|
|
244
|
+
server.listen(port, '127.0.0.1', () => resolve());
|
|
245
|
+
});
|
|
246
|
+
const url = `http://127.0.0.1:${port}/empty`;
|
|
247
|
+
try {
|
|
248
|
+
const stream = await httpStream(url);
|
|
249
|
+
const buffer = await streamToBuffer(stream);
|
|
250
|
+
t.equal(buffer.length, 0, 'should handle empty response');
|
|
251
|
+
}
|
|
252
|
+
finally {
|
|
253
|
+
server.close();
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
//# sourceMappingURL=misc-error-handling.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"misc-error-handling.spec.js","sourceRoot":"","sources":["../../../tests/misc-error-handling.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juzi/file-box",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.20",
|
|
4
4
|
"description": "Pack a File into Box for easy move/transfer between servers no matter of where it is.(local path, remote url, or cloud storage)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
"repository": {
|
|
30
30
|
"type": "git",
|
|
31
|
-
"url": "git+https://github.com/
|
|
31
|
+
"url": "git+https://github.com/juzibot/file-box.git"
|
|
32
32
|
},
|
|
33
33
|
"keywords": [
|
|
34
34
|
"file",
|
|
@@ -55,7 +55,8 @@
|
|
|
55
55
|
"@types/node": "^18.18.7",
|
|
56
56
|
"@types/qrcode": "^1.4.1",
|
|
57
57
|
"@types/uuid": "^8.3.3",
|
|
58
|
-
"@typescript-eslint/eslint-plugin": "
|
|
58
|
+
"@typescript-eslint/eslint-plugin": "5.62.0",
|
|
59
|
+
"@typescript-eslint/parser": "5.62.0",
|
|
59
60
|
"eslint-plugin-n": "^16.2.0",
|
|
60
61
|
"gts": "^3.1.0",
|
|
61
62
|
"pkg-jq": "^0.2.11",
|
|
@@ -74,6 +75,12 @@
|
|
|
74
75
|
"qrcode": "^1.5.0",
|
|
75
76
|
"uuid": "^8.3.2"
|
|
76
77
|
},
|
|
78
|
+
"overrides": {
|
|
79
|
+
"@typescript-eslint/eslint-plugin": "5.62.0",
|
|
80
|
+
"@typescript-eslint/parser": "5.62.0",
|
|
81
|
+
"@typescript-eslint/utils": "5.62.0",
|
|
82
|
+
"@typescript-eslint/type-utils": "5.62.0"
|
|
83
|
+
},
|
|
77
84
|
"files": [
|
|
78
85
|
"dist",
|
|
79
86
|
"src"
|