Skip to content

Commit

Permalink
🐛 FIX: Try to use Readable first
Browse files Browse the repository at this point in the history
  • Loading branch information
fengmk2 committed Jul 5, 2022
1 parent a67d9d1 commit c1218c5
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 28 deletions.
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -369,5 +369,3 @@ This project follows the git-contributor [spec](https://github.com/xudafeng/git-
## License

[MIT](LICENSE)

[bluebird]: https://github.com/petkaantonov/bluebird
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "urllib",
"version": "3.0.0-alpha.0",
"version": "3.0.0-alpha.1",
"description": "Help in opening URLs (mostly HTTP) in a complex world — basic and digest authentication, redirections, cookies and more. Base undici fetch API.",
"keywords": [
"urllib",
Expand Down Expand Up @@ -72,6 +72,7 @@
"iconv-lite": "^0.6.3",
"jest": "28",
"jest-summary-reporter": "^0.0.2",
"p-event": "^4.2.0",
"ts-jest": "28",
"tslib": "^2.4.0",
"typescript": "4"
Expand Down
9 changes: 7 additions & 2 deletions src/HttpClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -237,12 +237,17 @@ export class HttpClient extends EventEmitter {
let data: any = null;
let responseBodyStream: ReadableStreamWithMeta | undefined;
if (args.streaming || args.dataType === 'stream') {
responseBodyStream = Object.assign(response.body!, {
const meta = {
status: res.status,
statusCode: res.statusCode,
statusMessage: res.statusMessage,
headers: res.headers,
});
};
if (typeof Readable.fromWeb === 'function') {
responseBodyStream = Object.assign(Readable.fromWeb(response.body!), meta);
} else {
responseBodyStream = Object.assign(response.body!, meta);
}
} else if (args.writeStream) {
await pipeline(response.body!, args.writeStream);
} else if (args.dataType === 'text') {
Expand Down
3 changes: 2 additions & 1 deletion src/Response.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { ReadableStream } from 'stream/web';
import { Readable } from 'stream';

export type HttpClientResponseMeta = {
status: number;
Expand All @@ -22,7 +23,7 @@ export type HttpClientResponseMeta = {
// socketHandledResponses: socketHandledResponses,
};

export type ReadableStreamWithMeta = ReadableStream & {
export type ReadableStreamWithMeta = (Readable | ReadableStream) & {
status: number;
statusCode: number;
statusMessage: string;
Expand Down
40 changes: 18 additions & 22 deletions test/options.stream.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import assert from 'assert/strict';
import { createReadStream } from 'fs';
import { writeFile } from 'fs/promises';
import { setTimeout } from 'timers/promises';
import pEvent from 'p-event';
import urllib from '../src';
import { startServer } from './fixtures/server';
import { createTempfile } from './utils';
Expand Down Expand Up @@ -50,27 +50,23 @@ describe('options.stream.test.ts', () => {
await writeFile(tmpfile, Buffer.alloc(10 * 1024 * 1024));
const stream = createReadStream(tmpfile);
assert.equal(stream.destroyed, false);
let streamClosed = false;
stream.on('close', () => {
streamClosed = true;
// console.error('streamClosed');
});
await assert.rejects(async () => {
await urllib.request(`${_url}block`, {
method: 'post',
timeout: 100,
stream,
});
}, (err: any) => {
assert.equal(err.name, 'HttpClientRequestTimeoutError');
assert.equal(err.message, 'Request timeout for 100 ms');
// stream should be close after request error fire
assert.equal(stream.destroyed, false);
return true;
});
await setTimeout(100);
await Promise.all([
assert.rejects(async () => {
await urllib.request(`${_url}block`, {
method: 'post',
timeout: 100,
stream,
});
}, (err: any) => {
assert.equal(err.name, 'HttpClientRequestTimeoutError');
assert.equal(err.message, 'Request timeout for 100 ms');
// stream should be close after request error fire
assert.equal(stream.destroyed, false);
return true;
}),
pEvent(stream, 'close'),
]);
// stream close
assert.equal(streamClosed, true);
assert.equal(stream.destroyed, true);
});

Expand All @@ -92,7 +88,7 @@ describe('options.stream.test.ts', () => {
assert.equal(err.message, 'fetch failed');
assert.equal(stream.destroyed, true);
return true;
});
}),
assert.equal(stream.destroyed, true);
assert.equal(streamError, true);
});
Expand Down

0 comments on commit c1218c5

Please sign in to comment.