From b743b956884a974b7f8112d063db76bec1cb4f18 Mon Sep 17 00:00:00 2001
From: Andrei Kovrov
Date: Thu, 31 Jul 2025 00:37:41 +0200
Subject: [PATCH 1/4] fix: memory leak by upgrading readable-stream up to 4.7.0
---
package-lock.json | 121 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 120 insertions(+), 1 deletion(-)
diff --git a/package-lock.json b/package-lock.json
index 162c91f5a..c9a63ee38 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2261,6 +2261,18 @@
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
"dev": true
},
+ "node_modules/abort-controller": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "license": "MIT",
+ "dependencies": {
+ "event-target-shim": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6.5"
+ }
+ },
"node_modules/abstract-winston-transport": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/abstract-winston-transport/-/abstract-winston-transport-0.5.1.tgz",
@@ -2492,6 +2504,26 @@
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -2561,6 +2593,30 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
"node_modules/caching-transform": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
@@ -3468,6 +3524,24 @@
"node": ">=0.10.0"
}
},
+ "node_modules/event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3841,6 +3915,26 @@
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
"node_modules/ignore": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
@@ -5314,6 +5408,15 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/process-on-spawn": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
@@ -6342,13 +6445,29 @@
"license": "MIT",
"dependencies": {
"logform": "^2.7.0",
- "readable-stream": "^3.6.2",
+ "readable-stream": "^4.7.0",
"triple-beam": "^1.3.0"
},
"engines": {
"node": ">= 12.0.0"
}
},
+ "node_modules/winston-transport/node_modules/readable-stream": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
+ "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
+ "license": "MIT",
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
"node_modules/workerpool": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
From aa2d2ff1fb6bc4bde74247db388b05edbd8f357d Mon Sep 17 00:00:00 2001
From: Andrei Kovrov
Date: Thu, 31 Jul 2025 03:04:56 +0200
Subject: [PATCH 2/4] fix: make the test behavior more determined
---
lib/winston/transports/console.js | 2 +-
test/unit/winston/transports/error.test.js | 73 +++++++++++++++-------
2 files changed, 50 insertions(+), 25 deletions(-)
diff --git a/lib/winston/transports/console.js b/lib/winston/transports/console.js
index 25ab78469..dbb10c19a 100644
--- a/lib/winston/transports/console.js
+++ b/lib/winston/transports/console.js
@@ -50,7 +50,7 @@ module.exports = class Console extends TransportStream {
* @returns {undefined}
*/
log(info, callback) {
- setImmediate(() => this.emit('logged', info));
+ this.emit('logged', info);
// Remark: what if there is no raw...?
if (this.stderrLevels[info[LEVEL]]) {
diff --git a/test/unit/winston/transports/error.test.js b/test/unit/winston/transports/error.test.js
index 05468a3bf..df96b6a94 100644
--- a/test/unit/winston/transports/error.test.js
+++ b/test/unit/winston/transports/error.test.js
@@ -60,59 +60,84 @@ describe('transports issue 1364', () => {
});
describe('log twice', () => {
- beforeEach(() => {
+
+ it('should check transport after error occurs', (done) => {
+ errorMessage = mainError;
+ counter = 0;
+ maxCounter = 1;
+ logError = null;
+ transport = newTransport();
+ logger = winston.createLogger({
+ level: 'info',
+ transports: [transport]
+ });
+ logger.on('error', error => {
+ assume(counter).equals(1); // count calls to `log`
+ assume(error).is.a('error');
+ assume(error).property('message', mainError);
+ done(); // should be called only once
+ });
logger.info('log twice 1');
logger.info('log twice 2'); // this raises the `mainError` for the transport
- });
-
- it('logger transport has single correct transport', () => {
const transports = logger.transports;
assume(transports).is.an('array');
assume(transports).length(1);
assume(transports).contains(transport);
});
-
- it('error occurred', () => {
- assume(logError).property('message', mainError);
- });
});
describe('log thrice', () => {
- beforeEach(() => {
+
+ it('logger transport has single correct transport', (done) => {
+ errorMessage = mainError;
+ counter = 0;
+ maxCounter = 1;
+ logError = null;
+ transport = newTransport();
+ logger = winston.createLogger({
+ level: 'info',
+ transports: [transport]
+ });
+ logger.on('error', error => {
+ assume(error).is.a('error');
+ assume(error).property('message', mainError);
+ done();
+ });
logger.info('log thrice 1');
logger.info('log thrice 2'); // this raises the `mainError` for the transport
logger.info('log thrice 3');
- });
-
- it('logger transport has single correct transport', () => {
const transports = logger.transports;
assume(transports).is.an('array');
assume(transports).length(1);
assume(transports).contains(transport);
});
-
- it('error occurred', () => {
- assume(logError).property('message', mainError);
- });
});
describe('log four times', () => {
- beforeEach(() => {
+
+ it('logger transport has single correct transport', (done) => {
+ errorMessage = mainError;
+ counter = 0;
+ maxCounter = 1;
+ logError = null;
+ transport = newTransport();
+ logger = winston.createLogger({
+ level: 'info',
+ transports: [transport]
+ });
+ logger.on('error', error => {
+ assume(error).is.a('error');
+ assume(error).property('message', counter === 1 ? mainError : otherError);
+ done();
+ });
logger.info('log four times 1');
logger.info('log four times 2'); // this raises the `mainError` for the transport
logger.info('log four times 3');
logger.info('log four times 4'); // this raises the `otherError` for the transport
- });
-
- it('logger transport has single correct transport', () => {
const transports = logger.transports;
assume(transports).is.an('array');
assume(transports).length(1);
assume(transports).contains(transport);
});
-
- it('other error occurred', () => {
- assume(logError).property('message', otherError);
- });
});
});
From bfffc06464544b61d2b243a6230dc2029b0c7c8b Mon Sep 17 00:00:00 2001
From: Andrei Kovrov
Date: Mon, 18 Aug 2025 03:01:25 +0200
Subject: [PATCH 3/4] fix: use proper @types/node version for running tsc
---
.github/workflows/ci.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 896a355db..1c281a6be 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -44,5 +44,5 @@ jobs:
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- - name: TypeScript Test
- run: npx --package typescript tsc --project test
+ - name: Install proper types and run TypeScript Test
+ run: npm -D @types/node@${{ matrix.node }} && npx --package typescript tsc --project test
From 8117f97124294dda677ec1fb7250e02a230f88a6 Mon Sep 17 00:00:00 2001
From: Andrei Kovrov
Date: Mon, 18 Aug 2025 22:50:53 +0200
Subject: [PATCH 4/4] fix: missing install command
---
.github/workflows/ci.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1c281a6be..25b2aecaf 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -45,4 +45,4 @@ jobs:
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install proper types and run TypeScript Test
- run: npm -D @types/node@${{ matrix.node }} && npx --package typescript tsc --project test
+ run: npm install -D @types/node@${{ matrix.node }} && npx --package typescript tsc --project test