mediawiki/extensions/ReadingLists: main (log #2366023)

sourcepatches

This run took 102 seconds.

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

composer:
* mediawiki/mediawiki-codesniffer: 49.0.0 → 50.0.0
* mediawiki/mediawiki-phan-config: 0.18.0 → 0.19.0

npm:
* api-testing: 1.7.2 → 1.7.3

Change-Id: Ia329e2f1d5e8c43239b8ab74f36a1b4ee3e4d01e
---
 composer.json     |  4 ++--
 package-lock.json | 32 +++++++++++++++-----------------
 package.json      |  2 +-
 3 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/composer.json b/composer.json
index ae1f4f1..10e4755 100644
--- a/composer.json
+++ b/composer.json
@@ -1,7 +1,7 @@
 {
 	"require-dev": {
-		"mediawiki/mediawiki-codesniffer": "49.0.0",
-		"mediawiki/mediawiki-phan-config": "0.18.0",
+		"mediawiki/mediawiki-codesniffer": "50.0.0",
+		"mediawiki/mediawiki-phan-config": "0.19.0",
 		"mediawiki/minus-x": "2.0.1",
 		"php-parallel-lint/php-console-highlighter": "1.0.0",
 		"php-parallel-lint/php-parallel-lint": "1.4.0"
diff --git a/package-lock.json b/package-lock.json
index bccdd98..062854e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
 				"@vue/vue3-jest": "29.2.6",
 				"@wikimedia/codex": "2.3.4",
 				"@wikimedia/types-wikimedia": "0.5.0",
-				"api-testing": "1.7.2",
+				"api-testing": "1.7.3",
 				"eslint-config-wikimedia": "0.32.3",
 				"grunt-banana-checker": "0.13.0",
 				"jest": "29.7.0",
@@ -3406,12 +3406,12 @@
 			}
 		},
 		"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
-			"version": "9.0.5",
-			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-			"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+			"version": "9.0.9",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+			"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
 			"dev": true,
 			"dependencies": {
-				"brace-expansion": "^2.0.1"
+				"brace-expansion": "^2.0.2"
 			},
 			"engines": {
 				"node": ">=16 || 14 >=14.17"
@@ -3914,9 +3914,9 @@
 			}
 		},
 		"node_modules/api-testing": {
-			"version": "1.7.2",
-			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.2.tgz",
-			"integrity": "sha512-W6vgHMjmTUMq8He4pRdpLNjfkBre0N/ygv6tT6jrWZQdZlBWDZHi+0pEg8FxBi0U9QzhUfaATrPZkfnF7YVt3g==",
+			"version": "1.7.3",
+			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.3.tgz",
+			"integrity": "sha512-wvXUqkiflOur6kI57onNt2BQ6Hse0BRCIzThc1W7W4LEfVvLUCyKOp8EQna9tKqMZ7K1Rz/ptrCSzHe9XEo+Bw==",
 			"dev": true,
 			"dependencies": {
 				"chai": "4.5.0",
@@ -7804,13 +7804,12 @@
 			}
 		},
 		"node_modules/js-beautify/node_modules/minimatch": {
-			"version": "9.0.5",
-			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-			"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+			"version": "9.0.9",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+			"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
-				"brace-expansion": "^2.0.1"
+				"brace-expansion": "^2.0.2"
 			},
 			"engines": {
 				"node": ">=16 || 14 >=14.17"
@@ -8282,11 +8281,10 @@
 			}
 		},
 		"node_modules/minimatch": {
-			"version": "3.1.2",
-			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+			"version": "3.1.5",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+			"integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
 				"brace-expansion": "^1.1.7"
 			},
diff --git a/package.json b/package.json
index 0417e3e..0c777a1 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
 		"@vue/vue3-jest": "29.2.6",
 		"@wikimedia/codex": "2.3.4",
 		"@wikimedia/types-wikimedia": "0.5.0",
-		"api-testing": "1.7.2",
+		"api-testing": "1.7.3",
 		"eslint-config-wikimedia": "0.32.3",
 		"grunt-banana-checker": "0.13.0",
 		"jest": "29.7.0",
-- 
2.47.3

$ date
--- stdout ---
Fri Feb 27 21:52:11 UTC 2026

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-ReadingLists.git /src/repo --depth=1 -b master
--- stderr ---
Cloning into '/src/repo'...
--- 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 ---
1f044c51b1ab768b27506b5ff66c606f2ccfe586 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@vue/test-utils": {
      "name": "@vue/test-utils",
      "severity": "high",
      "isDirect": true,
      "via": [
        "js-beautify"
      ],
      "effects": [],
      "range": ">=2.4.1",
      "nodes": [
        "node_modules/@vue/test-utils"
      ],
      "fixAvailable": {
        "name": "@vue/test-utils",
        "version": "2.4.0",
        "isSemVerMajor": true
      }
    },
    "editorconfig": {
      "name": "editorconfig",
      "severity": "high",
      "isDirect": false,
      "via": [
        "minimatch"
      ],
      "effects": [
        "js-beautify"
      ],
      "range": "1.0.3 - 2.0.0",
      "nodes": [
        "node_modules/editorconfig"
      ],
      "fixAvailable": {
        "name": "@vue/test-utils",
        "version": "2.4.0",
        "isSemVerMajor": true
      }
    },
    "js-beautify": {
      "name": "js-beautify",
      "severity": "high",
      "isDirect": false,
      "via": [
        "editorconfig"
      ],
      "effects": [
        "@vue/test-utils"
      ],
      "range": ">=1.14.9",
      "nodes": [
        "node_modules/js-beautify"
      ],
      "fixAvailable": {
        "name": "@vue/test-utils",
        "version": "2.4.0",
        "isSemVerMajor": true
      }
    },
    "minimatch": {
      "name": "minimatch",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1113459,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern",
          "url": "https://github.com/advisories/GHSA-3ppc-4f35-3m26",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<3.1.3"
        },
        {
          "source": 1113465,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern",
          "url": "https://github.com/advisories/GHSA-3ppc-4f35-3m26",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": ">=9.0.0 <9.0.6"
        },
        {
          "source": 1113538,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
          "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
          "severity": "high",
          "cwe": [
            "CWE-407"
          ],
          "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": "<3.1.3"
        },
        {
          "source": 1113544,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
          "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
          "severity": "high",
          "cwe": [
            "CWE-407"
          ],
          "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": ">=9.0.0 <9.0.7"
        },
        {
          "source": 1113546,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
          "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "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": "<3.1.4"
        },
        {
          "source": 1113552,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
          "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "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": ">=9.0.0 <9.0.7"
        }
      ],
      "effects": [
        "editorconfig"
      ],
      "range": "<=3.1.3 || 9.0.0 - 9.0.6",
      "nodes": [
        "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch",
        "node_modules/editorconfig/node_modules/minimatch",
        "node_modules/js-beautify/node_modules/minimatch",
        "node_modules/minimatch"
      ],
      "fixAvailable": {
        "name": "@vue/test-utils",
        "version": "2.4.0",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 4,
      "critical": 0,
      "total": 4
    },
    "dependencies": {
      "prod": 1,
      "dev": 833,
      "optional": 3,
      "peer": 0,
      "peerOptional": 0,
      "total": 833
    }
  }
}

--- 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.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 38 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/deprecations (1.1.6)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking mediawiki/mediawiki-codesniffer (v49.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.18.0)
  - Locking mediawiki/minus-x (2.0.1)
  - Locking mediawiki/phan-taint-check-plugin (8.0.0)
  - Locking microsoft/tolerant-php-parser (v0.1.2)
  - Locking netresearch/jsonmapper (v4.5.0)
  - Locking phan/phan (5.5.2)
  - 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.2.2)
  - 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.2)
  - Locking psr/container (2.0.2)
  - Locking psr/log (3.0.2)
  - Locking sabre/event (5.1.7)
  - Locking squizlabs/php_codesniffer (3.13.5)
  - Locking symfony/console (v7.4.6)
  - Locking symfony/deprecation-contracts (v3.6.0)
  - Locking symfony/polyfill-ctype (v1.33.0)
  - Locking symfony/polyfill-intl-grapheme (v1.33.0)
  - Locking symfony/polyfill-intl-normalizer (v1.33.0)
  - Locking symfony/polyfill-mbstring (v1.33.0)
  - Locking symfony/polyfill-php80 (v1.33.0)
  - Locking symfony/service-contracts (v3.6.1)
  - Locking symfony/string (v8.0.6)
  - Locking tysonandre/var_representation_polyfill (0.1.3)
  - Locking webmozart/assert (2.1.6)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 38 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing squizlabs/php_codesniffer (3.13.5): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.2.0): Extracting archive
  - Installing composer/pcre (3.3.2): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.2.2): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.4.0): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.33.0): Extracting archive
  - Installing composer/spdx-licenses (1.5.9): Extracting archive
  - Installing composer/semver (3.4.4): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v49.0.0): Extracting archive
  - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
  - Installing symfony/polyfill-php80 (v1.33.0): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.33.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.33.0): Extracting archive
  - Installing symfony/polyfill-ctype (v1.33.0): Extracting archive
  - Installing symfony/string (v8.0.6): 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.6): 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.6): Extracting archive
  - Installing phpstan/phpdoc-parser (2.3.2): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing doctrine/deprecations (1.1.6): 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 psr/log (3.0.2): 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 (2.0.1): Extracting archive
  - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive
  - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive
  - Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive
  0/36 [>---------------------------]   0%
 29/36 [======================>-----]  80%
 35/36 [===========================>]  97%
 36/36 [============================] 100%
1 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
17 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils

--- end ---
Upgrading n:api-testing from 1.7.2 -> 1.7.3
$ /usr/bin/npm install
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.3.4',
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.4',
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 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 glob@7.2.3: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated domexception@4.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 832 packages, and audited 833 packages in 9s

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

4 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.4',
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.4',
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 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 glob@7.2.3: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated domexception@4.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 832 packages, and audited 833 packages in 12s

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

4 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 ---
10 sources checked
  /src/repo/resources/ext.readingLists.bookmark/styles.less
  /src/repo/resources/ext.readingLists.special/styles.less
  /src/repo/resources/ext.readingLists.onboarding/components/OnboardingPopover.vue
  /src/repo/resources/ext.readingLists.special/components/DisplayButton.vue
  /src/repo/resources/ext.readingLists.special/components/EmptyList.vue
  /src/repo/resources/ext.readingLists.special/components/EntryItem.vue
  /src/repo/resources/ext.readingLists.special/components/ImportDialog.vue
  /src/repo/resources/ext.readingLists.special/components/ListItem.vue
  /src/repo/resources/ext.readingLists.special/pages/Entries.vue
  /src/repo/resources/ext.readingLists.special/pages/Lists.vue

0 problems found

PASS tests/jest/ext.readingLists.api/index.test.js
  setup
    ✓ returns inserted list (7 ms)
  getLists
    ✓ returns array of multiple lists (1 ms)
    ✓ paginates with continue token
    ✓ sets up default list if missing (1 ms)
    ✓ throws on unhandled error (1 ms)
  getList
    ✓ returns metadata of one list (1 ms)
    ✓ translates default list name/description
    ✓ sets up default list if missing
    ✓ throws on unhandled error (1 ms)
  getEntries
    ✓ returns array of list entries (3 ms)
    ✓ paginates with continue token (1 ms)
    ✓ sets up default list if missing (1 ms)
    ✓ throws on unhandled error (1 ms)
  getPagesFromManifest
    ✓ returns array of page metadata (1 ms)
    ✓ transforms language code to url (1 ms)
    ✓ resolves page ids to titles (2 ms)
    ✓ returns fallback on error (1 ms)
  createEntry
    ✓ returns inserted entry
  deleteEntry
    ✓ returns success message (1 ms)
  fromBase64
    ✓ returns entries with resolved pages (2 ms)
    ✓ returns error message (1 ms)

PASS tests/jest/ext.readingLists.special/Lists.test.js
  Lists
    ✓ renders with toolbar disabled (1055 ms)
    ✓ renders with toolbar enabled (180 ms)

PASS tests/jest/ext.readingLists.special/Entries.test.js
  Entries
    ✓ renders with toolbar disabled (1244 ms)
    ✓ renders with toolbar enabled (142 ms)
    ✓ renders all items from all lists on special page (82 ms)

Test Suites: 3 passed, 3 total
Tests:       26 passed, 26 total
Snapshots:   5 passed, 5 total
Time:        5.677 s
Ran all test suites.
--- stdout ---

> test
> npm run lint && npm run test:unit


> lint
> npm run lint:i18n && npm run lint:scripts && npm run lint:scripts:tests && npm run lint:styles


> lint:i18n
> banana-checker i18n/ i18n/api/

Checked 2 message directories.

> lint:scripts
> eslint --cache --ignore-pattern tests/api-testing .


> lint:scripts:tests
> eslint --cache --no-ignore --config tests/api-testing/.eslintrc.json tests/api-testing


> lint:styles
> stylelint --cache -f verbose "resources/**/*.{css,less,vue}"


> test:unit
> jest --verbose

----------------------------------------|---------|----------|---------|---------|---------------------------------------------
File                                    | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                           
----------------------------------------|---------|----------|---------|---------|---------------------------------------------
All files                               |   55.26 |    48.02 |   50.45 |   55.29 |                                             
 ext.readingLists.api                   |   98.98 |     90.9 |     100 |   98.91 |                                             
  index.js                              |   98.98 |     90.9 |     100 |   98.91 | 252                                         
 ext.readingLists.bookmark              |       0 |        0 |       0 |       0 |                                             
  bookmark.js                           |       0 |        0 |       0 |       0 | 1-253                                       
 ext.readingLists.onboarding            |       0 |        0 |       0 |       0 |                                             
  index.js                              |       0 |      100 |     100 |       0 | 1-4                                         
  mountApp.js                           |       0 |        0 |       0 |       0 | 1-183                                       
 ext.readingLists.onboarding/components |       0 |        0 |       0 |       0 |                                             
  OnboardingPopover.vue                 |       0 |        0 |       0 |       0 | 5-130                                       
 ext.readingLists.special/components    |   68.75 |    36.84 |   57.69 |   70.21 |                                             
  DisplayButton.vue                     |   51.51 |       25 |    62.5 |   54.83 | 73-89,110                                   
  EmptyList.vue                         |     100 |      100 |     100 |     100 |                                             
  EntryItem.vue                         |   91.66 |      100 |      75 |   91.66 | 13                                          
  ImportDialog.vue                      |   45.83 |        0 |       0 |   45.83 | 19-41,56-77                                 
  ListItem.vue                          |     100 |    66.66 |     100 |     100 | 34,36-58,70                                 
 ext.readingLists.special/pages         |   79.75 |    60.65 |   67.85 |   80.24 |                                             
  Entries.vue                           |   79.04 |    64.77 |   70.58 |    79.8 | 64-72,81,93,127-135,144,154-155,174-175,227 
  Lists.vue                             |   81.03 |       50 |   63.63 |   81.03 | 42-47,73,79,89-90,99-100,131                
----------------------------------------|---------|----------|---------|---------|---------------------------------------------

--- end ---
Upgrading c:mediawiki/mediawiki-codesniffer from 49.0.0 -> 50.0.0
Upgrading c:mediawiki/mediawiki-phan-config from 0.18.0 -> 0.19.0
$ /usr/bin/composer update
--- stderr ---
Loading composer repositories with package information
Updating dependencies
Lock file operations: 2 installs, 5 updates, 3 removals
  - Removing microsoft/tolerant-php-parser (v0.1.2)
  - Removing symfony/polyfill-php80 (v1.33.0)
  - Removing tysonandre/var_representation_polyfill (0.1.3)
  - Upgrading mediawiki/mediawiki-codesniffer (v49.0.0 => v50.0.0)
  - Upgrading mediawiki/mediawiki-phan-config (0.18.0 => 0.19.0)
  - Upgrading mediawiki/phan-taint-check-plugin (8.0.0 => 9.0.0)
  - Upgrading phan/phan (5.5.2 => 6.0.1)
  - Locking phan/tolerant-php-parser (v0.2.0)
  - Locking phan/var_representation_polyfill (0.1.4)
  - Upgrading symfony/console (v7.4.6 => v8.0.6)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 2 installs, 5 updates, 3 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Removing tysonandre/var_representation_polyfill (0.1.3)
  - Removing symfony/polyfill-php80 (v1.33.0)
  - Removing microsoft/tolerant-php-parser (v0.1.2)
  - Upgrading mediawiki/mediawiki-codesniffer (v49.0.0 => v50.0.0): Extracting archive
  - Upgrading symfony/console (v7.4.6 => v8.0.6): Extracting archive
  - Installing phan/var_representation_polyfill (0.1.4): Extracting archive
  - Installing phan/tolerant-php-parser (v0.2.0): Extracting archive
  - Upgrading phan/phan (5.5.2 => 6.0.1): Extracting archive
  - Upgrading mediawiki/phan-taint-check-plugin (8.0.0 => 9.0.0): Extracting archive
  - Upgrading mediawiki/mediawiki-phan-config (0.18.0 => 0.19.0): Extracting archive
 0/7 [>---------------------------]   0%
 6/7 [========================>---]  85%
 7/7 [============================] 100%
Generating autoload files
16 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found.
--- stdout ---

--- end ---
$ vendor/bin/phpcs --report=json
--- stdout ---
{"totals":{"errors":0,"warnings":0,"fixable":0},"files":{"\/src\/repo\/src\/Constants.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/SchemaHookHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Doc\/ReadingListRowWithMergeFlag.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/ReadingListRepositoryFactory.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Doc\/ReadingListRow.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Doc\/ReadingListEntryRow.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Doc\/ReadingListEntryRowWithMergeFlag.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/ReadingLists.alias.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/BetaFeatureHookHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiReadingListsTeardown.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Validator\/ReadingListPreferenceEligibilityValidator.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiReadingListsDeleteEntry.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ReadingListsTokenAwareHandlerTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/SpecialReadingLists.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiReadingListsDelete.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiReadingListsSetup.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/ReverseInterwikiLookup.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/ReverseInterwikiLookupInterface.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/TeardownHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Service\/UserPreferenceBatchUpdater.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Utils.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsCreateBatchHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsEntriesCreateHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/SetupHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsCreateHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/ServiceWiringTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsEntriesCreateBatchHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiReadingListsCreateEntry.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiReadingListsCreate.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/HookHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/maintenance\/populateProjectsFromSiteMatrix.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/maintenance\/fixListSize.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiReadingListsUpdate.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsIdHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/maintenance\/purge.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/ReverseInterwikiLookupTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/HookHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiQueryTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsDeleteHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/ReadingListRepositoryException.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/Api\/ApiReadingListsCreateTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Validator\/ReadingListPreferenceEligibilityValidatorTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/RestUtilTraitTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/Api\/ApiTraitTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiReadingLists.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiQueryReadingLists.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/RestUtilTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/Api\/ApiReadingListsUpdateTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/maintenance\/RenameProjectsTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/Api\/ApiReadingListsCreateEntryTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsEntriesHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/ReadingListsTestHelperTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/maintenance\/renameProjects.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsDeleteHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/UtilsTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ReadingListsHandlerTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsChangesSinceHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/ServiceWiring.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/Api\/ApiReadingListsDeleteEntryTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/.phan\/config.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/SetupAndTeardownHandlersTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/Api\/ApiReadingListsDeleteTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsPagesHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/Api\/ApiQueryReadingListsTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsEntriesDeleteHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsUpdateHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsCreateHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsIdHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Rest\/ReadingListsTokenAwareHandlerTraitTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiQueryReadingListEntries.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsEntriesCreateBatchHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsPagesHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/Api\/ApiQueryTraitTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/unit\/Service\/UserPreferenceBatchUpdaterTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/maintenance\/setReadingListHiddenPreference.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/maintenance\/SetReadingListHiddenPreferenceTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsCreateBatchHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Api\/ApiTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/Api\/ApiQueryReadingListEntriesTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/Api\/ApiReadingListsSetupAndTeardownTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/RestTestHelperTrait.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/HookHandlerIntegrationTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsChangesSinceHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsEntriesCreateHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsUpdateHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/maintenance\/populateWithTestData.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/integration\/Rest\/ListsEntriesHandlerTest.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/ReadingListRepository.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/src\/Rest\/ListsEntriesDeleteHandler.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/tests\/phpunit\/ReadingListRepositoryTest.php":{"errors":0,"warnings":0,"messages":[]}}}

--- end ---
$ /usr/bin/composer install
--- stderr ---
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Nothing to install, update or remove
Generating autoload files
16 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---

--- end ---
$ /usr/bin/composer test
--- stderr ---
> parallel-lint . --exclude vendor --exclude node_modules
> phpcs -sp --cache
> minus-x check .
--- stdout ---
PHP 8.4.18 | 10 parallel jobs
............................................................ 60/92 ( 65%)
................................                             92/92 (100%)


Checked 92 files in 0.3 seconds
No syntax error found
.............................................. 46 / 46 (100%)


Time: 512ms; Memory: 48MB

MinusX
======
Processing /src/repo...
.............................................................
.............................................................
.............................................................
.............................................................
.............................................................
...................................
All good!

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@vue/test-utils": {
      "name": "@vue/test-utils",
      "severity": "high",
      "isDirect": true,
      "via": [
        "js-beautify"
      ],
      "effects": [],
      "range": ">=2.4.1",
      "nodes": [
        "node_modules/@vue/test-utils"
      ],
      "fixAvailable": {
        "name": "@vue/test-utils",
        "version": "2.4.0",
        "isSemVerMajor": true
      }
    },
    "editorconfig": {
      "name": "editorconfig",
      "severity": "high",
      "isDirect": false,
      "via": [
        "minimatch"
      ],
      "effects": [
        "js-beautify"
      ],
      "range": "1.0.3 - 2.0.0",
      "nodes": [
        "node_modules/editorconfig"
      ],
      "fixAvailable": {
        "name": "@vue/test-utils",
        "version": "2.4.0",
        "isSemVerMajor": true
      }
    },
    "js-beautify": {
      "name": "js-beautify",
      "severity": "high",
      "isDirect": false,
      "via": [
        "editorconfig"
      ],
      "effects": [
        "@vue/test-utils"
      ],
      "range": ">=1.14.9",
      "nodes": [
        "node_modules/js-beautify"
      ],
      "fixAvailable": {
        "name": "@vue/test-utils",
        "version": "2.4.0",
        "isSemVerMajor": true
      }
    },
    "minimatch": {
      "name": "minimatch",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1113459,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern",
          "url": "https://github.com/advisories/GHSA-3ppc-4f35-3m26",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<3.1.3"
        },
        {
          "source": 1113465,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern",
          "url": "https://github.com/advisories/GHSA-3ppc-4f35-3m26",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": ">=9.0.0 <9.0.6"
        },
        {
          "source": 1113538,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
          "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
          "severity": "high",
          "cwe": [
            "CWE-407"
          ],
          "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": "<3.1.3"
        },
        {
          "source": 1113544,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
          "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
          "severity": "high",
          "cwe": [
            "CWE-407"
          ],
          "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": ">=9.0.0 <9.0.7"
        },
        {
          "source": 1113546,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
          "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "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": "<3.1.4"
        },
        {
          "source": 1113552,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
          "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "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": ">=9.0.0 <9.0.7"
        }
      ],
      "effects": [
        "editorconfig"
      ],
      "range": "<=3.1.3 || 9.0.0 - 9.0.6",
      "nodes": [
        "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch",
        "node_modules/editorconfig/node_modules/minimatch",
        "node_modules/js-beautify/node_modules/minimatch",
        "node_modules/minimatch"
      ],
      "fixAvailable": {
        "name": "@vue/test-utils",
        "version": "2.4.0",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 4,
      "critical": 0,
      "total": 4
    },
    "dependencies": {
      "prod": 1,
      "dev": 833,
      "optional": 3,
      "peer": 0,
      "peerOptional": 0,
      "total": 833
    }
  }
}

--- 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.4',
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.4',
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": 1,
  "removed": 0,
  "changed": 3,
  "audited": 834,
  "funding": 149,
  "audit": {
    "auditReportVersion": 2,
    "vulnerabilities": {
      "@vue/test-utils": {
        "name": "@vue/test-utils",
        "severity": "high",
        "isDirect": true,
        "via": [
          "js-beautify"
        ],
        "effects": [],
        "range": ">=2.4.1",
        "nodes": [
          "node_modules/@vue/test-utils"
        ],
        "fixAvailable": {
          "name": "@vue/test-utils",
          "version": "2.4.0",
          "isSemVerMajor": true
        }
      },
      "editorconfig": {
        "name": "editorconfig",
        "severity": "high",
        "isDirect": false,
        "via": [
          "minimatch"
        ],
        "effects": [
          "js-beautify"
        ],
        "range": "1.0.3 - 2.0.0",
        "nodes": [
          "node_modules/editorconfig"
        ],
        "fixAvailable": {
          "name": "@vue/test-utils",
          "version": "2.4.0",
          "isSemVerMajor": true
        }
      },
      "js-beautify": {
        "name": "js-beautify",
        "severity": "high",
        "isDirect": false,
        "via": [
          "editorconfig"
        ],
        "effects": [
          "@vue/test-utils"
        ],
        "range": ">=1.14.9",
        "nodes": [
          "node_modules/js-beautify"
        ],
        "fixAvailable": {
          "name": "@vue/test-utils",
          "version": "2.4.0",
          "isSemVerMajor": true
        }
      },
      "minimatch": {
        "name": "minimatch",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1113459,
            "name": "minimatch",
            "dependency": "minimatch",
            "title": "minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern",
            "url": "https://github.com/advisories/GHSA-3ppc-4f35-3m26",
            "severity": "high",
            "cwe": [
              "CWE-1333"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": "<3.1.3"
          },
          {
            "source": 1113465,
            "name": "minimatch",
            "dependency": "minimatch",
            "title": "minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern",
            "url": "https://github.com/advisories/GHSA-3ppc-4f35-3m26",
            "severity": "high",
            "cwe": [
              "CWE-1333"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": ">=9.0.0 <9.0.6"
          },
          {
            "source": 1113538,
            "name": "minimatch",
            "dependency": "minimatch",
            "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
            "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
            "severity": "high",
            "cwe": [
              "CWE-407"
            ],
            "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": "<3.1.3"
          },
          {
            "source": 1113544,
            "name": "minimatch",
            "dependency": "minimatch",
            "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments",
            "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj",
            "severity": "high",
            "cwe": [
              "CWE-407"
            ],
            "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": ">=9.0.0 <9.0.7"
          },
          {
            "source": 1113546,
            "name": "minimatch",
            "dependency": "minimatch",
            "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
            "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
            "severity": "high",
            "cwe": [
              "CWE-1333"
            ],
            "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": "<3.1.4"
          },
          {
            "source": 1113552,
            "name": "minimatch",
            "dependency": "minimatch",
            "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions",
            "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74",
            "severity": "high",
            "cwe": [
              "CWE-1333"
            ],
            "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": ">=9.0.0 <9.0.7"
          }
        ],
        "effects": [
          "editorconfig"
        ],
        "range": "<=3.1.3 || 9.0.0 - 9.0.6",
        "nodes": [
          "",
          "",
          "",
          "node_modules/editorconfig/node_modules/minimatch"
        ],
        "fixAvailable": {
          "name": "@vue/test-utils",
          "version": "2.4.0",
          "isSemVerMajor": true
        }
      }
    },
    "metadata": {
      "vulnerabilities": {
        "info": 0,
        "low": 0,
        "moderate": 0,
        "high": 4,
        "critical": 0,
        "total": 4
      },
      "dependencies": {
        "prod": 1,
        "dev": 833,
        "optional": 3,
        "peer": 0,
        "peerOptional": 0,
        "total": 833
      }
    }
  }
}

--- end ---
{"added": 1, "removed": 0, "changed": 3, "audited": 834, "funding": 149, "audit": {"auditReportVersion": 2, "vulnerabilities": {"@vue/test-utils": {"name": "@vue/test-utils", "severity": "high", "isDirect": true, "via": ["js-beautify"], "effects": [], "range": ">=2.4.1", "nodes": ["node_modules/@vue/test-utils"], "fixAvailable": {"name": "@vue/test-utils", "version": "2.4.0", "isSemVerMajor": true}}, "editorconfig": {"name": "editorconfig", "severity": "high", "isDirect": false, "via": ["minimatch"], "effects": ["js-beautify"], "range": "1.0.3 - 2.0.0", "nodes": ["node_modules/editorconfig"], "fixAvailable": {"name": "@vue/test-utils", "version": "2.4.0", "isSemVerMajor": true}}, "js-beautify": {"name": "js-beautify", "severity": "high", "isDirect": false, "via": ["editorconfig"], "effects": ["@vue/test-utils"], "range": ">=1.14.9", "nodes": ["node_modules/js-beautify"], "fixAvailable": {"name": "@vue/test-utils", "version": "2.4.0", "isSemVerMajor": true}}, "minimatch": {"name": "minimatch", "severity": "high", "isDirect": false, "via": [{"source": 1113459, "name": "minimatch", "dependency": "minimatch", "title": "minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern", "url": "https://github.com/advisories/GHSA-3ppc-4f35-3m26", "severity": "high", "cwe": ["CWE-1333"], "cvss": {"score": 0, "vectorString": null}, "range": "<3.1.3"}, {"source": 1113465, "name": "minimatch", "dependency": "minimatch", "title": "minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern", "url": "https://github.com/advisories/GHSA-3ppc-4f35-3m26", "severity": "high", "cwe": ["CWE-1333"], "cvss": {"score": 0, "vectorString": null}, "range": ">=9.0.0 <9.0.6"}, {"source": 1113538, "name": "minimatch", "dependency": "minimatch", "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments", "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj", "severity": "high", "cwe": ["CWE-407"], "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": "<3.1.3"}, {"source": 1113544, "name": "minimatch", "dependency": "minimatch", "title": "minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments", "url": "https://github.com/advisories/GHSA-7r86-cg39-jmmj", "severity": "high", "cwe": ["CWE-407"], "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": ">=9.0.0 <9.0.7"}, {"source": 1113546, "name": "minimatch", "dependency": "minimatch", "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions", "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74", "severity": "high", "cwe": ["CWE-1333"], "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": "<3.1.4"}, {"source": 1113552, "name": "minimatch", "dependency": "minimatch", "title": "minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions", "url": "https://github.com/advisories/GHSA-23c5-xmqv-rm74", "severity": "high", "cwe": ["CWE-1333"], "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": ">=9.0.0 <9.0.7"}], "effects": ["editorconfig"], "range": "<=3.1.3 || 9.0.0 - 9.0.6", "nodes": ["", "", "", "node_modules/editorconfig/node_modules/minimatch"], "fixAvailable": {"name": "@vue/test-utils", "version": "2.4.0", "isSemVerMajor": true}}}, "metadata": {"vulnerabilities": {"info": 0, "low": 0, "moderate": 0, "high": 4, "critical": 0, "total": 4}, "dependencies": {"prod": 1, "dev": 833, "optional": 3, "peer": 0, "peerOptional": 0, "total": 833}}}}
$ /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.4',
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.4',
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 ---

changed 3 packages, and audited 833 packages in 3s

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

# npm audit report

minimatch  9.0.0 - 9.0.6
Severity: high
minimatch has a ReDoS via repeated wildcards with non-matching literal in pattern - https://github.com/advisories/GHSA-3ppc-4f35-3m26
minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adjacent GLOBSTAR segments - https://github.com/advisories/GHSA-7r86-cg39-jmmj
minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regular expressions - https://github.com/advisories/GHSA-23c5-xmqv-rm74
fix available via `npm audit fix --force`
Will install @vue/test-utils@2.4.0, which is a breaking change
node_modules/editorconfig/node_modules/minimatch
  editorconfig  1.0.3 - 2.0.0
  Depends on vulnerable versions of minimatch
  node_modules/editorconfig
    js-beautify  >=1.14.9
    Depends on vulnerable versions of editorconfig
    node_modules/js-beautify
      @vue/test-utils  >=2.4.1
      Depends on vulnerable versions of js-beautify
      node_modules/@vue/test-utils

4 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.4',
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.4',
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 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 glob@7.2.3: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated domexception@4.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 832 packages, and audited 833 packages in 9s

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

4 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 ---
0 of 10 sources checked
  /src/repo/resources/ext.readingLists.bookmark/styles.less (ignored)
  /src/repo/resources/ext.readingLists.special/styles.less (ignored)
  /src/repo/resources/ext.readingLists.onboarding/components/OnboardingPopover.vue (ignored)
  /src/repo/resources/ext.readingLists.special/components/DisplayButton.vue (ignored)
  /src/repo/resources/ext.readingLists.special/components/EmptyList.vue (ignored)
  /src/repo/resources/ext.readingLists.special/components/EntryItem.vue (ignored)
  /src/repo/resources/ext.readingLists.special/components/ImportDialog.vue (ignored)
  /src/repo/resources/ext.readingLists.special/components/ListItem.vue (ignored)
  /src/repo/resources/ext.readingLists.special/pages/Entries.vue (ignored)
  /src/repo/resources/ext.readingLists.special/pages/Lists.vue (ignored)

0 problems found

PASS tests/jest/ext.readingLists.api/index.test.js
  setup
    ✓ returns inserted list (9 ms)
  getLists
    ✓ returns array of multiple lists (1 ms)
    ✓ paginates with continue token
    ✓ sets up default list if missing (1 ms)
    ✓ throws on unhandled error (1 ms)
  getList
    ✓ returns metadata of one list
    ✓ translates default list name/description (1 ms)
    ✓ sets up default list if missing (1 ms)
    ✓ throws on unhandled error (1 ms)
  getEntries
    ✓ returns array of list entries (17 ms)
    ✓ paginates with continue token (1 ms)
    ✓ sets up default list if missing (1 ms)
    ✓ throws on unhandled error (1 ms)
  getPagesFromManifest
    ✓ returns array of page metadata (2 ms)
    ✓ transforms language code to url (1 ms)
    ✓ resolves page ids to titles (1 ms)
    ✓ returns fallback on error (1 ms)
  createEntry
    ✓ returns inserted entry (1 ms)
  deleteEntry
    ✓ returns success message (1 ms)
  fromBase64
    ✓ returns entries with resolved pages (2 ms)
    ✓ returns error message (2 ms)

PASS tests/jest/ext.readingLists.special/Entries.test.js
  Entries
    ✓ renders with toolbar disabled (259 ms)
    ✓ renders with toolbar enabled (98 ms)
    ✓ renders all items from all lists on special page (55 ms)

PASS tests/jest/ext.readingLists.special/Lists.test.js
  Lists
    ✓ renders with toolbar disabled (208 ms)
    ✓ renders with toolbar enabled (180 ms)

Test Suites: 3 passed, 3 total
Tests:       26 passed, 26 total
Snapshots:   5 passed, 5 total
Time:        4.553 s
Ran all test suites.
--- stdout ---

> test
> npm run lint && npm run test:unit


> lint
> npm run lint:i18n && npm run lint:scripts && npm run lint:scripts:tests && npm run lint:styles


> lint:i18n
> banana-checker i18n/ i18n/api/

Checked 2 message directories.

> lint:scripts
> eslint --cache --ignore-pattern tests/api-testing .


> lint:scripts:tests
> eslint --cache --no-ignore --config tests/api-testing/.eslintrc.json tests/api-testing


> lint:styles
> stylelint --cache -f verbose "resources/**/*.{css,less,vue}"


> test:unit
> jest --verbose

----------------------------------------|---------|----------|---------|---------|---------------------------------------------
File                                    | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                           
----------------------------------------|---------|----------|---------|---------|---------------------------------------------
All files                               |   55.26 |    48.02 |   50.45 |   55.29 |                                             
 ext.readingLists.api                   |   98.98 |     90.9 |     100 |   98.91 |                                             
  index.js                              |   98.98 |     90.9 |     100 |   98.91 | 252                                         
 ext.readingLists.bookmark              |       0 |        0 |       0 |       0 |                                             
  bookmark.js                           |       0 |        0 |       0 |       0 | 1-253                                       
 ext.readingLists.onboarding            |       0 |        0 |       0 |       0 |                                             
  index.js                              |       0 |      100 |     100 |       0 | 1-4                                         
  mountApp.js                           |       0 |        0 |       0 |       0 | 1-183                                       
 ext.readingLists.onboarding/components |       0 |        0 |       0 |       0 |                                             
  OnboardingPopover.vue                 |       0 |        0 |       0 |       0 | 5-130                                       
 ext.readingLists.special/components    |   68.75 |    36.84 |   57.69 |   70.21 |                                             
  DisplayButton.vue                     |   51.51 |       25 |    62.5 |   54.83 | 73-89,110                                   
  EmptyList.vue                         |     100 |      100 |     100 |     100 |                                             
  EntryItem.vue                         |   91.66 |      100 |      75 |   91.66 | 13                                          
  ImportDialog.vue                      |   45.83 |        0 |       0 |   45.83 | 19-41,56-77                                 
  ListItem.vue                          |     100 |    66.66 |     100 |     100 | 34,36-58,70                                 
 ext.readingLists.special/pages         |   79.75 |    60.65 |   67.85 |   80.24 |                                             
  Entries.vue                           |   79.04 |    64.77 |   70.58 |    79.8 | 64-72,81,93,127-135,144,154-155,174-175,227 
  Lists.vue                             |   81.03 |       50 |   63.63 |   81.03 | 42-47,73,79,89-90,99-100,131                
----------------------------------------|---------|----------|---------|---------|---------------------------------------------

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

--- end ---
build: Updating dependencies

composer:
* mediawiki/mediawiki-codesniffer: 49.0.0 → 50.0.0
* mediawiki/mediawiki-phan-config: 0.18.0 → 0.19.0

npm:
* api-testing: 1.7.2 → 1.7.3


$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmp3b99ujnt
--- stdout ---
[master edf24a6] build: Updating dependencies
 3 files changed, 18 insertions(+), 20 deletions(-)

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

composer:
* mediawiki/mediawiki-codesniffer: 49.0.0 → 50.0.0
* mediawiki/mediawiki-phan-config: 0.18.0 → 0.19.0

npm:
* api-testing: 1.7.2 → 1.7.3

Change-Id: Ia329e2f1d5e8c43239b8ab74f36a1b4ee3e4d01e
---
 composer.json     |  4 ++--
 package-lock.json | 32 +++++++++++++++-----------------
 package.json      |  2 +-
 3 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/composer.json b/composer.json
index ae1f4f1..10e4755 100644
--- a/composer.json
+++ b/composer.json
@@ -1,7 +1,7 @@
 {
 	"require-dev": {
-		"mediawiki/mediawiki-codesniffer": "49.0.0",
-		"mediawiki/mediawiki-phan-config": "0.18.0",
+		"mediawiki/mediawiki-codesniffer": "50.0.0",
+		"mediawiki/mediawiki-phan-config": "0.19.0",
 		"mediawiki/minus-x": "2.0.1",
 		"php-parallel-lint/php-console-highlighter": "1.0.0",
 		"php-parallel-lint/php-parallel-lint": "1.4.0"
diff --git a/package-lock.json b/package-lock.json
index bccdd98..062854e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
 				"@vue/vue3-jest": "29.2.6",
 				"@wikimedia/codex": "2.3.4",
 				"@wikimedia/types-wikimedia": "0.5.0",
-				"api-testing": "1.7.2",
+				"api-testing": "1.7.3",
 				"eslint-config-wikimedia": "0.32.3",
 				"grunt-banana-checker": "0.13.0",
 				"jest": "29.7.0",
@@ -3406,12 +3406,12 @@
 			}
 		},
 		"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
-			"version": "9.0.5",
-			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-			"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+			"version": "9.0.9",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+			"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
 			"dev": true,
 			"dependencies": {
-				"brace-expansion": "^2.0.1"
+				"brace-expansion": "^2.0.2"
 			},
 			"engines": {
 				"node": ">=16 || 14 >=14.17"
@@ -3914,9 +3914,9 @@
 			}
 		},
 		"node_modules/api-testing": {
-			"version": "1.7.2",
-			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.2.tgz",
-			"integrity": "sha512-W6vgHMjmTUMq8He4pRdpLNjfkBre0N/ygv6tT6jrWZQdZlBWDZHi+0pEg8FxBi0U9QzhUfaATrPZkfnF7YVt3g==",
+			"version": "1.7.3",
+			"resolved": "https://registry.npmjs.org/api-testing/-/api-testing-1.7.3.tgz",
+			"integrity": "sha512-wvXUqkiflOur6kI57onNt2BQ6Hse0BRCIzThc1W7W4LEfVvLUCyKOp8EQna9tKqMZ7K1Rz/ptrCSzHe9XEo+Bw==",
 			"dev": true,
 			"dependencies": {
 				"chai": "4.5.0",
@@ -7804,13 +7804,12 @@
 			}
 		},
 		"node_modules/js-beautify/node_modules/minimatch": {
-			"version": "9.0.5",
-			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-			"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+			"version": "9.0.9",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+			"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
-				"brace-expansion": "^2.0.1"
+				"brace-expansion": "^2.0.2"
 			},
 			"engines": {
 				"node": ">=16 || 14 >=14.17"
@@ -8282,11 +8281,10 @@
 			}
 		},
 		"node_modules/minimatch": {
-			"version": "3.1.2",
-			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+			"version": "3.1.5",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+			"integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
 				"brace-expansion": "^1.1.7"
 			},
diff --git a/package.json b/package.json
index 0417e3e..0c777a1 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
 		"@vue/vue3-jest": "29.2.6",
 		"@wikimedia/codex": "2.3.4",
 		"@wikimedia/types-wikimedia": "0.5.0",
-		"api-testing": "1.7.2",
+		"api-testing": "1.7.3",
 		"eslint-config-wikimedia": "0.32.3",
 		"grunt-banana-checker": "0.13.0",
 		"jest": "29.7.0",
-- 
2.47.3


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