From 4b027418aaf8e6b875dd41bf7edfb148277845fd Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 20 Oct 2026 21:02:28 +0800 Subject: [PATCH] chore(deps): replace on-finished with node:stream finished --- package.json | 2 -- pnpm-lock.yaml | 13 ------------- src/middleware.js | 4 ++-- test/middleware.test.js | 19 ++++++++++++++++--- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 1077819..8c98e32 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "@rspack/core": "2.2.9", "@types/express": "^5.0.6", "@types/node": "^24.19.2", - "@types/on-finished": "^2.3.5", "@types/range-parser": "^1.2.7", "connect-next": "^5.0.0", "cspell": "^10.3.6", @@ -50,7 +49,6 @@ "koa": "^3.2.1", "memfs": "4.80.0", "mrmime": "^2.0.1", - "on-finished": "^2.4.1", "range-parser": "^1.3.0", "router": "^2.2.0", "rstack": "^0.8.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b8bf570..a17b309 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,9 +26,6 @@ importers: '@types/node': specifier: ^24.19.2 version: 24.19.2 - '@types/on-finished': - specifier: ^2.3.5 - version: 2.3.5 '@types/range-parser': specifier: ^1.2.7 version: 1.2.7 @@ -62,9 +59,6 @@ importers: mrmime: specifier: ^2.0.1 version: 2.0.1 - on-finished: - specifier: ^2.4.1 - version: 2.4.1 range-parser: specifier: ^1.3.0 version: 1.3.0 @@ -1006,9 +1000,6 @@ packages: '@types/node@24.19.2': resolution: {integrity: sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==} - '@types/on-finished@2.3.5': - resolution: {integrity: sha512-XUaCx9tVIC577KsOZxKbnvGlyPt2ogNXQEq/bOQpAfPwH9sH0FbzrRsK1961jpjKlK5V+Owmw55dVjukWhwH0w==} - '@types/qs@6.15.0': resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} @@ -2739,10 +2730,6 @@ snapshots: dependencies: undici-types: 7.24.6 - '@types/on-finished@2.3.5': - dependencies: - '@types/node': 24.19.2 - '@types/qs@6.15.0': {} '@types/range-parser@1.2.7': {} diff --git a/src/middleware.js b/src/middleware.js index 55fa0bf..df36f72 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -1,7 +1,7 @@ import path from "node:path"; +import { finished } from "node:stream"; import { lookup, mimes } from "mrmime"; -import onFinishedStream from "on-finished"; import rangeParser from "range-parser"; import { @@ -920,7 +920,7 @@ function wrapper(context) { if (outgoing) { // Response finished, cleanup - onFinishedStream(outgoing, cleanup); + finished(outgoing, cleanup); } } diff --git a/test/middleware.test.js b/test/middleware.test.js index 5cb5898..63db620 100644 --- a/test/middleware.test.js +++ b/test/middleware.test.js @@ -1,6 +1,7 @@ import fs from "node:fs"; import { createServer } from "node:http"; import path from "node:path"; +import { Readable } from "node:stream"; import Hapi from "@hapi/hapi"; import { serve } from "@hono/node-server"; @@ -3681,10 +3682,22 @@ describe.each([ }); it("should work with piping stream", async () => { - const response1 = await req.get("/file.text"); + const stream = Readable.from(["text"], { autoDestroy: false }); + const createReadStream = rs + .spyOn(instance.context.outputFileSystem, "createReadStream") + .mockReturnValue(stream); - expect(response1.statusCode).toBe(200); - expect(nextWasCalled).toBe(false); + try { + const response = await req.get("/file.text"); + + expect(response.statusCode).toBe(200); + expect(response.text).toBe("text"); + expect(stream.destroyed).toBe(true); + expect(nextWasCalled).toBe(false); + } finally { + createReadStream.mockRestore(); + stream.destroy(); + } }); it("should not allow to get files above root", async () => {