diff --git a/packages/util-body-length-node/src/calculateBodyLength.spec.ts b/packages/util-body-length-node/src/calculateBodyLength.spec.ts index ff4de3bd86ae9..cb5ae86d13e06 100644 --- a/packages/util-body-length-node/src/calculateBodyLength.spec.ts +++ b/packages/util-body-length-node/src/calculateBodyLength.spec.ts @@ -1,4 +1,4 @@ -import { createReadStream, lstatSync } from "fs"; +import { createReadStream, lstatSync, promises } from "fs"; import { calculateBodyLength } from "./calculateBodyLength"; @@ -38,17 +38,27 @@ describe(calculateBodyLength.name, () => { expect(calculateBodyLength(view)).toEqual(1); }); - describe("should handle stream created using fs.createReadStream", () => { + describe("fs.ReadStream", () => { const fileSize = lstatSync(__filename).size; - it("when path is a string", () => { - const fsReadStream = createReadStream(__filename); - expect(calculateBodyLength(fsReadStream)).toEqual(fileSize); + describe("should handle stream created using fs.createReadStream", () => { + it("when path is a string", () => { + const fsReadStream = createReadStream(__filename); + expect(calculateBodyLength(fsReadStream)).toEqual(fileSize); + }); + + it("when path is a Buffer", () => { + const fsReadStream = createReadStream(Buffer.from(__filename)); + expect(calculateBodyLength(fsReadStream)).toEqual(fileSize); + }); }); - it("when path is a Buffer", () => { - const fsReadStream = createReadStream(Buffer.from(__filename)); - expect(calculateBodyLength(fsReadStream)).toEqual(fileSize); + it("should handle stream created using fd.createReadStream", async () => { + const fd = await promises.open(__filename, "r"); + if ((fd as any).createReadStream) { + const fdReadStream = (fd as any).createReadStream(); + expect(calculateBodyLength(fdReadStream)).toEqual(fileSize); + } }); }); }); diff --git a/packages/util-body-length-node/src/calculateBodyLength.ts b/packages/util-body-length-node/src/calculateBodyLength.ts index 4669869145a82..8d3293f821ca7 100644 --- a/packages/util-body-length-node/src/calculateBodyLength.ts +++ b/packages/util-body-length-node/src/calculateBodyLength.ts @@ -1,4 +1,4 @@ -import { lstatSync } from "fs"; +import { fstatSync, lstatSync } from "fs"; export const calculateBodyLength = (body: any): number | undefined => { if (!body) { @@ -14,5 +14,8 @@ export const calculateBodyLength = (body: any): number | undefined => { } else if (typeof body.path === "string" || Buffer.isBuffer(body.path)) { // handles fs readable streams return lstatSync(body.path).size; + } else if (typeof body.fd === "number") { + // handles fd readable streams + return fstatSync(body.fd).size; } };