mediawiki/core (main)

sourcepatches
From 61b58f25f0a17aecaff3d6645a5497693c54d674 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Fri, 27 Sep 2024 00:21:12 +0000
Subject: [PATCH] build: Updating npm dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* grunt-stylelint: 0.20.0 → 0.20.1
* body-parser: 1.19.2 → 1.20.3
  * https://github.com/advisories/GHSA-qwcr-r2fm-qrc7
* micromatch: 4.0.7 → 4.0.8
  * https://github.com/advisories/GHSA-952p-6rrq-rcjv
* socket.io: 4.6.1 → 4.8.0
  * https://github.com/advisories/GHSA-25hc-qcg6-38wj

Additional changes:
* Also sorted "composer fix" command to run phpcbf last.

Change-Id: Icbac4f46a91d6e8c19afcaa5eccbf08763bcd653
---
 composer.json     |   4 +-
 package-lock.json | 638 ++++++++++++++++++++++++++++++++++------------
 package.json      |   2 +-
 3 files changed, 482 insertions(+), 162 deletions(-)

diff --git a/composer.json b/composer.json
index 38f65aa..e533106 100644
--- a/composer.json
+++ b/composer.json
@@ -161,8 +161,8 @@
 		"phan": "phan -d . --long-progress-bar",
 		"phpcs": "phpcs -p -s --cache",
 		"fix": [
-			"phpcbf",
-			"minus-x fix ."
+			"minus-x fix .",
+			"phpcbf"
 		],
 		"pre-install-cmd": "MediaWiki\\Composer\\VersionChecker::onEvent",
 		"pre-update-cmd": "MediaWiki\\Composer\\VersionChecker::onEvent",
diff --git a/package-lock.json b/package-lock.json
index af7edea..8ca4ffa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -27,7 +27,7 @@
 				"grunt-contrib-watch": "1.1.0",
 				"grunt-eslint": "24.3.0",
 				"grunt-karma": "4.0.2",
-				"grunt-stylelint": "0.20.0",
+				"grunt-stylelint": "0.20.1",
 				"jest": "29.7.0",
 				"jest-environment-jsdom": "29.7.0",
 				"jsdoc": "4.0.2",
@@ -3533,9 +3533,9 @@
 			}
 		},
 		"node_modules/@socket.io/component-emitter": {
-			"version": "3.1.0",
-			"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
-			"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+			"integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
 			"dev": true
 		},
 		"node_modules/@stylistic/stylelint-config": {
@@ -3680,9 +3680,9 @@
 			"dev": true
 		},
 		"node_modules/@types/cors": {
-			"version": "2.8.13",
-			"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
-			"integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
+			"version": "2.8.17",
+			"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
+			"integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
 			"dev": true,
 			"dependencies": {
 				"@types/node": "*"
@@ -5400,24 +5400,27 @@
 			}
 		},
 		"node_modules/body-parser": {
-			"version": "1.19.2",
-			"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz",
-			"integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==",
+			"version": "1.20.3",
+			"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+			"integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
 			"dev": true,
 			"dependencies": {
 				"bytes": "3.1.2",
-				"content-type": "~1.0.4",
+				"content-type": "~1.0.5",
 				"debug": "2.6.9",
-				"depd": "~1.1.2",
-				"http-errors": "1.8.1",
+				"depd": "2.0.0",
+				"destroy": "1.2.0",
+				"http-errors": "2.0.0",
 				"iconv-lite": "0.4.24",
-				"on-finished": "~2.3.0",
-				"qs": "6.9.7",
-				"raw-body": "2.4.3",
-				"type-is": "~1.6.18"
+				"on-finished": "2.4.1",
+				"qs": "6.13.0",
+				"raw-body": "2.5.2",
+				"type-is": "~1.6.18",
+				"unpipe": "1.0.0"
 			},
 			"engines": {
-				"node": ">= 0.8"
+				"node": ">= 0.8",
+				"npm": "1.2.8000 || >= 1.4.16"
 			}
 		},
 		"node_modules/body-parser/node_modules/debug": {
@@ -5435,6 +5438,18 @@
 			"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
 			"dev": true
 		},
+		"node_modules/body-parser/node_modules/on-finished": {
+			"version": "2.4.1",
+			"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+			"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+			"dev": true,
+			"dependencies": {
+				"ee-first": "1.1.1"
+			},
+			"engines": {
+				"node": ">= 0.8"
+			}
+		},
 		"node_modules/body/node_modules/bytes": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz",
@@ -5845,6 +5860,25 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/call-bind": {
+			"version": "1.0.7",
+			"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+			"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+			"dev": true,
+			"dependencies": {
+				"es-define-property": "^1.0.0",
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"get-intrinsic": "^1.2.4",
+				"set-function-length": "^1.2.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/call-me-maybe": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
@@ -6265,9 +6299,9 @@
 			"dev": true
 		},
 		"node_modules/content-type": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-			"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+			"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
 			"dev": true,
 			"engines": {
 				"node": ">= 0.6"
@@ -6824,6 +6858,23 @@
 				"node": ">=10"
 			}
 		},
+		"node_modules/define-data-property": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+			"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+			"dev": true,
+			"dependencies": {
+				"es-define-property": "^1.0.0",
+				"es-errors": "^1.3.0",
+				"gopd": "^1.0.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/delayed-stream": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -6834,12 +6885,12 @@
 			}
 		},
 		"node_modules/depd": {
-			"version": "1.1.2",
-			"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-			"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+			"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
 			"dev": true,
 			"engines": {
-				"node": ">= 0.6"
+				"node": ">= 0.8"
 			}
 		},
 		"node_modules/dequal": {
@@ -6851,6 +6902,16 @@
 				"node": ">=6"
 			}
 		},
+		"node_modules/destroy": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+			"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.8",
+				"npm": "1.2.8000 || >= 1.4.16"
+			}
+		},
 		"node_modules/detect-file": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -7282,9 +7343,9 @@
 			}
 		},
 		"node_modules/engine.io": {
-			"version": "6.4.2",
-			"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz",
-			"integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==",
+			"version": "6.6.1",
+			"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.1.tgz",
+			"integrity": "sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==",
 			"dev": true,
 			"dependencies": {
 				"@types/cookie": "^0.4.1",
@@ -7295,17 +7356,17 @@
 				"cookie": "~0.4.1",
 				"cors": "~2.8.5",
 				"debug": "~4.3.1",
-				"engine.io-parser": "~5.0.3",
-				"ws": "~8.11.0"
+				"engine.io-parser": "~5.2.1",
+				"ws": "~8.17.1"
 			},
 			"engines": {
-				"node": ">=10.0.0"
+				"node": ">=10.2.0"
 			}
 		},
 		"node_modules/engine.io-parser": {
-			"version": "5.0.6",
-			"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
-			"integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==",
+			"version": "5.2.3",
+			"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+			"integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
 			"dev": true,
 			"engines": {
 				"node": ">=10.0.0"
@@ -7369,6 +7430,27 @@
 				"is-arrayish": "^0.2.1"
 			}
 		},
+		"node_modules/es-define-property": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+			"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+			"dev": true,
+			"dependencies": {
+				"get-intrinsic": "^1.2.4"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/es-errors": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+			"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
 		"node_modules/escalade": {
 			"version": "3.2.0",
 			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -7522,12 +7604,6 @@
 				"eslint-plugin-yml": "^1.14.0"
 			}
 		},
-		"node_modules/eslint-config-wikimedia/node_modules/browserslist-config-wikimedia": {
-			"version": "0.7.0",
-			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz",
-			"integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==",
-			"dev": true
-		},
 		"node_modules/eslint-plugin-compat": {
 			"version": "4.2.0",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz",
@@ -8729,6 +8805,25 @@
 				"node": "*"
 			}
 		},
+		"node_modules/get-intrinsic": {
+			"version": "1.2.4",
+			"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+			"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+			"dev": true,
+			"dependencies": {
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"has-proto": "^1.0.1",
+				"has-symbols": "^1.0.3",
+				"hasown": "^2.0.0"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/get-package-type": {
 			"version": "0.1.0",
 			"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -8952,6 +9047,18 @@
 				"node": "*"
 			}
 		},
+		"node_modules/gopd": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+			"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+			"dev": true,
+			"dependencies": {
+				"get-intrinsic": "^1.1.3"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/got": {
 			"version": "11.8.6",
 			"resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
@@ -9178,9 +9285,9 @@
 			"dev": true
 		},
 		"node_modules/grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"dependencies": {
 				"chalk": "^4.1.2"
@@ -9289,6 +9396,42 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/has-property-descriptors": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+			"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+			"dev": true,
+			"dependencies": {
+				"es-define-property": "^1.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/has-proto": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+			"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/has-symbols": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+			"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/hasown": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
@@ -9393,19 +9536,28 @@
 			"dev": true
 		},
 		"node_modules/http-errors": {
-			"version": "1.8.1",
-			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
-			"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+			"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
 			"dev": true,
 			"dependencies": {
-				"depd": "~1.1.2",
+				"depd": "2.0.0",
 				"inherits": "2.0.4",
 				"setprototypeof": "1.2.0",
-				"statuses": ">= 1.5.0 < 2",
+				"statuses": "2.0.1",
 				"toidentifier": "1.0.1"
 			},
 			"engines": {
-				"node": ">= 0.6"
+				"node": ">= 0.8"
+			}
+		},
+		"node_modules/http-errors/node_modules/statuses": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+			"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.8"
 			}
 		},
 		"node_modules/http-parser-js": {
@@ -12923,9 +13075,9 @@
 			}
 		},
 		"node_modules/micromatch": {
-			"version": "4.0.7",
-			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
-			"integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+			"version": "4.0.8",
+			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+			"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
 			"dev": true,
 			"dependencies": {
 				"braces": "^3.0.3",
@@ -14324,10 +14476,13 @@
 			}
 		},
 		"node_modules/qs": {
-			"version": "6.9.7",
-			"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
-			"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
+			"version": "6.13.0",
+			"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+			"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
 			"dev": true,
+			"dependencies": {
+				"side-channel": "^1.0.6"
+			},
 			"engines": {
 				"node": ">=0.6"
 			},
@@ -14421,13 +14576,13 @@
 			}
 		},
 		"node_modules/raw-body": {
-			"version": "2.4.3",
-			"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz",
-			"integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==",
+			"version": "2.5.2",
+			"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+			"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
 			"dev": true,
 			"dependencies": {
 				"bytes": "3.1.2",
-				"http-errors": "1.8.1",
+				"http-errors": "2.0.0",
 				"iconv-lite": "0.4.24",
 				"unpipe": "1.0.0"
 			},
@@ -15224,6 +15379,23 @@
 				"randombytes": "^2.1.0"
 			}
 		},
+		"node_modules/set-function-length": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+			"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+			"dev": true,
+			"dependencies": {
+				"define-data-property": "^1.1.4",
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"get-intrinsic": "^1.2.4",
+				"gopd": "^1.0.1",
+				"has-property-descriptors": "^1.0.2"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
 		"node_modules/setprototypeof": {
 			"version": "1.2.0",
 			"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -15251,6 +15423,24 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/side-channel": {
+			"version": "1.0.6",
+			"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+			"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+			"dev": true,
+			"dependencies": {
+				"call-bind": "^1.0.7",
+				"es-errors": "^1.3.0",
+				"get-intrinsic": "^1.2.4",
+				"object-inspect": "^1.13.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/signal-exit": {
 			"version": "3.0.7",
 			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -15290,35 +15480,37 @@
 			}
 		},
 		"node_modules/socket.io": {
-			"version": "4.6.1",
-			"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz",
-			"integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==",
+			"version": "4.8.0",
+			"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz",
+			"integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==",
 			"dev": true,
 			"dependencies": {
 				"accepts": "~1.3.4",
 				"base64id": "~2.0.0",
+				"cors": "~2.8.5",
 				"debug": "~4.3.2",
-				"engine.io": "~6.4.1",
+				"engine.io": "~6.6.0",
 				"socket.io-adapter": "~2.5.2",
-				"socket.io-parser": "~4.2.1"
+				"socket.io-parser": "~4.2.4"
 			},
 			"engines": {
-				"node": ">=10.0.0"
+				"node": ">=10.2.0"
 			}
 		},
 		"node_modules/socket.io-adapter": {
-			"version": "2.5.2",
-			"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz",
-			"integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==",
+			"version": "2.5.5",
+			"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
+			"integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
 			"dev": true,
 			"dependencies": {
-				"ws": "~8.11.0"
+				"debug": "~4.3.4",
+				"ws": "~8.17.1"
 			}
 		},
 		"node_modules/socket.io-parser": {
-			"version": "4.2.3",
-			"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz",
-			"integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==",
+			"version": "4.2.4",
+			"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+			"integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
 			"dev": true,
 			"dependencies": {
 				"@socket.io/component-emitter": "~3.1.0",
@@ -16821,8 +17013,13 @@
 			}
 		},
 		"node_modules/wdio-mediawiki": {
-			"resolved": "tests/selenium/wdio-mediawiki",
-			"link": true
+			"version": "2.5.0",
+			"resolved": "file:tests/selenium/wdio-mediawiki",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"mwbot": "2.1.3"
+			}
 		},
 		"node_modules/webdriver": {
 			"version": "7.33.0",
@@ -17080,16 +17277,16 @@
 			}
 		},
 		"node_modules/ws": {
-			"version": "8.11.0",
-			"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
-			"integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
+			"version": "8.17.1",
+			"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+			"integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
 			"dev": true,
 			"engines": {
 				"node": ">=10.0.0"
 			},
 			"peerDependencies": {
 				"bufferutil": "^4.0.1",
-				"utf-8-validate": "^5.0.2"
+				"utf-8-validate": ">=5.0.2"
 			},
 			"peerDependenciesMeta": {
 				"bufferutil": {
@@ -17487,14 +17684,6 @@
 			"funding": {
 				"url": "https://github.com/sponsors/isaacs"
 			}
-		},
-		"tests/selenium/wdio-mediawiki": {
-			"version": "2.5.0",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"mwbot": "2.1.3"
-			}
 		}
 	},
 	"dependencies": {
@@ -20048,9 +20237,9 @@
 			"dev": true
 		},
 		"@socket.io/component-emitter": {
-			"version": "3.1.0",
-			"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
-			"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+			"integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
 			"dev": true
 		},
 		"@stylistic/stylelint-config": {
@@ -20173,9 +20362,9 @@
 			"dev": true
 		},
 		"@types/cors": {
-			"version": "2.8.13",
-			"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
-			"integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
+			"version": "2.8.17",
+			"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
+			"integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
 			"dev": true,
 			"requires": {
 				"@types/node": "*"
@@ -21614,21 +21803,23 @@
 			}
 		},
 		"body-parser": {
-			"version": "1.19.2",
-			"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz",
-			"integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==",
+			"version": "1.20.3",
+			"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+			"integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
 			"dev": true,
 			"requires": {
 				"bytes": "3.1.2",
-				"content-type": "~1.0.4",
+				"content-type": "~1.0.5",
 				"debug": "2.6.9",
-				"depd": "~1.1.2",
-				"http-errors": "1.8.1",
+				"depd": "2.0.0",
+				"destroy": "1.2.0",
+				"http-errors": "2.0.0",
 				"iconv-lite": "0.4.24",
-				"on-finished": "~2.3.0",
-				"qs": "6.9.7",
-				"raw-body": "2.4.3",
-				"type-is": "~1.6.18"
+				"on-finished": "2.4.1",
+				"qs": "6.13.0",
+				"raw-body": "2.5.2",
+				"type-is": "~1.6.18",
+				"unpipe": "1.0.0"
 			},
 			"dependencies": {
 				"debug": {
@@ -21645,6 +21836,15 @@
 					"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 					"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
 					"dev": true
+				},
+				"on-finished": {
+					"version": "2.4.1",
+					"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+					"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+					"dev": true,
+					"requires": {
+						"ee-first": "1.1.1"
+					}
 				}
 			}
 		},
@@ -21917,6 +22117,19 @@
 				"responselike": "^2.0.0"
 			}
 		},
+		"call-bind": {
+			"version": "1.0.7",
+			"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+			"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+			"dev": true,
+			"requires": {
+				"es-define-property": "^1.0.0",
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"get-intrinsic": "^1.2.4",
+				"set-function-length": "^1.2.1"
+			}
+		},
 		"call-me-maybe": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
@@ -22238,9 +22451,9 @@
 			}
 		},
 		"content-type": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-			"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+			"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
 			"dev": true
 		},
 		"continuable-cache": {
@@ -22673,6 +22886,17 @@
 			"integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
 			"dev": true
 		},
+		"define-data-property": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+			"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+			"dev": true,
+			"requires": {
+				"es-define-property": "^1.0.0",
+				"es-errors": "^1.3.0",
+				"gopd": "^1.0.1"
+			}
+		},
 		"delayed-stream": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -22680,9 +22904,9 @@
 			"dev": true
 		},
 		"depd": {
-			"version": "1.1.2",
-			"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-			"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+			"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
 			"dev": true
 		},
 		"dequal": {
@@ -22691,6 +22915,12 @@
 			"integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
 			"dev": true
 		},
+		"destroy": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+			"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+			"dev": true
+		},
 		"detect-file": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -23012,9 +23242,9 @@
 			}
 		},
 		"engine.io": {
-			"version": "6.4.2",
-			"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz",
-			"integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==",
+			"version": "6.6.1",
+			"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.1.tgz",
+			"integrity": "sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==",
 			"dev": true,
 			"requires": {
 				"@types/cookie": "^0.4.1",
@@ -23025,14 +23255,14 @@
 				"cookie": "~0.4.1",
 				"cors": "~2.8.5",
 				"debug": "~4.3.1",
-				"engine.io-parser": "~5.0.3",
-				"ws": "~8.11.0"
+				"engine.io-parser": "~5.2.1",
+				"ws": "~8.17.1"
 			}
 		},
 		"engine.io-parser": {
-			"version": "5.0.6",
-			"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
-			"integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==",
+			"version": "5.2.3",
+			"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+			"integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
 			"dev": true
 		},
 		"enhanced-resolve": {
@@ -23081,6 +23311,21 @@
 				"is-arrayish": "^0.2.1"
 			}
 		},
+		"es-define-property": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+			"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+			"dev": true,
+			"requires": {
+				"get-intrinsic": "^1.2.4"
+			}
+		},
+		"es-errors": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+			"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+			"dev": true
+		},
 		"escalade": {
 			"version": "3.2.0",
 			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -23224,14 +23469,6 @@
 				"eslint-plugin-vue": "^9.26.0",
 				"eslint-plugin-wdio": "^8.24.12",
 				"eslint-plugin-yml": "^1.14.0"
-			},
-			"dependencies": {
-				"browserslist-config-wikimedia": {
-					"version": "0.7.0",
-					"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz",
-					"integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==",
-					"dev": true
-				}
 			}
 		},
 		"eslint-plugin-compat": {
@@ -24079,6 +24316,19 @@
 			"integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
 			"dev": true
 		},
+		"get-intrinsic": {
+			"version": "1.2.4",
+			"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+			"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+			"dev": true,
+			"requires": {
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"has-proto": "^1.0.1",
+				"has-symbols": "^1.0.3",
+				"hasown": "^2.0.0"
+			}
+		},
 		"get-package-type": {
 			"version": "0.1.0",
 			"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -24249,6 +24499,15 @@
 				}
 			}
 		},
+		"gopd": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+			"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+			"dev": true,
+			"requires": {
+				"get-intrinsic": "^1.1.3"
+			}
+		},
 		"got": {
 			"version": "11.8.6",
 			"resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
@@ -24458,9 +24717,9 @@
 			}
 		},
 		"grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"requires": {
 				"chalk": "^4.1.2"
@@ -24505,6 +24764,27 @@
 			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
 			"dev": true
 		},
+		"has-property-descriptors": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+			"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+			"dev": true,
+			"requires": {
+				"es-define-property": "^1.0.0"
+			}
+		},
+		"has-proto": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+			"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+			"dev": true
+		},
+		"has-symbols": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+			"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+			"dev": true
+		},
 		"hasown": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
@@ -24581,16 +24861,24 @@
 			"dev": true
 		},
 		"http-errors": {
-			"version": "1.8.1",
-			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
-			"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+			"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
 			"dev": true,
 			"requires": {
-				"depd": "~1.1.2",
+				"depd": "2.0.0",
 				"inherits": "2.0.4",
 				"setprototypeof": "1.2.0",
-				"statuses": ">= 1.5.0 < 2",
+				"statuses": "2.0.1",
 				"toidentifier": "1.0.1"
+			},
+			"dependencies": {
+				"statuses": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+					"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+					"dev": true
+				}
 			}
 		},
 		"http-parser-js": {
@@ -27389,9 +27677,9 @@
 			"dev": true
 		},
 		"micromatch": {
-			"version": "4.0.7",
-			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
-			"integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+			"version": "4.0.8",
+			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+			"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
 			"dev": true,
 			"requires": {
 				"braces": "^3.0.3",
@@ -28394,10 +28682,13 @@
 			"dev": true
 		},
 		"qs": {
-			"version": "6.9.7",
-			"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
-			"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
-			"dev": true
+			"version": "6.13.0",
+			"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+			"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+			"dev": true,
+			"requires": {
+				"side-channel": "^1.0.6"
+			}
 		},
 		"query-selector-shadow-dom": {
 			"version": "1.0.1",
@@ -28456,13 +28747,13 @@
 			"dev": true
 		},
 		"raw-body": {
-			"version": "2.4.3",
-			"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz",
-			"integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==",
+			"version": "2.5.2",
+			"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+			"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
 			"dev": true,
 			"requires": {
 				"bytes": "3.1.2",
-				"http-errors": "1.8.1",
+				"http-errors": "2.0.0",
 				"iconv-lite": "0.4.24",
 				"unpipe": "1.0.0"
 			}
@@ -29088,6 +29379,20 @@
 				"randombytes": "^2.1.0"
 			}
 		},
+		"set-function-length": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+			"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+			"dev": true,
+			"requires": {
+				"define-data-property": "^1.1.4",
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"get-intrinsic": "^1.2.4",
+				"gopd": "^1.0.1",
+				"has-property-descriptors": "^1.0.2"
+			}
+		},
 		"setprototypeof": {
 			"version": "1.2.0",
 			"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -29109,6 +29414,18 @@
 			"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
 			"dev": true
 		},
+		"side-channel": {
+			"version": "1.0.6",
+			"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+			"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+			"dev": true,
+			"requires": {
+				"call-bind": "^1.0.7",
+				"es-errors": "^1.3.0",
+				"get-intrinsic": "^1.2.4",
+				"object-inspect": "^1.13.1"
+			}
+		},
 		"signal-exit": {
 			"version": "3.0.7",
 			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -29139,32 +29456,34 @@
 			}
 		},
 		"socket.io": {
-			"version": "4.6.1",
-			"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz",
-			"integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==",
+			"version": "4.8.0",
+			"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz",
+			"integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==",
 			"dev": true,
 			"requires": {
 				"accepts": "~1.3.4",
 				"base64id": "~2.0.0",
+				"cors": "~2.8.5",
 				"debug": "~4.3.2",
-				"engine.io": "~6.4.1",
+				"engine.io": "~6.6.0",
 				"socket.io-adapter": "~2.5.2",
-				"socket.io-parser": "~4.2.1"
+				"socket.io-parser": "~4.2.4"
 			}
 		},
 		"socket.io-adapter": {
-			"version": "2.5.2",
-			"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz",
-			"integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==",
+			"version": "2.5.5",
+			"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
+			"integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
 			"dev": true,
 			"requires": {
-				"ws": "~8.11.0"
+				"debug": "~4.3.4",
+				"ws": "~8.17.1"
 			}
 		},
 		"socket.io-parser": {
-			"version": "4.2.3",
-			"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz",
-			"integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==",
+			"version": "4.2.4",
+			"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+			"integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
 			"dev": true,
 			"requires": {
 				"@socket.io/component-emitter": "~3.1.0",
@@ -30311,7 +30630,8 @@
 			}
 		},
 		"wdio-mediawiki": {
-			"version": "file:tests/selenium/wdio-mediawiki",
+			"version": "2.5.0",
+			"dev": true,
 			"requires": {
 				"mwbot": "2.1.3"
 			}
@@ -30520,9 +30840,9 @@
 			}
 		},
 		"ws": {
-			"version": "8.11.0",
-			"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
-			"integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
+			"version": "8.17.1",
+			"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+			"integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
 			"dev": true,
 			"requires": {}
 		},
diff --git a/package.json b/package.json
index 20d38a2..e2698c2 100644
--- a/package.json
+++ b/package.json
@@ -35,7 +35,7 @@
 		"grunt-contrib-watch": "1.1.0",
 		"grunt-eslint": "24.3.0",
 		"grunt-karma": "4.0.2",
-		"grunt-stylelint": "0.20.0",
+		"grunt-stylelint": "0.20.1",
 		"jest": "29.7.0",
 		"jest-environment-jsdom": "29.7.0",
 		"jsdoc": "4.0.2",
-- 
2.39.2

$ date
--- stdout ---
Fri Sep 27 00:13:44 UTC 2024

--- end ---
$ git clone file:///srv/git/mediawiki-core.git repo --depth=1 -b master
--- stderr ---
Cloning into 'repo'...
Updating files:  77% (7910/10204)
Updating files:  78% (7960/10204)
Updating files:  79% (8062/10204)
Updating files:  80% (8164/10204)
Updating files:  81% (8266/10204)
Updating files:  82% (8368/10204)
Updating files:  83% (8470/10204)
Updating files:  84% (8572/10204)
Updating files:  85% (8674/10204)
Updating files:  86% (8776/10204)
Updating files:  87% (8878/10204)
Updating files:  88% (8980/10204)
Updating files:  89% (9082/10204)
Updating files:  90% (9184/10204)
Updating files:  91% (9286/10204)
Updating files:  92% (9388/10204)
Updating files:  93% (9490/10204)
Updating files:  94% (9592/10204)
Updating files:  95% (9694/10204)
Updating files:  96% (9796/10204)
Updating files:  97% (9898/10204)
Updating files:  98% (10000/10204)
Updating files:  99% (10102/10204)
Updating files: 100% (10204/10204)
Updating files: 100% (10204/10204), done.
--- stdout ---

--- end ---
$ git config user.name libraryupgrader
--- stdout ---

--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---

--- end ---
$ git submodule update --init
--- stdout ---

--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.

--- end ---
$ git show-ref refs/heads/master
--- stdout ---
3390d72f2f89023e691299efbbbc2d909223cd66 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@wdio/cli": {
      "name": "@wdio/cli",
      "severity": "high",
      "isDirect": true,
      "via": [
        "webdriverio"
      ],
      "effects": [],
      "range": "7.16.5 - 8.40.5",
      "nodes": [
        "node_modules/@wdio/cli"
      ],
      "fixAvailable": {
        "name": "@wdio/cli",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    },
    "@wdio/local-runner": {
      "name": "@wdio/local-runner",
      "severity": "high",
      "isDirect": true,
      "via": [
        "@wdio/runner"
      ],
      "effects": [],
      "range": "7.16.5 - 8.40.5",
      "nodes": [
        "node_modules/@wdio/local-runner"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    },
    "@wdio/runner": {
      "name": "@wdio/runner",
      "severity": "high",
      "isDirect": false,
      "via": [
        "webdriverio"
      ],
      "effects": [
        "@wdio/local-runner"
      ],
      "range": "7.16.5 - 8.40.5",
      "nodes": [
        "node_modules/@wdio/runner"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    },
    "body-parser": {
      "name": "body-parser",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1099520,
          "name": "body-parser",
          "dependency": "body-parser",
          "title": "body-parser vulnerable to denial of service when url encoding is enabled",
          "url": "https://github.com/advisories/GHSA-qwcr-r2fm-qrc7",
          "severity": "high",
          "cwe": [
            "CWE-405"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<1.20.3"
        }
      ],
      "effects": [],
      "range": "<1.20.3",
      "nodes": [
        "node_modules/body-parser"
      ],
      "fixAvailable": true
    },
    "devtools": {
      "name": "devtools",
      "severity": "high",
      "isDirect": false,
      "via": [
        "puppeteer-core"
      ],
      "effects": [],
      "range": ">=7.16.5",
      "nodes": [
        "node_modules/devtools"
      ],
      "fixAvailable": true
    },
    "engine.io": {
      "name": "engine.io",
      "severity": "high",
      "isDirect": false,
      "via": [
        "ws"
      ],
      "effects": [
        "socket.io"
      ],
      "range": "0.7.8 - 0.7.9 || 6.0.0 - 6.5.4",
      "nodes": [
        "node_modules/engine.io"
      ],
      "fixAvailable": true
    },
    "micromatch": {
      "name": "micromatch",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1098681,
          "name": "micromatch",
          "dependency": "micromatch",
          "title": "Regular Expression Denial of Service (ReDoS) in micromatch",
          "url": "https://github.com/advisories/GHSA-952p-6rrq-rcjv",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<4.0.8"
        }
      ],
      "effects": [],
      "range": "<4.0.8",
      "nodes": [
        "node_modules/micromatch"
      ],
      "fixAvailable": true
    },
    "mwbot": {
      "name": "mwbot",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "request"
      ],
      "effects": [],
      "range": ">=0.1.6",
      "nodes": [
        "node_modules/mwbot"
      ],
      "fixAvailable": {
        "name": "mwbot",
        "version": "0.1.5",
        "isSemVerMajor": true
      }
    },
    "puppeteer-core": {
      "name": "puppeteer-core",
      "severity": "high",
      "isDirect": false,
      "via": [
        "ws"
      ],
      "effects": [
        "devtools",
        "webdriverio"
      ],
      "range": "11.0.0 - 22.11.1",
      "nodes": [
        "node_modules/puppeteer-core"
      ],
      "fixAvailable": {
        "name": "@wdio/cli",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    },
    "request": {
      "name": "request",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1096727,
          "name": "request",
          "dependency": "request",
          "title": "Server-Side Request Forgery in Request",
          "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
          "severity": "moderate",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 6.1,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
          },
          "range": "<=2.88.2"
        },
        "tough-cookie"
      ],
      "effects": [
        "mwbot"
      ],
      "range": "*",
      "nodes": [
        "node_modules/request"
      ],
      "fixAvailable": {
        "name": "mwbot",
        "version": "0.1.5",
        "isSemVerMajor": true
      }
    },
    "socket.io": {
      "name": "socket.io",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098556,
          "name": "socket.io",
          "dependency": "socket.io",
          "title": "socket.io has an unhandled 'error' event",
          "url": "https://github.com/advisories/GHSA-25hc-qcg6-38wj",
          "severity": "high",
          "cwe": [
            "CWE-20",
            "CWE-754"
          ],
          "cvss": {
            "score": 7.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L"
          },
          "range": ">=3.0.0 <4.6.2"
        },
        "engine.io"
      ],
      "effects": [],
      "range": "3.0.0 - 4.6.2",
      "nodes": [
        "node_modules/socket.io"
      ],
      "fixAvailable": true
    },
    "socket.io-adapter": {
      "name": "socket.io-adapter",
      "severity": "high",
      "isDirect": false,
      "via": [
        "ws"
      ],
      "effects": [],
      "range": "2.5.2 - 2.5.4",
      "nodes": [
        "node_modules/socket.io-adapter"
      ],
      "fixAvailable": true
    },
    "tough-cookie": {
      "name": "tough-cookie",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1097682,
          "name": "tough-cookie",
          "dependency": "tough-cookie",
          "title": "tough-cookie Prototype Pollution vulnerability",
          "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
          "severity": "moderate",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
          },
          "range": "<4.1.3"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<4.1.3",
      "nodes": [
        "node_modules/tough-cookie"
      ],
      "fixAvailable": {
        "name": "mwbot",
        "version": "0.1.5",
        "isSemVerMajor": true
      }
    },
    "webdriverio": {
      "name": "webdriverio",
      "severity": "high",
      "isDirect": false,
      "via": [
        "devtools",
        "puppeteer-core"
      ],
      "effects": [
        "@wdio/cli",
        "@wdio/runner"
      ],
      "range": "7.16.5 - 8.40.5",
      "nodes": [
        "node_modules/webdriverio"
      ],
      "fixAvailable": {
        "name": "@wdio/cli",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    },
    "ws": {
      "name": "ws",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098392,
          "name": "ws",
          "dependency": "ws",
          "title": "ws affected by a DoS when handling a request with many HTTP headers",
          "url": "https://github.com/advisories/GHSA-3h5v-q93c-6h6q",
          "severity": "high",
          "cwe": [
            "CWE-476"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=8.0.0 <8.17.1"
        }
      ],
      "effects": [
        "engine.io",
        "puppeteer-core",
        "socket.io-adapter"
      ],
      "range": "8.0.0 - 8.17.0",
      "nodes": [
        "node_modules/puppeteer-core/node_modules/ws",
        "node_modules/ws"
      ],
      "fixAvailable": {
        "name": "@wdio/cli",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 4,
      "high": 11,
      "critical": 0,
      "total": 15
    },
    "dependencies": {
      "prod": 1,
      "dev": 1446,
      "optional": 4,
      "peer": 2,
      "peerOptional": 0,
      "total": 1446
    }
  }
}

--- end ---
$ /usr/bin/composer install
--- stderr ---
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
> MediaWiki\Composer\VersionChecker::onEvent
Loading composer repositories with package information
Updating dependencies
Lock file operations: 136 installs, 0 updates, 0 removals
  - Locking composer/pcre (3.3.1)
  - Locking composer/semver (3.4.2)
  - Locking composer/spdx-licenses (1.5.8)
  - Locking composer/xdebug-handler (3.0.5)
  - Locking cssjanus/cssjanus (v2.3.0)
  - Locking dealerdirect/phpcodesniffer-composer-installer (v1.0.0)
  - Locking doctrine/cache (2.2.0)
  - Locking doctrine/dbal (3.8.4)
  - Locking doctrine/deprecations (1.1.3)
  - Locking doctrine/event-manager (2.0.1)
  - Locking doctrine/instantiator (2.0.0)
  - Locking doctrine/sql-formatter (1.1.3)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking giorgiosironi/eris (0.14.0)
  - Locking guzzlehttp/guzzle (7.8.1)
  - Locking guzzlehttp/promises (2.0.3)
  - Locking guzzlehttp/psr7 (2.7.0)
  - Locking hamcrest/hamcrest-php (v2.0.1)
  - Locking johnkary/phpunit-speedtrap (v4.0.1)
  - Locking justinrainbow/json-schema (v5.2.13)
  - Locking liuggio/statsd-php-client (v1.0.18)
  - Locking mck89/peast (v1.16.2)
  - Locking mediawiki/mediawiki-codesniffer (v44.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.14.0)
  - Locking mediawiki/minus-x (1.1.3)
  - Locking mediawiki/phan-taint-check-plugin (6.0.0)
  - Locking microsoft/tolerant-php-parser (v0.1.2)
  - Locking monolog/monolog (2.9.3)
  - Locking myclabs/deep-copy (1.12.0)
  - Locking netresearch/jsonmapper (v4.5.0)
  - Locking nikic/php-parser (v4.19.2)
  - Locking oojs/oojs-ui (v0.51.1)
  - Locking pear/console_getopt (v1.4.3)
  - Locking pear/mail (v1.6.0)
  - Locking pear/mail_mime (1.10.12)
  - Locking pear/net_smtp (1.12.1)
  - Locking pear/net_socket (v1.2.2)
  - Locking pear/net_url2 (v2.2.2)
  - Locking pear/pear-core-minimal (v1.10.15)
  - Locking pear/pear_exception (v1.0.2)
  - Locking phan/phan (5.4.3)
  - Locking phar-io/manifest (2.0.4)
  - Locking phar-io/version (3.2.1)
  - Locking php-parallel-lint/php-console-color (v1.0.1)
  - Locking php-parallel-lint/php-console-highlighter (v1.0.0)
  - Locking php-parallel-lint/php-parallel-lint (v1.4.0)
  - Locking phpcsstandards/phpcsextra (1.2.1)
  - Locking phpcsstandards/phpcsutils (1.0.11)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.4.1)
  - Locking phpdocumentor/type-resolver (1.8.2)
  - Locking phpstan/phpdoc-parser (1.32.0)
  - Locking phpunit/php-code-coverage (9.2.32)
  - Locking phpunit/php-file-iterator (3.0.6)
  - Locking phpunit/php-invoker (3.1.1)
  - Locking phpunit/php-text-template (2.0.4)
  - Locking phpunit/php-timer (5.0.3)
  - Locking phpunit/phpunit (9.6.19)
  - Locking psr/cache (3.0.0)
  - Locking psr/container (1.1.2)
  - Locking psr/http-client (1.0.3)
  - Locking psr/http-factory (1.1.0)
  - Locking psr/http-message (1.1)
  - Locking psr/log (1.1.4)
  - Locking psy/psysh (v0.12.4)
  - Locking ralouphie/getallheaders (3.0.3)
  - Locking sabre/event (5.1.7)
  - Locking sebastian/cli-parser (1.0.2)
  - Locking sebastian/code-unit (1.0.8)
  - Locking sebastian/code-unit-reverse-lookup (2.0.3)
  - Locking sebastian/comparator (4.0.8)
  - Locking sebastian/complexity (2.0.3)
  - Locking sebastian/diff (4.0.6)
  - Locking sebastian/environment (5.1.5)
  - Locking sebastian/exporter (4.0.6)
  - Locking sebastian/global-state (5.0.7)
  - Locking sebastian/lines-of-code (1.0.4)
  - Locking sebastian/object-enumerator (4.0.4)
  - Locking sebastian/object-reflector (2.0.4)
  - Locking sebastian/recursion-context (4.0.5)
  - Locking sebastian/resource-operations (3.0.4)
  - Locking sebastian/type (3.2.1)
  - Locking sebastian/version (3.0.2)
  - Locking seld/jsonlint (1.10.2)
  - Locking squizlabs/php_codesniffer (3.9.0)
  - Locking symfony/console (v7.1.5)
  - Locking symfony/deprecation-contracts (v3.5.0)
  - Locking symfony/polyfill-php80 (v1.30.0)
  - Locking symfony/polyfill-php81 (v1.30.0)
  - Locking symfony/polyfill-php82 (v1.30.0)
  - Locking symfony/polyfill-php83 (v1.30.0)
  - Locking symfony/service-contracts (v3.5.0)
  - Locking symfony/string (v7.1.5)
  - Locking symfony/var-dumper (v7.1.5)
  - Locking symfony/yaml (v5.4.39)
  - Locking theseer/tokenizer (1.2.3)
  - Locking tysonandre/var_representation_polyfill (0.1.3)
  - Locking webmozart/assert (1.11.0)
  - Locking wikimedia/alea (1.0.0)
  - Locking wikimedia/assert (v0.5.1)
  - Locking wikimedia/at-ease (v2.1.0)
  - Locking wikimedia/base-convert (v2.0.2)
  - Locking wikimedia/bcp-47-code (v2.0.0)
  - Locking wikimedia/cdb (3.0.0)
  - Locking wikimedia/cldr-plural-rule-parser (v2.0.0)
  - Locking wikimedia/common-passwords (v0.5.0)
  - Locking wikimedia/composer-merge-plugin (v2.1.0)
  - Locking wikimedia/html-formatter (4.1.0)
  - Locking wikimedia/idle-dom (v1.0.0)
  - Locking wikimedia/ip-utils (5.0.0)
  - Locking wikimedia/json-codec (v3.0.2)
  - Locking wikimedia/langconv (0.4.2)
  - Locking wikimedia/less.php (v5.1.1)
  - Locking wikimedia/minify (2.8.0)
  - Locking wikimedia/normalized-exception (v1.0.1)
  - Locking wikimedia/object-factory (v5.0.1)
  - Locking wikimedia/parsoid (v0.20.0-a22)
  - Locking wikimedia/php-session-serializer (v2.0.1)
  - Locking wikimedia/purtle (v1.0.8)
  - Locking wikimedia/relpath (4.0.0)
  - Locking wikimedia/remex-html (4.1.0)
  - Locking wikimedia/request-timeout (1.2.0)
  - Locking wikimedia/running-stat (v2.1.0)
  - Locking wikimedia/scoped-callback (v4.0.0)
  - Locking wikimedia/services (3.0.0)
  - Locking wikimedia/shellbox (4.0.2)
  - Locking wikimedia/testing-access-wrapper (3.0.0)
  - Locking wikimedia/timestamp (v4.1.1)
  - Locking wikimedia/utfnormal (4.0.0)
  - Locking wikimedia/wait-condition-loop (v2.0.2)
  - Locking wikimedia/wikipeg (4.0.0)
  - Locking wikimedia/wrappedstring (v4.0.1)
  - Locking wikimedia/xmp-reader (0.9.1)
  - Locking wikimedia/zest-css (3.0.1)
  - Locking wmde/hamcrest-html-matchers (v1.0.0)
  - Locking zordius/lightncandy (v1.2.6)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 136 installs, 0 updates, 0 removals
  - Downloading wikimedia/composer-merge-plugin (v2.1.0)
  - Downloading cssjanus/cssjanus (v2.3.0)
  - Downloading doctrine/dbal (3.8.4)
  - Downloading doctrine/sql-formatter (1.1.3)
  - Downloading johnkary/phpunit-speedtrap (v4.0.1)
  - Downloading mck89/peast (v1.16.2)
  - Downloading symfony/polyfill-php80 (v1.30.0)
  - Downloading oojs/oojs-ui (v0.51.1)
  - Downloading pear/pear_exception (v1.0.2)
  - Downloading pear/console_getopt (v1.4.3)
  - Downloading pear/pear-core-minimal (v1.10.15)
  - Downloading pear/mail (v1.6.0)
  - Downloading pear/mail_mime (1.10.12)
  - Downloading pear/net_socket (v1.2.2)
  - Downloading pear/net_smtp (1.12.1)
  - Downloading symfony/var-dumper (v7.1.5)
  - Downloading psy/psysh (v0.12.4)
  - Downloading symfony/polyfill-php81 (v1.30.0)
  - Downloading symfony/polyfill-php82 (v1.30.0)
  - Downloading symfony/polyfill-php83 (v1.30.0)
  - Downloading symfony/yaml (v5.4.39)
  - Downloading wikimedia/cldr-plural-rule-parser (v2.0.0)
  - Downloading wikimedia/common-passwords (v0.5.0)
  - Downloading wikimedia/html-formatter (4.1.0)
  - Downloading wikimedia/less.php (v5.1.1)
  - Downloading wikimedia/minify (2.8.0)
  - Downloading wikimedia/parsoid (v0.20.0-a22)
  - Downloading wikimedia/php-session-serializer (v2.0.1)
  - Downloading wikimedia/relpath (4.0.0)
  - Downloading wikimedia/request-timeout (1.2.0)
  - Downloading wikimedia/running-stat (v2.1.0)
  - Downloading wikimedia/services (3.0.0)
  - Downloading guzzlehttp/guzzle (7.8.1)
  - Downloading wikimedia/shellbox (4.0.2)
  - Downloading wikimedia/wait-condition-loop (v2.0.2)
  - Downloading wikimedia/wrappedstring (v4.0.1)
  - Downloading wikimedia/xmp-reader (0.9.1)
  - Downloading wmde/hamcrest-html-matchers (v1.0.0)
  - Downloading zordius/lightncandy (v1.2.6)
  0/39 [>---------------------------]   0%
  9/39 [======>---------------------]  23%
 17/39 [============>---------------]  43%
 27/39 [===================>--------]  69%
 34/39 [========================>---]  87%
 38/39 [===========================>]  97%
 39/39 [============================] 100%
  - Installing wikimedia/composer-merge-plugin (v2.1.0): Extracting archive
  - Installing squizlabs/php_codesniffer (3.9.0): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.0.0): Extracting archive
  - Installing composer/pcre (3.3.1): Extracting archive
  - Installing cssjanus/cssjanus (v2.3.0): Extracting archive
  - Installing psr/log (1.1.4): Extracting archive
  - Installing psr/cache (3.0.0): Extracting archive
  - Installing doctrine/event-manager (2.0.1): Extracting archive
  - Installing doctrine/deprecations (1.1.3): Extracting archive
  - Installing doctrine/cache (2.2.0): Extracting archive
  - Installing doctrine/dbal (3.8.4): Extracting archive
  - Installing doctrine/sql-formatter (1.1.3): Extracting archive
  - Installing giorgiosironi/eris (0.14.0): Extracting archive
  - Installing guzzlehttp/promises (2.0.3): Extracting archive
  - Installing ralouphie/getallheaders (3.0.3): Extracting archive
  - Installing psr/http-message (1.1): Extracting archive
  - Installing psr/http-factory (1.1.0): Extracting archive
  - Installing guzzlehttp/psr7 (2.7.0): Extracting archive
  - Installing sebastian/version (3.0.2): Extracting archive
  - Installing sebastian/type (3.2.1): Extracting archive
  - Installing sebastian/resource-operations (3.0.4): Extracting archive
  - Installing sebastian/recursion-context (4.0.5): Extracting archive
  - Installing sebastian/object-reflector (2.0.4): Extracting archive
  - Installing sebastian/object-enumerator (4.0.4): Extracting archive
  - Installing sebastian/global-state (5.0.7): Extracting archive
  - Installing sebastian/exporter (4.0.6): Extracting archive
  - Installing sebastian/environment (5.1.5): Extracting archive
  - Installing sebastian/diff (4.0.6): Extracting archive
  - Installing sebastian/comparator (4.0.8): Extracting archive
  - Installing sebastian/code-unit (1.0.8): Extracting archive
  - Installing sebastian/cli-parser (1.0.2): Extracting archive
  - Installing phpunit/php-timer (5.0.3): Extracting archive
  - Installing phpunit/php-text-template (2.0.4): Extracting archive
  - Installing phpunit/php-invoker (3.1.1): Extracting archive
  - Installing phpunit/php-file-iterator (3.0.6): Extracting archive
  - Installing theseer/tokenizer (1.2.3): Extracting archive
  - Installing nikic/php-parser (v4.19.2): Extracting archive
  - Installing sebastian/lines-of-code (1.0.4): Extracting archive
  - Installing sebastian/complexity (2.0.3): Extracting archive
  - Installing sebastian/code-unit-reverse-lookup (2.0.3): Extracting archive
  - Installing phpunit/php-code-coverage (9.2.32): Extracting archive
  - Installing phar-io/version (3.2.1): Extracting archive
  - Installing phar-io/manifest (2.0.4): Extracting archive
  - Installing myclabs/deep-copy (1.12.0): Extracting archive
  - Installing doctrine/instantiator (2.0.0): Extracting archive
  - Installing phpunit/phpunit (9.6.19): Extracting archive
  - Installing johnkary/phpunit-speedtrap (v4.0.1): Extracting archive
  - Installing justinrainbow/json-schema (v5.2.13): Extracting archive
  - Installing mck89/peast (v1.16.2): Extracting archive
  - Installing symfony/polyfill-php80 (v1.30.0): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.0.11): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.2.1): Extracting archive
  - Installing composer/spdx-licenses (1.5.8): Extracting archive
  - Installing composer/semver (3.4.2): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v44.0.0): Extracting archive
  - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
  - Installing symfony/string (v7.1.5): Extracting archive
  - Installing symfony/deprecation-contracts (v3.5.0): Extracting archive
  - Installing psr/container (1.1.2): Extracting archive
  - Installing symfony/service-contracts (v3.5.0): Extracting archive
  - Installing symfony/console (v7.1.5): Extracting archive
  - Installing sabre/event (5.1.7): Extracting archive
  - Installing netresearch/jsonmapper (v4.5.0): Extracting archive
  - Installing microsoft/tolerant-php-parser (v0.1.2): Extracting archive
  - Installing webmozart/assert (1.11.0): Extracting archive
  - Installing phpstan/phpdoc-parser (1.32.0): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing phpdocumentor/type-resolver (1.8.2): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.4.1): Extracting archive
  - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive
  - Installing composer/xdebug-handler (3.0.5): Extracting archive
  - Installing phan/phan (5.4.3): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (6.0.0): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.14.0): Extracting archive
  - Installing mediawiki/minus-x (1.1.3): Extracting archive
  - Installing oojs/oojs-ui (v0.51.1): Extracting archive
  - Installing pear/pear_exception (v1.0.2): Extracting archive
  - Installing pear/console_getopt (v1.4.3): Extracting archive
  - Installing pear/pear-core-minimal (v1.10.15): Extracting archive
  - Installing pear/mail (v1.6.0): Extracting archive
  - Installing pear/mail_mime (1.10.12): Extracting archive
  - Installing pear/net_socket (v1.2.2): Extracting archive
  - Installing pear/net_smtp (1.12.1): Extracting archive
  - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive
  - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive
  - Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive
  - Installing psr/http-client (1.0.3): Extracting archive
  - Installing symfony/var-dumper (v7.1.5): Extracting archive
  - Installing psy/psysh (v0.12.4): Extracting archive
  - Installing seld/jsonlint (1.10.2): Extracting archive
  - Installing symfony/polyfill-php81 (v1.30.0): Extracting archive
  - Installing symfony/polyfill-php82 (v1.30.0): Extracting archive
  - Installing symfony/polyfill-php83 (v1.30.0): Extracting archive
  - Installing symfony/yaml (v5.4.39): Extracting archive
  - Installing wikimedia/alea (1.0.0): Extracting archive
  - Installing wikimedia/base-convert (v2.0.2): Extracting archive
  - Installing wikimedia/cdb (3.0.0): Extracting archive
  - Installing wikimedia/cldr-plural-rule-parser (v2.0.0): Extracting archive
  - Installing wikimedia/common-passwords (v0.5.0): Extracting archive
  - Installing wikimedia/html-formatter (4.1.0): Extracting archive
  - Installing wikimedia/assert (v0.5.1): Extracting archive
  - Installing wikimedia/langconv (0.4.2): Extracting archive
  - Installing wikimedia/less.php (v5.1.1): Extracting archive
  - Installing pear/net_url2 (v2.2.2): Extracting archive
  - Installing wikimedia/minify (2.8.0): Extracting archive
  - Installing wikimedia/zest-css (3.0.1): Extracting archive
  - Installing wikimedia/wikipeg (4.0.0): Extracting archive
  - Installing wikimedia/scoped-callback (v4.0.0): Extracting archive
  - Installing wikimedia/utfnormal (4.0.0): Extracting archive
  - Installing wikimedia/remex-html (4.1.0): Extracting archive
  - Installing wikimedia/object-factory (v5.0.1): Extracting archive
  - Installing wikimedia/json-codec (v3.0.2): Extracting archive
  - Installing wikimedia/ip-utils (5.0.0): Extracting archive
  - Installing wikimedia/idle-dom (v1.0.0): Extracting archive
  - Installing wikimedia/bcp-47-code (v2.0.0): Extracting archive
  - Installing liuggio/statsd-php-client (v1.0.18): Extracting archive
  - Installing wikimedia/parsoid (v0.20.0-a22): Extracting archive
  - Installing wikimedia/at-ease (v2.1.0): Extracting archive
  - Installing wikimedia/php-session-serializer (v2.0.1): Extracting archive
  - Installing wikimedia/purtle (v1.0.8): Extracting archive
  - Installing wikimedia/relpath (4.0.0): Extracting archive
  - Installing wikimedia/normalized-exception (v1.0.1): Extracting archive
  - Installing wikimedia/request-timeout (1.2.0): Extracting archive
  - Installing wikimedia/running-stat (v2.1.0): Extracting archive
  - Installing wikimedia/services (3.0.0): Extracting archive
  - Installing monolog/monolog (2.9.3): Extracting archive
  - Installing guzzlehttp/guzzle (7.8.1): Extracting archive
  - Installing wikimedia/shellbox (4.0.2): Extracting archive
  - Installing wikimedia/testing-access-wrapper (3.0.0): Extracting archive
  - Installing wikimedia/wait-condition-loop (v2.0.2): Extracting archive
  - Installing wikimedia/wrappedstring (v4.0.1): Extracting archive
  - Installing wikimedia/timestamp (v4.1.1): Extracting archive
  - Installing wikimedia/xmp-reader (0.9.1): Extracting archive
  - Installing hamcrest/hamcrest-php (v2.0.1): Extracting archive
  - Installing wmde/hamcrest-html-matchers (v1.0.0): Extracting archive
  - Installing zordius/lightncandy (v1.2.6): Extracting archive
   0/133 [>---------------------------]   0%
  20/133 [====>-----------------------]  15%
  30/133 [======>---------------------]  22%
  46/133 [=========>------------------]  34%
  56/133 [===========>----------------]  42%
  74/133 [===============>------------]  55%
  84/133 [=================>----------]  63%
  98/133 [====================>-------]  73%
 112/133 [=======================>----]  84%
 124/133 [==========================>-]  93%
 133/133 [============================] 100%
28 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating optimized autoload files
51 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> MediaWiki\Composer\ComposerVendorHtaccessCreator::onEvent
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils

--- end ---
Upgrading n:grunt-stylelint from 0.20.0 -> 0.20.1
$ /usr/bin/npm install
--- stderr ---
npm WARN deprecated @types/easy-table@1.2.0: This is a stub types definition. easy-table provides its own type definitions, so you do not need this installed.
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated date-format@0.0.2: 0.x is no longer supported. Please upgrade to 4.x or higher.
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated formidable@1.2.6: Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated superagent@6.1.0: Please upgrade to v7.0.2+ of superagent.  We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing.  See the releases tab for more information at <https://github.com/visionmedia/superagent/releases>. Thanks to @shadowgate15, @spence-s, and @niftylettuce. Superagent is sponsored by Forward Email at <https://forwardemail.net>.
--- stdout ---

added 1444 packages, and audited 1445 packages in 24s

158 packages are looking for funding
  run `npm fund` for details

16 vulnerabilities (5 moderate, 11 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
$ /usr/bin/npm ci
--- stderr ---
npm WARN deprecated @types/easy-table@1.2.0: This is a stub types definition. easy-table provides its own type definitions, so you do not need this installed.
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated date-format@0.0.2: 0.x is no longer supported. Please upgrade to 4.x or higher.
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated formidable@1.2.6: Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated superagent@6.1.0: Please upgrade to v7.0.2+ of superagent.  We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing.  See the releases tab for more information at <https://github.com/visionmedia/superagent/releases>. Thanks to @shadowgate15, @spence-s, and @niftylettuce. Superagent is sponsored by Forward Email at <https://forwardemail.net>.
--- stdout ---

added 1444 packages, and audited 1445 packages in 27s

158 packages are looking for funding
  run `npm fund` for details

16 vulnerabilities (5 moderate, 11 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS tests/jest/mediawiki.special.block/UserLookup.test.js
PASS tests/jest/mediawiki.special.block/SpecialBlock.test.js
  ● Console

    console.warn
      [Vue warn]: Component is missing template or render function. 
        at <TargetBlockLog target-user=null > 
        at <SpecialBlock ref="VTU_COMPONENT" > 
        at <VTUROOT>

      31 | 		} );
      32 | 		mockMwConfigGet();
    > 33 | 		let wrapper = mount( SpecialBlock );
         | 		              ^
      34 | 		expect( wrapper.find( 'button.cdx-button' ).text() ).toStrictEqual( 'ipbsubmit' );
      35 | 		mockMwConfigGet( {
      36 | 			blockAlreadyBlocked: true,

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:49:13)
      at finishComponentSetup (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7693:7)
      at handleSetupResult (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7632:3)
      at setupStatefulComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7601:7)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7533:36)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5861:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5554:7)
      at processFragment (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5770:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5280:9)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5971:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:181:19)
      at instance.update (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6095:16)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6105:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5873:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5971:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:181:19)
      at instance.update (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6095:16)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6105:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5873:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6616:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3930:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1477:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at Object.<anonymous> (tests/jest/mediawiki.special.block/SpecialBlock.test.js:33:17)

    console.warn
      [Vue warn]: Component is missing template or render function. 
        at <TargetBlockLog target-user="ExampleUser" > 
        at <SpecialBlock ref="VTU_COMPONENT" > 
        at <VTUROOT>

      37 | 			blockTargetUser: 'ExampleUser'
      38 | 		} );
    > 39 | 		wrapper = mount( SpecialBlock );
         | 		          ^
      40 | 		expect( wrapper.find( '.cdx-message__content' ).text() )
      41 | 			.toStrictEqual( 'ipb-needreblock:[ExampleUser]' );
      42 | 		expect( wrapper.find( 'button.cdx-button' ).text() ).toStrictEqual( 'ipb-change-block' );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:49:13)
      at finishComponentSetup (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7693:7)
      at handleSetupResult (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7632:3)
      at setupStatefulComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7601:7)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7533:36)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5861:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5554:7)
      at processFragment (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5770:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5280:9)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5971:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:181:19)
      at instance.update (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6095:16)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6105:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5873:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5971:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:181:19)
      at instance.update (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6095:16)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6105:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5873:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6616:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3930:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1477:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at Object.<anonymous> (tests/jest/mediawiki.special.block/SpecialBlock.test.js:39:13)


Test Suites: 2 passed, 2 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        4.028 s
Ran all test suites.
--- stdout ---

> test
> grunt lint && npm run doc && npm run jest

Running "eslint:all" (eslint) task

/src/repo/mw-config/config.js
  4:7   warning  '$label' is never reassigned. Use 'const' instead     prefer-const
  4:15  warning  'labelText' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/jquery.lengthLimit.js
  74:4  warning  '$el' is never reassigned. Use 'const' instead      prefer-const
  87:4  warning  'elLimit' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/jquery.tablesorter/jquery.tablesorter.js
    29:6  warning  'ts' is never reassigned. Use 'const' instead             prefer-const
    30:3  warning  'parsers' is never reassigned. Use 'const' instead        prefer-const
    94:7  warning  'l' is never reassigned. Use 'const' instead              prefer-const
    95:4  warning  'config' is never reassigned. Use 'const' instead         prefer-const
   103:4  warning  'needed' is never reassigned. Use 'const' instead         prefer-const
   190:7  warning  'totalRows' is never reassigned. Use 'const' instead      prefer-const
   191:4  warning  'config' is never reassigned. Use 'const' instead         prefer-const
   192:4  warning  'cachedParsers' is never reassigned. Use 'const' instead  prefer-const
   194:4  warning  'cache' is never reassigned. Use 'const' instead          prefer-const
   286:8  warning  '$tfoot' is never reassigned. Use 'const' instead         prefer-const
   319:7  warning  'config' is never reassigned. Use 'const' instead         prefer-const
   323:4  warning  '$tableRows' is never reassigned. Use 'const' instead     prefer-const
   720:7  warning  '$rows' is never reassigned. Use 'const' instead          prefer-const
   721:4  warning  'totalRows' is never reassigned. Use 'const' instead      prefer-const
   722:4  warning  'config' is never reassigned. Use 'const' instead         prefer-const
   723:4  warning  'columns' is never reassigned. Use 'const' instead        prefer-const
   850:6  warning  '$table' is never reassigned. Use 'const' instead         prefer-const
   912:6  warning  '$sortbottoms' is never reassigned. Use 'const' instead   prefer-const
   924:6  warning  '$sorttops' is never reassigned. Use 'const' instead      prefer-const
  1182:8  warning  'a' is never reassigned. Use 'const' instead              prefer-const

/src/repo/resources/src/jquery/jquery.makeCollapsible.js
  425:1  warning  Syntax error in namepath: ~'wikipage.collapsibleContent'  jsdoc/valid-types

/src/repo/resources/src/jquery/jquery.suggestions.js
  275:9  warning  'isRTL' is never reassigned. Use 'const' instead       prefer-const
  276:9  warning  '$region' is never reassigned. Use 'const' instead     prefer-const
  428:7  warning  'wasVisible' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/jquery/jquery.textSelection.js
  219:7  warning  'selTextArr' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.ForeignStructuredUpload.BookletLayout/BookletLayout.js
   63:7  warning  'isLocal' is never reassigned. Use 'const' instead   prefer-const
   64:7  warning  'fields' is never reassigned. Use 'const' instead    prefer-const
   65:7  warning  'msgs' is never reassigned. Use 'const' instead      prefer-const
  102:7  warning  '$labels' is never reassigned. Use 'const' instead   prefer-const
  155:4  warning  'layout' is never reassigned. Use 'const' instead    prefer-const
  176:3  warning  'fieldset' is never reassigned. Use 'const' instead  prefer-const
  281:3  warning  'fieldset' is never reassigned. Use 'const' instead  prefer-const
  395:4  warning  'deferred' is never reassigned. Use 'const' instead  prefer-const
  401:6  warning  'jpegmeta' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.ForeignStructuredUpload.BookletLayout/ForeignStructuredUpload.js
   44:4  warning  'upload' is never reassigned. Use 'const' instead     prefer-const
  231:3  warning  'namespace' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.ForeignUpload.js
  28:4  warning  'validTargets' is never reassigned. Use 'const' instead  prefer-const
  29:4  warning  'upload' is never reassigned. Use 'const' instead        prefer-const
  69:6  warning  'repos' is never reassigned. Use 'const' instead         prefer-const

/src/repo/resources/src/mediawiki.String.js
   97:4  warning  'oldVal' is never reassigned. Use 'const' instead      prefer-const
  121:3  warning  'matchesLen' is never reassigned. Use 'const' instead  prefer-const
  143:3  warning  'inpParts' is never reassigned. Use 'const' instead    prefer-const

/src/repo/resources/src/mediawiki.Upload.BookletLayout/BookletLayout.js
  322:5  warning  'name' is never reassigned. Use 'const' instead          prefer-const
  346:7  warning  'state' is never reassigned. Use 'const' instead         prefer-const
  347:4  warning  'stateDetails' is never reassigned. Use 'const' instead  prefer-const
  348:4  warning  'warnings' is never reassigned. Use 'const' instead      prefer-const
  349:4  warning  '$ul' is never reassigned. Use 'const' instead           prefer-const
  441:4  warning  'layout' is never reassigned. Use 'const' instead        prefer-const
  444:3  warning  'fieldset' is never reassigned. Use 'const' instead      prefer-const
  538:3  warning  'fieldset' is never reassigned. Use 'const' instead      prefer-const
  597:3  warning  'fieldset' is never reassigned. Use 'const' instead      prefer-const

/src/repo/resources/src/mediawiki.Upload.js
  63:2  warning  'UP' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.Uri/Uri.js
   36:2  warning  'parser' is never reassigned. Use 'const' instead      prefer-const
   48:2  warning  'properties' is never reassigned. Use 'const' instead  prefer-const
  162:5  warning  'hasOptions' is never reassigned. Use 'const' instead  prefer-const
  163:5  warning  'defaultUri' is never reassigned. Use 'const' instead  prefer-const
  322:6  warning  'uri' is never reassigned. Use 'const' instead         prefer-const
  323:6  warning  'hasOwn' is never reassigned. Use 'const' instead      prefer-const
  326:5  warning  'matches' is never reassigned. Use 'const' instead     prefer-const
  334:5  warning  'q' is never reassigned. Use 'const' instead           prefer-const

/src/repo/resources/src/mediawiki.action.edit/edit.js
  12:1  warning  Syntax error in namepath: ~'wikipage.editform'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js
   7:2  warning  'collapsibleLists' is never reassigned. Use 'const' instead  prefer-const
  25:2  warning  'handleOne' is never reassigned. Use 'const' instead         prefer-const

/src/repo/resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
  21:1  warning  Syntax error in namepath: ~'postEdit'               jsdoc/valid-types
  36:1  warning  Syntax error in namepath: ~'postEdit.afterRemoval'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.authenticationPopup/index.js
  38:1  warning  The type 'userinfo' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.base/errorLogger.js
   8:1  warning  Syntax error in namepath: ~'global.error'  jsdoc/valid-types
  22:1  warning  Syntax error in namepath: ~'error.caught'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.base/log.js
  14:1  warning  Found more than one @return declaration  jsdoc/require-returns
  14:1  warning  Found more than one @return declaration  jsdoc/require-returns-check

/src/repo/resources/src/mediawiki.base/mediawiki.base.js
  217:1  warning  The type 'mediawiki' is undefined  jsdoc/no-undefined-types
  243:1  warning  The type 'mediawiki' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.cldr/index.js
  23:11  warning  'pluralRuleParser' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.cookie/index.js
    3:5  warning  'config' is never reassigned. Use 'const' instead  prefer-const
   12:2  warning  'jar' is never reassigned. Use 'const' instead     prefer-const
   68:3  warning  'prefix' is never reassigned. Use 'const' instead  prefer-const
  115:3  warning  'result' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.cookie/jar.js
  16:6  warning  'config' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.debug/debug.js
    7:3  warning  'hovzer' is never reassigned. Use 'const' instead           prefer-const
   25:2  warning  'debug' is never reassigned. Use 'const' instead            prefer-const
   71:8  warning  'currentPaneId' is never reassigned. Use 'const' instead    prefer-const
   72:5  warning  'requestedPaneId' is never reassigned. Use 'const' instead  prefer-const
   73:5  warning  '$currentPane' is never reassigned. Use 'const' instead     prefer-const
   74:5  warning  '$requestedPane' is never reassigned. Use 'const' instead   prefer-const
  118:4  warning  '$container' is never reassigned. Use 'const' instead       prefer-const
  126:4  warning  '$bits' is never reassigned. Use 'const' instead            prefer-const
  222:4  warning  'panes' is never reassigned. Use 'const' instead            prefer-const
  251:4  warning  '$table' is never reassigned. Use 'const' instead           prefer-const
  252:4  warning  'length' is never reassigned. Use 'const' instead           prefer-const
  258:4  warning  'entryTypeText' is never reassigned. Use 'const' instead    prefer-const
  300:4  warning  '$table' is never reassigned. Use 'const' instead           prefer-const
  301:4  warning  'length' is never reassigned. Use 'const' instead           prefer-const
  331:4  warning  '$list' is never reassigned. Use 'const' instead            prefer-const
  332:4  warning  'length' is never reassigned. Use 'const' instead           prefer-const
  354:5  warning  '$unit' is never reassigned. Use 'const' instead            prefer-const
  356:5  warning  '$table' is never reassigned. Use 'const' instead           prefer-const
  389:4  warning  '$table' is never reassigned. Use 'const' instead           prefer-const
  390:4  warning  'length' is never reassigned. Use 'const' instead           prefer-const

/src/repo/resources/src/mediawiki.debug/jquery.footHovzer.js
   5:15  warning  'footHovzer' is never reassigned. Use 'const' instead  prefer-const
  48:4   warning  '$body' is never reassigned. Use 'const' instead       prefer-const

/src/repo/resources/src/mediawiki.deflate/mw.deflate.js
  39:22  warning  'l' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.diff/inlineFormatToggle.js
    7:3  warning  'url' is never reassigned. Use 'const' instead                       prefer-const
    8:3  warning  'api' is never reassigned. Use 'const' instead                       prefer-const
    9:3  warning  '$inlineLegendContainer' is never reassigned. Use 'const' instead    prefer-const
   10:3  warning  'inlineToggleSwitchLayout' is never reassigned. Use 'const' instead  prefer-const
   11:3  warning  'inlineToggleSwitch' is never reassigned. Use 'const' instead        prefer-const
   18:2  warning  '$wikitextDiffContainer' is never reassigned. Use 'const' instead    prefer-const
   19:2  warning  '$wikitextDiffHeader' is never reassigned. Use 'const' instead       prefer-const
  117:4  warning  'diffType' is never reassigned. Use 'const' instead                  prefer-const
  118:4  warning  'oldRevId' is never reassigned. Use 'const' instead                  prefer-const
  119:4  warning  'newRevId' is never reassigned. Use 'const' instead                  prefer-const
  128:3  warning  'apiParams' is never reassigned. Use 'const' instead                 prefer-const
  151:1  warning  Syntax error in namepath: ~'wikipage.diff.wikitextDiffBody'          jsdoc/valid-types
  163:1  warning  Syntax error in namepath: ~'wikipage.diff.diffTypeSwitch'            jsdoc/valid-types

/src/repo/resources/src/mediawiki.editRecovery/edit.js
  177:1  warning  Syntax error in namepath: ~'editRecovery.loadEnd'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.experiments.js
  77:8  warning  'buckets' is never reassigned. Use 'const' instead  prefer-const
  92:4  warning  'hash' is never reassigned. Use 'const' instead     prefer-const
  93:4  warning  'max' is never reassigned. Use 'const' instead      prefer-const

/src/repo/resources/src/mediawiki.feedback/FeedbackDialog.js
   75:2  warning  'feedbackSubjectFieldLayout' is never reassigned. Use 'const' instead  prefer-const
   78:2  warning  'feedbackMessageFieldLayout' is never reassigned. Use 'const' instead  prefer-const
   81:2  warning  'feedbackFieldsetLayout' is never reassigned. Use 'const' instead      prefer-const
   95:2  warning  'termsOfUseLabel' is never reassigned. Use 'const' instead             prefer-const
  168:5  warning  'settings' is never reassigned. Use 'const' instead                    prefer-const
  189:4  warning  '$link' is never reassigned. Use 'const' instead                       prefer-const
  230:8  warning  'fb' is never reassigned. Use 'const' instead                          prefer-const
  231:5  warning  'userAgentMessage' is never reassigned. Use 'const' instead            prefer-const
  237:5  warning  'subject' is never reassigned. Use 'const' instead                     prefer-const

/src/repo/resources/src/mediawiki.feedback/feedback.js
  117:3  warning  'dialogConfig' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.htmlform/cond-state.js
  48:1  warning  Found more than one @return declaration  jsdoc/require-returns-check

/src/repo/resources/src/mediawiki.htmlform/htmlform.js
  5:1  warning  Syntax error in namepath: ~'htmlform.enhance'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.htmlform/selectandother.js
  17:5  warning  '$this' is never reassigned. Use 'const' instead        prefer-const
  18:5  warning  '$widget' is never reassigned. Use 'const' instead      prefer-const
  20:4  warning  '$reasonList' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.htmlform/selectorother.js
  38:7  warning  '$select' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.inspect.js
   42:4   warning  'units' is never reassigned. Use 'const' instead    prefer-const
   61:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
   91:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  112:2   warning  Found more than one @return declaration             jsdoc/require-returns
  112:2   warning  Found more than one @return declaration             jsdoc/require-returns-check
  121:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  152:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  164:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  175:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  203:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  274:21  warning  'module' is never reassigned. Use 'const' instead   prefer-const
  283:5   warning  'stats' is never reassigned. Use 'const' instead    prefer-const
  304:13  warning  'stats' is never reassigned. Use 'const' instead    prefer-const
  332:4   warning  'modules' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.jqueryMsg/mediawiki.jqueryMsg.js
   142:1   warning  Found more than one @return declaration                                      jsdoc/require-returns
   142:1   warning  Found more than one @return declaration                                      jsdoc/require-returns-check
   349:84  warning  'colon' is never reassigned. Use 'const' instead                             prefer-const
   350:4   warning  'templateContents' is never reassigned. Use 'const' instead                  prefer-const
   351:4   warning  'nonWhitespaceExpression' is never reassigned. Use 'const' instead           prefer-const
   351:29  warning  'paramExpression' is never reassigned. Use 'const' instead                   prefer-const
   351:46  warning  'expression' is never reassigned. Use 'const' instead                        prefer-const
   352:4   warning  'settings' is never reassigned. Use 'const' instead                          prefer-const
   392:5   warning  'originalPos' is never reassigned. Use 'const' instead                       prefer-const
   393:5   warning  'result' is never reassigned. Use 'const' instead                            prefer-const
   416:9   warning  'originalPos' is never reassigned. Use 'const' instead                       prefer-const
   417:6   warning  'result' is never reassigned. Use 'const' instead                            prefer-const
   486:3   warning  'regularLiteral' is never reassigned. Use 'const' instead                    prefer-const
   487:3   warning  'regularLiteralWithoutBar' is never reassigned. Use 'const' instead          prefer-const
   488:3   warning  'regularLiteralWithoutSpace' is never reassigned. Use 'const' instead        prefer-const
   491:3   warning  'backslash' is never reassigned. Use 'const' instead                         prefer-const
   492:3   warning  'anyCharacter' is never reassigned. Use 'const' instead                      prefer-const
   500:3   warning  'escapedOrLiteralWithoutSpace' is never reassigned. Use 'const' instead      prefer-const
   504:3   warning  'escapedOrLiteralWithoutBar' is never reassigned. Use 'const' instead        prefer-const
   508:3   warning  'escapedOrRegularLiteral' is never reassigned. Use 'const' instead           prefer-const
   529:3   warning  'asciiAlphabetLiteral' is never reassigned. Use 'const' instead              prefer-const
   531:3   warning  'whitespace' is never reassigned. Use 'const' instead                        prefer-const
   533:3   warning  'dollar' is never reassigned. Use 'const' instead                            prefer-const
   534:3   warning  'digits' is never reassigned. Use 'const' instead                            prefer-const
   545:3   warning  'openExtlink' is never reassigned. Use 'const' instead                       prefer-const
   546:3   warning  'closeExtlink' is never reassigned. Use 'const' instead                      prefer-const
   572:3   warning  'pipe' is never reassigned. Use 'const' instead                              prefer-const
   574:3   warning  'openTemplate' is never reassigned. Use 'const' instead                      prefer-const
   575:3   warning  'closeTemplate' is never reassigned. Use 'const' instead                     prefer-const
   673:3   warning  'wikilinkContents' is never reassigned. Use 'const' instead                  prefer-const
   678:3   warning  'openWikilink' is never reassigned. Use 'const' instead                      prefer-const
   679:3   warning  'closeWikilink' is never reassigned. Use 'const' instead                     prefer-const
   690:3   warning  'doubleQuote' is never reassigned. Use 'const' instead                       prefer-const
   691:3   warning  'htmlDoubleQuoteAttributeValue' is never reassigned. Use 'const' instead     prefer-const
   701:3   warning  'singleQuote' is never reassigned. Use 'const' instead                       prefer-const
   702:3   warning  'htmlSingleQuoteAttributeValue' is never reassigned. Use 'const' instead     prefer-const
   712:3   warning  'htmlAttributeEquals' is never reassigned. Use 'const' instead               prefer-const
   767:3   warning  'openHtmlStartTag' is never reassigned. Use 'const' instead                  prefer-const
   768:3   warning  'optionalForwardSlash' is never reassigned. Use 'const' instead              prefer-const
   769:3   warning  'openHtmlEndTag' is never reassigned. Use 'const' instead                    prefer-const
   770:3   warning  'closeHtmlTag' is never reassigned. Use 'const' instead                      prefer-const
   871:3   warning  'regularLiteralWithSquareBrackets' is never reassigned. Use 'const' instead  prefer-const
   878:3   warning  'curlyBraceTransformExpression' is never reassigned. Use 'const' instead     prefer-const
   902:3   warning  'res' is never reassigned. Use 'const' instead                               prefer-const
  1148:15  warning  'mapping' is never reassigned. Use 'const' instead                           prefer-const
  1184:4   warning  'arg' is never reassigned. Use 'const' instead                               prefer-const
  1185:4   warning  'contents' is never reassigned. Use 'const' instead                          prefer-const
  1232:4   warning  'explicitPluralForms' is never reassigned. Use 'const' instead               prefer-const
  1285:4   warning  'forms' is never reassigned. Use 'const' instead                             prefer-const

/src/repo/resources/src/mediawiki.language.months/months.js
  44:1  warning  The type 'Months' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.language/languages/fi.js
   9:2  warning  'grammarForms' is never reassigned. Use 'const' instead  prefer-const
  16:2  warning  'origWord' is never reassigned. Use 'const' instead      prefer-const

/src/repo/resources/src/mediawiki.language/languages/os.js
  7:6  warning  'grammarForms' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.language/mediawiki.language.js
   24:4  warning  'pluralRules' is never reassigned. Use 'const' instead      prefer-const
   90:4  warning  'userLanguage' is never reassigned. Use 'const' instead     prefer-const
   92:4  warning  'forms' is never reassigned. Use 'const' instead            prefer-const
   97:4  warning  'transformations' is never reassigned. Use 'const' instead  prefer-const
  169:4  warning  'bcp47Map' is never reassigned. Use 'const' instead         prefer-const
  174:4  warning  'segments' is never reassigned. Use 'const' instead         prefer-const
  175:4  warning  'formatted' is never reassigned. Use 'const' instead        prefer-const

/src/repo/resources/src/mediawiki.language/mediawiki.language.numbers.js
   29:3   warning  'out' is never reassigned. Use 'const' instead                      prefer-const
   30:3   warning  'count' is never reassigned. Use 'const' instead                    prefer-const
   31:3   warning  'padStr' is never reassigned. Use 'const' instead                   prefer-const
   59:4   warning  'patternParts' is never reassigned. Use 'const' instead             prefer-const
   60:4   warning  'maxPlaces' is never reassigned. Use 'const' instead                prefer-const
   61:4   warning  'valueParts' is never reassigned. Use 'const' instead               prefer-const
   62:4   warning  'fractional' is never reassigned. Use 'const' instead               prefer-const
   65:4   warning  'pieces' is never reassigned. Use 'const' instead                   prefer-const
   95:3   warning  'patternDigits' is never reassigned. Use 'const' instead            prefer-const
  158:4   warning  'transformTable' is never reassigned. Use 'const' instead           prefer-const
  159:4   warning  'group' is never reassigned. Use 'const' instead                    prefer-const
  161:4   warning  'numberPatternRE' is never reassigned. Use 'const' instead          prefer-const
  162:4   warning  'decimal' is never reassigned. Use 'const' instead                  prefer-const
  163:4   warning  'patternList' is never reassigned. Use 'const' instead              prefer-const
  164:4   warning  'positivePattern' is never reassigned. Use 'const' instead          prefer-const
  167:3   warning  'numberPattern' is never reassigned. Use 'const' instead            prefer-const
  189:22  warning  'flipped' is never reassigned. Use 'const' instead                  prefer-const
  225:4   warning  'digitTransformTable' is never reassigned. Use 'const' instead      prefer-const
  226:4   warning  'separatorTransformTable' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.messagePoster/WikitextMessagePoster.js
  41:3  warning  'additionalParams' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.messagePoster/factory.js
   98:22  warning  'page' is never reassigned. Use 'const' instead          prefer-const
  102:4   warning  'contentModel' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.misc-authed-curate/patrol.js
  11:4  warning  'api' is never reassigned. Use 'const' instead       prefer-const
  17:3  warning  '$spinner' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.misc-authed-ooui/special.changecredentials.js
  10:5  warning  'self' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.misc-authed-ooui/special.undelete.js
  11:7  warning  '$widget' is never reassigned. Use 'const' instead    prefer-const
  21:3  warning  'wpComment' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.notification.convertmessagebox.js
  13:1  warning  Syntax error in namepath: (require("mediawiki.notification.convertmessagebox"))  jsdoc/valid-types

/src/repo/resources/src/mediawiki.notification/notification.js
    4:6  warning  'notification' is never reassigned. Use 'const' instead          prefer-const
   10:3  warning  'preReadyNotifQueue' is never reassigned. Use 'const' instead    prefer-const
   28:3  warning  '$notification' is never reassigned. Use 'const' instead         prefer-const
   72:3  warning  '$notificationContent' is never reassigned. Use 'const' instead  prefer-const
  137:3  warning  'options' is never reassigned. Use 'const' instead               prefer-const
  138:3  warning  '$notification' is never reassigned. Use 'const' instead         prefer-const
  182:3  warning  'autohideCount' is never reassigned. Use 'const' instead         prefer-const
  428:4  warning  'notif' is never reassigned. Use 'const' instead                 prefer-const

/src/repo/resources/src/mediawiki.page.gallery.js
   13:3  warning  'isTouchScreen' is never reassigned. Use 'const' instead  prefer-const
   25:4  warning  'rows' is never reassigned. Use 'const' instead           prefer-const
   26:4  warning  '$gallery' is never reassigned. Use 'const' instead       prefer-const
   31:5  warning  'top' is never reassigned. Use 'const' instead            prefer-const
   32:5  warning  '$this' is never reassigned. Use 'const' instead          prefer-const
   39:4  warning  '$imageDiv' is never reassigned. Use 'const' instead      prefer-const
   40:4  warning  '$img' is never reassigned. Use 'const' instead           prefer-const
   60:4  warning  'captionWidth' is never reassigned. Use 'const' instead   prefer-const
   61:4  warning  'outerWidth' is never reassigned. Use 'const' instead     prefer-const
  226:8  warning  'imgWidth' is never reassigned. Use 'const' instead       prefer-const
  227:5  warning  'imgHeight' is never reassigned. Use 'const' instead      prefer-const
  228:5  warning  'width' is never reassigned. Use 'const' instead          prefer-const
  229:5  warning  'captionWidth' is never reassigned. Use 'const' instead   prefer-const
  231:5  warning  '$outerDiv' is never reassigned. Use 'const' instead      prefer-const
  232:5  warning  '$imageDiv' is never reassigned. Use 'const' instead      prefer-const
  241:4  warning  '$imageElm' is never reassigned. Use 'const' instead      prefer-const

/src/repo/resources/src/mediawiki.page.gallery.slideshow.js
  140:3   warning  'prevButton' is never reassigned. Use 'const' instead         prefer-const
  145:3   warning  'nextButton' is never reassigned. Use 'const' instead         prefer-const
  150:3   warning  'toggleButton' is never reassigned. Use 'const' instead       prefer-const
  156:3   warning  'interfaceElements' is never reassigned. Use 'const' instead  prefer-const
  172:3   warning  'carouselStack' is never reassigned. Use 'const' instead      prefer-const
  273:4   warning  '$imageLi' is never reassigned. Use 'const' instead           prefer-const
  274:4   warning  '$caption' is never reassigned. Use 'const' instead           prefer-const
  313:3   warning  '$thumbnail' is never reassigned. Use 'const' instead         prefer-const
  344:13  warning  'd' is never reassigned. Use 'const' instead                  prefer-const
  345:4   warning  'img' is never reassigned. Use 'const' instead                prefer-const
  365:4   warning  'imageSrc' is never reassigned. Use 'const' instead           prefer-const

/src/repo/resources/src/mediawiki.page.image.pagination.js
    7:3  warning  'cache' is never reassigned. Use 'const' instead  prefer-const
  101:4  warning  'page' is never reassigned. Use 'const' instead   prefer-const
  102:4  warning  'url' is never reassigned. Use 'const' instead    prefer-const

/src/repo/resources/src/mediawiki.page.preview.js
  406:1  warning  Syntax error in namepath: ~'wikipage.tableOfContents'    jsdoc/valid-types
  762:3  warning  'parseRequest' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.page.ready/ready.js
   96:1  warning  Syntax error in namepath: ~'wikipage.indicators'  jsdoc/valid-types
  116:1  warning  Syntax error in namepath: ~'wikipage.content'     jsdoc/valid-types
  137:1  warning  Syntax error in namepath: ~'wikipage.categories'  jsdoc/valid-types
  153:1  warning  Syntax error in namepath: ~'wikipage.diff'        jsdoc/valid-types
  184:1  warning  Syntax error in namepath: ~'skin.logout'          jsdoc/valid-types

/src/repo/resources/src/mediawiki.page.watch.ajax/watch-ajax.js
  128:1  warning  Syntax error in namepath: ~'wikipage.watchlistChange'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.rcfilters/Controller.js
  331:1  warning  Found more than one @return declaration                  jsdoc/require-returns
  331:1  warning  Found more than one @return declaration                  jsdoc/require-returns-check
  552:1  warning  Syntax error in namepath: ~'RcFilters.highlight.enable'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.rcfilters/dm/FilterItem.js
   81:1  warning  Found more than one @return declaration  jsdoc/require-returns
   81:1  warning  Found more than one @return declaration  jsdoc/require-returns-check
  335:1  warning  The type 'update' is undefined           jsdoc/no-undefined-types
  351:1  warning  The type 'update' is undefined           jsdoc/no-undefined-types
  366:1  warning  The type 'update' is undefined           jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.rcfilters/dm/FiltersViewModel.js
  1188:1  warning  The type 'searchChange' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.rcfilters/mw.rcfilters.js
  176:1  warning  Syntax error in namepath: ~'structuredChangeFilters.ui.initialized'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.rcfilters/ui/FilterTagMultiselectWidget.js
  400:1  warning  Syntax error in namepath: ~'RcFilters.popup.open'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.searchSuggest/searchSuggest.js
   52:1  warning  The type 'ResponseMetaData' is undefined                         jsdoc/no-undefined-types
   59:1  warning  The type 'ResponseFunction' is undefined                         jsdoc/no-undefined-types
   90:4  warning  '$searchRegion' is never reassigned. Use 'const' instead         prefer-const
   91:4  warning  '$searchInput' is never reassigned. Use 'const' instead          prefer-const
   96:5  warning  'obj' is never reassigned. Use 'const' instead                   prefer-const
  333:3  warning  'searchboxesSelectors' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.special.apisandbox/apisandbox.js
     3:6   warning  'ApiSandbox' is never reassigned. Use 'const' instead                      prefer-const
     3:18  warning  'Util' is never reassigned. Use 'const' instead                            prefer-const
     6:3   warning  'api' is never reassigned. Use 'const' instead                             prefer-const
     7:3   warning  'bookletPages' is never reassigned. Use 'const' instead                    prefer-const
     8:3   warning  'availableFormats' is never reassigned. Use 'const' instead                prefer-const
    13:3   warning  'moduleInfoCache' is never reassigned. Use 'const' instead                 prefer-const
    15:3   warning  'OptionalParamWidget' is never reassigned. Use 'const' instead             prefer-const
    16:3   warning  'ParamLabelWidget' is never reassigned. Use 'const' instead                prefer-const
    17:3   warning  'BooleanToggleSwitchParamWidget' is never reassigned. Use 'const' instead  prefer-const
    18:3   warning  'DateTimeParamWidget' is never reassigned. Use 'const' instead             prefer-const
    19:3   warning  'LimitParamWidget' is never reassigned. Use 'const' instead                prefer-const
    20:3   warning  'PasswordParamWidget' is never reassigned. Use 'const' instead             prefer-const
    21:3   warning  'UploadSelectFileParamWidget' is never reassigned. Use 'const' instead     prefer-const
    23:2   warning  'WidgetMethods' is never reassigned. Use 'const' instead                   prefer-const
   174:2   warning  'Validators' is never reassigned. Use 'const' instead                      prefer-const
   631:5   warning  'apiUrl' is never reassigned. Use 'const' instead                          prefer-const
   632:5   warning  'items' is never reassigned. Use 'const' instead                           prefer-const
   891:8   warning  'deferreds' is never reassigned. Use 'const' instead                       prefer-const
   892:5   warning  'paramsAreForced' is never reassigned. Use 'const' instead                 prefer-const
   893:5   warning  'displayParams' is never reassigned. Use 'const' instead                   prefer-const
   894:5   warning  'ajaxOptions' is never reassigned. Use 'const' instead                     prefer-const
   896:5   warning  'tokenWidgets' is never reassigned. Use 'const' instead                    prefer-const
   897:5   warning  'checkPages' is never reassigned. Use 'const' instead                      prefer-const
  1227:5   warning  'tokenWait' is never reassigned. Use 'const' instead                       prefer-const
  1228:5   warning  'checkPages' is never reassigned. Use 'const' instead                      prefer-const
  1229:5   warning  'success' is never reassigned. Use 'const' instead                         prefer-const
  1235:5   warning  'failure' is never reassigned. Use 'const' instead                         prefer-const
  1329:2   warning  Found more than one @return declaration                                    jsdoc/require-returns
  1329:2   warning  Found more than one @return declaration                                    jsdoc/require-returns-check
  1645:4   warning  'layout' is never reassigned. Use 'const' instead                          prefer-const
  1646:4   warning  'removeDynamicParamWidget' is never reassigned. Use 'const' instead        prefer-const
  1650:4   warning  'addDynamicParamWidget' is never reassigned. Use 'const' instead           prefer-const

/src/repo/resources/src/mediawiki.special.block.js
  14:81  warning  'watchUserWidget' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue
  46:3  warning  Attribute "class" should go before "@click"  vue/attributes-order

/src/repo/resources/src/mediawiki.special.block/components/UserLookup.vue
  32:3  warning  Unused eslint-disable directive (no problems were reported from 'vue/no-unused-properties')

/src/repo/resources/src/mediawiki.special.changeslist.watchlistexpiry/watchlistexpiry.js
  12:4  warning  '$clock' is never reassigned. Use 'const' instead    prefer-const
  13:3  warning  'timeLeft' is never reassigned. Use 'const' instead  prefer-const
  18:3  warning  'msg' is never reassigned. Use 'const' instead       prefer-const

/src/repo/resources/src/mediawiki.special.contributions.js
  22:3  warning  'startReady' is never reassigned. Use 'const' instead  prefer-const
  23:3  warning  'endReady' is never reassigned. Use 'const' instead    prefer-const

/src/repo/resources/src/mediawiki.special.createaccount/HtmlformChecker.js
  43:3  warning  'events' is never reassigned. Use 'const' instead  prefer-const
  60:3  warning  'that' is never reassigned. Use 'const' instead    prefer-const
  61:3  warning  'value' is never reassigned. Use 'const' instead   prefer-const

/src/repo/resources/src/mediawiki.special.createaccount/signup.js
    9:6  warning  '$emailLabel' is never reassigned. Use 'const' instead            prefer-const
   10:3  warning  'originalText' is never reassigned. Use 'const' instead           prefer-const
   11:3  warning  'requiredText' is never reassigned. Use 'const' instead           prefer-const
   12:3  warning  '$createByMailCheckbox' is never reassigned. Use 'const' instead  prefer-const
   13:3  warning  '$beforePwds' is never reassigned. Use 'const' instead            prefer-const
   37:6  warning  '$usernameInput' is never reassigned. Use 'const' instead         prefer-const
   38:3  warning  '$passwordInput' is never reassigned. Use 'const' instead         prefer-const
   39:3  warning  '$emailInput' is never reassigned. Use 'const' instead            prefer-const
   40:3  warning  '$realNameInput' is never reassigned. Use 'const' instead         prefer-const
   41:3  warning  'api' is never reassigned. Use 'const' instead                    prefer-const
   52:3  warning  'd' is never reassigned. Use 'const' instead                      prefer-const
   53:3  warning  'apiPromise' is never reassigned. Use 'const' instead             prefer-const
   91:4  warning  'd' is never reassigned. Use 'const' instead                      prefer-const
   98:3  warning  'apiPromise' is never reassigned. Use 'const' instead             prefer-const
  122:2  warning  'usernameChecker' is never reassigned. Use 'const' instead        prefer-const
  125:2  warning  'passwordChecker' is never reassigned. Use 'const' instead        prefer-const

/src/repo/resources/src/mediawiki.special.search/search.js
  14:3  warning  '$checkboxes' is never reassigned. Use 'const' instead        prefer-const
  23:3  warning  '$headerLinks' is never reassigned. Use 'const' instead       prefer-const
  24:3  warning  'searchWidget' is never reassigned. Use 'const' instead       prefer-const
  25:3  warning  'updateHeaderLinks' is never reassigned. Use 'const' instead  prefer-const
  27:9  warning  'parts' is never reassigned. Use 'const' instead              prefer-const

/src/repo/resources/src/mediawiki.special.unwatchedPages/unwatchedPages.js
   8:5  warning  'api' is never reassigned. Use 'const' instead           prefer-const
   9:5  warning  '$link' is never reassigned. Use 'const' instead         prefer-const
  10:5  warning  '$subjectLink' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.special.upload/upload.js
   11:3  warning  'NS_FILE' is never reassigned. Use 'const' instead            prefer-const
   20:4  warning  '$spinnerDestCheck' is never reassigned. Use 'const' instead  prefer-const
   21:4  warning  'title' is never reassigned. Use 'const' instead              prefer-const
   41:6  warning  'page' is never reassigned. Use 'const' instead               prefer-const
   80:8  warning  'template' is never reassigned. Use 'const' instead           prefer-const
   88:4  warning  '$spinner' is never reassigned. Use 'const' instead           prefer-const
  157:5  warning  'path' is never reassigned. Use 'const' instead               prefer-const
  159:5  warning  'slash' is never reassigned. Use 'const' instead              prefer-const
  160:5  warning  'backslash' is never reassigned. Use 'const' instead          prefer-const
  195:5  warning  'title' is never reassigned. Use 'const' instead              prefer-const
  294:7  warning  'buffer' is never reassigned. Use 'const' instead             prefer-const
  350:5  warning  'previewSize' is never reassigned. Use 'const' instead        prefer-const
  351:5  warning  '$spinner' is never reassigned. Use 'const' instead           prefer-const
  353:5  warning  'thumb' is never reassigned. Use 'const' instead              prefer-const
  360:4  warning  '$canvas' is never reassigned. Use 'const' instead            prefer-const
  361:4  warning  'ctx' is never reassigned. Use 'const' instead                prefer-const
  365:9  warning  'img' is never reassigned. Use 'const' instead                prefer-const
  396:6  warning  'dx' is never reassigned. Use 'const' instead                 prefer-const
  397:6  warning  'dy' is never reassigned. Use 'const' instead                 prefer-const
  435:6  warning  'info' is never reassigned. Use 'const' instead               prefer-const
  477:4  warning  'maxSize' is never reassigned. Use 'const' instead            prefer-const
  547:4  warning  '$uploadForm' is never reassigned. Use 'const' instead        prefer-const
  556:3  warning  'allowCloseWindow' is never reassigned. Use 'const' instead   prefer-const

/src/repo/resources/src/mediawiki.special.watchlist/watchlist.js
  14:7   warning  'api' is never reassigned. Use 'const' instead         prefer-const
  14:41  warning  '$resetForm' is never reassigned. Use 'const' instead  prefer-const
  85:11  warning  '$line' is never reassigned. Use 'const' instead       prefer-const

/src/repo/resources/src/mediawiki.template.js
   26:1  warning  The type 'TemplateRenderer' is undefined                    jsdoc/no-undefined-types
   40:1  warning  The type 'TemplateRenderFunction' is undefined              jsdoc/no-undefined-types
   45:1  warning  The type 'TemplateCompileFunction' is undefined             jsdoc/no-undefined-types
   61:1  warning  The type 'TemplateCompiler' is undefined                    jsdoc/no-undefined-types
   88:1  warning  The type 'TemplateCompiler' is undefined                    jsdoc/no-undefined-types
  107:1  warning  The type 'TemplateRenderer' is undefined                    jsdoc/no-undefined-types
  125:1  warning  The type 'TemplateRenderer' is undefined                    jsdoc/no-undefined-types
  135:4  warning  'moduleTemplates' is never reassigned. Use 'const' instead  prefer-const
  149:1  warning  The type 'TemplateRenderer' is undefined                    jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.user.js
  237:4  warning  'registration' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.userSuggest.js
  7:2  warning  'config' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.util/util.js
   237:4  warning  'run' is never reassigned. Use 'const' instead          prefer-const
   287:3  warning  'fragmentIdx' is never reassigned. Use 'const' instead  prefer-const
   580:1  warning  Syntax error in namepath: ~'util.addPortlet'            jsdoc/valid-types
   748:1  warning  Syntax error in namepath: ~'util.addPortletLink'        jsdoc/valid-types
   851:4  warning  'RE_IP_BYTE' is never reassigned. Use 'const' instead   prefer-const
   852:4  warning  'RE_IP_ADD' is never reassigned. Use 'const' instead    prefer-const
   858:3  warning  'block' is never reassigned. Use 'const' instead        prefer-const
   888:3  warning  'block' is never reassigned. Use 'const' instead        prefer-const
  1125:4  warning  'matches' is never reassigned. Use 'const' instead      prefer-const

/src/repo/resources/src/mediawiki.visibleTimeout/visibleTimeout.js
   3:2  warning  'clearHandles' is never reassigned. Use 'const' instead  prefer-const
  43:4  warning  'visibleId' is never reassigned. Use 'const' instead     prefer-const

/src/repo/resources/src/mediawiki.watchstar.widgets/WatchlistExpiryWidget.js
  14:6  warning  'dataExpiryOptions' is never reassigned. Use 'const' instead  prefer-const
  21:3  warning  'expiryOptions' is never reassigned. Use 'const' instead      prefer-const
  24:2  warning  '$link' is never reassigned. Use 'const' instead              prefer-const
  28:2  warning  'messageLabel' is never reassigned. Use 'const' instead       prefer-const
  94:7  warning  'mwTitle' is never reassigned. Use 'const' instead            prefer-const
  95:7  warning  'isInfinity' is never reassigned. Use 'const' instead         prefer-const

/src/repo/resources/src/mediawiki.widgets.datetime/DateTimeFormatter.js
  268:1  warning  The type 'FieldSpecificationObject' is undefined  jsdoc/no-undefined-types
  632:1  warning  The type 'CalendarGridData' is undefined          jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.widgets.datetime/DiscordianDateTimeFormatter.js
  74:1  warning  The type 'FieldSpecificationObject' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.widgets.datetime/ProlepticGregorianDateTimeFormatter.js
  306:1  warning  The type 'FieldSpecificationObject' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js
  50:1  warning  The type 'DropdownOptions' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/startup/mediawiki.loader.js
  61:1  warning  Syntax error in namepath: ~'resourceloader.exception'  jsdoc/valid-types

/src/repo/tests/qunit/data/testrunner.js
  72:2  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/tests/selenium/wdio-mediawiki/Util.js
  35:1  warning  This line has a length of 107. Maximum allowed is 100  max-len

✖ 432 problems (0 errors, 432 warnings)
  0 errors and 2 warnings potentially fixable with the `--fix` option.


Running "banana:core" (banana) task
>> The "se" translation has 41 translations with trailing whitespace:
>> * pool-errorunknown
>> * badaccess
>> * timeouterror
>> * botpasswords-summary
>> * botpasswords-disabled
>> * botpasswords-no-central-id
>> * botpasswords-update-failed
>> * passwordreset-emailtext-ip
>> * passwordreset-emailtext-user
>> * changeemail-nochange
>> * blankarticle
>> * previewerrortext
>> * missing-revision
>> * confirmleave-warning
>> * difference-bad-new-revision
>> * search-rewritten
>> * linterror-misc-tidy-replacement-issues
>> * userrights-expiry-none
>> * right-viewsuppressed
>> * right-import
>> * action-viewsuppressed
>> * rcfilters-savedqueries-setdefault
>> * rcfilters-filtergroup-watchlistactivity
>> * rc-old-title
>> * http-timed-out
>> * http-curl-error
>> * pageswithprop-reverse
>> * mostlinkedtemplates
>> * badrevision
>> * allpagesfrom
>> * email-legend
>> * timezone-local
>> * mediastatistics-header-office
>> * special-characters-group-hebrew
>> * specialpage-securitylevel-not-allowed-title
>> * passwordpolicies-policy-passwordcannotmatchdefaults
>> * renameuser-linkoncontribs-text
>> * renameusersuppress
>> * renameuser-error-temp-user-reserved
>> * action-renameuser
>> * right-renameuser
>> 1 message directory checked.

Running "banana:codex" (banana) task
>> 1 message directory checked.

Running "banana:exif" (banana) task
>> 1 message directory checked.

Running "banana:preferences" (banana) task
>> The "se" translation has 5 translations with trailing whitespace:
>> * tog-enotifusertalkpages
>> * timezoneregion-america
>> * tog-previewonfirst
>> * prefs-changesrc
>> * prefs-changeswatchlist
>> 1 message directory checked.

Running "banana:api" (banana) task
>> 1 message directory checked.

Running "banana:rest" (banana) task
>> 1 message directory checked.

Running "banana:installer" (banana) task
>> The "frc" translation has 1 translation with trailing whitespace:
>> * config-page-complete
>> 1 message directory checked.

Running "banana:paramvalidator" (banana) task
>> 1 message directory checked.

Running "stylelint:resources" (stylelint) task
>> resources/src/mediawiki.action/mediawiki.action.view.filepage.less
>>   211:1  ⚠  Unexpected browser feature "prefers-color-scheme" is not supported by Firefox 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66, Chrome 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75, Safari 10,11,12,10.1,11.1, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features
>> 
>> resources/src/mediawiki.skinning/elements.less
>>   75:2  ⚠  Unexpected browser feature "flow-root" is not supported by Firefox 49,50,51,52, Chrome 49,50,51,52,53,54,55,56,57, Safari 10,11,12,10.1,11.1,12.1, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features
>> 
>> resources/src/mediawiki.special.block/components/ExpiryField.vue
>>   170:1  ⚠  Unexpected browser feature "flexbox-gap" is not supported by Edge 79,80,81,83, Firefox 49,50,51,52,53,54,55,56,57,58,59,60,61,62, Chrome 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,83, Safari 10,11,12,13,14,10.1,11.1,12.1,13.1, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4  plugin/no-unsupported-browser-features
>>   190:2  ⚠  Unexpected browser feature "flexbox-gap" is not supported by Edge 79,80,81,83, Firefox 49,50,51,52,53,54,55,56,57,58,59,60,61,62, Chrome 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,83, Safari 10,11,12,13,14,10.1,11.1,12.1,13.1, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4  plugin/no-unsupported-browser-features
>> 
>> ⚠ 4 problems (0 errors, 4 warnings)

⚠ 4 warnings

>> Linted 206 files without errors

Running "stylelint:config" (stylelint) task
>> Linted 1 files without errors

Done.

> doc
> jsdoc -c jsdoc.json


> jest
> jest --config tests/jest/jest.config.js


--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@wdio/cli": {
      "name": "@wdio/cli",
      "severity": "high",
      "isDirect": true,
      "via": [
        "webdriverio"
      ],
      "effects": [],
      "range": "7.16.5 - 8.40.5",
      "nodes": [
        "node_modules/@wdio/cli"
      ],
      "fixAvailable": {
        "name": "@wdio/cli",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    },
    "@wdio/local-runner": {
      "name": "@wdio/local-runner",
      "severity": "high",
      "isDirect": true,
      "via": [
        "@wdio/runner"
      ],
      "effects": [],
      "range": "7.16.5 - 8.40.5",
      "nodes": [
        "node_modules/@wdio/local-runner"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    },
    "@wdio/runner": {
      "name": "@wdio/runner",
      "severity": "high",
      "isDirect": false,
      "via": [
        "webdriverio"
      ],
      "effects": [
        "@wdio/local-runner"
      ],
      "range": "7.16.5 - 8.40.5",
      "nodes": [
        "node_modules/@wdio/runner"
      ],
      "fixAvailable": {
        "name": "@wdio/local-runner",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    },
    "body-parser": {
      "name": "body-parser",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1099520,
          "name": "body-parser",
          "dependency": "body-parser",
          "title": "body-parser vulnerable to denial of service when url encoding is enabled",
          "url": "https://github.com/advisories/GHSA-qwcr-r2fm-qrc7",
          "severity": "high",
          "cwe": [
            "CWE-405"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<1.20.3"
        }
      ],
      "effects": [],
      "range": "<1.20.3",
      "nodes": [
        "node_modules/body-parser"
      ],
      "fixAvailable": true
    },
    "devtools": {
      "name": "devtools",
      "severity": "high",
      "isDirect": false,
      "via": [
        "puppeteer-core"
      ],
      "effects": [],
      "range": ">=7.16.5",
      "nodes": [
        "node_modules/devtools"
      ],
      "fixAvailable": true
    },
    "engine.io": {
      "name": "engine.io",
      "severity": "high",
      "isDirect": false,
      "via": [
        "ws"
      ],
      "effects": [
        "socket.io"
      ],
      "range": "0.7.8 - 0.7.9 || 6.0.0 - 6.5.4",
      "nodes": [
        "node_modules/engine.io"
      ],
      "fixAvailable": true
    },
    "micromatch": {
      "name": "micromatch",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1098681,
          "name": "micromatch",
          "dependency": "micromatch",
          "title": "Regular Expression Denial of Service (ReDoS) in micromatch",
          "url": "https://github.com/advisories/GHSA-952p-6rrq-rcjv",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<4.0.8"
        }
      ],
      "effects": [],
      "range": "<4.0.8",
      "nodes": [
        "node_modules/micromatch"
      ],
      "fixAvailable": true
    },
    "mwbot": {
      "name": "mwbot",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "request"
      ],
      "effects": [
        "wdio-mediawiki"
      ],
      "range": ">=0.1.6",
      "nodes": [
        "node_modules/mwbot"
      ],
      "fixAvailable": false
    },
    "puppeteer-core": {
      "name": "puppeteer-core",
      "severity": "high",
      "isDirect": false,
      "via": [
        "ws"
      ],
      "effects": [
        "devtools",
        "webdriverio"
      ],
      "range": "11.0.0 - 22.11.1",
      "nodes": [
        "node_modules/puppeteer-core"
      ],
      "fixAvailable": {
        "name": "@wdio/cli",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    },
    "request": {
      "name": "request",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1096727,
          "name": "request",
          "dependency": "request",
          "title": "Server-Side Request Forgery in Request",
          "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
          "severity": "moderate",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 6.1,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
          },
          "range": "<=2.88.2"
        },
        "tough-cookie"
      ],
      "effects": [
        "mwbot"
      ],
      "range": "*",
      "nodes": [
        "node_modules/request"
      ],
      "fixAvailable": false
    },
    "socket.io": {
      "name": "socket.io",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098556,
          "name": "socket.io",
          "dependency": "socket.io",
          "title": "socket.io has an unhandled 'error' event",
          "url": "https://github.com/advisories/GHSA-25hc-qcg6-38wj",
          "severity": "high",
          "cwe": [
            "CWE-20",
            "CWE-754"
          ],
          "cvss": {
            "score": 7.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L"
          },
          "range": ">=3.0.0 <4.6.2"
        },
        "engine.io"
      ],
      "effects": [],
      "range": "3.0.0 - 4.6.2",
      "nodes": [
        "node_modules/socket.io"
      ],
      "fixAvailable": true
    },
    "socket.io-adapter": {
      "name": "socket.io-adapter",
      "severity": "high",
      "isDirect": false,
      "via": [
        "ws"
      ],
      "effects": [],
      "range": "2.5.2 - 2.5.4",
      "nodes": [
        "node_modules/socket.io-adapter"
      ],
      "fixAvailable": true
    },
    "tough-cookie": {
      "name": "tough-cookie",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1097682,
          "name": "tough-cookie",
          "dependency": "tough-cookie",
          "title": "tough-cookie Prototype Pollution vulnerability",
          "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
          "severity": "moderate",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
          },
          "range": "<4.1.3"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<4.1.3",
      "nodes": [
        "node_modules/tough-cookie"
      ],
      "fixAvailable": false
    },
    "wdio-mediawiki": {
      "name": "wdio-mediawiki",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "mwbot"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/wdio-mediawiki"
      ],
      "fixAvailable": false
    },
    "webdriverio": {
      "name": "webdriverio",
      "severity": "high",
      "isDirect": false,
      "via": [
        "devtools",
        "puppeteer-core"
      ],
      "effects": [
        "@wdio/cli",
        "@wdio/runner"
      ],
      "range": "7.16.5 - 8.40.5",
      "nodes": [
        "node_modules/webdriverio"
      ],
      "fixAvailable": {
        "name": "@wdio/cli",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    },
    "ws": {
      "name": "ws",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098392,
          "name": "ws",
          "dependency": "ws",
          "title": "ws affected by a DoS when handling a request with many HTTP headers",
          "url": "https://github.com/advisories/GHSA-3h5v-q93c-6h6q",
          "severity": "high",
          "cwe": [
            "CWE-476"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": ">=8.0.0 <8.17.1"
        }
      ],
      "effects": [
        "engine.io",
        "puppeteer-core",
        "socket.io-adapter"
      ],
      "range": "8.0.0 - 8.17.0",
      "nodes": [
        "node_modules/puppeteer-core/node_modules/ws",
        "node_modules/ws"
      ],
      "fixAvailable": {
        "name": "@wdio/cli",
        "version": "9.1.1",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 5,
      "high": 11,
      "critical": 0,
      "total": 16
    },
    "dependencies": {
      "prod": 1,
      "dev": 1445,
      "optional": 4,
      "peer": 2,
      "peerOptional": 0,
      "total": 1445
    }
  }
}

--- end ---
Attempting to npm audit fix
$ /usr/bin/npm audit fix --dry-run --only=dev --json
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
--- stdout ---
{
  "added": 15,
  "removed": 1,
  "changed": 15,
  "audited": 1459,
  "funding": 166,
  "audit": {
    "auditReportVersion": 2,
    "vulnerabilities": {
      "@wdio/cli": {
        "name": "@wdio/cli",
        "severity": "high",
        "isDirect": true,
        "via": [
          "webdriverio"
        ],
        "effects": [],
        "range": "7.16.5 - 8.40.5",
        "nodes": [
          "node_modules/@wdio/cli"
        ],
        "fixAvailable": {
          "name": "@wdio/cli",
          "version": "9.1.1",
          "isSemVerMajor": true
        }
      },
      "@wdio/local-runner": {
        "name": "@wdio/local-runner",
        "severity": "high",
        "isDirect": true,
        "via": [
          "@wdio/runner"
        ],
        "effects": [],
        "range": "7.16.5 - 8.40.5",
        "nodes": [
          "node_modules/@wdio/local-runner"
        ],
        "fixAvailable": {
          "name": "@wdio/local-runner",
          "version": "9.1.1",
          "isSemVerMajor": true
        }
      },
      "@wdio/runner": {
        "name": "@wdio/runner",
        "severity": "high",
        "isDirect": false,
        "via": [
          "webdriverio"
        ],
        "effects": [
          "@wdio/local-runner"
        ],
        "range": "7.16.5 - 8.40.5",
        "nodes": [
          "node_modules/@wdio/runner"
        ],
        "fixAvailable": {
          "name": "@wdio/local-runner",
          "version": "9.1.1",
          "isSemVerMajor": true
        }
      },
      "body-parser": {
        "name": "body-parser",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1099520,
            "name": "body-parser",
            "dependency": "body-parser",
            "title": "body-parser vulnerable to denial of service when url encoding is enabled",
            "url": "https://github.com/advisories/GHSA-qwcr-r2fm-qrc7",
            "severity": "high",
            "cwe": [
              "CWE-405"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<1.20.3"
          }
        ],
        "effects": [],
        "range": "<1.20.3",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      },
      "devtools": {
        "name": "devtools",
        "severity": "high",
        "isDirect": false,
        "via": [
          "puppeteer-core"
        ],
        "effects": [],
        "range": ">=7.16.5",
        "nodes": [
          "node_modules/devtools"
        ],
        "fixAvailable": true
      },
      "engine.io": {
        "name": "engine.io",
        "severity": "high",
        "isDirect": false,
        "via": [
          "ws"
        ],
        "effects": [
          "socket.io"
        ],
        "range": "0.7.8 - 0.7.9 || 6.0.0 - 6.5.4",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      },
      "micromatch": {
        "name": "micromatch",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1098681,
            "name": "micromatch",
            "dependency": "micromatch",
            "title": "Regular Expression Denial of Service (ReDoS) in micromatch",
            "url": "https://github.com/advisories/GHSA-952p-6rrq-rcjv",
            "severity": "moderate",
            "cwe": [
              "CWE-1333"
            ],
            "cvss": {
              "score": 5.3,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
            },
            "range": "<4.0.8"
          }
        ],
        "effects": [],
        "range": "<4.0.8",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      },
      "mwbot": {
        "name": "mwbot",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "request"
        ],
        "effects": [
          "wdio-mediawiki"
        ],
        "range": ">=0.1.6",
        "nodes": [
          "node_modules/mwbot"
        ],
        "fixAvailable": false
      },
      "puppeteer-core": {
        "name": "puppeteer-core",
        "severity": "high",
        "isDirect": false,
        "via": [
          "ws"
        ],
        "effects": [
          "devtools",
          "webdriverio"
        ],
        "range": "11.0.0 - 22.11.1",
        "nodes": [
          "node_modules/puppeteer-core"
        ],
        "fixAvailable": {
          "name": "@wdio/cli",
          "version": "9.1.1",
          "isSemVerMajor": true
        }
      },
      "request": {
        "name": "request",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1096727,
            "name": "request",
            "dependency": "request",
            "title": "Server-Side Request Forgery in Request",
            "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
            "severity": "moderate",
            "cwe": [
              "CWE-918"
            ],
            "cvss": {
              "score": 6.1,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
            },
            "range": "<=2.88.2"
          },
          "tough-cookie"
        ],
        "effects": [
          "mwbot"
        ],
        "range": "*",
        "nodes": [
          "node_modules/request"
        ],
        "fixAvailable": false
      },
      "socket.io": {
        "name": "socket.io",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1098556,
            "name": "socket.io",
            "dependency": "socket.io",
            "title": "socket.io has an unhandled 'error' event",
            "url": "https://github.com/advisories/GHSA-25hc-qcg6-38wj",
            "severity": "high",
            "cwe": [
              "CWE-20",
              "CWE-754"
            ],
            "cvss": {
              "score": 7.3,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L"
            },
            "range": ">=3.0.0 <4.6.2"
          },
          "engine.io"
        ],
        "effects": [],
        "range": "3.0.0 - 4.6.2",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      },
      "socket.io-adapter": {
        "name": "socket.io-adapter",
        "severity": "high",
        "isDirect": false,
        "via": [
          "ws"
        ],
        "effects": [],
        "range": "2.5.2 - 2.5.4",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      },
      "tough-cookie": {
        "name": "tough-cookie",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1097682,
            "name": "tough-cookie",
            "dependency": "tough-cookie",
            "title": "tough-cookie Prototype Pollution vulnerability",
            "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
            "severity": "moderate",
            "cwe": [
              "CWE-1321"
            ],
            "cvss": {
              "score": 6.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
            },
            "range": "<4.1.3"
          }
        ],
        "effects": [
          "request"
        ],
        "range": "<4.1.3",
        "nodes": [
          "node_modules/tough-cookie"
        ],
        "fixAvailable": false
      },
      "wdio-mediawiki": {
        "name": "wdio-mediawiki",
        "severity": "moderate",
        "isDirect": true,
        "via": [
          "mwbot"
        ],
        "effects": [],
        "range": "*",
        "nodes": [
          "node_modules/wdio-mediawiki"
        ],
        "fixAvailable": false
      },
      "webdriverio": {
        "name": "webdriverio",
        "severity": "high",
        "isDirect": false,
        "via": [
          "devtools",
          "puppeteer-core"
        ],
        "effects": [
          "@wdio/cli",
          "@wdio/runner"
        ],
        "range": "7.16.5 - 8.40.5",
        "nodes": [
          "node_modules/webdriverio"
        ],
        "fixAvailable": {
          "name": "@wdio/cli",
          "version": "9.1.1",
          "isSemVerMajor": true
        }
      },
      "ws": {
        "name": "ws",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1098392,
            "name": "ws",
            "dependency": "ws",
            "title": "ws affected by a DoS when handling a request with many HTTP headers",
            "url": "https://github.com/advisories/GHSA-3h5v-q93c-6h6q",
            "severity": "high",
            "cwe": [
              "CWE-476"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": ">=8.0.0 <8.17.1"
          }
        ],
        "effects": [
          "engine.io",
          "puppeteer-core",
          "socket.io-adapter"
        ],
        "range": "8.0.0 - 8.17.0",
        "nodes": [
          "",
          "node_modules/puppeteer-core/node_modules/ws"
        ],
        "fixAvailable": {
          "name": "@wdio/cli",
          "version": "9.1.1",
          "isSemVerMajor": true
        }
      }
    },
    "metadata": {
      "vulnerabilities": {
        "info": 0,
        "low": 0,
        "moderate": 5,
        "high": 11,
        "critical": 0,
        "total": 16
      },
      "dependencies": {
        "prod": 1,
        "dev": 1458,
        "optional": 4,
        "peer": 2,
        "peerOptional": 0,
        "total": 1458
      }
    }
  }
}

--- end ---
{"added": 15, "removed": 1, "changed": 15, "audited": 1459, "funding": 166, "audit": {"auditReportVersion": 2, "vulnerabilities": {"@wdio/cli": {"name": "@wdio/cli", "severity": "high", "isDirect": true, "via": ["webdriverio"], "effects": [], "range": "7.16.5 - 8.40.5", "nodes": ["node_modules/@wdio/cli"], "fixAvailable": {"name": "@wdio/cli", "version": "9.1.1", "isSemVerMajor": true}}, "@wdio/local-runner": {"name": "@wdio/local-runner", "severity": "high", "isDirect": true, "via": ["@wdio/runner"], "effects": [], "range": "7.16.5 - 8.40.5", "nodes": ["node_modules/@wdio/local-runner"], "fixAvailable": {"name": "@wdio/local-runner", "version": "9.1.1", "isSemVerMajor": true}}, "@wdio/runner": {"name": "@wdio/runner", "severity": "high", "isDirect": false, "via": ["webdriverio"], "effects": ["@wdio/local-runner"], "range": "7.16.5 - 8.40.5", "nodes": ["node_modules/@wdio/runner"], "fixAvailable": {"name": "@wdio/local-runner", "version": "9.1.1", "isSemVerMajor": true}}, "body-parser": {"name": "body-parser", "severity": "high", "isDirect": false, "via": [{"source": 1099520, "name": "body-parser", "dependency": "body-parser", "title": "body-parser vulnerable to denial of service when url encoding is enabled", "url": "https://github.com/advisories/GHSA-qwcr-r2fm-qrc7", "severity": "high", "cwe": ["CWE-405"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<1.20.3"}], "effects": [], "range": "<1.20.3", "nodes": [""], "fixAvailable": true}, "devtools": {"name": "devtools", "severity": "high", "isDirect": false, "via": ["puppeteer-core"], "effects": [], "range": ">=7.16.5", "nodes": ["node_modules/devtools"], "fixAvailable": true}, "engine.io": {"name": "engine.io", "severity": "high", "isDirect": false, "via": ["ws"], "effects": ["socket.io"], "range": "0.7.8 - 0.7.9 || 6.0.0 - 6.5.4", "nodes": [""], "fixAvailable": true}, "micromatch": {"name": "micromatch", "severity": "moderate", "isDirect": false, "via": [{"source": 1098681, "name": "micromatch", "dependency": "micromatch", "title": "Regular Expression Denial of Service (ReDoS) in micromatch", "url": "https://github.com/advisories/GHSA-952p-6rrq-rcjv", "severity": "moderate", "cwe": ["CWE-1333"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"}, "range": "<4.0.8"}], "effects": [], "range": "<4.0.8", "nodes": [""], "fixAvailable": true}, "mwbot": {"name": "mwbot", "severity": "moderate", "isDirect": false, "via": ["request"], "effects": ["wdio-mediawiki"], "range": ">=0.1.6", "nodes": ["node_modules/mwbot"], "fixAvailable": false}, "puppeteer-core": {"name": "puppeteer-core", "severity": "high", "isDirect": false, "via": ["ws"], "effects": ["devtools", "webdriverio"], "range": "11.0.0 - 22.11.1", "nodes": ["node_modules/puppeteer-core"], "fixAvailable": {"name": "@wdio/cli", "version": "9.1.1", "isSemVerMajor": true}}, "request": {"name": "request", "severity": "moderate", "isDirect": false, "via": [{"source": 1096727, "name": "request", "dependency": "request", "title": "Server-Side Request Forgery in Request", "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6", "severity": "moderate", "cwe": ["CWE-918"], "cvss": {"score": 6.1, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"}, "range": "<=2.88.2"}, "tough-cookie"], "effects": ["mwbot"], "range": "*", "nodes": ["node_modules/request"], "fixAvailable": false}, "socket.io": {"name": "socket.io", "severity": "high", "isDirect": false, "via": [{"source": 1098556, "name": "socket.io", "dependency": "socket.io", "title": "socket.io has an unhandled 'error' event", "url": "https://github.com/advisories/GHSA-25hc-qcg6-38wj", "severity": "high", "cwe": ["CWE-20", "CWE-754"], "cvss": {"score": 7.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L"}, "range": ">=3.0.0 <4.6.2"}, "engine.io"], "effects": [], "range": "3.0.0 - 4.6.2", "nodes": [""], "fixAvailable": true}, "socket.io-adapter": {"name": "socket.io-adapter", "severity": "high", "isDirect": false, "via": ["ws"], "effects": [], "range": "2.5.2 - 2.5.4", "nodes": [""], "fixAvailable": true}, "tough-cookie": {"name": "tough-cookie", "severity": "moderate", "isDirect": false, "via": [{"source": 1097682, "name": "tough-cookie", "dependency": "tough-cookie", "title": "tough-cookie Prototype Pollution vulnerability", "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3", "severity": "moderate", "cwe": ["CWE-1321"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"}, "range": "<4.1.3"}], "effects": ["request"], "range": "<4.1.3", "nodes": ["node_modules/tough-cookie"], "fixAvailable": false}, "wdio-mediawiki": {"name": "wdio-mediawiki", "severity": "moderate", "isDirect": true, "via": ["mwbot"], "effects": [], "range": "*", "nodes": ["node_modules/wdio-mediawiki"], "fixAvailable": false}, "webdriverio": {"name": "webdriverio", "severity": "high", "isDirect": false, "via": ["devtools", "puppeteer-core"], "effects": ["@wdio/cli", "@wdio/runner"], "range": "7.16.5 - 8.40.5", "nodes": ["node_modules/webdriverio"], "fixAvailable": {"name": "@wdio/cli", "version": "9.1.1", "isSemVerMajor": true}}, "ws": {"name": "ws", "severity": "high", "isDirect": false, "via": [{"source": 1098392, "name": "ws", "dependency": "ws", "title": "ws affected by a DoS when handling a request with many HTTP headers", "url": "https://github.com/advisories/GHSA-3h5v-q93c-6h6q", "severity": "high", "cwe": ["CWE-476"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": ">=8.0.0 <8.17.1"}], "effects": ["engine.io", "puppeteer-core", "socket.io-adapter"], "range": "8.0.0 - 8.17.0", "nodes": ["", "node_modules/puppeteer-core/node_modules/ws"], "fixAvailable": {"name": "@wdio/cli", "version": "9.1.1", "isSemVerMajor": true}}}, "metadata": {"vulnerabilities": {"info": 0, "low": 0, "moderate": 5, "high": 11, "critical": 0, "total": 16}, "dependencies": {"prod": 1, "dev": 1458, "optional": 4, "peer": 2, "peerOptional": 0, "total": 1458}}}}
$ /usr/bin/npm audit fix --only=dev
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
--- stdout ---

added 14 packages, removed 1 package, changed 15 packages, and audited 1458 packages in 5s

166 packages are looking for funding
  run `npm fund` for details

# npm audit report

request  *
Severity: moderate
Server-Side Request Forgery in Request - https://github.com/advisories/GHSA-p8p7-x288-28g6
Depends on vulnerable versions of tough-cookie
No fix available
node_modules/request
  mwbot  >=0.1.6
  Depends on vulnerable versions of request
  node_modules/mwbot
    wdio-mediawiki  *
    Depends on vulnerable versions of mwbot
    node_modules/wdio-mediawiki

tough-cookie  <4.1.3
Severity: moderate
tough-cookie Prototype Pollution vulnerability - https://github.com/advisories/GHSA-72xf-g2v4-qvf3
No fix available
node_modules/tough-cookie

ws  8.0.0 - 8.17.0
Severity: high
ws affected by a DoS when handling a request with many HTTP headers - https://github.com/advisories/GHSA-3h5v-q93c-6h6q
fix available via `npm audit fix --force`
Will install @wdio/cli@9.1.1, which is a breaking change
node_modules/puppeteer-core/node_modules/ws
  puppeteer-core  11.0.0 - 22.11.1
  Depends on vulnerable versions of ws
  node_modules/puppeteer-core
    devtools  >=7.16.5
    Depends on vulnerable versions of puppeteer-core
    node_modules/devtools
    webdriverio  7.16.5 - 8.40.5
    Depends on vulnerable versions of devtools
    Depends on vulnerable versions of puppeteer-core
    node_modules/webdriverio
      @wdio/cli  7.16.5 - 8.40.5
      Depends on vulnerable versions of webdriverio
      node_modules/@wdio/cli
      @wdio/runner  7.16.5 - 8.40.5
      Depends on vulnerable versions of webdriverio
      node_modules/@wdio/runner
        @wdio/local-runner  7.16.5 - 8.40.5
        Depends on vulnerable versions of @wdio/runner
        node_modules/@wdio/local-runner

11 vulnerabilities (4 moderate, 7 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

--- end ---
Verifying that tests still pass
$ /usr/bin/npm ci
--- stderr ---
npm WARN deprecated @types/easy-table@1.2.0: This is a stub types definition. easy-table provides its own type definitions, so you do not need this installed.
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated date-format@0.0.2: 0.x is no longer supported. Please upgrade to 4.x or higher.
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated formidable@1.2.6: Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated superagent@6.1.0: Please upgrade to v7.0.2+ of superagent.  We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing.  See the releases tab for more information at <https://github.com/visionmedia/superagent/releases>. Thanks to @shadowgate15, @spence-s, and @niftylettuce. Superagent is sponsored by Forward Email at <https://forwardemail.net>.
--- stdout ---

added 1457 packages, and audited 1458 packages in 24s

166 packages are looking for funding
  run `npm fund` for details

11 vulnerabilities (4 moderate, 7 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS tests/jest/mediawiki.special.block/UserLookup.test.js
PASS tests/jest/mediawiki.special.block/SpecialBlock.test.js
  ● Console

    console.warn
      [Vue warn]: Component is missing template or render function. 
        at <TargetBlockLog target-user=null > 
        at <SpecialBlock ref="VTU_COMPONENT" > 
        at <VTUROOT>

      31 | 		} );
      32 | 		mockMwConfigGet();
    > 33 | 		let wrapper = mount( SpecialBlock );
         | 		              ^
      34 | 		expect( wrapper.find( 'button.cdx-button' ).text() ).toStrictEqual( 'ipbsubmit' );
      35 | 		mockMwConfigGet( {
      36 | 			blockAlreadyBlocked: true,

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:49:13)
      at finishComponentSetup (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7693:7)
      at handleSetupResult (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7632:3)
      at setupStatefulComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7601:7)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7533:36)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5861:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5554:7)
      at processFragment (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5770:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5280:9)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5971:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:181:19)
      at instance.update (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6095:16)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6105:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5873:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5971:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:181:19)
      at instance.update (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6095:16)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6105:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5873:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6616:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3930:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1477:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at Object.<anonymous> (tests/jest/mediawiki.special.block/SpecialBlock.test.js:33:17)

    console.warn
      [Vue warn]: Component is missing template or render function. 
        at <TargetBlockLog target-user="ExampleUser" > 
        at <SpecialBlock ref="VTU_COMPONENT" > 
        at <VTUROOT>

      37 | 			blockTargetUser: 'ExampleUser'
      38 | 		} );
    > 39 | 		wrapper = mount( SpecialBlock );
         | 		          ^
      40 | 		expect( wrapper.find( '.cdx-message__content' ).text() )
      41 | 			.toStrictEqual( 'ipb-needreblock:[ExampleUser]' );
      42 | 		expect( wrapper.find( 'button.cdx-button' ).text() ).toStrictEqual( 'ipb-change-block' );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:49:13)
      at finishComponentSetup (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7693:7)
      at handleSetupResult (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7632:3)
      at setupStatefulComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7601:7)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7533:36)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5861:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5554:7)
      at processFragment (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5770:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5280:9)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5971:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:181:19)
      at instance.update (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6095:16)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6105:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5873:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5971:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:181:19)
      at instance.update (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6095:16)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6105:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5873:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5827:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5306:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6616:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3930:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1477:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at Object.<anonymous> (tests/jest/mediawiki.special.block/SpecialBlock.test.js:39:13)


Test Suites: 2 passed, 2 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        2.827 s, estimated 3 s
Ran all test suites.
--- stdout ---

> test
> grunt lint && npm run doc && npm run jest

Running "eslint:all" (eslint) task

/src/repo/mw-config/config.js
  4:7   warning  '$label' is never reassigned. Use 'const' instead     prefer-const
  4:15  warning  'labelText' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/jquery.lengthLimit.js
  74:4  warning  '$el' is never reassigned. Use 'const' instead      prefer-const
  87:4  warning  'elLimit' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/jquery.tablesorter/jquery.tablesorter.js
    29:6  warning  'ts' is never reassigned. Use 'const' instead             prefer-const
    30:3  warning  'parsers' is never reassigned. Use 'const' instead        prefer-const
    94:7  warning  'l' is never reassigned. Use 'const' instead              prefer-const
    95:4  warning  'config' is never reassigned. Use 'const' instead         prefer-const
   103:4  warning  'needed' is never reassigned. Use 'const' instead         prefer-const
   190:7  warning  'totalRows' is never reassigned. Use 'const' instead      prefer-const
   191:4  warning  'config' is never reassigned. Use 'const' instead         prefer-const
   192:4  warning  'cachedParsers' is never reassigned. Use 'const' instead  prefer-const
   194:4  warning  'cache' is never reassigned. Use 'const' instead          prefer-const
   286:8  warning  '$tfoot' is never reassigned. Use 'const' instead         prefer-const
   319:7  warning  'config' is never reassigned. Use 'const' instead         prefer-const
   323:4  warning  '$tableRows' is never reassigned. Use 'const' instead     prefer-const
   720:7  warning  '$rows' is never reassigned. Use 'const' instead          prefer-const
   721:4  warning  'totalRows' is never reassigned. Use 'const' instead      prefer-const
   722:4  warning  'config' is never reassigned. Use 'const' instead         prefer-const
   723:4  warning  'columns' is never reassigned. Use 'const' instead        prefer-const
   850:6  warning  '$table' is never reassigned. Use 'const' instead         prefer-const
   912:6  warning  '$sortbottoms' is never reassigned. Use 'const' instead   prefer-const
   924:6  warning  '$sorttops' is never reassigned. Use 'const' instead      prefer-const
  1182:8  warning  'a' is never reassigned. Use 'const' instead              prefer-const

/src/repo/resources/src/jquery/jquery.makeCollapsible.js
  425:1  warning  Syntax error in namepath: ~'wikipage.collapsibleContent'  jsdoc/valid-types

/src/repo/resources/src/jquery/jquery.suggestions.js
  275:9  warning  'isRTL' is never reassigned. Use 'const' instead       prefer-const
  276:9  warning  '$region' is never reassigned. Use 'const' instead     prefer-const
  428:7  warning  'wasVisible' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/jquery/jquery.textSelection.js
  219:7  warning  'selTextArr' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.ForeignStructuredUpload.BookletLayout/BookletLayout.js
   63:7  warning  'isLocal' is never reassigned. Use 'const' instead   prefer-const
   64:7  warning  'fields' is never reassigned. Use 'const' instead    prefer-const
   65:7  warning  'msgs' is never reassigned. Use 'const' instead      prefer-const
  102:7  warning  '$labels' is never reassigned. Use 'const' instead   prefer-const
  155:4  warning  'layout' is never reassigned. Use 'const' instead    prefer-const
  176:3  warning  'fieldset' is never reassigned. Use 'const' instead  prefer-const
  281:3  warning  'fieldset' is never reassigned. Use 'const' instead  prefer-const
  395:4  warning  'deferred' is never reassigned. Use 'const' instead  prefer-const
  401:6  warning  'jpegmeta' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.ForeignStructuredUpload.BookletLayout/ForeignStructuredUpload.js
   44:4  warning  'upload' is never reassigned. Use 'const' instead     prefer-const
  231:3  warning  'namespace' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.ForeignUpload.js
  28:4  warning  'validTargets' is never reassigned. Use 'const' instead  prefer-const
  29:4  warning  'upload' is never reassigned. Use 'const' instead        prefer-const
  69:6  warning  'repos' is never reassigned. Use 'const' instead         prefer-const

/src/repo/resources/src/mediawiki.String.js
   97:4  warning  'oldVal' is never reassigned. Use 'const' instead      prefer-const
  121:3  warning  'matchesLen' is never reassigned. Use 'const' instead  prefer-const
  143:3  warning  'inpParts' is never reassigned. Use 'const' instead    prefer-const

/src/repo/resources/src/mediawiki.Upload.BookletLayout/BookletLayout.js
  322:5  warning  'name' is never reassigned. Use 'const' instead          prefer-const
  346:7  warning  'state' is never reassigned. Use 'const' instead         prefer-const
  347:4  warning  'stateDetails' is never reassigned. Use 'const' instead  prefer-const
  348:4  warning  'warnings' is never reassigned. Use 'const' instead      prefer-const
  349:4  warning  '$ul' is never reassigned. Use 'const' instead           prefer-const
  441:4  warning  'layout' is never reassigned. Use 'const' instead        prefer-const
  444:3  warning  'fieldset' is never reassigned. Use 'const' instead      prefer-const
  538:3  warning  'fieldset' is never reassigned. Use 'const' instead      prefer-const
  597:3  warning  'fieldset' is never reassigned. Use 'const' instead      prefer-const

/src/repo/resources/src/mediawiki.Upload.js
  63:2  warning  'UP' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.Uri/Uri.js
   36:2  warning  'parser' is never reassigned. Use 'const' instead      prefer-const
   48:2  warning  'properties' is never reassigned. Use 'const' instead  prefer-const
  162:5  warning  'hasOptions' is never reassigned. Use 'const' instead  prefer-const
  163:5  warning  'defaultUri' is never reassigned. Use 'const' instead  prefer-const
  322:6  warning  'uri' is never reassigned. Use 'const' instead         prefer-const
  323:6  warning  'hasOwn' is never reassigned. Use 'const' instead      prefer-const
  326:5  warning  'matches' is never reassigned. Use 'const' instead     prefer-const
  334:5  warning  'q' is never reassigned. Use 'const' instead           prefer-const

/src/repo/resources/src/mediawiki.action.edit/edit.js
  12:1  warning  Syntax error in namepath: ~'wikipage.editform'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js
   7:2  warning  'collapsibleLists' is never reassigned. Use 'const' instead  prefer-const
  25:2  warning  'handleOne' is never reassigned. Use 'const' instead         prefer-const

/src/repo/resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
  21:1  warning  Syntax error in namepath: ~'postEdit'               jsdoc/valid-types
  36:1  warning  Syntax error in namepath: ~'postEdit.afterRemoval'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.authenticationPopup/index.js
  38:1  warning  The type 'userinfo' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.base/errorLogger.js
   8:1  warning  Syntax error in namepath: ~'global.error'  jsdoc/valid-types
  22:1  warning  Syntax error in namepath: ~'error.caught'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.base/log.js
  14:1  warning  Found more than one @return declaration  jsdoc/require-returns
  14:1  warning  Found more than one @return declaration  jsdoc/require-returns-check

/src/repo/resources/src/mediawiki.base/mediawiki.base.js
  217:1  warning  The type 'mediawiki' is undefined  jsdoc/no-undefined-types
  243:1  warning  The type 'mediawiki' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.cldr/index.js
  23:11  warning  'pluralRuleParser' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.cookie/index.js
    3:5  warning  'config' is never reassigned. Use 'const' instead  prefer-const
   12:2  warning  'jar' is never reassigned. Use 'const' instead     prefer-const
   68:3  warning  'prefix' is never reassigned. Use 'const' instead  prefer-const
  115:3  warning  'result' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.cookie/jar.js
  16:6  warning  'config' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.debug/debug.js
    7:3  warning  'hovzer' is never reassigned. Use 'const' instead           prefer-const
   25:2  warning  'debug' is never reassigned. Use 'const' instead            prefer-const
   71:8  warning  'currentPaneId' is never reassigned. Use 'const' instead    prefer-const
   72:5  warning  'requestedPaneId' is never reassigned. Use 'const' instead  prefer-const
   73:5  warning  '$currentPane' is never reassigned. Use 'const' instead     prefer-const
   74:5  warning  '$requestedPane' is never reassigned. Use 'const' instead   prefer-const
  118:4  warning  '$container' is never reassigned. Use 'const' instead       prefer-const
  126:4  warning  '$bits' is never reassigned. Use 'const' instead            prefer-const
  222:4  warning  'panes' is never reassigned. Use 'const' instead            prefer-const
  251:4  warning  '$table' is never reassigned. Use 'const' instead           prefer-const
  252:4  warning  'length' is never reassigned. Use 'const' instead           prefer-const
  258:4  warning  'entryTypeText' is never reassigned. Use 'const' instead    prefer-const
  300:4  warning  '$table' is never reassigned. Use 'const' instead           prefer-const
  301:4  warning  'length' is never reassigned. Use 'const' instead           prefer-const
  331:4  warning  '$list' is never reassigned. Use 'const' instead            prefer-const
  332:4  warning  'length' is never reassigned. Use 'const' instead           prefer-const
  354:5  warning  '$unit' is never reassigned. Use 'const' instead            prefer-const
  356:5  warning  '$table' is never reassigned. Use 'const' instead           prefer-const
  389:4  warning  '$table' is never reassigned. Use 'const' instead           prefer-const
  390:4  warning  'length' is never reassigned. Use 'const' instead           prefer-const

/src/repo/resources/src/mediawiki.debug/jquery.footHovzer.js
   5:15  warning  'footHovzer' is never reassigned. Use 'const' instead  prefer-const
  48:4   warning  '$body' is never reassigned. Use 'const' instead       prefer-const

/src/repo/resources/src/mediawiki.deflate/mw.deflate.js
  39:22  warning  'l' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.diff/inlineFormatToggle.js
    7:3  warning  'url' is never reassigned. Use 'const' instead                       prefer-const
    8:3  warning  'api' is never reassigned. Use 'const' instead                       prefer-const
    9:3  warning  '$inlineLegendContainer' is never reassigned. Use 'const' instead    prefer-const
   10:3  warning  'inlineToggleSwitchLayout' is never reassigned. Use 'const' instead  prefer-const
   11:3  warning  'inlineToggleSwitch' is never reassigned. Use 'const' instead        prefer-const
   18:2  warning  '$wikitextDiffContainer' is never reassigned. Use 'const' instead    prefer-const
   19:2  warning  '$wikitextDiffHeader' is never reassigned. Use 'const' instead       prefer-const
  117:4  warning  'diffType' is never reassigned. Use 'const' instead                  prefer-const
  118:4  warning  'oldRevId' is never reassigned. Use 'const' instead                  prefer-const
  119:4  warning  'newRevId' is never reassigned. Use 'const' instead                  prefer-const
  128:3  warning  'apiParams' is never reassigned. Use 'const' instead                 prefer-const
  151:1  warning  Syntax error in namepath: ~'wikipage.diff.wikitextDiffBody'          jsdoc/valid-types
  163:1  warning  Syntax error in namepath: ~'wikipage.diff.diffTypeSwitch'            jsdoc/valid-types

/src/repo/resources/src/mediawiki.editRecovery/edit.js
  177:1  warning  Syntax error in namepath: ~'editRecovery.loadEnd'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.experiments.js
  77:8  warning  'buckets' is never reassigned. Use 'const' instead  prefer-const
  92:4  warning  'hash' is never reassigned. Use 'const' instead     prefer-const
  93:4  warning  'max' is never reassigned. Use 'const' instead      prefer-const

/src/repo/resources/src/mediawiki.feedback/FeedbackDialog.js
   75:2  warning  'feedbackSubjectFieldLayout' is never reassigned. Use 'const' instead  prefer-const
   78:2  warning  'feedbackMessageFieldLayout' is never reassigned. Use 'const' instead  prefer-const
   81:2  warning  'feedbackFieldsetLayout' is never reassigned. Use 'const' instead      prefer-const
   95:2  warning  'termsOfUseLabel' is never reassigned. Use 'const' instead             prefer-const
  168:5  warning  'settings' is never reassigned. Use 'const' instead                    prefer-const
  189:4  warning  '$link' is never reassigned. Use 'const' instead                       prefer-const
  230:8  warning  'fb' is never reassigned. Use 'const' instead                          prefer-const
  231:5  warning  'userAgentMessage' is never reassigned. Use 'const' instead            prefer-const
  237:5  warning  'subject' is never reassigned. Use 'const' instead                     prefer-const

/src/repo/resources/src/mediawiki.feedback/feedback.js
  117:3  warning  'dialogConfig' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.htmlform/cond-state.js
  48:1  warning  Found more than one @return declaration  jsdoc/require-returns-check

/src/repo/resources/src/mediawiki.htmlform/htmlform.js
  5:1  warning  Syntax error in namepath: ~'htmlform.enhance'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.htmlform/selectandother.js
  17:5  warning  '$this' is never reassigned. Use 'const' instead        prefer-const
  18:5  warning  '$widget' is never reassigned. Use 'const' instead      prefer-const
  20:4  warning  '$reasonList' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.htmlform/selectorother.js
  38:7  warning  '$select' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.inspect.js
   42:4   warning  'units' is never reassigned. Use 'const' instead    prefer-const
   61:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
   91:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  112:2   warning  Found more than one @return declaration             jsdoc/require-returns
  112:2   warning  Found more than one @return declaration             jsdoc/require-returns-check
  121:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  152:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  164:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  175:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  203:1   warning  The type 'mediawiki' is undefined                   jsdoc/no-undefined-types
  274:21  warning  'module' is never reassigned. Use 'const' instead   prefer-const
  283:5   warning  'stats' is never reassigned. Use 'const' instead    prefer-const
  304:13  warning  'stats' is never reassigned. Use 'const' instead    prefer-const
  332:4   warning  'modules' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.jqueryMsg/mediawiki.jqueryMsg.js
   142:1   warning  Found more than one @return declaration                                      jsdoc/require-returns
   142:1   warning  Found more than one @return declaration                                      jsdoc/require-returns-check
   349:84  warning  'colon' is never reassigned. Use 'const' instead                             prefer-const
   350:4   warning  'templateContents' is never reassigned. Use 'const' instead                  prefer-const
   351:4   warning  'nonWhitespaceExpression' is never reassigned. Use 'const' instead           prefer-const
   351:29  warning  'paramExpression' is never reassigned. Use 'const' instead                   prefer-const
   351:46  warning  'expression' is never reassigned. Use 'const' instead                        prefer-const
   352:4   warning  'settings' is never reassigned. Use 'const' instead                          prefer-const
   392:5   warning  'originalPos' is never reassigned. Use 'const' instead                       prefer-const
   393:5   warning  'result' is never reassigned. Use 'const' instead                            prefer-const
   416:9   warning  'originalPos' is never reassigned. Use 'const' instead                       prefer-const
   417:6   warning  'result' is never reassigned. Use 'const' instead                            prefer-const
   486:3   warning  'regularLiteral' is never reassigned. Use 'const' instead                    prefer-const
   487:3   warning  'regularLiteralWithoutBar' is never reassigned. Use 'const' instead          prefer-const
   488:3   warning  'regularLiteralWithoutSpace' is never reassigned. Use 'const' instead        prefer-const
   491:3   warning  'backslash' is never reassigned. Use 'const' instead                         prefer-const
   492:3   warning  'anyCharacter' is never reassigned. Use 'const' instead                      prefer-const
   500:3   warning  'escapedOrLiteralWithoutSpace' is never reassigned. Use 'const' instead      prefer-const
   504:3   warning  'escapedOrLiteralWithoutBar' is never reassigned. Use 'const' instead        prefer-const
   508:3   warning  'escapedOrRegularLiteral' is never reassigned. Use 'const' instead           prefer-const
   529:3   warning  'asciiAlphabetLiteral' is never reassigned. Use 'const' instead              prefer-const
   531:3   warning  'whitespace' is never reassigned. Use 'const' instead                        prefer-const
   533:3   warning  'dollar' is never reassigned. Use 'const' instead                            prefer-const
   534:3   warning  'digits' is never reassigned. Use 'const' instead                            prefer-const
   545:3   warning  'openExtlink' is never reassigned. Use 'const' instead                       prefer-const
   546:3   warning  'closeExtlink' is never reassigned. Use 'const' instead                      prefer-const
   572:3   warning  'pipe' is never reassigned. Use 'const' instead                              prefer-const
   574:3   warning  'openTemplate' is never reassigned. Use 'const' instead                      prefer-const
   575:3   warning  'closeTemplate' is never reassigned. Use 'const' instead                     prefer-const
   673:3   warning  'wikilinkContents' is never reassigned. Use 'const' instead                  prefer-const
   678:3   warning  'openWikilink' is never reassigned. Use 'const' instead                      prefer-const
   679:3   warning  'closeWikilink' is never reassigned. Use 'const' instead                     prefer-const
   690:3   warning  'doubleQuote' is never reassigned. Use 'const' instead                       prefer-const
   691:3   warning  'htmlDoubleQuoteAttributeValue' is never reassigned. Use 'const' instead     prefer-const
   701:3   warning  'singleQuote' is never reassigned. Use 'const' instead                       prefer-const
   702:3   warning  'htmlSingleQuoteAttributeValue' is never reassigned. Use 'const' instead     prefer-const
   712:3   warning  'htmlAttributeEquals' is never reassigned. Use 'const' instead               prefer-const
   767:3   warning  'openHtmlStartTag' is never reassigned. Use 'const' instead                  prefer-const
   768:3   warning  'optionalForwardSlash' is never reassigned. Use 'const' instead              prefer-const
   769:3   warning  'openHtmlEndTag' is never reassigned. Use 'const' instead                    prefer-const
   770:3   warning  'closeHtmlTag' is never reassigned. Use 'const' instead                      prefer-const
   871:3   warning  'regularLiteralWithSquareBrackets' is never reassigned. Use 'const' instead  prefer-const
   878:3   warning  'curlyBraceTransformExpression' is never reassigned. Use 'const' instead     prefer-const
   902:3   warning  'res' is never reassigned. Use 'const' instead                               prefer-const
  1148:15  warning  'mapping' is never reassigned. Use 'const' instead                           prefer-const
  1184:4   warning  'arg' is never reassigned. Use 'const' instead                               prefer-const
  1185:4   warning  'contents' is never reassigned. Use 'const' instead                          prefer-const
  1232:4   warning  'explicitPluralForms' is never reassigned. Use 'const' instead               prefer-const
  1285:4   warning  'forms' is never reassigned. Use 'const' instead                             prefer-const

/src/repo/resources/src/mediawiki.language.months/months.js
  44:1  warning  The type 'Months' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.language/languages/fi.js
   9:2  warning  'grammarForms' is never reassigned. Use 'const' instead  prefer-const
  16:2  warning  'origWord' is never reassigned. Use 'const' instead      prefer-const

/src/repo/resources/src/mediawiki.language/languages/os.js
  7:6  warning  'grammarForms' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.language/mediawiki.language.js
   24:4  warning  'pluralRules' is never reassigned. Use 'const' instead      prefer-const
   90:4  warning  'userLanguage' is never reassigned. Use 'const' instead     prefer-const
   92:4  warning  'forms' is never reassigned. Use 'const' instead            prefer-const
   97:4  warning  'transformations' is never reassigned. Use 'const' instead  prefer-const
  169:4  warning  'bcp47Map' is never reassigned. Use 'const' instead         prefer-const
  174:4  warning  'segments' is never reassigned. Use 'const' instead         prefer-const
  175:4  warning  'formatted' is never reassigned. Use 'const' instead        prefer-const

/src/repo/resources/src/mediawiki.language/mediawiki.language.numbers.js
   29:3   warning  'out' is never reassigned. Use 'const' instead                      prefer-const
   30:3   warning  'count' is never reassigned. Use 'const' instead                    prefer-const
   31:3   warning  'padStr' is never reassigned. Use 'const' instead                   prefer-const
   59:4   warning  'patternParts' is never reassigned. Use 'const' instead             prefer-const
   60:4   warning  'maxPlaces' is never reassigned. Use 'const' instead                prefer-const
   61:4   warning  'valueParts' is never reassigned. Use 'const' instead               prefer-const
   62:4   warning  'fractional' is never reassigned. Use 'const' instead               prefer-const
   65:4   warning  'pieces' is never reassigned. Use 'const' instead                   prefer-const
   95:3   warning  'patternDigits' is never reassigned. Use 'const' instead            prefer-const
  158:4   warning  'transformTable' is never reassigned. Use 'const' instead           prefer-const
  159:4   warning  'group' is never reassigned. Use 'const' instead                    prefer-const
  161:4   warning  'numberPatternRE' is never reassigned. Use 'const' instead          prefer-const
  162:4   warning  'decimal' is never reassigned. Use 'const' instead                  prefer-const
  163:4   warning  'patternList' is never reassigned. Use 'const' instead              prefer-const
  164:4   warning  'positivePattern' is never reassigned. Use 'const' instead          prefer-const
  167:3   warning  'numberPattern' is never reassigned. Use 'const' instead            prefer-const
  189:22  warning  'flipped' is never reassigned. Use 'const' instead                  prefer-const
  225:4   warning  'digitTransformTable' is never reassigned. Use 'const' instead      prefer-const
  226:4   warning  'separatorTransformTable' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.messagePoster/WikitextMessagePoster.js
  41:3  warning  'additionalParams' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.messagePoster/factory.js
   98:22  warning  'page' is never reassigned. Use 'const' instead          prefer-const
  102:4   warning  'contentModel' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.misc-authed-curate/patrol.js
  11:4  warning  'api' is never reassigned. Use 'const' instead       prefer-const
  17:3  warning  '$spinner' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.misc-authed-ooui/special.changecredentials.js
  10:5  warning  'self' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.misc-authed-ooui/special.undelete.js
  11:7  warning  '$widget' is never reassigned. Use 'const' instead    prefer-const
  21:3  warning  'wpComment' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.notification.convertmessagebox.js
  13:1  warning  Syntax error in namepath: (require("mediawiki.notification.convertmessagebox"))  jsdoc/valid-types

/src/repo/resources/src/mediawiki.notification/notification.js
    4:6  warning  'notification' is never reassigned. Use 'const' instead          prefer-const
   10:3  warning  'preReadyNotifQueue' is never reassigned. Use 'const' instead    prefer-const
   28:3  warning  '$notification' is never reassigned. Use 'const' instead         prefer-const
   72:3  warning  '$notificationContent' is never reassigned. Use 'const' instead  prefer-const
  137:3  warning  'options' is never reassigned. Use 'const' instead               prefer-const
  138:3  warning  '$notification' is never reassigned. Use 'const' instead         prefer-const
  182:3  warning  'autohideCount' is never reassigned. Use 'const' instead         prefer-const
  428:4  warning  'notif' is never reassigned. Use 'const' instead                 prefer-const

/src/repo/resources/src/mediawiki.page.gallery.js
   13:3  warning  'isTouchScreen' is never reassigned. Use 'const' instead  prefer-const
   25:4  warning  'rows' is never reassigned. Use 'const' instead           prefer-const
   26:4  warning  '$gallery' is never reassigned. Use 'const' instead       prefer-const
   31:5  warning  'top' is never reassigned. Use 'const' instead            prefer-const
   32:5  warning  '$this' is never reassigned. Use 'const' instead          prefer-const
   39:4  warning  '$imageDiv' is never reassigned. Use 'const' instead      prefer-const
   40:4  warning  '$img' is never reassigned. Use 'const' instead           prefer-const
   60:4  warning  'captionWidth' is never reassigned. Use 'const' instead   prefer-const
   61:4  warning  'outerWidth' is never reassigned. Use 'const' instead     prefer-const
  226:8  warning  'imgWidth' is never reassigned. Use 'const' instead       prefer-const
  227:5  warning  'imgHeight' is never reassigned. Use 'const' instead      prefer-const
  228:5  warning  'width' is never reassigned. Use 'const' instead          prefer-const
  229:5  warning  'captionWidth' is never reassigned. Use 'const' instead   prefer-const
  231:5  warning  '$outerDiv' is never reassigned. Use 'const' instead      prefer-const
  232:5  warning  '$imageDiv' is never reassigned. Use 'const' instead      prefer-const
  241:4  warning  '$imageElm' is never reassigned. Use 'const' instead      prefer-const

/src/repo/resources/src/mediawiki.page.gallery.slideshow.js
  140:3   warning  'prevButton' is never reassigned. Use 'const' instead         prefer-const
  145:3   warning  'nextButton' is never reassigned. Use 'const' instead         prefer-const
  150:3   warning  'toggleButton' is never reassigned. Use 'const' instead       prefer-const
  156:3   warning  'interfaceElements' is never reassigned. Use 'const' instead  prefer-const
  172:3   warning  'carouselStack' is never reassigned. Use 'const' instead      prefer-const
  273:4   warning  '$imageLi' is never reassigned. Use 'const' instead           prefer-const
  274:4   warning  '$caption' is never reassigned. Use 'const' instead           prefer-const
  313:3   warning  '$thumbnail' is never reassigned. Use 'const' instead         prefer-const
  344:13  warning  'd' is never reassigned. Use 'const' instead                  prefer-const
  345:4   warning  'img' is never reassigned. Use 'const' instead                prefer-const
  365:4   warning  'imageSrc' is never reassigned. Use 'const' instead           prefer-const

/src/repo/resources/src/mediawiki.page.image.pagination.js
    7:3  warning  'cache' is never reassigned. Use 'const' instead  prefer-const
  101:4  warning  'page' is never reassigned. Use 'const' instead   prefer-const
  102:4  warning  'url' is never reassigned. Use 'const' instead    prefer-const

/src/repo/resources/src/mediawiki.page.preview.js
  406:1  warning  Syntax error in namepath: ~'wikipage.tableOfContents'    jsdoc/valid-types
  762:3  warning  'parseRequest' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.page.ready/ready.js
   96:1  warning  Syntax error in namepath: ~'wikipage.indicators'  jsdoc/valid-types
  116:1  warning  Syntax error in namepath: ~'wikipage.content'     jsdoc/valid-types
  137:1  warning  Syntax error in namepath: ~'wikipage.categories'  jsdoc/valid-types
  153:1  warning  Syntax error in namepath: ~'wikipage.diff'        jsdoc/valid-types
  184:1  warning  Syntax error in namepath: ~'skin.logout'          jsdoc/valid-types

/src/repo/resources/src/mediawiki.page.watch.ajax/watch-ajax.js
  128:1  warning  Syntax error in namepath: ~'wikipage.watchlistChange'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.rcfilters/Controller.js
  331:1  warning  Found more than one @return declaration                  jsdoc/require-returns
  331:1  warning  Found more than one @return declaration                  jsdoc/require-returns-check
  552:1  warning  Syntax error in namepath: ~'RcFilters.highlight.enable'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.rcfilters/dm/FilterItem.js
   81:1  warning  Found more than one @return declaration  jsdoc/require-returns
   81:1  warning  Found more than one @return declaration  jsdoc/require-returns-check
  335:1  warning  The type 'update' is undefined           jsdoc/no-undefined-types
  351:1  warning  The type 'update' is undefined           jsdoc/no-undefined-types
  366:1  warning  The type 'update' is undefined           jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.rcfilters/dm/FiltersViewModel.js
  1188:1  warning  The type 'searchChange' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.rcfilters/mw.rcfilters.js
  176:1  warning  Syntax error in namepath: ~'structuredChangeFilters.ui.initialized'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.rcfilters/ui/FilterTagMultiselectWidget.js
  400:1  warning  Syntax error in namepath: ~'RcFilters.popup.open'  jsdoc/valid-types

/src/repo/resources/src/mediawiki.searchSuggest/searchSuggest.js
   52:1  warning  The type 'ResponseMetaData' is undefined                         jsdoc/no-undefined-types
   59:1  warning  The type 'ResponseFunction' is undefined                         jsdoc/no-undefined-types
   90:4  warning  '$searchRegion' is never reassigned. Use 'const' instead         prefer-const
   91:4  warning  '$searchInput' is never reassigned. Use 'const' instead          prefer-const
   96:5  warning  'obj' is never reassigned. Use 'const' instead                   prefer-const
  333:3  warning  'searchboxesSelectors' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.special.apisandbox/apisandbox.js
     3:6   warning  'ApiSandbox' is never reassigned. Use 'const' instead                      prefer-const
     3:18  warning  'Util' is never reassigned. Use 'const' instead                            prefer-const
     6:3   warning  'api' is never reassigned. Use 'const' instead                             prefer-const
     7:3   warning  'bookletPages' is never reassigned. Use 'const' instead                    prefer-const
     8:3   warning  'availableFormats' is never reassigned. Use 'const' instead                prefer-const
    13:3   warning  'moduleInfoCache' is never reassigned. Use 'const' instead                 prefer-const
    15:3   warning  'OptionalParamWidget' is never reassigned. Use 'const' instead             prefer-const
    16:3   warning  'ParamLabelWidget' is never reassigned. Use 'const' instead                prefer-const
    17:3   warning  'BooleanToggleSwitchParamWidget' is never reassigned. Use 'const' instead  prefer-const
    18:3   warning  'DateTimeParamWidget' is never reassigned. Use 'const' instead             prefer-const
    19:3   warning  'LimitParamWidget' is never reassigned. Use 'const' instead                prefer-const
    20:3   warning  'PasswordParamWidget' is never reassigned. Use 'const' instead             prefer-const
    21:3   warning  'UploadSelectFileParamWidget' is never reassigned. Use 'const' instead     prefer-const
    23:2   warning  'WidgetMethods' is never reassigned. Use 'const' instead                   prefer-const
   174:2   warning  'Validators' is never reassigned. Use 'const' instead                      prefer-const
   631:5   warning  'apiUrl' is never reassigned. Use 'const' instead                          prefer-const
   632:5   warning  'items' is never reassigned. Use 'const' instead                           prefer-const
   891:8   warning  'deferreds' is never reassigned. Use 'const' instead                       prefer-const
   892:5   warning  'paramsAreForced' is never reassigned. Use 'const' instead                 prefer-const
   893:5   warning  'displayParams' is never reassigned. Use 'const' instead                   prefer-const
   894:5   warning  'ajaxOptions' is never reassigned. Use 'const' instead                     prefer-const
   896:5   warning  'tokenWidgets' is never reassigned. Use 'const' instead                    prefer-const
   897:5   warning  'checkPages' is never reassigned. Use 'const' instead                      prefer-const
  1227:5   warning  'tokenWait' is never reassigned. Use 'const' instead                       prefer-const
  1228:5   warning  'checkPages' is never reassigned. Use 'const' instead                      prefer-const
  1229:5   warning  'success' is never reassigned. Use 'const' instead                         prefer-const
  1235:5   warning  'failure' is never reassigned. Use 'const' instead                         prefer-const
  1329:2   warning  Found more than one @return declaration                                    jsdoc/require-returns
  1329:2   warning  Found more than one @return declaration                                    jsdoc/require-returns-check
  1645:4   warning  'layout' is never reassigned. Use 'const' instead                          prefer-const
  1646:4   warning  'removeDynamicParamWidget' is never reassigned. Use 'const' instead        prefer-const
  1650:4   warning  'addDynamicParamWidget' is never reassigned. Use 'const' instead           prefer-const

/src/repo/resources/src/mediawiki.special.block.js
  14:81  warning  'watchUserWidget' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.special.block/SpecialBlock.vue
  46:3  warning  Attribute "class" should go before "@click"  vue/attributes-order

/src/repo/resources/src/mediawiki.special.block/components/UserLookup.vue
  32:3  warning  Unused eslint-disable directive (no problems were reported from 'vue/no-unused-properties')

/src/repo/resources/src/mediawiki.special.changeslist.watchlistexpiry/watchlistexpiry.js
  12:4  warning  '$clock' is never reassigned. Use 'const' instead    prefer-const
  13:3  warning  'timeLeft' is never reassigned. Use 'const' instead  prefer-const
  18:3  warning  'msg' is never reassigned. Use 'const' instead       prefer-const

/src/repo/resources/src/mediawiki.special.contributions.js
  22:3  warning  'startReady' is never reassigned. Use 'const' instead  prefer-const
  23:3  warning  'endReady' is never reassigned. Use 'const' instead    prefer-const

/src/repo/resources/src/mediawiki.special.createaccount/HtmlformChecker.js
  43:3  warning  'events' is never reassigned. Use 'const' instead  prefer-const
  60:3  warning  'that' is never reassigned. Use 'const' instead    prefer-const
  61:3  warning  'value' is never reassigned. Use 'const' instead   prefer-const

/src/repo/resources/src/mediawiki.special.createaccount/signup.js
    9:6  warning  '$emailLabel' is never reassigned. Use 'const' instead            prefer-const
   10:3  warning  'originalText' is never reassigned. Use 'const' instead           prefer-const
   11:3  warning  'requiredText' is never reassigned. Use 'const' instead           prefer-const
   12:3  warning  '$createByMailCheckbox' is never reassigned. Use 'const' instead  prefer-const
   13:3  warning  '$beforePwds' is never reassigned. Use 'const' instead            prefer-const
   37:6  warning  '$usernameInput' is never reassigned. Use 'const' instead         prefer-const
   38:3  warning  '$passwordInput' is never reassigned. Use 'const' instead         prefer-const
   39:3  warning  '$emailInput' is never reassigned. Use 'const' instead            prefer-const
   40:3  warning  '$realNameInput' is never reassigned. Use 'const' instead         prefer-const
   41:3  warning  'api' is never reassigned. Use 'const' instead                    prefer-const
   52:3  warning  'd' is never reassigned. Use 'const' instead                      prefer-const
   53:3  warning  'apiPromise' is never reassigned. Use 'const' instead             prefer-const
   91:4  warning  'd' is never reassigned. Use 'const' instead                      prefer-const
   98:3  warning  'apiPromise' is never reassigned. Use 'const' instead             prefer-const
  122:2  warning  'usernameChecker' is never reassigned. Use 'const' instead        prefer-const
  125:2  warning  'passwordChecker' is never reassigned. Use 'const' instead        prefer-const

/src/repo/resources/src/mediawiki.special.search/search.js
  14:3  warning  '$checkboxes' is never reassigned. Use 'const' instead        prefer-const
  23:3  warning  '$headerLinks' is never reassigned. Use 'const' instead       prefer-const
  24:3  warning  'searchWidget' is never reassigned. Use 'const' instead       prefer-const
  25:3  warning  'updateHeaderLinks' is never reassigned. Use 'const' instead  prefer-const
  27:9  warning  'parts' is never reassigned. Use 'const' instead              prefer-const

/src/repo/resources/src/mediawiki.special.unwatchedPages/unwatchedPages.js
   8:5  warning  'api' is never reassigned. Use 'const' instead           prefer-const
   9:5  warning  '$link' is never reassigned. Use 'const' instead         prefer-const
  10:5  warning  '$subjectLink' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.special.upload/upload.js
   11:3  warning  'NS_FILE' is never reassigned. Use 'const' instead            prefer-const
   20:4  warning  '$spinnerDestCheck' is never reassigned. Use 'const' instead  prefer-const
   21:4  warning  'title' is never reassigned. Use 'const' instead              prefer-const
   41:6  warning  'page' is never reassigned. Use 'const' instead               prefer-const
   80:8  warning  'template' is never reassigned. Use 'const' instead           prefer-const
   88:4  warning  '$spinner' is never reassigned. Use 'const' instead           prefer-const
  157:5  warning  'path' is never reassigned. Use 'const' instead               prefer-const
  159:5  warning  'slash' is never reassigned. Use 'const' instead              prefer-const
  160:5  warning  'backslash' is never reassigned. Use 'const' instead          prefer-const
  195:5  warning  'title' is never reassigned. Use 'const' instead              prefer-const
  294:7  warning  'buffer' is never reassigned. Use 'const' instead             prefer-const
  350:5  warning  'previewSize' is never reassigned. Use 'const' instead        prefer-const
  351:5  warning  '$spinner' is never reassigned. Use 'const' instead           prefer-const
  353:5  warning  'thumb' is never reassigned. Use 'const' instead              prefer-const
  360:4  warning  '$canvas' is never reassigned. Use 'const' instead            prefer-const
  361:4  warning  'ctx' is never reassigned. Use 'const' instead                prefer-const
  365:9  warning  'img' is never reassigned. Use 'const' instead                prefer-const
  396:6  warning  'dx' is never reassigned. Use 'const' instead                 prefer-const
  397:6  warning  'dy' is never reassigned. Use 'const' instead                 prefer-const
  435:6  warning  'info' is never reassigned. Use 'const' instead               prefer-const
  477:4  warning  'maxSize' is never reassigned. Use 'const' instead            prefer-const
  547:4  warning  '$uploadForm' is never reassigned. Use 'const' instead        prefer-const
  556:3  warning  'allowCloseWindow' is never reassigned. Use 'const' instead   prefer-const

/src/repo/resources/src/mediawiki.special.watchlist/watchlist.js
  14:7   warning  'api' is never reassigned. Use 'const' instead         prefer-const
  14:41  warning  '$resetForm' is never reassigned. Use 'const' instead  prefer-const
  85:11  warning  '$line' is never reassigned. Use 'const' instead       prefer-const

/src/repo/resources/src/mediawiki.template.js
   26:1  warning  The type 'TemplateRenderer' is undefined                    jsdoc/no-undefined-types
   40:1  warning  The type 'TemplateRenderFunction' is undefined              jsdoc/no-undefined-types
   45:1  warning  The type 'TemplateCompileFunction' is undefined             jsdoc/no-undefined-types
   61:1  warning  The type 'TemplateCompiler' is undefined                    jsdoc/no-undefined-types
   88:1  warning  The type 'TemplateCompiler' is undefined                    jsdoc/no-undefined-types
  107:1  warning  The type 'TemplateRenderer' is undefined                    jsdoc/no-undefined-types
  125:1  warning  The type 'TemplateRenderer' is undefined                    jsdoc/no-undefined-types
  135:4  warning  'moduleTemplates' is never reassigned. Use 'const' instead  prefer-const
  149:1  warning  The type 'TemplateRenderer' is undefined                    jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.user.js
  237:4  warning  'registration' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.userSuggest.js
  7:2  warning  'config' is never reassigned. Use 'const' instead  prefer-const

/src/repo/resources/src/mediawiki.util/util.js
   237:4  warning  'run' is never reassigned. Use 'const' instead          prefer-const
   287:3  warning  'fragmentIdx' is never reassigned. Use 'const' instead  prefer-const
   580:1  warning  Syntax error in namepath: ~'util.addPortlet'            jsdoc/valid-types
   748:1  warning  Syntax error in namepath: ~'util.addPortletLink'        jsdoc/valid-types
   851:4  warning  'RE_IP_BYTE' is never reassigned. Use 'const' instead   prefer-const
   852:4  warning  'RE_IP_ADD' is never reassigned. Use 'const' instead    prefer-const
   858:3  warning  'block' is never reassigned. Use 'const' instead        prefer-const
   888:3  warning  'block' is never reassigned. Use 'const' instead        prefer-const
  1125:4  warning  'matches' is never reassigned. Use 'const' instead      prefer-const

/src/repo/resources/src/mediawiki.visibleTimeout/visibleTimeout.js
   3:2  warning  'clearHandles' is never reassigned. Use 'const' instead  prefer-const
  43:4  warning  'visibleId' is never reassigned. Use 'const' instead     prefer-const

/src/repo/resources/src/mediawiki.watchstar.widgets/WatchlistExpiryWidget.js
  14:6  warning  'dataExpiryOptions' is never reassigned. Use 'const' instead  prefer-const
  21:3  warning  'expiryOptions' is never reassigned. Use 'const' instead      prefer-const
  24:2  warning  '$link' is never reassigned. Use 'const' instead              prefer-const
  28:2  warning  'messageLabel' is never reassigned. Use 'const' instead       prefer-const
  94:7  warning  'mwTitle' is never reassigned. Use 'const' instead            prefer-const
  95:7  warning  'isInfinity' is never reassigned. Use 'const' instead         prefer-const

/src/repo/resources/src/mediawiki.widgets.datetime/DateTimeFormatter.js
  268:1  warning  The type 'FieldSpecificationObject' is undefined  jsdoc/no-undefined-types
  632:1  warning  The type 'CalendarGridData' is undefined          jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.widgets.datetime/DiscordianDateTimeFormatter.js
  74:1  warning  The type 'FieldSpecificationObject' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.widgets.datetime/ProlepticGregorianDateTimeFormatter.js
  306:1  warning  The type 'FieldSpecificationObject' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js
  50:1  warning  The type 'DropdownOptions' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/startup/mediawiki.loader.js
  61:1  warning  Syntax error in namepath: ~'resourceloader.exception'  jsdoc/valid-types

/src/repo/tests/qunit/data/testrunner.js
  72:2  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/tests/selenium/wdio-mediawiki/Util.js
  35:1  warning  This line has a length of 107. Maximum allowed is 100  max-len

✖ 432 problems (0 errors, 432 warnings)
  0 errors and 2 warnings potentially fixable with the `--fix` option.


Running "banana:core" (banana) task
>> The "se" translation has 41 translations with trailing whitespace:
>> * pool-errorunknown
>> * badaccess
>> * timeouterror
>> * botpasswords-summary
>> * botpasswords-disabled
>> * botpasswords-no-central-id
>> * botpasswords-update-failed
>> * passwordreset-emailtext-ip
>> * passwordreset-emailtext-user
>> * changeemail-nochange
>> * blankarticle
>> * previewerrortext
>> * missing-revision
>> * confirmleave-warning
>> * difference-bad-new-revision
>> * search-rewritten
>> * linterror-misc-tidy-replacement-issues
>> * userrights-expiry-none
>> * right-viewsuppressed
>> * right-import
>> * action-viewsuppressed
>> * rcfilters-savedqueries-setdefault
>> * rcfilters-filtergroup-watchlistactivity
>> * rc-old-title
>> * http-timed-out
>> * http-curl-error
>> * pageswithprop-reverse
>> * mostlinkedtemplates
>> * badrevision
>> * allpagesfrom
>> * email-legend
>> * timezone-local
>> * mediastatistics-header-office
>> * special-characters-group-hebrew
>> * specialpage-securitylevel-not-allowed-title
>> * passwordpolicies-policy-passwordcannotmatchdefaults
>> * renameuser-linkoncontribs-text
>> * renameusersuppress
>> * renameuser-error-temp-user-reserved
>> * action-renameuser
>> * right-renameuser
>> 1 message directory checked.

Running "banana:codex" (banana) task
>> 1 message directory checked.

Running "banana:exif" (banana) task
>> 1 message directory checked.

Running "banana:preferences" (banana) task
>> The "se" translation has 5 translations with trailing whitespace:
>> * tog-enotifusertalkpages
>> * timezoneregion-america
>> * tog-previewonfirst
>> * prefs-changesrc
>> * prefs-changeswatchlist
>> 1 message directory checked.

Running "banana:api" (banana) task
>> 1 message directory checked.

Running "banana:rest" (banana) task
>> 1 message directory checked.

Running "banana:installer" (banana) task
>> The "frc" translation has 1 translation with trailing whitespace:
>> * config-page-complete
>> 1 message directory checked.

Running "banana:paramvalidator" (banana) task
>> 1 message directory checked.

Running "stylelint:resources" (stylelint) task
>> resources/src/mediawiki.action/mediawiki.action.view.filepage.less
>>   211:1  ⚠  Unexpected browser feature "prefers-color-scheme" is not supported by Firefox 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66, Chrome 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75, Safari 10,11,12,10.1,11.1, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features
>> 
>> resources/src/mediawiki.skinning/elements.less
>>   75:2  ⚠  Unexpected browser feature "flow-root" is not supported by Firefox 49,50,51,52, Chrome 49,50,51,52,53,54,55,56,57, Safari 10,11,12,10.1,11.1,12.1, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features
>> 
>> resources/src/mediawiki.special.block/components/ExpiryField.vue
>>   170:1  ⚠  Unexpected browser feature "flexbox-gap" is not supported by Edge 79,80,81,83, Firefox 49,50,51,52,53,54,55,56,57,58,59,60,61,62, Chrome 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,83, Safari 10,11,12,13,14,10.1,11.1,12.1,13.1, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4  plugin/no-unsupported-browser-features
>>   190:2  ⚠  Unexpected browser feature "flexbox-gap" is not supported by Edge 79,80,81,83, Firefox 49,50,51,52,53,54,55,56,57,58,59,60,61,62, Chrome 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,83, Safari 10,11,12,13,14,10.1,11.1,12.1,13.1, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4  plugin/no-unsupported-browser-features
>> 
>> ⚠ 4 problems (0 errors, 4 warnings)

⚠ 4 warnings

>> Linted 206 files without errors

Running "stylelint:config" (stylelint) task
>> Linted 1 files without errors

Done.

> doc
> jsdoc -c jsdoc.json


> jest
> jest --config tests/jest/jest.config.js


--- end ---
{"1099520": {"source": 1099520, "name": "body-parser", "dependency": "body-parser", "title": "body-parser vulnerable to denial of service when url encoding is enabled", "url": "https://github.com/advisories/GHSA-qwcr-r2fm-qrc7", "severity": "high", "cwe": ["CWE-405"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<1.20.3"}}
Upgrading n:body-parser from 1.19.2 -> 1.20.3
{}
{}
{"1098681": {"source": 1098681, "name": "micromatch", "dependency": "micromatch", "title": "Regular Expression Denial of Service (ReDoS) in micromatch", "url": "https://github.com/advisories/GHSA-952p-6rrq-rcjv", "severity": "moderate", "cwe": ["CWE-1333"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"}, "range": "<4.0.8"}}
Upgrading n:micromatch from 4.0.7 -> 4.0.8
{"1098556": {"source": 1098556, "name": "socket.io", "dependency": "socket.io", "title": "socket.io has an unhandled 'error' event", "url": "https://github.com/advisories/GHSA-25hc-qcg6-38wj", "severity": "high", "cwe": ["CWE-20", "CWE-754"], "cvss": {"score": 7.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L"}, "range": ">=3.0.0 <4.6.2"}}
Upgrading n:socket.io from 4.6.1 -> 4.8.0
{}
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
build: Updating npm dependencies

* grunt-stylelint: 0.20.0 → 0.20.1
* body-parser: 1.19.2 → 1.20.3
  * https://github.com/advisories/GHSA-qwcr-r2fm-qrc7
* micromatch: 4.0.7 → 4.0.8
  * https://github.com/advisories/GHSA-952p-6rrq-rcjv
* socket.io: 4.6.1 → 4.8.0
  * https://github.com/advisories/GHSA-25hc-qcg6-38wj

Additional changes:
* Also sorted "composer fix" command to run phpcbf last.

$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmpogz6zqti
--- stdout ---
[master 61b58f2] build: Updating npm dependencies
 3 files changed, 482 insertions(+), 162 deletions(-)

--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From 61b58f25f0a17aecaff3d6645a5497693c54d674 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Fri, 27 Sep 2024 00:21:12 +0000
Subject: [PATCH] build: Updating npm dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* grunt-stylelint: 0.20.0 → 0.20.1
* body-parser: 1.19.2 → 1.20.3
  * https://github.com/advisories/GHSA-qwcr-r2fm-qrc7
* micromatch: 4.0.7 → 4.0.8
  * https://github.com/advisories/GHSA-952p-6rrq-rcjv
* socket.io: 4.6.1 → 4.8.0
  * https://github.com/advisories/GHSA-25hc-qcg6-38wj

Additional changes:
* Also sorted "composer fix" command to run phpcbf last.

Change-Id: Icbac4f46a91d6e8c19afcaa5eccbf08763bcd653
---
 composer.json     |   4 +-
 package-lock.json | 638 ++++++++++++++++++++++++++++++++++------------
 package.json      |   2 +-
 3 files changed, 482 insertions(+), 162 deletions(-)

diff --git a/composer.json b/composer.json
index 38f65aa..e533106 100644
--- a/composer.json
+++ b/composer.json
@@ -161,8 +161,8 @@
 		"phan": "phan -d . --long-progress-bar",
 		"phpcs": "phpcs -p -s --cache",
 		"fix": [
-			"phpcbf",
-			"minus-x fix ."
+			"minus-x fix .",
+			"phpcbf"
 		],
 		"pre-install-cmd": "MediaWiki\\Composer\\VersionChecker::onEvent",
 		"pre-update-cmd": "MediaWiki\\Composer\\VersionChecker::onEvent",
diff --git a/package-lock.json b/package-lock.json
index af7edea..8ca4ffa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -27,7 +27,7 @@
 				"grunt-contrib-watch": "1.1.0",
 				"grunt-eslint": "24.3.0",
 				"grunt-karma": "4.0.2",
-				"grunt-stylelint": "0.20.0",
+				"grunt-stylelint": "0.20.1",
 				"jest": "29.7.0",
 				"jest-environment-jsdom": "29.7.0",
 				"jsdoc": "4.0.2",
@@ -3533,9 +3533,9 @@
 			}
 		},
 		"node_modules/@socket.io/component-emitter": {
-			"version": "3.1.0",
-			"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
-			"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+			"integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
 			"dev": true
 		},
 		"node_modules/@stylistic/stylelint-config": {
@@ -3680,9 +3680,9 @@
 			"dev": true
 		},
 		"node_modules/@types/cors": {
-			"version": "2.8.13",
-			"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
-			"integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
+			"version": "2.8.17",
+			"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
+			"integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
 			"dev": true,
 			"dependencies": {
 				"@types/node": "*"
@@ -5400,24 +5400,27 @@
 			}
 		},
 		"node_modules/body-parser": {
-			"version": "1.19.2",
-			"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz",
-			"integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==",
+			"version": "1.20.3",
+			"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+			"integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
 			"dev": true,
 			"dependencies": {
 				"bytes": "3.1.2",
-				"content-type": "~1.0.4",
+				"content-type": "~1.0.5",
 				"debug": "2.6.9",
-				"depd": "~1.1.2",
-				"http-errors": "1.8.1",
+				"depd": "2.0.0",
+				"destroy": "1.2.0",
+				"http-errors": "2.0.0",
 				"iconv-lite": "0.4.24",
-				"on-finished": "~2.3.0",
-				"qs": "6.9.7",
-				"raw-body": "2.4.3",
-				"type-is": "~1.6.18"
+				"on-finished": "2.4.1",
+				"qs": "6.13.0",
+				"raw-body": "2.5.2",
+				"type-is": "~1.6.18",
+				"unpipe": "1.0.0"
 			},
 			"engines": {
-				"node": ">= 0.8"
+				"node": ">= 0.8",
+				"npm": "1.2.8000 || >= 1.4.16"
 			}
 		},
 		"node_modules/body-parser/node_modules/debug": {
@@ -5435,6 +5438,18 @@
 			"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
 			"dev": true
 		},
+		"node_modules/body-parser/node_modules/on-finished": {
+			"version": "2.4.1",
+			"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+			"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+			"dev": true,
+			"dependencies": {
+				"ee-first": "1.1.1"
+			},
+			"engines": {
+				"node": ">= 0.8"
+			}
+		},
 		"node_modules/body/node_modules/bytes": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz",
@@ -5845,6 +5860,25 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/call-bind": {
+			"version": "1.0.7",
+			"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+			"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+			"dev": true,
+			"dependencies": {
+				"es-define-property": "^1.0.0",
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"get-intrinsic": "^1.2.4",
+				"set-function-length": "^1.2.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/call-me-maybe": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
@@ -6265,9 +6299,9 @@
 			"dev": true
 		},
 		"node_modules/content-type": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-			"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+			"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
 			"dev": true,
 			"engines": {
 				"node": ">= 0.6"
@@ -6824,6 +6858,23 @@
 				"node": ">=10"
 			}
 		},
+		"node_modules/define-data-property": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+			"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+			"dev": true,
+			"dependencies": {
+				"es-define-property": "^1.0.0",
+				"es-errors": "^1.3.0",
+				"gopd": "^1.0.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/delayed-stream": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -6834,12 +6885,12 @@
 			}
 		},
 		"node_modules/depd": {
-			"version": "1.1.2",
-			"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-			"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+			"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
 			"dev": true,
 			"engines": {
-				"node": ">= 0.6"
+				"node": ">= 0.8"
 			}
 		},
 		"node_modules/dequal": {
@@ -6851,6 +6902,16 @@
 				"node": ">=6"
 			}
 		},
+		"node_modules/destroy": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+			"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.8",
+				"npm": "1.2.8000 || >= 1.4.16"
+			}
+		},
 		"node_modules/detect-file": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -7282,9 +7343,9 @@
 			}
 		},
 		"node_modules/engine.io": {
-			"version": "6.4.2",
-			"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz",
-			"integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==",
+			"version": "6.6.1",
+			"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.1.tgz",
+			"integrity": "sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==",
 			"dev": true,
 			"dependencies": {
 				"@types/cookie": "^0.4.1",
@@ -7295,17 +7356,17 @@
 				"cookie": "~0.4.1",
 				"cors": "~2.8.5",
 				"debug": "~4.3.1",
-				"engine.io-parser": "~5.0.3",
-				"ws": "~8.11.0"
+				"engine.io-parser": "~5.2.1",
+				"ws": "~8.17.1"
 			},
 			"engines": {
-				"node": ">=10.0.0"
+				"node": ">=10.2.0"
 			}
 		},
 		"node_modules/engine.io-parser": {
-			"version": "5.0.6",
-			"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
-			"integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==",
+			"version": "5.2.3",
+			"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+			"integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
 			"dev": true,
 			"engines": {
 				"node": ">=10.0.0"
@@ -7369,6 +7430,27 @@
 				"is-arrayish": "^0.2.1"
 			}
 		},
+		"node_modules/es-define-property": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+			"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+			"dev": true,
+			"dependencies": {
+				"get-intrinsic": "^1.2.4"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
+		"node_modules/es-errors": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+			"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
 		"node_modules/escalade": {
 			"version": "3.2.0",
 			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -7522,12 +7604,6 @@
 				"eslint-plugin-yml": "^1.14.0"
 			}
 		},
-		"node_modules/eslint-config-wikimedia/node_modules/browserslist-config-wikimedia": {
-			"version": "0.7.0",
-			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz",
-			"integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==",
-			"dev": true
-		},
 		"node_modules/eslint-plugin-compat": {
 			"version": "4.2.0",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz",
@@ -8729,6 +8805,25 @@
 				"node": "*"
 			}
 		},
+		"node_modules/get-intrinsic": {
+			"version": "1.2.4",
+			"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+			"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+			"dev": true,
+			"dependencies": {
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"has-proto": "^1.0.1",
+				"has-symbols": "^1.0.3",
+				"hasown": "^2.0.0"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/get-package-type": {
 			"version": "0.1.0",
 			"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -8952,6 +9047,18 @@
 				"node": "*"
 			}
 		},
+		"node_modules/gopd": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+			"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+			"dev": true,
+			"dependencies": {
+				"get-intrinsic": "^1.1.3"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/got": {
 			"version": "11.8.6",
 			"resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
@@ -9178,9 +9285,9 @@
 			"dev": true
 		},
 		"node_modules/grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"dependencies": {
 				"chalk": "^4.1.2"
@@ -9289,6 +9396,42 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/has-property-descriptors": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+			"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+			"dev": true,
+			"dependencies": {
+				"es-define-property": "^1.0.0"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/has-proto": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+			"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/has-symbols": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+			"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/hasown": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
@@ -9393,19 +9536,28 @@
 			"dev": true
 		},
 		"node_modules/http-errors": {
-			"version": "1.8.1",
-			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
-			"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+			"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
 			"dev": true,
 			"dependencies": {
-				"depd": "~1.1.2",
+				"depd": "2.0.0",
 				"inherits": "2.0.4",
 				"setprototypeof": "1.2.0",
-				"statuses": ">= 1.5.0 < 2",
+				"statuses": "2.0.1",
 				"toidentifier": "1.0.1"
 			},
 			"engines": {
-				"node": ">= 0.6"
+				"node": ">= 0.8"
+			}
+		},
+		"node_modules/http-errors/node_modules/statuses": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+			"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.8"
 			}
 		},
 		"node_modules/http-parser-js": {
@@ -12923,9 +13075,9 @@
 			}
 		},
 		"node_modules/micromatch": {
-			"version": "4.0.7",
-			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
-			"integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+			"version": "4.0.8",
+			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+			"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
 			"dev": true,
 			"dependencies": {
 				"braces": "^3.0.3",
@@ -14324,10 +14476,13 @@
 			}
 		},
 		"node_modules/qs": {
-			"version": "6.9.7",
-			"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
-			"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
+			"version": "6.13.0",
+			"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+			"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
 			"dev": true,
+			"dependencies": {
+				"side-channel": "^1.0.6"
+			},
 			"engines": {
 				"node": ">=0.6"
 			},
@@ -14421,13 +14576,13 @@
 			}
 		},
 		"node_modules/raw-body": {
-			"version": "2.4.3",
-			"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz",
-			"integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==",
+			"version": "2.5.2",
+			"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+			"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
 			"dev": true,
 			"dependencies": {
 				"bytes": "3.1.2",
-				"http-errors": "1.8.1",
+				"http-errors": "2.0.0",
 				"iconv-lite": "0.4.24",
 				"unpipe": "1.0.0"
 			},
@@ -15224,6 +15379,23 @@
 				"randombytes": "^2.1.0"
 			}
 		},
+		"node_modules/set-function-length": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+			"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+			"dev": true,
+			"dependencies": {
+				"define-data-property": "^1.1.4",
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"get-intrinsic": "^1.2.4",
+				"gopd": "^1.0.1",
+				"has-property-descriptors": "^1.0.2"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			}
+		},
 		"node_modules/setprototypeof": {
 			"version": "1.2.0",
 			"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -15251,6 +15423,24 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/side-channel": {
+			"version": "1.0.6",
+			"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+			"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+			"dev": true,
+			"dependencies": {
+				"call-bind": "^1.0.7",
+				"es-errors": "^1.3.0",
+				"get-intrinsic": "^1.2.4",
+				"object-inspect": "^1.13.1"
+			},
+			"engines": {
+				"node": ">= 0.4"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
 		"node_modules/signal-exit": {
 			"version": "3.0.7",
 			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -15290,35 +15480,37 @@
 			}
 		},
 		"node_modules/socket.io": {
-			"version": "4.6.1",
-			"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz",
-			"integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==",
+			"version": "4.8.0",
+			"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz",
+			"integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==",
 			"dev": true,
 			"dependencies": {
 				"accepts": "~1.3.4",
 				"base64id": "~2.0.0",
+				"cors": "~2.8.5",
 				"debug": "~4.3.2",
-				"engine.io": "~6.4.1",
+				"engine.io": "~6.6.0",
 				"socket.io-adapter": "~2.5.2",
-				"socket.io-parser": "~4.2.1"
+				"socket.io-parser": "~4.2.4"
 			},
 			"engines": {
-				"node": ">=10.0.0"
+				"node": ">=10.2.0"
 			}
 		},
 		"node_modules/socket.io-adapter": {
-			"version": "2.5.2",
-			"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz",
-			"integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==",
+			"version": "2.5.5",
+			"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
+			"integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
 			"dev": true,
 			"dependencies": {
-				"ws": "~8.11.0"
+				"debug": "~4.3.4",
+				"ws": "~8.17.1"
 			}
 		},
 		"node_modules/socket.io-parser": {
-			"version": "4.2.3",
-			"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz",
-			"integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==",
+			"version": "4.2.4",
+			"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+			"integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
 			"dev": true,
 			"dependencies": {
 				"@socket.io/component-emitter": "~3.1.0",
@@ -16821,8 +17013,13 @@
 			}
 		},
 		"node_modules/wdio-mediawiki": {
-			"resolved": "tests/selenium/wdio-mediawiki",
-			"link": true
+			"version": "2.5.0",
+			"resolved": "file:tests/selenium/wdio-mediawiki",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"mwbot": "2.1.3"
+			}
 		},
 		"node_modules/webdriver": {
 			"version": "7.33.0",
@@ -17080,16 +17277,16 @@
 			}
 		},
 		"node_modules/ws": {
-			"version": "8.11.0",
-			"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
-			"integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
+			"version": "8.17.1",
+			"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+			"integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
 			"dev": true,
 			"engines": {
 				"node": ">=10.0.0"
 			},
 			"peerDependencies": {
 				"bufferutil": "^4.0.1",
-				"utf-8-validate": "^5.0.2"
+				"utf-8-validate": ">=5.0.2"
 			},
 			"peerDependenciesMeta": {
 				"bufferutil": {
@@ -17487,14 +17684,6 @@
 			"funding": {
 				"url": "https://github.com/sponsors/isaacs"
 			}
-		},
-		"tests/selenium/wdio-mediawiki": {
-			"version": "2.5.0",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"mwbot": "2.1.3"
-			}
 		}
 	},
 	"dependencies": {
@@ -20048,9 +20237,9 @@
 			"dev": true
 		},
 		"@socket.io/component-emitter": {
-			"version": "3.1.0",
-			"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
-			"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+			"integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
 			"dev": true
 		},
 		"@stylistic/stylelint-config": {
@@ -20173,9 +20362,9 @@
 			"dev": true
 		},
 		"@types/cors": {
-			"version": "2.8.13",
-			"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
-			"integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
+			"version": "2.8.17",
+			"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
+			"integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
 			"dev": true,
 			"requires": {
 				"@types/node": "*"
@@ -21614,21 +21803,23 @@
 			}
 		},
 		"body-parser": {
-			"version": "1.19.2",
-			"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz",
-			"integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==",
+			"version": "1.20.3",
+			"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+			"integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
 			"dev": true,
 			"requires": {
 				"bytes": "3.1.2",
-				"content-type": "~1.0.4",
+				"content-type": "~1.0.5",
 				"debug": "2.6.9",
-				"depd": "~1.1.2",
-				"http-errors": "1.8.1",
+				"depd": "2.0.0",
+				"destroy": "1.2.0",
+				"http-errors": "2.0.0",
 				"iconv-lite": "0.4.24",
-				"on-finished": "~2.3.0",
-				"qs": "6.9.7",
-				"raw-body": "2.4.3",
-				"type-is": "~1.6.18"
+				"on-finished": "2.4.1",
+				"qs": "6.13.0",
+				"raw-body": "2.5.2",
+				"type-is": "~1.6.18",
+				"unpipe": "1.0.0"
 			},
 			"dependencies": {
 				"debug": {
@@ -21645,6 +21836,15 @@
 					"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 					"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
 					"dev": true
+				},
+				"on-finished": {
+					"version": "2.4.1",
+					"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+					"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+					"dev": true,
+					"requires": {
+						"ee-first": "1.1.1"
+					}
 				}
 			}
 		},
@@ -21917,6 +22117,19 @@
 				"responselike": "^2.0.0"
 			}
 		},
+		"call-bind": {
+			"version": "1.0.7",
+			"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+			"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+			"dev": true,
+			"requires": {
+				"es-define-property": "^1.0.0",
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"get-intrinsic": "^1.2.4",
+				"set-function-length": "^1.2.1"
+			}
+		},
 		"call-me-maybe": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
@@ -22238,9 +22451,9 @@
 			}
 		},
 		"content-type": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-			"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+			"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
 			"dev": true
 		},
 		"continuable-cache": {
@@ -22673,6 +22886,17 @@
 			"integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
 			"dev": true
 		},
+		"define-data-property": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+			"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+			"dev": true,
+			"requires": {
+				"es-define-property": "^1.0.0",
+				"es-errors": "^1.3.0",
+				"gopd": "^1.0.1"
+			}
+		},
 		"delayed-stream": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -22680,9 +22904,9 @@
 			"dev": true
 		},
 		"depd": {
-			"version": "1.1.2",
-			"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-			"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+			"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
 			"dev": true
 		},
 		"dequal": {
@@ -22691,6 +22915,12 @@
 			"integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
 			"dev": true
 		},
+		"destroy": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+			"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+			"dev": true
+		},
 		"detect-file": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -23012,9 +23242,9 @@
 			}
 		},
 		"engine.io": {
-			"version": "6.4.2",
-			"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz",
-			"integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==",
+			"version": "6.6.1",
+			"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.1.tgz",
+			"integrity": "sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==",
 			"dev": true,
 			"requires": {
 				"@types/cookie": "^0.4.1",
@@ -23025,14 +23255,14 @@
 				"cookie": "~0.4.1",
 				"cors": "~2.8.5",
 				"debug": "~4.3.1",
-				"engine.io-parser": "~5.0.3",
-				"ws": "~8.11.0"
+				"engine.io-parser": "~5.2.1",
+				"ws": "~8.17.1"
 			}
 		},
 		"engine.io-parser": {
-			"version": "5.0.6",
-			"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
-			"integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==",
+			"version": "5.2.3",
+			"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
+			"integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
 			"dev": true
 		},
 		"enhanced-resolve": {
@@ -23081,6 +23311,21 @@
 				"is-arrayish": "^0.2.1"
 			}
 		},
+		"es-define-property": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+			"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+			"dev": true,
+			"requires": {
+				"get-intrinsic": "^1.2.4"
+			}
+		},
+		"es-errors": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+			"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+			"dev": true
+		},
 		"escalade": {
 			"version": "3.2.0",
 			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -23224,14 +23469,6 @@
 				"eslint-plugin-vue": "^9.26.0",
 				"eslint-plugin-wdio": "^8.24.12",
 				"eslint-plugin-yml": "^1.14.0"
-			},
-			"dependencies": {
-				"browserslist-config-wikimedia": {
-					"version": "0.7.0",
-					"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz",
-					"integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==",
-					"dev": true
-				}
 			}
 		},
 		"eslint-plugin-compat": {
@@ -24079,6 +24316,19 @@
 			"integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
 			"dev": true
 		},
+		"get-intrinsic": {
+			"version": "1.2.4",
+			"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+			"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+			"dev": true,
+			"requires": {
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"has-proto": "^1.0.1",
+				"has-symbols": "^1.0.3",
+				"hasown": "^2.0.0"
+			}
+		},
 		"get-package-type": {
 			"version": "0.1.0",
 			"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -24249,6 +24499,15 @@
 				}
 			}
 		},
+		"gopd": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+			"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+			"dev": true,
+			"requires": {
+				"get-intrinsic": "^1.1.3"
+			}
+		},
 		"got": {
 			"version": "11.8.6",
 			"resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
@@ -24458,9 +24717,9 @@
 			}
 		},
 		"grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"requires": {
 				"chalk": "^4.1.2"
@@ -24505,6 +24764,27 @@
 			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
 			"dev": true
 		},
+		"has-property-descriptors": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+			"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+			"dev": true,
+			"requires": {
+				"es-define-property": "^1.0.0"
+			}
+		},
+		"has-proto": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+			"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+			"dev": true
+		},
+		"has-symbols": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+			"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+			"dev": true
+		},
 		"hasown": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
@@ -24581,16 +24861,24 @@
 			"dev": true
 		},
 		"http-errors": {
-			"version": "1.8.1",
-			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
-			"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+			"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
 			"dev": true,
 			"requires": {
-				"depd": "~1.1.2",
+				"depd": "2.0.0",
 				"inherits": "2.0.4",
 				"setprototypeof": "1.2.0",
-				"statuses": ">= 1.5.0 < 2",
+				"statuses": "2.0.1",
 				"toidentifier": "1.0.1"
+			},
+			"dependencies": {
+				"statuses": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+					"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+					"dev": true
+				}
 			}
 		},
 		"http-parser-js": {
@@ -27389,9 +27677,9 @@
 			"dev": true
 		},
 		"micromatch": {
-			"version": "4.0.7",
-			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
-			"integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+			"version": "4.0.8",
+			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+			"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
 			"dev": true,
 			"requires": {
 				"braces": "^3.0.3",
@@ -28394,10 +28682,13 @@
 			"dev": true
 		},
 		"qs": {
-			"version": "6.9.7",
-			"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
-			"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
-			"dev": true
+			"version": "6.13.0",
+			"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+			"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+			"dev": true,
+			"requires": {
+				"side-channel": "^1.0.6"
+			}
 		},
 		"query-selector-shadow-dom": {
 			"version": "1.0.1",
@@ -28456,13 +28747,13 @@
 			"dev": true
 		},
 		"raw-body": {
-			"version": "2.4.3",
-			"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz",
-			"integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==",
+			"version": "2.5.2",
+			"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+			"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
 			"dev": true,
 			"requires": {
 				"bytes": "3.1.2",
-				"http-errors": "1.8.1",
+				"http-errors": "2.0.0",
 				"iconv-lite": "0.4.24",
 				"unpipe": "1.0.0"
 			}
@@ -29088,6 +29379,20 @@
 				"randombytes": "^2.1.0"
 			}
 		},
+		"set-function-length": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+			"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+			"dev": true,
+			"requires": {
+				"define-data-property": "^1.1.4",
+				"es-errors": "^1.3.0",
+				"function-bind": "^1.1.2",
+				"get-intrinsic": "^1.2.4",
+				"gopd": "^1.0.1",
+				"has-property-descriptors": "^1.0.2"
+			}
+		},
 		"setprototypeof": {
 			"version": "1.2.0",
 			"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -29109,6 +29414,18 @@
 			"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
 			"dev": true
 		},
+		"side-channel": {
+			"version": "1.0.6",
+			"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+			"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+			"dev": true,
+			"requires": {
+				"call-bind": "^1.0.7",
+				"es-errors": "^1.3.0",
+				"get-intrinsic": "^1.2.4",
+				"object-inspect": "^1.13.1"
+			}
+		},
 		"signal-exit": {
 			"version": "3.0.7",
 			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -29139,32 +29456,34 @@
 			}
 		},
 		"socket.io": {
-			"version": "4.6.1",
-			"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz",
-			"integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==",
+			"version": "4.8.0",
+			"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz",
+			"integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==",
 			"dev": true,
 			"requires": {
 				"accepts": "~1.3.4",
 				"base64id": "~2.0.0",
+				"cors": "~2.8.5",
 				"debug": "~4.3.2",
-				"engine.io": "~6.4.1",
+				"engine.io": "~6.6.0",
 				"socket.io-adapter": "~2.5.2",
-				"socket.io-parser": "~4.2.1"
+				"socket.io-parser": "~4.2.4"
 			}
 		},
 		"socket.io-adapter": {
-			"version": "2.5.2",
-			"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz",
-			"integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==",
+			"version": "2.5.5",
+			"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
+			"integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
 			"dev": true,
 			"requires": {
-				"ws": "~8.11.0"
+				"debug": "~4.3.4",
+				"ws": "~8.17.1"
 			}
 		},
 		"socket.io-parser": {
-			"version": "4.2.3",
-			"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz",
-			"integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==",
+			"version": "4.2.4",
+			"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
+			"integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
 			"dev": true,
 			"requires": {
 				"@socket.io/component-emitter": "~3.1.0",
@@ -30311,7 +30630,8 @@
 			}
 		},
 		"wdio-mediawiki": {
-			"version": "file:tests/selenium/wdio-mediawiki",
+			"version": "2.5.0",
+			"dev": true,
 			"requires": {
 				"mwbot": "2.1.3"
 			}
@@ -30520,9 +30840,9 @@
 			}
 		},
 		"ws": {
-			"version": "8.11.0",
-			"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
-			"integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
+			"version": "8.17.1",
+			"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
+			"integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
 			"dev": true,
 			"requires": {}
 		},
diff --git a/package.json b/package.json
index 20d38a2..e2698c2 100644
--- a/package.json
+++ b/package.json
@@ -35,7 +35,7 @@
 		"grunt-contrib-watch": "1.1.0",
 		"grunt-eslint": "24.3.0",
 		"grunt-karma": "4.0.2",
-		"grunt-stylelint": "0.20.0",
+		"grunt-stylelint": "0.20.1",
 		"jest": "29.7.0",
 		"jest-environment-jsdom": "29.7.0",
 		"jsdoc": "4.0.2",
-- 
2.39.2


--- end ---

composer dependencies

Dependencies
Development dependencies

npm dependencies

Development dependencies

Logs

Source code is licensed under the AGPL.