Skip to content

Commit 88f8cc2

Browse files
authored
fix(util-body-length-node): support fd.createReadStream (#3385)
1 parent d220242 commit 88f8cc2

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

packages/util-body-length-node/src/calculateBodyLength.spec.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createReadStream, lstatSync } from "fs";
1+
import { createReadStream, lstatSync, promises } from "fs";
22

33
import { calculateBodyLength } from "./calculateBodyLength";
44

@@ -38,17 +38,27 @@ describe(calculateBodyLength.name, () => {
3838
expect(calculateBodyLength(view)).toEqual(1);
3939
});
4040

41-
describe("should handle stream created using fs.createReadStream", () => {
41+
describe("fs.ReadStream", () => {
4242
const fileSize = lstatSync(__filename).size;
4343

44-
it("when path is a string", () => {
45-
const fsReadStream = createReadStream(__filename);
46-
expect(calculateBodyLength(fsReadStream)).toEqual(fileSize);
44+
describe("should handle stream created using fs.createReadStream", () => {
45+
it("when path is a string", () => {
46+
const fsReadStream = createReadStream(__filename);
47+
expect(calculateBodyLength(fsReadStream)).toEqual(fileSize);
48+
});
49+
50+
it("when path is a Buffer", () => {
51+
const fsReadStream = createReadStream(Buffer.from(__filename));
52+
expect(calculateBodyLength(fsReadStream)).toEqual(fileSize);
53+
});
4754
});
4855

49-
it("when path is a Buffer", () => {
50-
const fsReadStream = createReadStream(Buffer.from(__filename));
51-
expect(calculateBodyLength(fsReadStream)).toEqual(fileSize);
56+
it("should handle stream created using fd.createReadStream", async () => {
57+
const fd = await promises.open(__filename, "r");
58+
if ((fd as any).createReadStream) {
59+
const fdReadStream = (fd as any).createReadStream();
60+
expect(calculateBodyLength(fdReadStream)).toEqual(fileSize);
61+
}
5262
});
5363
});
5464
});

packages/util-body-length-node/src/calculateBodyLength.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { lstatSync } from "fs";
1+
import { fstatSync, lstatSync } from "fs";
22

33
export const calculateBodyLength = (body: any): number | undefined => {
44
if (!body) {
@@ -14,5 +14,8 @@ export const calculateBodyLength = (body: any): number | undefined => {
1414
} else if (typeof body.path === "string" || Buffer.isBuffer(body.path)) {
1515
// handles fs readable streams
1616
return lstatSync(body.path).size;
17+
} else if (typeof body.fd === "number") {
18+
// handles fd readable streams
19+
return fstatSync(body.fd).size;
1720
}
1821
};

0 commit comments

Comments
 (0)