mediawiki/core: main (log #2319227)

sourcepatches

This run took 390 seconds.

From 50432e5abf51fb861cd166924b91c8c0c1f52547 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Sun, 11 Jan 2026 00:42:26 +0000
Subject: [PATCH] build: Updating api-testing to 1.7.2

Change-Id: I11358ea66f20f3e34db8c685b5b8bb21552ecc17
---
 package-lock.json | 88 +++++++++++++++++++++--------------------------
 package.json      |  2 +-
 2 files changed, 41 insertions(+), 49 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index b481faf..0bc9170 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,7 +19,7 @@
 				"@wikimedia/codex": "2.3.3",
 				"@wikimedia/codex-icons": "2.3.3",
 				"@wikimedia/karma-firefox-launcher": "2.1.3",
-				"api-testing": "1.7.1",
+				"api-testing": "1.7.2",
 				"chai-openapi-response-validator": "^0.14.2",
 				"domino": "2.1.0",
 				"dotenv": "8.2.0",
@@ -4517,7 +4517,6 @@
 			"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
 			"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": "^14.21.3 || >=16"
 			},
@@ -4571,11 +4570,10 @@
 			"license": "MIT"
 		},
 		"node_modules/@paralleldrive/cuid2": {
-			"version": "2.2.2",
-			"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
-			"integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==",
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz",
+			"integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@noble/hashes": "^1.1.5"
 			}
@@ -6651,14 +6649,13 @@
 			}
 		},
 		"node_modules/api-testing": {
-			"version": "1.7.1",
-			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.1.tgz",
-			"integrity": "sha512-h6eqLa9uOOpbBXGN6/s91GquV1YprC1XLVtWIRv/25XWFRqHibIBwuXjqcUqFSsU1fgYvfclSMRXuUcCvEmX6A==",
+			"version": "1.7.2",
+			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.2.tgz",
+			"integrity": "sha512-W6vgHMjmTUMq8He4pRdpLNjfkBre0N/ygv6tT6jrWZQdZlBWDZHi+0pEg8FxBi0U9QzhUfaATrPZkfnF7YVt3g==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
 				"chai": "4.5.0",
-				"supertest": "7.1.0"
+				"supertest": "7.2.2"
 			},
 			"engines": {
 				"node": ">= 14.18.0"
@@ -6857,8 +6854,7 @@
 			"version": "2.0.6",
 			"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
 			"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/assertion-error": {
 			"version": "1.1.0",
@@ -8155,7 +8151,6 @@
 			"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
 			"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
 			"dev": true,
-			"license": "MIT",
 			"funding": {
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
@@ -8301,12 +8296,20 @@
 				"node": ">= 0.6"
 			}
 		},
+		"node_modules/cookie-signature": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
+			"integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+			"dev": true,
+			"engines": {
+				"node": ">=6.6.0"
+			}
+		},
 		"node_modules/cookiejar": {
 			"version": "2.1.4",
 			"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
 			"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/core-js-compat": {
 			"version": "3.45.1",
@@ -9053,7 +9056,6 @@
 			"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
 			"integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
 				"asap": "^2.0.0",
 				"wrappy": "1"
@@ -11490,8 +11492,7 @@
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
 			"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/fast-uri": {
 			"version": "3.1.0",
@@ -11871,11 +11872,10 @@
 			}
 		},
 		"node_modules/form-data": {
-			"version": "4.0.4",
-			"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
-			"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+			"version": "4.0.5",
+			"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+			"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"asynckit": "^0.4.0",
 				"combined-stream": "^1.0.8",
@@ -11905,7 +11905,6 @@
 			"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz",
 			"integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@paralleldrive/cuid2": "^2.2.2",
 				"dezalgo": "^1.0.4",
@@ -17806,7 +17805,6 @@
 			"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
 			"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">= 0.6"
 			}
@@ -22125,37 +22123,34 @@
 			}
 		},
 		"node_modules/superagent": {
-			"version": "9.0.2",
-			"resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz",
-			"integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==",
-			"deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net",
+			"version": "10.3.0",
+			"resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz",
+			"integrity": "sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"component-emitter": "^1.3.0",
+				"component-emitter": "^1.3.1",
 				"cookiejar": "^2.1.4",
-				"debug": "^4.3.4",
+				"debug": "^4.3.7",
 				"fast-safe-stringify": "^2.1.1",
-				"form-data": "^4.0.0",
-				"formidable": "^3.5.1",
+				"form-data": "^4.0.5",
+				"formidable": "^3.5.4",
 				"methods": "^1.1.2",
 				"mime": "2.6.0",
-				"qs": "^6.11.0"
+				"qs": "^6.14.1"
 			},
 			"engines": {
 				"node": ">=14.18.0"
 			}
 		},
 		"node_modules/supertest": {
-			"version": "7.1.0",
-			"resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.0.tgz",
-			"integrity": "sha512-5QeSO8hSrKghtcWEoPiO036fxH0Ii2wVQfFZSP0oqQhmjk8bOLhDFXr4JrvaFmPuEWUoq4znY3uSi8UzLKxGqw==",
-			"deprecated": "Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net",
+			"version": "7.2.2",
+			"resolved": "https://registry.npmjs.org/supertest/-/supertest-7.2.2.tgz",
+			"integrity": "sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
+				"cookie-signature": "^1.2.2",
 				"methods": "^1.1.2",
-				"superagent": "^9.0.1"
+				"superagent": "^10.3.0"
 			},
 			"engines": {
 				"node": ">=14.18.0"
@@ -23349,8 +23344,10 @@
 			}
 		},
 		"node_modules/wdio-mediawiki": {
-			"resolved": "tests/selenium/wdio-mediawiki",
-			"link": true
+			"version": "6.1.0",
+			"resolved": "file:tests/selenium/wdio-mediawiki",
+			"dev": true,
+			"license": "MIT"
 		},
 		"node_modules/web-streams-polyfill": {
 			"version": "3.3.3",
@@ -24236,11 +24233,6 @@
 			"dependencies": {
 				"safe-buffer": "~5.2.0"
 			}
-		},
-		"tests/selenium/wdio-mediawiki": {
-			"version": "6.1.0",
-			"dev": true,
-			"license": "MIT"
 		}
 	}
 }
diff --git a/package.json b/package.json
index b883c66..245111c 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,7 @@
 		"@wikimedia/codex": "2.3.3",
 		"@wikimedia/codex-icons": "2.3.3",
 		"@wikimedia/karma-firefox-launcher": "2.1.3",
-		"api-testing": "1.7.1",
+		"api-testing": "1.7.2",
 		"chai-openapi-response-validator": "^0.14.2",
 		"domino": "2.1.0",
 		"dotenv": "8.2.0",
-- 
2.47.3

$ date
--- stdout ---
Sun Jan 11 00:36:10 UTC 2026

--- end ---
$ git clone file:///srv/git/mediawiki-core.git /src/repo --depth=1 -b master
--- stderr ---
Cloning into '/src/repo'...
Updating files:  56% (6822/12167)
Updating files:  57% (6936/12167)
Updating files:  58% (7057/12167)
Updating files:  59% (7179/12167)
Updating files:  60% (7301/12167)
Updating files:  61% (7422/12167)
Updating files:  62% (7544/12167)
Updating files:  63% (7666/12167)
Updating files:  64% (7787/12167)
Updating files:  65% (7909/12167)
Updating files:  66% (8031/12167)
Updating files:  67% (8152/12167)
Updating files:  68% (8274/12167)
Updating files:  69% (8396/12167)
Updating files:  70% (8517/12167)
Updating files:  71% (8639/12167)
Updating files:  72% (8761/12167)
Updating files:  73% (8882/12167)
Updating files:  74% (9004/12167)
Updating files:  75% (9126/12167)
Updating files:  76% (9247/12167)
Updating files:  77% (9369/12167)
Updating files:  78% (9491/12167)
Updating files:  79% (9612/12167)
Updating files:  80% (9734/12167)
Updating files:  81% (9856/12167)
Updating files:  82% (9977/12167)
Updating files:  83% (10099/12167)
Updating files:  84% (10221/12167)
Updating files:  85% (10342/12167)
Updating files:  86% (10464/12167)
Updating files:  87% (10586/12167)
Updating files:  88% (10707/12167)
Updating files:  89% (10829/12167)
Updating files:  90% (10951/12167)
Updating files:  91% (11072/12167)
Updating files:  92% (11194/12167)
Updating files:  93% (11316/12167)
Updating files:  94% (11437/12167)
Updating files:  95% (11559/12167)
Updating files:  96% (11681/12167)
Updating files:  97% (11802/12167)
Updating files:  98% (11924/12167)
Updating files:  99% (12046/12167)
Updating files: 100% (12167/12167)
Updating files: 100% (12167/12167), 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 ---
dcf26ce0d834a0836b4911d4d6b7555cedce8797 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "axios": {
      "name": "axios",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1097679,
          "name": "axios",
          "dependency": "axios",
          "title": "Axios Cross-Site Request Forgery Vulnerability",
          "url": "https://github.com/advisories/GHSA-wf5p-g6vw-rhxx",
          "severity": "moderate",
          "cwe": [
            "CWE-352"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N"
          },
          "range": ">=0.8.1 <0.28.0"
        },
        {
          "source": 1108262,
          "name": "axios",
          "dependency": "axios",
          "title": "Axios is vulnerable to DoS attack through lack of data size check",
          "url": "https://github.com/advisories/GHSA-4hjh-wcwx-xvwj",
          "severity": "high",
          "cwe": [
            "CWE-770"
          ],
          "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": "<0.30.2"
        },
        {
          "source": 1111034,
          "name": "axios",
          "dependency": "axios",
          "title": "axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL",
          "url": "https://github.com/advisories/GHSA-jr5f-v2jv-69x6",
          "severity": "high",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<0.30.0"
        }
      ],
      "effects": [
        "openapi-validator"
      ],
      "range": "<=0.30.1",
      "nodes": [
        "node_modules/axios"
      ],
      "fixAvailable": {
        "name": "chai-openapi-response-validator",
        "version": "0.14.1",
        "isSemVerMajor": true
      }
    },
    "chai-openapi-response-validator": {
      "name": "chai-openapi-response-validator",
      "severity": "high",
      "isDirect": true,
      "via": [
        "openapi-validator"
      ],
      "effects": [],
      "range": "0.11.2 || >=0.14.2-alpha.0",
      "nodes": [
        "node_modules/chai-openapi-response-validator"
      ],
      "fixAvailable": {
        "name": "chai-openapi-response-validator",
        "version": "0.14.1",
        "isSemVerMajor": true
      }
    },
    "openapi-validator": {
      "name": "openapi-validator",
      "severity": "high",
      "isDirect": false,
      "via": [
        "axios"
      ],
      "effects": [
        "chai-openapi-response-validator"
      ],
      "range": ">=0.14.2-alpha.0",
      "nodes": [
        "node_modules/openapi-validator"
      ],
      "fixAvailable": {
        "name": "chai-openapi-response-validator",
        "version": "0.14.1",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 3,
      "critical": 0,
      "total": 3
    },
    "dependencies": {
      "prod": 1,
      "dev": 1782,
      "optional": 38,
      "peer": 2,
      "peerOptional": 0,
      "total": 1782
    }
  }
}

--- 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: 140 installs, 0 updates, 0 removals
  - Locking composer/pcre (3.3.2)
  - Locking composer/semver (3.4.4)
  - Locking composer/spdx-licenses (1.5.9)
  - Locking composer/xdebug-handler (3.0.5)
  - Locking dealerdirect/phpcodesniffer-composer-installer (v1.2.0)
  - Locking doctrine/dbal (3.10.3)
  - Locking doctrine/deprecations (1.1.5)
  - Locking doctrine/event-manager (2.0.1)
  - Locking doctrine/instantiator (2.1.0)
  - Locking doctrine/sql-formatter (1.5.3)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking giorgiosironi/eris (0.14.1)
  - Locking guzzlehttp/guzzle (7.10.0)
  - Locking guzzlehttp/promises (2.3.0)
  - Locking guzzlehttp/psr7 (2.8.0)
  - Locking hamcrest/hamcrest-php (v2.1.1)
  - Locking johnkary/phpunit-speedtrap (v4.0.1)
  - Locking justinrainbow/json-schema (5.3.1)
  - Locking lcobucci/clock (2.2.0)
  - Locking lcobucci/jwt (4.1.5)
  - Locking liuggio/statsd-php-client (v1.0.18)
  - Locking mck89/peast (v1.17.4)
  - Locking mediawiki/mediawiki-codesniffer (v48.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.18.0)
  - Locking mediawiki/minus-x (1.1.3)
  - Locking mediawiki/phan-taint-check-plugin (8.0.0)
  - Locking microsoft/tolerant-php-parser (v0.1.2)
  - Locking monolog/monolog (2.11.0)
  - Locking myclabs/deep-copy (1.13.4)
  - Locking netresearch/jsonmapper (v4.5.0)
  - Locking nikic/php-parser (v5.7.0)
  - Locking oojs/oojs-ui (v0.53.1)
  - Locking pear/console_getopt (v1.4.3)
  - Locking pear/mail (v2.0.0)
  - Locking pear/mail_mime (1.10.12)
  - Locking pear/net_smtp (1.12.2)
  - Locking pear/net_socket (v1.2.2)
  - Locking pear/net_url2 (v2.2.3)
  - Locking pear/pear-core-minimal (v1.10.17)
  - Locking pear/pear_exception (v1.0.2)
  - Locking phan/phan (5.5.2)
  - 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.4.0)
  - Locking phpcsstandards/phpcsutils (1.1.1)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.6.6)
  - Locking phpdocumentor/type-resolver (1.12.0)
  - Locking phpstan/phpdoc-parser (2.3.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.21)
  - Locking psr/cache (3.0.0)
  - Locking psr/clock (1.0.0)
  - Locking psr/container (2.0.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.18)
  - 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.9)
  - Locking sebastian/complexity (2.0.3)
  - Locking sebastian/diff (4.0.6)
  - Locking sebastian/environment (5.1.5)
  - Locking sebastian/exporter (4.0.8)
  - Locking sebastian/global-state (5.0.8)
  - 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.6)
  - Locking sebastian/resource-operations (3.0.4)
  - Locking sebastian/type (3.2.1)
  - Locking sebastian/version (3.0.2)
  - Locking seld/jsonlint (1.11.0)
  - Locking squizlabs/php_codesniffer (3.13.2)
  - Locking stella-maris/clock (0.1.7)
  - Locking symfony/console (v7.4.3)
  - Locking symfony/deprecation-contracts (v3.6.0)
  - Locking symfony/polyfill-php83 (v1.33.0)
  - Locking symfony/polyfill-php84 (v1.33.0)
  - Locking symfony/polyfill-php85 (v1.33.0)
  - Locking symfony/service-contracts (v3.6.1)
  - Locking symfony/string (v7.3.8)
  - Locking symfony/var-dumper (v8.0.3)
  - Locking symfony/yaml (v6.4.30)
  - Locking theseer/tokenizer (1.3.1)
  - Locking tysonandre/var_representation_polyfill (0.1.3)
  - Locking webmozart/assert (2.1.1)
  - Locking wikimedia/alea (1.0.0)
  - Locking wikimedia/assert (v0.5.1)
  - Locking wikimedia/at-ease (v3.0.0)
  - Locking wikimedia/base-convert (v2.0.2)
  - Locking wikimedia/bcp-47-code (v2.0.2)
  - Locking wikimedia/cdb (3.0.0)
  - Locking wikimedia/cldr-plural-rule-parser (v3.0.0)
  - Locking wikimedia/codex (v0.7.1)
  - Locking wikimedia/common-passwords (v0.5.1)
  - Locking wikimedia/composer-merge-plugin (v2.1.0)
  - Locking wikimedia/css-sanitizer (v6.2.0)
  - Locking wikimedia/cssjanus (v2.3.0)
  - Locking wikimedia/html-formatter (4.1.0)
  - Locking wikimedia/idle-dom (v2.1.0)
  - Locking wikimedia/ip-utils (6.0.0)
  - Locking wikimedia/json-codec (v4.0.0)
  - Locking wikimedia/langconv (0.5.0)
  - Locking wikimedia/less.php (v5.5.0)
  - Locking wikimedia/minify (2.10.0)
  - Locking wikimedia/normalized-exception (v2.1.1)
  - Locking wikimedia/object-factory (v5.0.1)
  - Locking wikimedia/parsoid (v0.23.0-a10)
  - Locking wikimedia/php-session-serializer (v3.0.2)
  - Locking wikimedia/purtle (v2.0.0)
  - Locking wikimedia/relpath (4.1.0)
  - Locking wikimedia/remex-html (5.1.0)
  - Locking wikimedia/request-timeout (v3.0.0)
  - Locking wikimedia/running-stat (v2.2.0)
  - Locking wikimedia/scoped-callback (v5.0.0)
  - Locking wikimedia/services (4.0.0)
  - Locking wikimedia/shellbox (4.4.0)
  - Locking wikimedia/testing-access-wrapper (4.0.0)
  - Locking wikimedia/timestamp (v5.1.0)
  - Locking wikimedia/utfnormal (4.0.0)
  - Locking wikimedia/wait-condition-loop (v2.0.2)
  - Locking wikimedia/wikipeg (6.0.0)
  - Locking wikimedia/wrappedstring (v4.1.0)
  - Locking wikimedia/xmp-reader (0.10.2)
  - Locking wikimedia/zest-css (4.1.0)
  - Locking wmde/hamcrest-html-matchers (v1.1.0)
  - Locking zordius/lightncandy (v1.2.6)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 140 installs, 0 updates, 0 removals
  - Downloading wikimedia/composer-merge-plugin (v2.1.0)
  - Downloading doctrine/dbal (3.10.3)
  - Downloading doctrine/sql-formatter (1.5.3)
  - Downloading oojs/oojs-ui (v0.53.1)
  - Downloading pear/pear_exception (v1.0.2)
  - Downloading pear/console_getopt (v1.4.3)
  - Downloading pear/pear-core-minimal (v1.10.17)
  - Downloading pear/mail (v2.0.0)
  - Downloading pear/mail_mime (1.10.12)
  - Downloading pear/net_socket (v1.2.2)
  - Downloading pear/net_smtp (1.12.2)
  - Downloading wikimedia/cldr-plural-rule-parser (v3.0.0)
  - Downloading wikimedia/common-passwords (v0.5.1)
  - Downloading wikimedia/cssjanus (v2.3.0)
  - Downloading wikimedia/html-formatter (4.1.0)
  - Downloading wikimedia/less.php (v5.5.0)
  - Downloading wikimedia/minify (2.10.0)
  - Downloading wikimedia/parsoid (v0.23.0-a10)
  - Downloading wikimedia/php-session-serializer (v3.0.2)
  - Downloading wikimedia/relpath (4.1.0)
  - Downloading wikimedia/request-timeout (v3.0.0)
  - Downloading wikimedia/running-stat (v2.2.0)
  - Downloading wikimedia/shellbox (4.4.0)
  - Downloading wikimedia/wait-condition-loop (v2.0.2)
  - Downloading wikimedia/wrappedstring (v4.1.0)
  - Downloading wikimedia/xmp-reader (0.10.2)
  0/26 [>---------------------------]   0%
  5/26 [=====>----------------------]  19%
 15/26 [================>-----------]  57%
 21/26 [======================>-----]  80%
 24/26 [=========================>--]  92%
 26/26 [============================] 100%
  - Installing wikimedia/composer-merge-plugin (v2.1.0): Extracting archive
  - Installing squizlabs/php_codesniffer (3.13.2): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.2.0): Extracting archive
  - Installing composer/pcre (3.3.2): 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.5): Extracting archive
  - Installing doctrine/dbal (3.10.3): Extracting archive
  - Installing doctrine/sql-formatter (1.5.3): Extracting archive
  - Installing giorgiosironi/eris (0.14.1): Extracting archive
  - Installing guzzlehttp/promises (2.3.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.6): 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.8): Extracting archive
  - Installing sebastian/exporter (4.0.8): Extracting archive
  - Installing sebastian/environment (5.1.5): Extracting archive
  - Installing sebastian/diff (4.0.6): Extracting archive
  - Installing sebastian/comparator (4.0.9): 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.3.1): Extracting archive
  - Installing nikic/php-parser (v5.7.0): 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.13.4): Extracting archive
  - Installing doctrine/instantiator (2.1.0): Extracting archive
  - Installing phpunit/phpunit (9.6.21): Extracting archive
  - Installing johnkary/phpunit-speedtrap (v4.0.1): Extracting archive
  - Installing psr/clock (1.0.0): Extracting archive
  - Installing stella-maris/clock (0.1.7): Extracting archive
  - Installing lcobucci/clock (2.2.0): Extracting archive
  - Installing lcobucci/jwt (4.1.5): Extracting archive
  - Installing mck89/peast (v1.17.4): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.1.1): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.4.0): Extracting archive
  - Installing composer/spdx-licenses (1.5.9): Extracting archive
  - Installing composer/semver (3.4.4): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v48.0.0): Extracting archive
  - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
  - Installing symfony/string (v7.3.8): Extracting archive
  - Installing symfony/deprecation-contracts (v3.6.0): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.6.1): Extracting archive
  - Installing symfony/console (v7.4.3): 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 (2.1.1): Extracting archive
  - Installing phpstan/phpdoc-parser (2.3.0): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing phpdocumentor/type-resolver (1.12.0): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.6.6): 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.5.2): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (8.0.0): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.18.0): Extracting archive
  - Installing mediawiki/minus-x (1.1.3): Extracting archive
  - Installing oojs/oojs-ui (v0.53.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.17): Extracting archive
  - Installing pear/mail (v2.0.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.2): 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-message (1.1): Extracting archive
  - Installing psr/http-client (1.0.3): Extracting archive
  - Installing psr/http-factory (1.1.0): Extracting archive
  - Installing symfony/var-dumper (v8.0.3): Extracting archive
  - Installing psy/psysh (v0.12.18): Extracting archive
  - Installing ralouphie/getallheaders (3.0.3): Extracting archive
  - Installing seld/jsonlint (1.11.0): Extracting archive
  - Installing symfony/polyfill-php85 (v1.33.0): Extracting archive
  - Installing symfony/yaml (v6.4.30): Extracting archive
  - Installing wikimedia/alea (1.0.0): Extracting archive
  - Installing wikimedia/at-ease (v3.0.0): Extracting archive
  - Installing wikimedia/cdb (3.0.0): Extracting archive
  - Installing wikimedia/cldr-plural-rule-parser (v3.0.0): Extracting archive
  - Installing zordius/lightncandy (v1.2.6): Extracting archive
  - Installing wikimedia/scoped-callback (v5.0.0): Extracting archive
  - Installing wikimedia/services (4.0.0): Extracting archive
  - Installing guzzlehttp/psr7 (2.8.0): Extracting archive
  - Installing wikimedia/codex (v0.7.1): Extracting archive
  - Installing wikimedia/common-passwords (v0.5.1): Extracting archive
  - Installing wikimedia/utfnormal (4.0.0): Extracting archive
  - Installing wikimedia/css-sanitizer (v6.2.0): Extracting archive
  - Installing wikimedia/cssjanus (v2.3.0): Extracting archive
  - Installing wikimedia/html-formatter (4.1.0): Extracting archive
  - Installing wikimedia/assert (v0.5.1): Extracting archive
  - Installing wikimedia/langconv (0.5.0): Extracting archive
  - Installing wikimedia/less.php (v5.5.0): Extracting archive
  - Installing pear/net_url2 (v2.2.3): Extracting archive
  - Installing wikimedia/minify (2.10.0): Extracting archive
  - Installing wikimedia/zest-css (4.1.0): Extracting archive
  - Installing wikimedia/wikipeg (6.0.0): Extracting archive
  - Installing wikimedia/remex-html (5.1.0): Extracting archive
  - Installing wikimedia/object-factory (v5.0.1): Extracting archive
  - Installing wikimedia/json-codec (v4.0.0): Extracting archive
  - Installing wikimedia/base-convert (v2.0.2): Extracting archive
  - Installing wikimedia/ip-utils (6.0.0): Extracting archive
  - Installing wikimedia/idle-dom (v2.1.0): Extracting archive
  - Installing wikimedia/bcp-47-code (v2.0.2): Extracting archive
  - Installing symfony/polyfill-php84 (v1.33.0): Extracting archive
  - Installing symfony/polyfill-php83 (v1.33.0): Extracting archive
  - Installing liuggio/statsd-php-client (v1.0.18): Extracting archive
  - Installing justinrainbow/json-schema (5.3.1): Extracting archive
  - Installing wikimedia/parsoid (v0.23.0-a10): Extracting archive
  - Installing wikimedia/php-session-serializer (v3.0.2): Extracting archive
  - Installing wikimedia/purtle (v2.0.0): Extracting archive
  - Installing wikimedia/relpath (4.1.0): Extracting archive
  - Installing wikimedia/normalized-exception (v2.1.1): Extracting archive
  - Installing wikimedia/request-timeout (v3.0.0): Extracting archive
  - Installing wikimedia/running-stat (v2.2.0): Extracting archive
  - Installing monolog/monolog (2.11.0): Extracting archive
  - Installing guzzlehttp/guzzle (7.10.0): Extracting archive
  - Installing wikimedia/shellbox (4.4.0): Extracting archive
  - Installing wikimedia/testing-access-wrapper (4.0.0): Extracting archive
  - Installing wikimedia/wait-condition-loop (v2.0.2): Extracting archive
  - Installing wikimedia/wrappedstring (v4.1.0): Extracting archive
  - Installing wikimedia/timestamp (v5.1.0): Extracting archive
  - Installing wikimedia/xmp-reader (0.10.2): Extracting archive
  - Installing hamcrest/hamcrest-php (v2.1.1): Extracting archive
  - Installing wmde/hamcrest-html-matchers (v1.1.0): Extracting archive
   0/137 [>---------------------------]   0%
  29/137 [=====>----------------------]  21%
  55/137 [===========>----------------]  40%
  70/137 [==============>-------------]  51%
  83/137 [================>-----------]  60%
  96/137 [===================>--------]  70%
 115/137 [=======================>----]  83%
 130/137 [==========================>-]  94%
 137/137 [============================] 100%
27 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating optimized autoload files
52 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:api-testing from 1.7.1 -> 1.7.2
$ /usr/bin/npm install
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.3.3',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.3.3',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated osenv@0.1.5: This package is no longer supported.
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated node-domexception@1.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 1756 packages, and audited 1757 packages in 32s

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

3 high severity vulnerabilities

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

Run `npm audit` for details.

--- end ---
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json

--- end ---
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.3.3',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.3.3',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated osenv@0.1.5: This package is no longer supported.
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated node-domexception@1.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 1756 packages, and audited 1757 packages in 40s

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

3 high severity vulnerabilities

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

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS tests/jest/mediawiki.special.block/stores/block.test.js
PASS tests/jest/mediawiki.special.block/BlockLog.test.js
PASS tests/jest/mediawiki.languageselector/useLanguageSelector.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js
PASS tests/jest/mediawiki.special.block/UserLookup.test.js
PASS tests/jest/mediawiki.languageselector/MultiselectLookupLanguageSelector.test.js
PASS tests/jest/mediawiki.languageselector/LookupLanguageSelector.test.js
PASS tests/jest/mediawiki.special.block/ExpiryField.test.js
PASS tests/jest/mediawiki.languageselector/factory.test.js
PASS tests/jest/mediawiki.special.block/util.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js
PASS tests/jest/mediawiki.special.block/NamespacesField.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/App.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/instrumentation.test.js
PASS tests/jest/mediawiki.languageselector/languageSearch.test.js
PASS tests/jest/mediawiki.special.block/BlockDetailsField.test.js
PASS tests/jest/mediawiki.special.block/ReasonField.test.js
PASS tests/jest/mediawiki.special.block/AdditionalDetailsField.test.js
PASS tests/jest/mediawiki.special.block/init.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/urlGenerator.test.js
PASS tests/jest/mediawiki.special.block/SpecialBlock.test.js (16.205 s)

Test Suites: 21 passed, 21 total
Tests:       136 passed, 136 total
Snapshots:   3 passed, 3 total
Time:        24.284 s
Ran all test suites.
--- stdout ---

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

Running "eslint:all" (eslint) task

/src/repo/resources/src/jquery.lengthLimit.js
  41:1  warning  Syntax error in namepath: '$.fn.trimByteLength'  jsdoc/valid-types

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

/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.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.api/index.js
  213:1  warning  The type 'JSON.parse' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.authenticationPopup/AuthPopup.js
  181:1  warning  The type 'AuthPopup.CheckLoggedIn' is undefined  jsdoc/no-undefined-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
  224:1  warning  The type 'mediawiki.inspect.runReports' is undefined  jsdoc/no-undefined-types
  250:1  warning  The type 'mediawiki.inspect.js.html' is undefined     jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.cookie/jar.js
  74:23  warning  Avoid direct access to document.cookie. Use mw.cookie instead  mediawiki/no-cookie
  93:23  warning  Avoid direct access to document.cookie. Use mw.cookie instead  mediawiki/no-cookie

/src/repo/resources/src/mediawiki.diff/inlineFormatToggle.js
  150:1  warning  Syntax error in namepath: ~'wikipage.diff.wikitextDiffBody'  jsdoc/valid-types
  162:1  warning  Syntax error in namepath: ~'wikipage.diff.diffTypeSwitch'    jsdoc/valid-types

/src/repo/resources/src/mediawiki.diff/undoButtonToggle.js
  5:1  warning  Missing JSDoc @param "$undoButton" type  jsdoc/require-param-type

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

/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.inspect.js
  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
  309:18  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage

/src/repo/resources/src/mediawiki.jqueryMsg/mediawiki.jqueryMsg.js
  148:1  warning  Found more than one @return declaration  jsdoc/require-returns
  148:1  warning  Found more than one @return declaration  jsdoc/require-returns-check
  338:2  warning  @throws should have a type               jsdoc/require-throws-type

/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.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
  75:1  warning  Missing JSDoc @param "message" type  jsdoc/require-param-type
  76:1  warning  Missing JSDoc @param "options" type  jsdoc/require-param-type

/src/repo/resources/src/mediawiki.page.gallery.slideshow.js
  138:22  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  143:22  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  148:24  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.page.preview.js
  409:1  warning  Syntax error in namepath: ~'wikipage.tableOfContents'   jsdoc/valid-types
  690:1  warning  The type 'Hooks.wikipage.categories' is undefined       jsdoc/no-undefined-types
  691:1  warning  The type 'Hooks.wikipage.content' is undefined          jsdoc/no-undefined-types
  692:1  warning  The type 'Hooks.wikipage.diff' is undefined             jsdoc/no-undefined-types
  693:1  warning  The type 'Hooks.wikipage.indicators' is undefined       jsdoc/no-undefined-types
  694:1  warning  The type 'Hooks.wikipage.tableOfContents' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.page.ready/enableSearchDialog.js
  19:21  warning  Found non-literal argument in require  security/detect-non-literal-require

/src/repo/resources/src/mediawiki.page.ready/ready.js
   98:1   warning  Syntax error in namepath: ~'wikipage.indicators'                       jsdoc/valid-types
  118:1   warning  Syntax error in namepath: ~'wikipage.content'                          jsdoc/valid-types
  139:1   warning  Syntax error in namepath: ~'wikipage.categories'                       jsdoc/valid-types
  152:1   warning  The type 'Hooks.wikipage.content' is undefined                         jsdoc/no-undefined-types
  155:1   warning  Syntax error in namepath: ~'wikipage.diff'                             jsdoc/valid-types
  186:1   warning  Syntax error in namepath: ~'skin.logout'                               jsdoc/valid-types
  296:21  warning  Found non-literal argument in require                                  security/detect-non-literal-require
  331:7   warning  Avoid direct access to sessionStorage. Use mw.storage.session instead  mediawiki/no-storage

/src/repo/resources/src/mediawiki.page.watch.ajax/watch-ajax.js
  128:1  warning  Syntax error in namepath: ~'wikipage.watchlistChange'   jsdoc/valid-types
  152:1  warning  The type 'Hooks.wikipage.watchlistChange' is undefined  jsdoc/no-undefined-types
  178:1  warning  The type 'Hooks.wikipage.watchlistChange' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.rcfilters/Controller.js
  330:1  warning  Found more than one @return declaration                  jsdoc/require-returns
  330:1  warning  Found more than one @return declaration                  jsdoc/require-returns-check
  550: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
  1200:1  warning  The type 'searchChange' is undefined  jsdoc/no-undefined-types

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

/src/repo/resources/src/mediawiki.rcfilters/ui/FilterMenuHeaderWidget.js
  33:20  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  42:18  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  62:26  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  67:32  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  72:30  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/FilterTagMultiselectWidget.js
  107:21  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  112:24  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  278:28  warning  All possible CSS classes should be documented. See https://w.wiki/PS2 for details                    mediawiki/class-doc
  427:1   warning  Syntax error in namepath: ~'RcFilters.popup.open'                                                    jsdoc/valid-types

/src/repo/resources/src/mediawiki.rcfilters/ui/FilterWrapperWidget.js
  69:28  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/HighlightColorPickerWidget.js
  36:17  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/ItemMenuOptionWidget.js
  59:19  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/SavedLinksListItemWidget.js
  27:20  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  59:20  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.searchSuggest/searchSuggest.js
  36:1  warning  The type 'ResponseMetaData' is undefined  jsdoc/no-undefined-types
  43:1  warning  The type 'ResponseFunction' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/App.vue
   76:3  warning  Prop 'router' requires default value to be set  vue/require-default-prop
  225:1  warning  The type 'AbortableSearchFetch' is undefined    jsdoc/no-undefined-types
  309:1  warning  The type 'SearchSubmitEvent' is undefined       jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/fetch.js
  21:1  warning  The type 'RequestInit' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js
   2:1  warning  The type 'FetchEndEvent' is undefined         jsdoc/no-undefined-types
  16:1  warning  The type 'SuggestionClickEvent' is undefined  jsdoc/no-undefined-types
  16:1  warning  The type 'SearchSubmitEvent' is undefined     jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/restSearchClient.js
    4:1  warning  Syntax error in type: import('./urlGenerator.js').UrlGenerator  jsdoc/valid-types
   11:1  warning  The type 'RestResult' is undefined                              jsdoc/no-undefined-types
   17:1  warning  The type 'SearchResult' is undefined                            jsdoc/no-undefined-types
  100:1  warning  The type 'fetchRecommendationByTitle' is undefined              jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/urlGenerator.js
   2:1  warning  The type 'Record' is undefined        jsdoc/no-undefined-types
   9:1  warning  The type 'RestResult' is undefined    jsdoc/no-undefined-types
   9:1  warning  The type 'SearchResult' is undefined  jsdoc/no-undefined-types
  30:1  warning  The type 'RestResult' is undefined    jsdoc/no-undefined-types
  30:1  warning  The type 'SearchResult' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.special.apisandbox/ApiSandbox.js
  501:9  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.special.apisandbox/ApiSandboxLayout.js
   44:1   warning  Found more than one @return declaration                                                              jsdoc/require-returns
   44:1   warning  Found more than one @return declaration                                                              jsdoc/require-returns-check
  403:19  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  584:7   warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.special.block/init.js
  26:1  warning  Syntax error in namepath: ~'SpecialBlock.block'  jsdoc/valid-types
  36:1  warning  Syntax error in namepath: ~'SpecialBlock.form'   jsdoc/valid-types

/src/repo/resources/src/mediawiki.storage/index.js
  50:18  warning  Avoid direct access to localStorage. Use mw.storage instead            mediawiki/no-storage
  55:18  warning  Avoid direct access to sessionStorage. Use mw.storage.session instead  mediawiki/no-storage

/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
  147:1  warning  The type 'TemplateRenderer' is undefined         jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.util/util.js
   589:1  warning  The type 'Hooks.util.addPortlet' is undefined      jsdoc/no-undefined-types
   628:1  warning  Syntax error in namepath: ~'util.addPortlet'       jsdoc/valid-types
   702:1  warning  The type 'Hooks.util.addPortletLink' is undefined  jsdoc/no-undefined-types
   797:1  warning  Syntax error in namepath: ~'util.addPortletLink'   jsdoc/valid-types
  1078:2  warning  Missing JSDoc @return declaration                  jsdoc/require-returns

/src/repo/resources/src/mediawiki.widgets.datetime/CalendarWidget.js
  114:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  120:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/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/DateTimeInputWidget.js
  449:23  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/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/Table/mw.widgets.RowWidget.js
  47:23  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js
  355:22  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  363:19  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  369:21  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  375:21  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.widgets/mw.widgets.ExpiryInputWidget.js
  36:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  40:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/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
  112:2  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/tests/qunit/resources/mediawiki.deflate.test.js
  68:5  warning  Unused eslint-disable directive (no problems were reported from 'qunit/no-async-in-loops')

/src/repo/tests/qunit/resources/startup/mw.loader.test.js
    30:5  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1072:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1081:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1090:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1103:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage

/src/repo/tests/selenium/specs/page.js
  80:1  warning  This line has a length of 103. Maximum allowed is 100  max-len

/src/repo/tests/selenium/wdio-mediawiki/Api.js
  65:1  warning  Missing JSDoc @param "params" type  jsdoc/require-param-type

/src/repo/tests/selenium/wdio-mediawiki/PrometheusFileReporter.js
  114:1   warning  This line has a length of 105. Maximum allowed is 100                       max-len
  124:1   warning  This line has a length of 105. Maximum allowed is 100                       max-len
  167:3   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  184:22  warning  Found readdirSync from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename
  189:28  warning  Found readFileSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  301:3   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

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

/src/repo/tests/selenium/wdio-mediawiki/api/Cookies.js
  13:1  warning  The type 'Iterable' is undefined  jsdoc/no-undefined-types

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

✖ 151 problems (0 errors, 151 warnings)
  0 errors and 1 warning potentially fixable with the `--fix` option.


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

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

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

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

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

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

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

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

Running "banana:languageconverter" (banana) task
>> 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
>> 1 message directory checked.

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

Running "stylelint:resources" (stylelint) task
>> resources/src/mediawiki.interface.helpers.styles/linker.styles.less
>>   73: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/content.media-dark.less
>>   31: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.special.watchlistlabels/labelmanager.less
>>   8: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
>> 
>> resources/src/mediawiki.special.watchlistlabels/LabelOnboarding.vue
>>   160: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
>> 
>> resources/src/mediawiki.special/userrights.less
>>   28:4  ⚠  Unexpected browser feature "css-has" is not supported by Edge 79,80,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104, Firefox 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,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120, 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,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104, Safari 10,11,12,13,14,15,10.1,11.1,12.1,13.1,14.1,15.1,15.2-15.3, 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,14.5-14.8,15.0-15.1,15.2-15.3  plugin/no-unsupported-browser-features
>> 
>> ⚠ 5 problems (0 errors, 5 warnings)

⚠ 5 warnings

>> Linted 224 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

------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------
File                                | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                                                                                                   
------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------
All files                           |   93.25 |    89.55 |      77 |   93.25 |                                                                                                                     
 mediawiki.skinning.typeaheadSearch |   86.49 |    82.14 |   56.25 |   86.49 |                                                                                                                     
  App.vue                           |   76.41 |    69.23 |   16.66 |   76.41 | 176,211-213,218-221,229-252,256-263,272-282,292-305,312-313,317-321,325,329-332,337-340,344-348,353,358-359,365-367 
  TypeaheadSearchWrapper.vue        |   94.24 |    66.66 |     100 |   94.24 | 54-61                                                                                                               
  fetch.js                          |     100 |     87.5 |      75 |     100 | 31                                                                                                                  
  instrumentation.js                |   82.82 |      100 |      60 |   82.82 | 4-13,18-24                                                                                                          
  restSearchClient.js               |    97.4 |    77.77 |   85.71 |    97.4 | 113-115,134                                                                                                         
  urlGenerator.js                   |     100 |      100 |     100 |     100 |                                                                                                                     
 mediawiki.special.block            |   94.37 |    92.85 |   82.35 |   94.37 |                                                                                                                     
  SpecialBlock.vue                  |   93.92 |    93.18 |   72.72 |   93.92 | 248-257,300-305,311-325,443-444,455-457                                                                             
  init.js                           |     100 |      100 |     100 |     100 |                                                                                                                     
  util.js                           |   94.64 |     90.9 |     100 |   94.64 | 82-84,86-88                                                                                                         
 mediawiki.special.block/components |   95.12 |    91.93 |    87.8 |   95.12 |                                                                                                                     
  AdditionalDetailsField.vue        |     100 |       80 |     100 |     100 | 68                                                                                                                  
  BlockDetailsField.vue             |     100 |      100 |     100 |     100 |                                                                                                                     
  BlockLog.vue                      |   98.94 |      100 |   83.33 |   98.94 | 337-340,401                                                                                                         
  BlockTypeField.vue                |   95.04 |       50 |     100 |   95.04 | 73-77                                                                                                               
  ConfirmationDialog.vue            |   96.34 |      100 |      50 |   96.34 | 70-72                                                                                                               
  ExpiryField.vue                   |   95.07 |    89.47 |     100 |   95.07 | 145-146,148-149,177-186,245-246                                                                                     
  NamespacesField.vue               |   90.42 |    88.88 |   66.66 |   90.42 | 60-68                                                                                                               
  PagesField.vue                    |   70.06 |       50 |      50 |   70.06 | 46-47,56-57,72-79,88-90,97-118,127-133                                                                              
  ReasonField.vue                   |   97.22 |    93.75 |     100 |   97.22 | 101-104                                                                                                             
  UserLookup.vue                    |   97.74 |    95.23 |     100 |   97.74 | 145-147,196-198,231-232                                                                                             
  ValidatingTextInput.js            |     100 |      100 |     100 |     100 |                                                                                                                     
 mediawiki.special.block/stores     |   95.71 |    86.66 |      90 |   95.71 |                                                                                                                     
  block.js                          |   95.71 |    86.66 |      90 |   95.71 | 329-330,439-440,442-443,463-464,467-468,471-472,486-501                                                             
------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "axios": {
      "name": "axios",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1097679,
          "name": "axios",
          "dependency": "axios",
          "title": "Axios Cross-Site Request Forgery Vulnerability",
          "url": "https://github.com/advisories/GHSA-wf5p-g6vw-rhxx",
          "severity": "moderate",
          "cwe": [
            "CWE-352"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N"
          },
          "range": ">=0.8.1 <0.28.0"
        },
        {
          "source": 1108262,
          "name": "axios",
          "dependency": "axios",
          "title": "Axios is vulnerable to DoS attack through lack of data size check",
          "url": "https://github.com/advisories/GHSA-4hjh-wcwx-xvwj",
          "severity": "high",
          "cwe": [
            "CWE-770"
          ],
          "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": "<0.30.2"
        },
        {
          "source": 1111034,
          "name": "axios",
          "dependency": "axios",
          "title": "axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL",
          "url": "https://github.com/advisories/GHSA-jr5f-v2jv-69x6",
          "severity": "high",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<0.30.0"
        }
      ],
      "effects": [
        "openapi-validator"
      ],
      "range": "<=0.30.1",
      "nodes": [
        "node_modules/axios"
      ],
      "fixAvailable": {
        "name": "chai-openapi-response-validator",
        "version": "0.14.1",
        "isSemVerMajor": true
      }
    },
    "chai-openapi-response-validator": {
      "name": "chai-openapi-response-validator",
      "severity": "high",
      "isDirect": true,
      "via": [
        "openapi-validator"
      ],
      "effects": [],
      "range": "0.11.2 || >=0.14.2-alpha.0",
      "nodes": [
        "node_modules/chai-openapi-response-validator"
      ],
      "fixAvailable": {
        "name": "chai-openapi-response-validator",
        "version": "0.14.1",
        "isSemVerMajor": true
      }
    },
    "openapi-validator": {
      "name": "openapi-validator",
      "severity": "high",
      "isDirect": false,
      "via": [
        "axios"
      ],
      "effects": [
        "chai-openapi-response-validator"
      ],
      "range": ">=0.14.2-alpha.0",
      "nodes": [
        "node_modules/openapi-validator"
      ],
      "fixAvailable": {
        "name": "chai-openapi-response-validator",
        "version": "0.14.1",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 3,
      "critical": 0,
      "total": 3
    },
    "dependencies": {
      "prod": 1,
      "dev": 1782,
      "optional": 38,
      "peer": 2,
      "peerOptional": 0,
      "total": 1782
    }
  }
}

--- 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
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.3.3',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.3.3',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
--- stdout ---
{
  "added": 26,
  "removed": 0,
  "changed": 0,
  "audited": 1783,
  "funding": 234,
  "audit": {
    "auditReportVersion": 2,
    "vulnerabilities": {
      "axios": {
        "name": "axios",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1097679,
            "name": "axios",
            "dependency": "axios",
            "title": "Axios Cross-Site Request Forgery Vulnerability",
            "url": "https://github.com/advisories/GHSA-wf5p-g6vw-rhxx",
            "severity": "moderate",
            "cwe": [
              "CWE-352"
            ],
            "cvss": {
              "score": 6.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N"
            },
            "range": ">=0.8.1 <0.28.0"
          },
          {
            "source": 1108262,
            "name": "axios",
            "dependency": "axios",
            "title": "Axios is vulnerable to DoS attack through lack of data size check",
            "url": "https://github.com/advisories/GHSA-4hjh-wcwx-xvwj",
            "severity": "high",
            "cwe": [
              "CWE-770"
            ],
            "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": "<0.30.2"
          },
          {
            "source": 1111034,
            "name": "axios",
            "dependency": "axios",
            "title": "axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL",
            "url": "https://github.com/advisories/GHSA-jr5f-v2jv-69x6",
            "severity": "high",
            "cwe": [
              "CWE-918"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": "<0.30.0"
          }
        ],
        "effects": [
          "openapi-validator"
        ],
        "range": "<=0.30.1",
        "nodes": [
          "node_modules/axios"
        ],
        "fixAvailable": {
          "name": "chai-openapi-response-validator",
          "version": "0.14.1",
          "isSemVerMajor": true
        }
      },
      "chai-openapi-response-validator": {
        "name": "chai-openapi-response-validator",
        "severity": "high",
        "isDirect": true,
        "via": [
          "openapi-validator"
        ],
        "effects": [],
        "range": "0.11.2 || >=0.14.2-alpha.0",
        "nodes": [
          "node_modules/chai-openapi-response-validator"
        ],
        "fixAvailable": {
          "name": "chai-openapi-response-validator",
          "version": "0.14.1",
          "isSemVerMajor": true
        }
      },
      "openapi-validator": {
        "name": "openapi-validator",
        "severity": "high",
        "isDirect": false,
        "via": [
          "axios"
        ],
        "effects": [
          "chai-openapi-response-validator"
        ],
        "range": ">=0.14.2-alpha.0",
        "nodes": [
          "node_modules/openapi-validator"
        ],
        "fixAvailable": {
          "name": "chai-openapi-response-validator",
          "version": "0.14.1",
          "isSemVerMajor": true
        }
      }
    },
    "metadata": {
      "vulnerabilities": {
        "info": 0,
        "low": 0,
        "moderate": 0,
        "high": 3,
        "critical": 0,
        "total": 3
      },
      "dependencies": {
        "prod": 1,
        "dev": 1782,
        "optional": 38,
        "peer": 2,
        "peerOptional": 0,
        "total": 1782
      }
    }
  }
}

--- end ---
{"added": 26, "removed": 0, "changed": 0, "audited": 1783, "funding": 234, "audit": {"auditReportVersion": 2, "vulnerabilities": {"axios": {"name": "axios", "severity": "high", "isDirect": false, "via": [{"source": 1097679, "name": "axios", "dependency": "axios", "title": "Axios Cross-Site Request Forgery Vulnerability", "url": "https://github.com/advisories/GHSA-wf5p-g6vw-rhxx", "severity": "moderate", "cwe": ["CWE-352"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N"}, "range": ">=0.8.1 <0.28.0"}, {"source": 1108262, "name": "axios", "dependency": "axios", "title": "Axios is vulnerable to DoS attack through lack of data size check", "url": "https://github.com/advisories/GHSA-4hjh-wcwx-xvwj", "severity": "high", "cwe": ["CWE-770"], "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": "<0.30.2"}, {"source": 1111034, "name": "axios", "dependency": "axios", "title": "axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL", "url": "https://github.com/advisories/GHSA-jr5f-v2jv-69x6", "severity": "high", "cwe": ["CWE-918"], "cvss": {"score": 0, "vectorString": null}, "range": "<0.30.0"}], "effects": ["openapi-validator"], "range": "<=0.30.1", "nodes": ["node_modules/axios"], "fixAvailable": {"name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true}}, "chai-openapi-response-validator": {"name": "chai-openapi-response-validator", "severity": "high", "isDirect": true, "via": ["openapi-validator"], "effects": [], "range": "0.11.2 || >=0.14.2-alpha.0", "nodes": ["node_modules/chai-openapi-response-validator"], "fixAvailable": {"name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true}}, "openapi-validator": {"name": "openapi-validator", "severity": "high", "isDirect": false, "via": ["axios"], "effects": ["chai-openapi-response-validator"], "range": ">=0.14.2-alpha.0", "nodes": ["node_modules/openapi-validator"], "fixAvailable": {"name": "chai-openapi-response-validator", "version": "0.14.1", "isSemVerMajor": true}}}, "metadata": {"vulnerabilities": {"info": 0, "low": 0, "moderate": 0, "high": 3, "critical": 0, "total": 3}, "dependencies": {"prod": 1, "dev": 1782, "optional": 38, "peer": 2, "peerOptional": 0, "total": 1782}}}}
$ /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
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.3.3',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.3.3',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
--- stdout ---

up to date, audited 1757 packages in 5s

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

# npm audit report

axios  <=0.30.1
Severity: high
Axios Cross-Site Request Forgery Vulnerability - https://github.com/advisories/GHSA-wf5p-g6vw-rhxx
Axios is vulnerable to DoS attack through lack of data size check - https://github.com/advisories/GHSA-4hjh-wcwx-xvwj
axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL - https://github.com/advisories/GHSA-jr5f-v2jv-69x6
fix available via `npm audit fix --force`
Will install chai-openapi-response-validator@0.14.1, which is a breaking change
node_modules/axios
  openapi-validator  >=0.14.2-alpha.0
  Depends on vulnerable versions of axios
  node_modules/openapi-validator
    chai-openapi-response-validator  0.11.2 || >=0.14.2-alpha.0
    Depends on vulnerable versions of openapi-validator
    node_modules/chai-openapi-response-validator

3 high severity vulnerabilities

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

--- end ---
Verifying that tests still pass
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.3.3',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.3.3',
npm WARN EBADENGINE   required: { node: '>=20.19.1', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated osenv@0.1.5: This package is no longer supported.
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@8.1.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated node-domexception@1.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 1756 packages, and audited 1757 packages in 36s

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

3 high severity vulnerabilities

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

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS tests/jest/mediawiki.special.block/stores/block.test.js
PASS tests/jest/mediawiki.special.block/BlockLog.test.js
PASS tests/jest/mediawiki.special.block/UserLookup.test.js
PASS tests/jest/mediawiki.special.block/ExpiryField.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/App.test.js
PASS tests/jest/mediawiki.languageselector/LookupLanguageSelector.test.js
PASS tests/jest/mediawiki.special.block/ReasonField.test.js
PASS tests/jest/mediawiki.languageselector/MultiselectLookupLanguageSelector.test.js
PASS tests/jest/mediawiki.languageselector/useLanguageSelector.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js
PASS tests/jest/mediawiki.special.block/NamespacesField.test.js
PASS tests/jest/mediawiki.special.block/init.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js
PASS tests/jest/mediawiki.special.block/BlockDetailsField.test.js
PASS tests/jest/mediawiki.special.block/util.test.js
PASS tests/jest/mediawiki.languageselector/languageSearch.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/urlGenerator.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/instrumentation.test.js
PASS tests/jest/mediawiki.special.block/AdditionalDetailsField.test.js
PASS tests/jest/mediawiki.languageselector/factory.test.js
PASS tests/jest/mediawiki.special.block/SpecialBlock.test.js (13.775 s)
Jest: "/src/repo/resources/src/mediawiki.special.block/util.js" coverage threshold for lines (63%) not met: 62.5%

Test Suites: 21 passed, 21 total
Tests:       136 passed, 136 total
Snapshots:   3 passed, 3 total
Time:        21.878 s
Ran all test suites.
--- stdout ---

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

Running "eslint:all" (eslint) task

/src/repo/resources/src/jquery.lengthLimit.js
  41:1  warning  Syntax error in namepath: '$.fn.trimByteLength'  jsdoc/valid-types

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

/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.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.api/index.js
  213:1  warning  The type 'JSON.parse' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.authenticationPopup/AuthPopup.js
  181:1  warning  The type 'AuthPopup.CheckLoggedIn' is undefined  jsdoc/no-undefined-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
  224:1  warning  The type 'mediawiki.inspect.runReports' is undefined  jsdoc/no-undefined-types
  250:1  warning  The type 'mediawiki.inspect.js.html' is undefined     jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.cookie/jar.js
  74:23  warning  Avoid direct access to document.cookie. Use mw.cookie instead  mediawiki/no-cookie
  93:23  warning  Avoid direct access to document.cookie. Use mw.cookie instead  mediawiki/no-cookie

/src/repo/resources/src/mediawiki.diff/inlineFormatToggle.js
  150:1  warning  Syntax error in namepath: ~'wikipage.diff.wikitextDiffBody'  jsdoc/valid-types
  162:1  warning  Syntax error in namepath: ~'wikipage.diff.diffTypeSwitch'    jsdoc/valid-types

/src/repo/resources/src/mediawiki.diff/undoButtonToggle.js
  5:1  warning  Missing JSDoc @param "$undoButton" type  jsdoc/require-param-type

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

/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.inspect.js
  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
  309:18  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage

/src/repo/resources/src/mediawiki.jqueryMsg/mediawiki.jqueryMsg.js
  148:1  warning  Found more than one @return declaration  jsdoc/require-returns
  148:1  warning  Found more than one @return declaration  jsdoc/require-returns-check
  338:2  warning  @throws should have a type               jsdoc/require-throws-type

/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.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
  75:1  warning  Missing JSDoc @param "message" type  jsdoc/require-param-type
  76:1  warning  Missing JSDoc @param "options" type  jsdoc/require-param-type

/src/repo/resources/src/mediawiki.page.gallery.slideshow.js
  138:22  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  143:22  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  148:24  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.page.preview.js
  409:1  warning  Syntax error in namepath: ~'wikipage.tableOfContents'   jsdoc/valid-types
  690:1  warning  The type 'Hooks.wikipage.categories' is undefined       jsdoc/no-undefined-types
  691:1  warning  The type 'Hooks.wikipage.content' is undefined          jsdoc/no-undefined-types
  692:1  warning  The type 'Hooks.wikipage.diff' is undefined             jsdoc/no-undefined-types
  693:1  warning  The type 'Hooks.wikipage.indicators' is undefined       jsdoc/no-undefined-types
  694:1  warning  The type 'Hooks.wikipage.tableOfContents' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.page.ready/enableSearchDialog.js
  19:21  warning  Found non-literal argument in require  security/detect-non-literal-require

/src/repo/resources/src/mediawiki.page.ready/ready.js
   98:1   warning  Syntax error in namepath: ~'wikipage.indicators'                       jsdoc/valid-types
  118:1   warning  Syntax error in namepath: ~'wikipage.content'                          jsdoc/valid-types
  139:1   warning  Syntax error in namepath: ~'wikipage.categories'                       jsdoc/valid-types
  152:1   warning  The type 'Hooks.wikipage.content' is undefined                         jsdoc/no-undefined-types
  155:1   warning  Syntax error in namepath: ~'wikipage.diff'                             jsdoc/valid-types
  186:1   warning  Syntax error in namepath: ~'skin.logout'                               jsdoc/valid-types
  296:21  warning  Found non-literal argument in require                                  security/detect-non-literal-require
  331:7   warning  Avoid direct access to sessionStorage. Use mw.storage.session instead  mediawiki/no-storage

/src/repo/resources/src/mediawiki.page.watch.ajax/watch-ajax.js
  128:1  warning  Syntax error in namepath: ~'wikipage.watchlistChange'   jsdoc/valid-types
  152:1  warning  The type 'Hooks.wikipage.watchlistChange' is undefined  jsdoc/no-undefined-types
  178:1  warning  The type 'Hooks.wikipage.watchlistChange' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.rcfilters/Controller.js
  330:1  warning  Found more than one @return declaration                  jsdoc/require-returns
  330:1  warning  Found more than one @return declaration                  jsdoc/require-returns-check
  550: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
  1200:1  warning  The type 'searchChange' is undefined  jsdoc/no-undefined-types

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

/src/repo/resources/src/mediawiki.rcfilters/ui/FilterMenuHeaderWidget.js
  33:20  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  42:18  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  62:26  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  67:32  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  72:30  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/FilterTagMultiselectWidget.js
  107:21  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  112:24  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  278:28  warning  All possible CSS classes should be documented. See https://w.wiki/PS2 for details                    mediawiki/class-doc
  427:1   warning  Syntax error in namepath: ~'RcFilters.popup.open'                                                    jsdoc/valid-types

/src/repo/resources/src/mediawiki.rcfilters/ui/FilterWrapperWidget.js
  69:28  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/HighlightColorPickerWidget.js
  36:17  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/ItemMenuOptionWidget.js
  59:19  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/SavedLinksListItemWidget.js
  27:20  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  59:20  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.searchSuggest/searchSuggest.js
  36:1  warning  The type 'ResponseMetaData' is undefined  jsdoc/no-undefined-types
  43:1  warning  The type 'ResponseFunction' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/App.vue
   76:3  warning  Prop 'router' requires default value to be set  vue/require-default-prop
  225:1  warning  The type 'AbortableSearchFetch' is undefined    jsdoc/no-undefined-types
  309:1  warning  The type 'SearchSubmitEvent' is undefined       jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/fetch.js
  21:1  warning  The type 'RequestInit' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js
   2:1  warning  The type 'FetchEndEvent' is undefined         jsdoc/no-undefined-types
  16:1  warning  The type 'SuggestionClickEvent' is undefined  jsdoc/no-undefined-types
  16:1  warning  The type 'SearchSubmitEvent' is undefined     jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/restSearchClient.js
    4:1  warning  Syntax error in type: import('./urlGenerator.js').UrlGenerator  jsdoc/valid-types
   11:1  warning  The type 'RestResult' is undefined                              jsdoc/no-undefined-types
   17:1  warning  The type 'SearchResult' is undefined                            jsdoc/no-undefined-types
  100:1  warning  The type 'fetchRecommendationByTitle' is undefined              jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/urlGenerator.js
   2:1  warning  The type 'Record' is undefined        jsdoc/no-undefined-types
   9:1  warning  The type 'RestResult' is undefined    jsdoc/no-undefined-types
   9:1  warning  The type 'SearchResult' is undefined  jsdoc/no-undefined-types
  30:1  warning  The type 'RestResult' is undefined    jsdoc/no-undefined-types
  30:1  warning  The type 'SearchResult' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.special.apisandbox/ApiSandbox.js
  501:9  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.special.apisandbox/ApiSandboxLayout.js
   44:1   warning  Found more than one @return declaration                                                              jsdoc/require-returns
   44:1   warning  Found more than one @return declaration                                                              jsdoc/require-returns-check
  403:19  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  584:7   warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.special.block/init.js
  26:1  warning  Syntax error in namepath: ~'SpecialBlock.block'  jsdoc/valid-types
  36:1  warning  Syntax error in namepath: ~'SpecialBlock.form'   jsdoc/valid-types

/src/repo/resources/src/mediawiki.storage/index.js
  50:18  warning  Avoid direct access to localStorage. Use mw.storage instead            mediawiki/no-storage
  55:18  warning  Avoid direct access to sessionStorage. Use mw.storage.session instead  mediawiki/no-storage

/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
  147:1  warning  The type 'TemplateRenderer' is undefined         jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.util/util.js
   589:1  warning  The type 'Hooks.util.addPortlet' is undefined      jsdoc/no-undefined-types
   628:1  warning  Syntax error in namepath: ~'util.addPortlet'       jsdoc/valid-types
   702:1  warning  The type 'Hooks.util.addPortletLink' is undefined  jsdoc/no-undefined-types
   797:1  warning  Syntax error in namepath: ~'util.addPortletLink'   jsdoc/valid-types
  1078:2  warning  Missing JSDoc @return declaration                  jsdoc/require-returns

/src/repo/resources/src/mediawiki.widgets.datetime/CalendarWidget.js
  114:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  120:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/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/DateTimeInputWidget.js
  449:23  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/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/Table/mw.widgets.RowWidget.js
  47:23  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js
  355:22  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  363:19  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  369:21  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  375:21  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.widgets/mw.widgets.ExpiryInputWidget.js
  36:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  40:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/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
  112:2  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/tests/qunit/resources/mediawiki.deflate.test.js
  68:5  warning  Unused eslint-disable directive (no problems were reported from 'qunit/no-async-in-loops')

/src/repo/tests/qunit/resources/startup/mw.loader.test.js
    30:5  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1072:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1081:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1090:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1103:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage

/src/repo/tests/selenium/specs/page.js
  80:1  warning  This line has a length of 103. Maximum allowed is 100  max-len

/src/repo/tests/selenium/wdio-mediawiki/Api.js
  65:1  warning  Missing JSDoc @param "params" type  jsdoc/require-param-type

/src/repo/tests/selenium/wdio-mediawiki/PrometheusFileReporter.js
  114:1   warning  This line has a length of 105. Maximum allowed is 100                       max-len
  124:1   warning  This line has a length of 105. Maximum allowed is 100                       max-len
  167:3   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  184:22  warning  Found readdirSync from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename
  189:28  warning  Found readFileSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  301:3   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

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

/src/repo/tests/selenium/wdio-mediawiki/api/Cookies.js
  13:1  warning  The type 'Iterable' is undefined  jsdoc/no-undefined-types

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

✖ 151 problems (0 errors, 151 warnings)
  0 errors and 1 warning potentially fixable with the `--fix` option.


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

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

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

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

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

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

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

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

Running "banana:languageconverter" (banana) task
>> 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
>> 1 message directory checked.

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

Running "stylelint:resources" (stylelint) task
>> resources/src/mediawiki.interface.helpers.styles/linker.styles.less
>>   73: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/content.media-dark.less
>>   31: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.special.watchlistlabels/labelmanager.less
>>   8: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
>> 
>> resources/src/mediawiki.special.watchlistlabels/LabelOnboarding.vue
>>   160: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
>> 
>> resources/src/mediawiki.special/userrights.less
>>   28:4  ⚠  Unexpected browser feature "css-has" is not supported by Edge 79,80,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104, Firefox 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,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120, 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,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104, Safari 10,11,12,13,14,15,10.1,11.1,12.1,13.1,14.1,15.1,15.2-15.3, 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,14.5-14.8,15.0-15.1,15.2-15.3  plugin/no-unsupported-browser-features
>> 
>> ⚠ 5 problems (0 errors, 5 warnings)

⚠ 5 warnings

>> Linted 224 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

------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------
File                                | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                                                                                                   
------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------
All files                           |   92.23 |    88.94 |      77 |   92.23 |                                                                                                                     
 mediawiki.skinning.typeaheadSearch |   85.71 |    77.77 |   56.25 |   85.71 |                                                                                                                     
  App.vue                           |   76.41 |    69.23 |   16.66 |   76.41 | 176,211-213,218-221,229-252,256-263,272-282,292-305,312-313,317-321,325,329-332,337-340,344-348,353,358-359,365-367 
  TypeaheadSearchWrapper.vue        |   94.24 |    66.66 |     100 |   94.24 | 54-61                                                                                                               
  fetch.js                          |     100 |     87.5 |      75 |     100 | 31                                                                                                                  
  instrumentation.js                |   82.82 |      100 |      60 |   82.82 | 4-13,18-24                                                                                                          
  restSearchClient.js               |    97.4 |    77.77 |   85.71 |    97.4 | 113-115,134                                                                                                         
  urlGenerator.js                   |   88.33 |    66.66 |     100 |   88.33 | 43-49                                                                                                               
 mediawiki.special.block            |   89.55 |    93.22 |   82.35 |   89.55 |                                                                                                                     
  SpecialBlock.vue                  |   93.92 |    93.18 |   72.72 |   93.92 | 248-257,300-305,311-325,443-444,455-457                                                                             
  init.js                           |     100 |      100 |     100 |     100 |                                                                                                                     
  util.js                           |    62.5 |     90.9 |     100 |    62.5 | 66-107                                                                                                              
 mediawiki.special.block/components |   95.12 |    91.93 |    87.8 |   95.12 |                                                                                                                     
  AdditionalDetailsField.vue        |     100 |       80 |     100 |     100 | 68                                                                                                                  
  BlockDetailsField.vue             |     100 |      100 |     100 |     100 |                                                                                                                     
  BlockLog.vue                      |   98.94 |      100 |   83.33 |   98.94 | 337-340,401                                                                                                         
  BlockTypeField.vue                |   95.04 |       50 |     100 |   95.04 | 73-77                                                                                                               
  ConfirmationDialog.vue            |   96.34 |      100 |      50 |   96.34 | 70-72                                                                                                               
  ExpiryField.vue                   |   95.07 |    89.47 |     100 |   95.07 | 145-146,148-149,177-186,245-246                                                                                     
  NamespacesField.vue               |   90.42 |    88.88 |   66.66 |   90.42 | 60-68                                                                                                               
  PagesField.vue                    |   70.06 |       50 |      50 |   70.06 | 46-47,56-57,72-79,88-90,97-118,127-133                                                                              
  ReasonField.vue                   |   97.22 |    93.75 |     100 |   97.22 | 101-104                                                                                                             
  UserLookup.vue                    |   97.74 |    95.23 |     100 |   97.74 | 145-147,196-198,231-232                                                                                             
  ValidatingTextInput.js            |     100 |      100 |     100 |     100 |                                                                                                                     
 mediawiki.special.block/stores     |   95.71 |    86.66 |      90 |   95.71 |                                                                                                                     
  block.js                          |   95.71 |    86.66 |      90 |   95.71 | 329-330,439-440,442-443,463-464,467-468,471-472,486-501                                                             
------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------

--- end ---
$ node_modules/.bin/jest --config /src/repo/tests/jest/jest.config.js -u
--- stderr ---
PASS tests/jest/mediawiki.special.block/UserLookup.test.js
PASS tests/jest/mediawiki.special.block/ExpiryField.test.js
PASS tests/jest/mediawiki.special.block/stores/block.test.js
PASS tests/jest/mediawiki.special.block/BlockLog.test.js
PASS tests/jest/mediawiki.special.block/BlockDetailsField.test.js
PASS tests/jest/mediawiki.special.block/ReasonField.test.js
PASS tests/jest/mediawiki.special.block/AdditionalDetailsField.test.js
PASS tests/jest/mediawiki.languageselector/LookupLanguageSelector.test.js
PASS tests/jest/mediawiki.languageselector/factory.test.js
PASS tests/jest/mediawiki.special.block/util.test.js
PASS tests/jest/mediawiki.special.block/init.test.js
PASS tests/jest/mediawiki.languageselector/languageSearch.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/urlGenerator.test.js
PASS tests/jest/mediawiki.languageselector/MultiselectLookupLanguageSelector.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/App.test.js
PASS tests/jest/mediawiki.languageselector/useLanguageSelector.test.js
PASS tests/jest/mediawiki.special.block/NamespacesField.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/instrumentation.test.js
PASS tests/jest/mediawiki.special.block/SpecialBlock.test.js (14.566 s)

Test Suites: 21 passed, 21 total
Tests:       136 passed, 136 total
Snapshots:   3 passed, 3 total
Time:        22.125 s
Ran all test suites.
--- stdout ---
------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------
File                                | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                                                                                                   
------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------
All files                           |   93.25 |    89.55 |      77 |   93.25 |                                                                                                                     
 mediawiki.skinning.typeaheadSearch |   86.49 |    82.14 |   56.25 |   86.49 |                                                                                                                     
  App.vue                           |   76.41 |    69.23 |   16.66 |   76.41 | 176,211-213,218-221,229-252,256-263,272-282,292-305,312-313,317-321,325,329-332,337-340,344-348,353,358-359,365-367 
  TypeaheadSearchWrapper.vue        |   94.24 |    66.66 |     100 |   94.24 | 54-61                                                                                                               
  fetch.js                          |     100 |     87.5 |      75 |     100 | 31                                                                                                                  
  instrumentation.js                |   82.82 |      100 |      60 |   82.82 | 4-13,18-24                                                                                                          
  restSearchClient.js               |    97.4 |    77.77 |   85.71 |    97.4 | 113-115,134                                                                                                         
  urlGenerator.js                   |     100 |      100 |     100 |     100 |                                                                                                                     
 mediawiki.special.block            |   94.37 |    92.95 |   82.35 |   94.37 |                                                                                                                     
  SpecialBlock.vue                  |   93.92 |    93.18 |   72.72 |   93.92 | 248-257,300-305,311-325,443-444,455-457                                                                             
  init.js                           |     100 |      100 |     100 |     100 |                                                                                                                     
  util.js                           |   94.64 |     91.3 |     100 |   94.64 | 82-84,86-88                                                                                                         
 mediawiki.special.block/components |   95.12 |    91.93 |    87.8 |   95.12 |                                                                                                                     
  AdditionalDetailsField.vue        |     100 |       80 |     100 |     100 | 68                                                                                                                  
  BlockDetailsField.vue             |     100 |      100 |     100 |     100 |                                                                                                                     
  BlockLog.vue                      |   98.94 |      100 |   83.33 |   98.94 | 337-340,401                                                                                                         
  BlockTypeField.vue                |   95.04 |       50 |     100 |   95.04 | 73-77                                                                                                               
  ConfirmationDialog.vue            |   96.34 |      100 |      50 |   96.34 | 70-72                                                                                                               
  ExpiryField.vue                   |   95.07 |    89.47 |     100 |   95.07 | 145-146,148-149,177-186,245-246                                                                                     
  NamespacesField.vue               |   90.42 |    88.88 |   66.66 |   90.42 | 60-68                                                                                                               
  PagesField.vue                    |   70.06 |       50 |      50 |   70.06 | 46-47,56-57,72-79,88-90,97-118,127-133                                                                              
  ReasonField.vue                   |   97.22 |    93.75 |     100 |   97.22 | 101-104                                                                                                             
  UserLookup.vue                    |   97.74 |    95.23 |     100 |   97.74 | 145-147,196-198,231-232                                                                                             
  ValidatingTextInput.js            |     100 |      100 |     100 |     100 |                                                                                                                     
 mediawiki.special.block/stores     |   95.71 |    86.51 |      90 |   95.71 |                                                                                                                     
  block.js                          |   95.71 |    86.51 |      90 |   95.71 | 329-330,439-440,442-443,463-464,467-468,471-472,486-501                                                             
------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS tests/jest/mediawiki.special.block/UserLookup.test.js
PASS tests/jest/mediawiki.special.block/ExpiryField.test.js
PASS tests/jest/mediawiki.special.block/BlockLog.test.js
PASS tests/jest/mediawiki.special.block/NamespacesField.test.js
PASS tests/jest/mediawiki.special.block/ReasonField.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/App.test.js
PASS tests/jest/mediawiki.special.block/stores/block.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/fetch.test.js
PASS tests/jest/mediawiki.languageselector/languageSearch.test.js
PASS tests/jest/mediawiki.languageselector/LookupLanguageSelector.test.js
PASS tests/jest/mediawiki.special.block/AdditionalDetailsField.test.js
PASS tests/jest/mediawiki.languageselector/useLanguageSelector.test.js
PASS tests/jest/mediawiki.special.block/init.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/urlGenerator.test.js
PASS tests/jest/mediawiki.languageselector/MultiselectLookupLanguageSelector.test.js
PASS tests/jest/mediawiki.languageselector/factory.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/restSearchClient.test.js
PASS tests/jest/mediawiki.special.block/util.test.js
PASS tests/jest/mediawiki.special.block/BlockDetailsField.test.js
PASS tests/jest/mediawiki.skinning.typeaheadSearch/instrumentation.test.js
PASS tests/jest/mediawiki.special.block/SpecialBlock.test.js (13.382 s)

Test Suites: 21 passed, 21 total
Tests:       136 passed, 136 total
Snapshots:   3 passed, 3 total
Time:        21.586 s
Ran all test suites.
--- stdout ---

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

Running "eslint:all" (eslint) task

/src/repo/resources/src/jquery.lengthLimit.js
  41:1  warning  Syntax error in namepath: '$.fn.trimByteLength'  jsdoc/valid-types

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

/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.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.api/index.js
  213:1  warning  The type 'JSON.parse' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.authenticationPopup/AuthPopup.js
  181:1  warning  The type 'AuthPopup.CheckLoggedIn' is undefined  jsdoc/no-undefined-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
  224:1  warning  The type 'mediawiki.inspect.runReports' is undefined  jsdoc/no-undefined-types
  250:1  warning  The type 'mediawiki.inspect.js.html' is undefined     jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.cookie/jar.js
  74:23  warning  Avoid direct access to document.cookie. Use mw.cookie instead  mediawiki/no-cookie
  93:23  warning  Avoid direct access to document.cookie. Use mw.cookie instead  mediawiki/no-cookie

/src/repo/resources/src/mediawiki.diff/inlineFormatToggle.js
  150:1  warning  Syntax error in namepath: ~'wikipage.diff.wikitextDiffBody'  jsdoc/valid-types
  162:1  warning  Syntax error in namepath: ~'wikipage.diff.diffTypeSwitch'    jsdoc/valid-types

/src/repo/resources/src/mediawiki.diff/undoButtonToggle.js
  5:1  warning  Missing JSDoc @param "$undoButton" type  jsdoc/require-param-type

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

/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.inspect.js
  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
  309:18  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage

/src/repo/resources/src/mediawiki.jqueryMsg/mediawiki.jqueryMsg.js
  148:1  warning  Found more than one @return declaration  jsdoc/require-returns
  148:1  warning  Found more than one @return declaration  jsdoc/require-returns-check
  338:2  warning  @throws should have a type               jsdoc/require-throws-type

/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.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
  75:1  warning  Missing JSDoc @param "message" type  jsdoc/require-param-type
  76:1  warning  Missing JSDoc @param "options" type  jsdoc/require-param-type

/src/repo/resources/src/mediawiki.page.gallery.slideshow.js
  138:22  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  143:22  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  148:24  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.page.preview.js
  409:1  warning  Syntax error in namepath: ~'wikipage.tableOfContents'   jsdoc/valid-types
  690:1  warning  The type 'Hooks.wikipage.categories' is undefined       jsdoc/no-undefined-types
  691:1  warning  The type 'Hooks.wikipage.content' is undefined          jsdoc/no-undefined-types
  692:1  warning  The type 'Hooks.wikipage.diff' is undefined             jsdoc/no-undefined-types
  693:1  warning  The type 'Hooks.wikipage.indicators' is undefined       jsdoc/no-undefined-types
  694:1  warning  The type 'Hooks.wikipage.tableOfContents' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.page.ready/enableSearchDialog.js
  19:21  warning  Found non-literal argument in require  security/detect-non-literal-require

/src/repo/resources/src/mediawiki.page.ready/ready.js
   98:1   warning  Syntax error in namepath: ~'wikipage.indicators'                       jsdoc/valid-types
  118:1   warning  Syntax error in namepath: ~'wikipage.content'                          jsdoc/valid-types
  139:1   warning  Syntax error in namepath: ~'wikipage.categories'                       jsdoc/valid-types
  152:1   warning  The type 'Hooks.wikipage.content' is undefined                         jsdoc/no-undefined-types
  155:1   warning  Syntax error in namepath: ~'wikipage.diff'                             jsdoc/valid-types
  186:1   warning  Syntax error in namepath: ~'skin.logout'                               jsdoc/valid-types
  296:21  warning  Found non-literal argument in require                                  security/detect-non-literal-require
  331:7   warning  Avoid direct access to sessionStorage. Use mw.storage.session instead  mediawiki/no-storage

/src/repo/resources/src/mediawiki.page.watch.ajax/watch-ajax.js
  128:1  warning  Syntax error in namepath: ~'wikipage.watchlistChange'   jsdoc/valid-types
  152:1  warning  The type 'Hooks.wikipage.watchlistChange' is undefined  jsdoc/no-undefined-types
  178:1  warning  The type 'Hooks.wikipage.watchlistChange' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.rcfilters/Controller.js
  330:1  warning  Found more than one @return declaration                  jsdoc/require-returns
  330:1  warning  Found more than one @return declaration                  jsdoc/require-returns-check
  550: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
  1200:1  warning  The type 'searchChange' is undefined  jsdoc/no-undefined-types

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

/src/repo/resources/src/mediawiki.rcfilters/ui/FilterMenuHeaderWidget.js
  33:20  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  42:18  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  62:26  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  67:32  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  72:30  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/FilterTagMultiselectWidget.js
  107:21  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  112:24  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  278:28  warning  All possible CSS classes should be documented. See https://w.wiki/PS2 for details                    mediawiki/class-doc
  427:1   warning  Syntax error in namepath: ~'RcFilters.popup.open'                                                    jsdoc/valid-types

/src/repo/resources/src/mediawiki.rcfilters/ui/FilterWrapperWidget.js
  69:28  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/HighlightColorPickerWidget.js
  36:17  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/ItemMenuOptionWidget.js
  59:19  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.rcfilters/ui/SavedLinksListItemWidget.js
  27:20  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  59:20  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.searchSuggest/searchSuggest.js
  36:1  warning  The type 'ResponseMetaData' is undefined  jsdoc/no-undefined-types
  43:1  warning  The type 'ResponseFunction' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/App.vue
   76:3  warning  Prop 'router' requires default value to be set  vue/require-default-prop
  225:1  warning  The type 'AbortableSearchFetch' is undefined    jsdoc/no-undefined-types
  309:1  warning  The type 'SearchSubmitEvent' is undefined       jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/fetch.js
  21:1  warning  The type 'RequestInit' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/instrumentation.js
   2:1  warning  The type 'FetchEndEvent' is undefined         jsdoc/no-undefined-types
  16:1  warning  The type 'SuggestionClickEvent' is undefined  jsdoc/no-undefined-types
  16:1  warning  The type 'SearchSubmitEvent' is undefined     jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/restSearchClient.js
    4:1  warning  Syntax error in type: import('./urlGenerator.js').UrlGenerator  jsdoc/valid-types
   11:1  warning  The type 'RestResult' is undefined                              jsdoc/no-undefined-types
   17:1  warning  The type 'SearchResult' is undefined                            jsdoc/no-undefined-types
  100:1  warning  The type 'fetchRecommendationByTitle' is undefined              jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.skinning.typeaheadSearch/urlGenerator.js
   2:1  warning  The type 'Record' is undefined        jsdoc/no-undefined-types
   9:1  warning  The type 'RestResult' is undefined    jsdoc/no-undefined-types
   9:1  warning  The type 'SearchResult' is undefined  jsdoc/no-undefined-types
  30:1  warning  The type 'RestResult' is undefined    jsdoc/no-undefined-types
  30:1  warning  The type 'SearchResult' is undefined  jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.special.apisandbox/ApiSandbox.js
  501:9  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.special.apisandbox/ApiSandboxLayout.js
   44:1   warning  Found more than one @return declaration                                                              jsdoc/require-returns
   44:1   warning  Found more than one @return declaration                                                              jsdoc/require-returns-check
  403:19  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  584:7   warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.special.block/init.js
  26:1  warning  Syntax error in namepath: ~'SpecialBlock.block'  jsdoc/valid-types
  36:1  warning  Syntax error in namepath: ~'SpecialBlock.form'   jsdoc/valid-types

/src/repo/resources/src/mediawiki.storage/index.js
  50:18  warning  Avoid direct access to localStorage. Use mw.storage instead            mediawiki/no-storage
  55:18  warning  Avoid direct access to sessionStorage. Use mw.storage.session instead  mediawiki/no-storage

/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
  147:1  warning  The type 'TemplateRenderer' is undefined         jsdoc/no-undefined-types

/src/repo/resources/src/mediawiki.util/util.js
   589:1  warning  The type 'Hooks.util.addPortlet' is undefined      jsdoc/no-undefined-types
   628:1  warning  Syntax error in namepath: ~'util.addPortlet'       jsdoc/valid-types
   702:1  warning  The type 'Hooks.util.addPortletLink' is undefined  jsdoc/no-undefined-types
   797:1  warning  Syntax error in namepath: ~'util.addPortletLink'   jsdoc/valid-types
  1078:2  warning  Missing JSDoc @return declaration                  jsdoc/require-returns

/src/repo/resources/src/mediawiki.widgets.datetime/CalendarWidget.js
  114:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  120:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/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/DateTimeInputWidget.js
  449:23  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/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/Table/mw.widgets.RowWidget.js
  47:23  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js
  355:22  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  363:19  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  369:21  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  375:21  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/src/repo/resources/src/mediawiki.widgets/mw.widgets.ExpiryInputWidget.js
  36:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget
  40:5  warning  OOUI button has no label. Even icon-only buttons should set a label with invisibleLabel set to true  mediawiki/no-unlabeled-buttonwidget

/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
  112:2  warning  Missing JSDoc @return declaration  jsdoc/require-returns

/src/repo/tests/qunit/resources/mediawiki.deflate.test.js
  68:5  warning  Unused eslint-disable directive (no problems were reported from 'qunit/no-async-in-loops')

/src/repo/tests/qunit/resources/startup/mw.loader.test.js
    30:5  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1072:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1081:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1090:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage
  1103:3  warning  Avoid direct access to localStorage. Use mw.storage instead  mediawiki/no-storage

/src/repo/tests/selenium/specs/page.js
  80:1  warning  This line has a length of 103. Maximum allowed is 100  max-len

/src/repo/tests/selenium/wdio-mediawiki/Api.js
  65:1  warning  Missing JSDoc @param "params" type  jsdoc/require-param-type

/src/repo/tests/selenium/wdio-mediawiki/PrometheusFileReporter.js
  114:1   warning  This line has a length of 105. Maximum allowed is 100                       max-len
  124:1   warning  This line has a length of 105. Maximum allowed is 100                       max-len
  167:3   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  184:22  warning  Found readdirSync from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename
  189:28  warning  Found readFileSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  301:3   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

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

/src/repo/tests/selenium/wdio-mediawiki/api/Cookies.js
  13:1  warning  The type 'Iterable' is undefined  jsdoc/no-undefined-types

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

✖ 151 problems (0 errors, 151 warnings)
  0 errors and 1 warning potentially fixable with the `--fix` option.


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

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

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

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

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

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

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

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

Running "banana:languageconverter" (banana) task
>> 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
>> 1 message directory checked.

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

Running "stylelint:resources" (stylelint) task
>> resources/src/mediawiki.interface.helpers.styles/linker.styles.less
>>   73: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/content.media-dark.less
>>   31: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.special.watchlistlabels/labelmanager.less
>>   8: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
>> 
>> resources/src/mediawiki.special.watchlistlabels/LabelOnboarding.vue
>>   160: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
>> 
>> resources/src/mediawiki.special/userrights.less
>>   28:4  ⚠  Unexpected browser feature "css-has" is not supported by Edge 79,80,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104, Firefox 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,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120, 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,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104, Safari 10,11,12,13,14,15,10.1,11.1,12.1,13.1,14.1,15.1,15.2-15.3, 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,14.5-14.8,15.0-15.1,15.2-15.3  plugin/no-unsupported-browser-features
>> 
>> ⚠ 5 problems (0 errors, 5 warnings)

⚠ 5 warnings

>> Linted 224 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

------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------
File                                | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                                                                                                   
------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------
All files                           |   93.25 |    89.55 |      77 |   93.25 |                                                                                                                     
 mediawiki.skinning.typeaheadSearch |   86.49 |    82.14 |   56.25 |   86.49 |                                                                                                                     
  App.vue                           |   76.41 |    69.23 |   16.66 |   76.41 | 176,211-213,218-221,229-252,256-263,272-282,292-305,312-313,317-321,325,329-332,337-340,344-348,353,358-359,365-367 
  TypeaheadSearchWrapper.vue        |   94.24 |    66.66 |     100 |   94.24 | 54-61                                                                                                               
  fetch.js                          |     100 |     87.5 |      75 |     100 | 31                                                                                                                  
  instrumentation.js                |   82.82 |      100 |      60 |   82.82 | 4-13,18-24                                                                                                          
  restSearchClient.js               |    97.4 |    77.77 |   85.71 |    97.4 | 113-115,134                                                                                                         
  urlGenerator.js                   |     100 |      100 |     100 |     100 |                                                                                                                     
 mediawiki.special.block            |   94.37 |    92.95 |   82.35 |   94.37 |                                                                                                                     
  SpecialBlock.vue                  |   93.92 |    93.18 |   72.72 |   93.92 | 248-257,300-305,311-325,443-444,455-457                                                                             
  init.js                           |     100 |      100 |     100 |     100 |                                                                                                                     
  util.js                           |   94.64 |     91.3 |     100 |   94.64 | 82-84,86-88                                                                                                         
 mediawiki.special.block/components |   95.12 |    91.93 |    87.8 |   95.12 |                                                                                                                     
  AdditionalDetailsField.vue        |     100 |       80 |     100 |     100 | 68                                                                                                                  
  BlockDetailsField.vue             |     100 |      100 |     100 |     100 |                                                                                                                     
  BlockLog.vue                      |   98.94 |      100 |   83.33 |   98.94 | 337-340,401                                                                                                         
  BlockTypeField.vue                |   95.04 |       50 |     100 |   95.04 | 73-77                                                                                                               
  ConfirmationDialog.vue            |   96.34 |      100 |      50 |   96.34 | 70-72                                                                                                               
  ExpiryField.vue                   |   95.07 |    89.47 |     100 |   95.07 | 145-146,148-149,177-186,245-246                                                                                     
  NamespacesField.vue               |   90.42 |    88.88 |   66.66 |   90.42 | 60-68                                                                                                               
  PagesField.vue                    |   70.06 |       50 |      50 |   70.06 | 46-47,56-57,72-79,88-90,97-118,127-133                                                                              
  ReasonField.vue                   |   97.22 |    93.75 |     100 |   97.22 | 101-104                                                                                                             
  UserLookup.vue                    |   97.74 |    95.23 |     100 |   97.74 | 145-147,196-198,231-232                                                                                             
  ValidatingTextInput.js            |     100 |      100 |     100 |     100 |                                                                                                                     
 mediawiki.special.block/stores     |   95.71 |    86.51 |      90 |   95.71 |                                                                                                                     
  block.js                          |   95.71 |    86.51 |      90 |   95.71 | 329-330,439-440,442-443,463-464,467-468,471-472,486-501                                                             
------------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------------------------------------

--- end ---
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json

--- end ---
build: Updating api-testing to 1.7.2

$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmplyr8hg7n
--- stdout ---
[master 50432e5] build: Updating api-testing to 1.7.2
 2 files changed, 41 insertions(+), 49 deletions(-)

--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From 50432e5abf51fb861cd166924b91c8c0c1f52547 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Sun, 11 Jan 2026 00:42:26 +0000
Subject: [PATCH] build: Updating api-testing to 1.7.2

Change-Id: I11358ea66f20f3e34db8c685b5b8bb21552ecc17
---
 package-lock.json | 88 +++++++++++++++++++++--------------------------
 package.json      |  2 +-
 2 files changed, 41 insertions(+), 49 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index b481faf..0bc9170 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,7 +19,7 @@
 				"@wikimedia/codex": "2.3.3",
 				"@wikimedia/codex-icons": "2.3.3",
 				"@wikimedia/karma-firefox-launcher": "2.1.3",
-				"api-testing": "1.7.1",
+				"api-testing": "1.7.2",
 				"chai-openapi-response-validator": "^0.14.2",
 				"domino": "2.1.0",
 				"dotenv": "8.2.0",
@@ -4517,7 +4517,6 @@
 			"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
 			"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": "^14.21.3 || >=16"
 			},
@@ -4571,11 +4570,10 @@
 			"license": "MIT"
 		},
 		"node_modules/@paralleldrive/cuid2": {
-			"version": "2.2.2",
-			"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
-			"integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==",
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz",
+			"integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@noble/hashes": "^1.1.5"
 			}
@@ -6651,14 +6649,13 @@
 			}
 		},
 		"node_modules/api-testing": {
-			"version": "1.7.1",
-			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.1.tgz",
-			"integrity": "sha512-h6eqLa9uOOpbBXGN6/s91GquV1YprC1XLVtWIRv/25XWFRqHibIBwuXjqcUqFSsU1fgYvfclSMRXuUcCvEmX6A==",
+			"version": "1.7.2",
+			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.2.tgz",
+			"integrity": "sha512-W6vgHMjmTUMq8He4pRdpLNjfkBre0N/ygv6tT6jrWZQdZlBWDZHi+0pEg8FxBi0U9QzhUfaATrPZkfnF7YVt3g==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
 				"chai": "4.5.0",
-				"supertest": "7.1.0"
+				"supertest": "7.2.2"
 			},
 			"engines": {
 				"node": ">= 14.18.0"
@@ -6857,8 +6854,7 @@
 			"version": "2.0.6",
 			"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
 			"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/assertion-error": {
 			"version": "1.1.0",
@@ -8155,7 +8151,6 @@
 			"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
 			"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
 			"dev": true,
-			"license": "MIT",
 			"funding": {
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
@@ -8301,12 +8296,20 @@
 				"node": ">= 0.6"
 			}
 		},
+		"node_modules/cookie-signature": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
+			"integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+			"dev": true,
+			"engines": {
+				"node": ">=6.6.0"
+			}
+		},
 		"node_modules/cookiejar": {
 			"version": "2.1.4",
 			"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
 			"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/core-js-compat": {
 			"version": "3.45.1",
@@ -9053,7 +9056,6 @@
 			"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
 			"integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
 				"asap": "^2.0.0",
 				"wrappy": "1"
@@ -11490,8 +11492,7 @@
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
 			"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/fast-uri": {
 			"version": "3.1.0",
@@ -11871,11 +11872,10 @@
 			}
 		},
 		"node_modules/form-data": {
-			"version": "4.0.4",
-			"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
-			"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+			"version": "4.0.5",
+			"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+			"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"asynckit": "^0.4.0",
 				"combined-stream": "^1.0.8",
@@ -11905,7 +11905,6 @@
 			"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz",
 			"integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@paralleldrive/cuid2": "^2.2.2",
 				"dezalgo": "^1.0.4",
@@ -17806,7 +17805,6 @@
 			"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
 			"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">= 0.6"
 			}
@@ -22125,37 +22123,34 @@
 			}
 		},
 		"node_modules/superagent": {
-			"version": "9.0.2",
-			"resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz",
-			"integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==",
-			"deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net",
+			"version": "10.3.0",
+			"resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz",
+			"integrity": "sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"component-emitter": "^1.3.0",
+				"component-emitter": "^1.3.1",
 				"cookiejar": "^2.1.4",
-				"debug": "^4.3.4",
+				"debug": "^4.3.7",
 				"fast-safe-stringify": "^2.1.1",
-				"form-data": "^4.0.0",
-				"formidable": "^3.5.1",
+				"form-data": "^4.0.5",
+				"formidable": "^3.5.4",
 				"methods": "^1.1.2",
 				"mime": "2.6.0",
-				"qs": "^6.11.0"
+				"qs": "^6.14.1"
 			},
 			"engines": {
 				"node": ">=14.18.0"
 			}
 		},
 		"node_modules/supertest": {
-			"version": "7.1.0",
-			"resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.0.tgz",
-			"integrity": "sha512-5QeSO8hSrKghtcWEoPiO036fxH0Ii2wVQfFZSP0oqQhmjk8bOLhDFXr4JrvaFmPuEWUoq4znY3uSi8UzLKxGqw==",
-			"deprecated": "Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net",
+			"version": "7.2.2",
+			"resolved": "https://registry.npmjs.org/supertest/-/supertest-7.2.2.tgz",
+			"integrity": "sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
+				"cookie-signature": "^1.2.2",
 				"methods": "^1.1.2",
-				"superagent": "^9.0.1"
+				"superagent": "^10.3.0"
 			},
 			"engines": {
 				"node": ">=14.18.0"
@@ -23349,8 +23344,10 @@
 			}
 		},
 		"node_modules/wdio-mediawiki": {
-			"resolved": "tests/selenium/wdio-mediawiki",
-			"link": true
+			"version": "6.1.0",
+			"resolved": "file:tests/selenium/wdio-mediawiki",
+			"dev": true,
+			"license": "MIT"
 		},
 		"node_modules/web-streams-polyfill": {
 			"version": "3.3.3",
@@ -24236,11 +24233,6 @@
 			"dependencies": {
 				"safe-buffer": "~5.2.0"
 			}
-		},
-		"tests/selenium/wdio-mediawiki": {
-			"version": "6.1.0",
-			"dev": true,
-			"license": "MIT"
 		}
 	}
 }
diff --git a/package.json b/package.json
index b883c66..245111c 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,7 @@
 		"@wikimedia/codex": "2.3.3",
 		"@wikimedia/codex-icons": "2.3.3",
 		"@wikimedia/karma-firefox-launcher": "2.1.3",
-		"api-testing": "1.7.1",
+		"api-testing": "1.7.2",
 		"chai-openapi-response-validator": "^0.14.2",
 		"domino": "2.1.0",
 		"dotenv": "8.2.0",
-- 
2.47.3


--- end ---
Source code is licensed under the AGPL.