mediawiki/extensions/UrlShortener: main (log #1392223)

sourcepatches

This run took 43 seconds.

From 7d6e707e2014a4f31c5c9e379707692965f2f9a5 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Thu, 20 Jun 2024 20:11:02 +0000
Subject: [PATCH] build: Updating npm dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* eslint-config-wikimedia: 0.28.0 → 0.28.2
* grunt-stylelint: 0.20.0 → 0.20.1
* stylelint-config-wikimedia: 0.17.1 → 0.17.2

Change-Id: I6e97c920bb6d8ba7ede80536d9a770023d6ef319
---
 package-lock.json | 60 +++++++++++++++++++++++------------------------
 package.json      |  6 ++---
 2 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index ed7862e..78c35cc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,13 +6,13 @@
 		"": {
 			"name": "urlshortener",
 			"devDependencies": {
-				"eslint-config-wikimedia": "0.28.0",
+				"eslint-config-wikimedia": "0.28.2",
 				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.13.0",
 				"grunt-eslint": "24.3.0",
-				"grunt-stylelint": "0.20.0",
+				"grunt-stylelint": "0.20.1",
 				"grunt-tyops": "0.1.1",
-				"stylelint-config-wikimedia": "0.17.1"
+				"stylelint-config-wikimedia": "0.17.2"
 			}
 		},
 		"node_modules/@aashutoshrathi/word-wrap": {
@@ -1463,9 +1463,9 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.28.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.0.tgz",
-			"integrity": "sha512-qDkELhXoDvQP+kYYo5MilhvqJ4Agk78Pzu95K1l1h68xPEWagD4k/dvrgmVyKjcp5KyAnZr++7qChLiFhDdBDA==",
+			"version": "0.28.2",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz",
+			"integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==",
 			"dev": true,
 			"dependencies": {
 				"browserslist-config-wikimedia": "^0.7.0",
@@ -1478,7 +1478,7 @@
 				"eslint-plugin-mediawiki": "^0.7.0",
 				"eslint-plugin-mocha": "^10.4.3",
 				"eslint-plugin-n": "^17.7.0",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^53.0.0",
@@ -1682,12 +1682,12 @@
 			}
 		},
 		"node_modules/eslint-plugin-no-jquery": {
-			"version": "2.7.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz",
-			"integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==",
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz",
+			"integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==",
 			"dev": true,
 			"peerDependencies": {
-				"eslint": ">=2.3.0"
+				"eslint": ">=8.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-qunit": {
@@ -2583,9 +2583,9 @@
 			}
 		},
 		"node_modules/grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"dependencies": {
 				"chalk": "^4.1.2"
@@ -4418,9 +4418,9 @@
 			}
 		},
 		"node_modules/stylelint-config-wikimedia": {
-			"version": "0.17.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.1.tgz",
-			"integrity": "sha512-wLgadkHgAkz9jLLOVjBETSU+P3fzHB+rbx4ajct6+w/sqtKd2N9DM77ufJXZXA+Ai0HHanU9ltAy9XzFEFkT2Q==",
+			"version": "0.17.2",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz",
+			"integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==",
 			"dev": true,
 			"dependencies": {
 				"@stylistic/stylelint-config": "1.0.1",
@@ -6200,9 +6200,9 @@
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.28.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.0.tgz",
-			"integrity": "sha512-qDkELhXoDvQP+kYYo5MilhvqJ4Agk78Pzu95K1l1h68xPEWagD4k/dvrgmVyKjcp5KyAnZr++7qChLiFhDdBDA==",
+			"version": "0.28.2",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz",
+			"integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==",
 			"dev": true,
 			"requires": {
 				"browserslist-config-wikimedia": "^0.7.0",
@@ -6215,7 +6215,7 @@
 				"eslint-plugin-mediawiki": "^0.7.0",
 				"eslint-plugin-mocha": "^10.4.3",
 				"eslint-plugin-n": "^17.7.0",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^53.0.0",
@@ -6350,9 +6350,9 @@
 			}
 		},
 		"eslint-plugin-no-jquery": {
-			"version": "2.7.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz",
-			"integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==",
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz",
+			"integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==",
 			"dev": true,
 			"requires": {}
 		},
@@ -6996,9 +6996,9 @@
 			}
 		},
 		"grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"requires": {
 				"chalk": "^4.1.2"
@@ -8372,9 +8372,9 @@
 			"requires": {}
 		},
 		"stylelint-config-wikimedia": {
-			"version": "0.17.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.1.tgz",
-			"integrity": "sha512-wLgadkHgAkz9jLLOVjBETSU+P3fzHB+rbx4ajct6+w/sqtKd2N9DM77ufJXZXA+Ai0HHanU9ltAy9XzFEFkT2Q==",
+			"version": "0.17.2",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz",
+			"integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==",
 			"dev": true,
 			"requires": {
 				"@stylistic/stylelint-config": "1.0.1",
diff --git a/package.json b/package.json
index 9f86fcb..c1684d9 100644
--- a/package.json
+++ b/package.json
@@ -5,12 +5,12 @@
 		"test": "grunt test"
 	},
 	"devDependencies": {
-		"eslint-config-wikimedia": "0.28.0",
+		"eslint-config-wikimedia": "0.28.2",
 		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.13.0",
 		"grunt-eslint": "24.3.0",
-		"grunt-stylelint": "0.20.0",
+		"grunt-stylelint": "0.20.1",
 		"grunt-tyops": "0.1.1",
-		"stylelint-config-wikimedia": "0.17.1"
+		"stylelint-config-wikimedia": "0.17.2"
 	}
 }
-- 
2.39.2

$ date
--- stdout ---
Thu Jun 20 20:10:29 UTC 2024

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

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {},
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 0,
      "critical": 0,
      "total": 0
    },
    "dependencies": {
      "prod": 1,
      "dev": 426,
      "optional": 0,
      "peer": 1,
      "peerOptional": 0,
      "total": 426
    }
  }
}

--- 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: 41 installs, 0 updates, 0 removals
  - Locking bacon/bacon-qr-code (2.0.8)
  - Locking composer/pcre (3.1.4)
  - Locking composer/semver (3.4.0)
  - Locking composer/spdx-licenses (1.5.8)
  - Locking composer/xdebug-handler (3.0.5)
  - Locking dasprid/enum (1.0.5)
  - Locking dealerdirect/phpcodesniffer-composer-installer (v1.0.0)
  - Locking doctrine/deprecations (1.1.3)
  - Locking endroid/qr-code (4.5.2)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking mediawiki/mediawiki-codesniffer (v43.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.14.0)
  - Locking mediawiki/minus-x (1.1.3)
  - Locking mediawiki/phan-taint-check-plugin (6.0.0)
  - Locking microsoft/tolerant-php-parser (v0.1.2)
  - Locking netresearch/jsonmapper (v4.4.1)
  - Locking phan/phan (5.4.3)
  - 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.1.2)
  - Locking phpcsstandards/phpcsutils (1.0.9)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.4.1)
  - Locking phpdocumentor/type-resolver (1.8.2)
  - Locking phpstan/phpdoc-parser (1.29.1)
  - Locking psr/container (2.0.2)
  - Locking psr/log (3.0.0)
  - Locking sabre/event (5.1.4)
  - Locking squizlabs/php_codesniffer (3.8.1)
  - Locking symfony/console (v7.1.1)
  - Locking symfony/deprecation-contracts (v3.5.0)
  - Locking symfony/polyfill-ctype (v1.30.0)
  - Locking symfony/polyfill-intl-grapheme (v1.30.0)
  - Locking symfony/polyfill-intl-normalizer (v1.30.0)
  - Locking symfony/polyfill-mbstring (v1.30.0)
  - Locking symfony/polyfill-php80 (v1.30.0)
  - Locking symfony/service-contracts (v3.5.0)
  - Locking symfony/string (v7.1.1)
  - Locking tysonandre/var_representation_polyfill (0.1.3)
  - Locking webmozart/assert (1.11.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 41 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing squizlabs/php_codesniffer (3.8.1): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.0.0): Extracting archive
  - Installing composer/pcre (3.1.4): Extracting archive
  - Installing dasprid/enum (1.0.5): Extracting archive
  - Installing bacon/bacon-qr-code (2.0.8): Extracting archive
  - Installing endroid/qr-code (4.5.2): Extracting archive
  - Installing symfony/polyfill-php80 (v1.30.0): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.0.9): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.1.2): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.30.0): Extracting archive
  - Installing composer/spdx-licenses (1.5.8): Extracting archive
  - Installing composer/semver (3.4.0): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v43.0.0): Extracting archive
  - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.30.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.30.0): Extracting archive
  - Installing symfony/polyfill-ctype (v1.30.0): Extracting archive
  - Installing symfony/string (v7.1.1): Extracting archive
  - Installing symfony/deprecation-contracts (v3.5.0): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.5.0): Extracting archive
  - Installing symfony/console (v7.1.1): Extracting archive
  - Installing sabre/event (5.1.4): Extracting archive
  - Installing netresearch/jsonmapper (v4.4.1): Extracting archive
  - Installing microsoft/tolerant-php-parser (v0.1.2): Extracting archive
  - Installing webmozart/assert (1.11.0): Extracting archive
  - Installing phpstan/phpdoc-parser (1.29.1): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing doctrine/deprecations (1.1.3): Extracting archive
  - Installing phpdocumentor/type-resolver (1.8.2): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.4.1): Extracting archive
  - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive
  - Installing psr/log (3.0.0): Extracting archive
  - Installing composer/xdebug-handler (3.0.5): Extracting archive
  - Installing phan/phan (5.4.3): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (6.0.0): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.14.0): Extracting archive
  - Installing mediawiki/minus-x (1.1.3): Extracting archive
  - Installing 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/39 [>---------------------------]   0%
 23/39 [================>-----------]  58%
 38/39 [===========================>]  97%
 39/39 [============================] 100%
4 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
16 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:eslint-config-wikimedia from 0.28.0 -> 0.28.2
Upgrading n:grunt-stylelint from 0.20.0 -> 0.20.1
Upgrading n:stylelint-config-wikimedia from 0.17.1 -> 0.17.2
$ /usr/bin/npm install
--- stdout ---

added 426 packages, and audited 427 packages in 4s

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

found 0 vulnerabilities

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

--- end ---
$ /usr/bin/npm install grunt-eslint@24.3.0 --save-exact
--- stdout ---

up to date, audited 427 packages in 933ms

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

found 0 vulnerabilities

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

--- end ---
$ ./node_modules/.bin/eslint modules/ --fix
--- stdout ---

/src/repo/modules/ext.urlShortener.special.js
  209:1  warning  This line has a length of 141. Maximum allowed is 100  max-len

✖ 1 problem (0 errors, 1 warning)


--- end ---
$ ./node_modules/.bin/eslint modules/ -f json
--- stdout ---
[{"filePath":"/src/repo/modules/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/modules/ext.urlShortener.special.js","messages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 141. Maximum allowed is 100.","line":209,"column":1,"nodeType":"Program","messageId":"max","endLine":209,"endColumn":136}],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":81,"column":4,"nodeType":"CallExpression","endLine":81,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":108,"column":3,"nodeType":"CallExpression","endLine":108,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":170,"column":18,"nodeType":"CallExpression","endLine":170,"endColumn":74,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"class UrlShortener {\n\n\tconstructor() {\n\t\tthis.api = new mw.Api();\n\t\t// Defined server-side using UrlShortenerUtils::getAllowedDomainsRegex\n\n\t\tthis.regex = new RegExp( mw.config.get( 'wgUrlShortenerAllowedDomains' ) );\n\t\tthis.allowArbitraryPorts = mw.config.get( 'wgUrlShortenerAllowArbitraryPorts' );\n\t\tthis.isQrCode = mw.config.get( 'wgCanonicalSpecialPageName' ) === 'QrCode';\n\t\t/** @type {OO.ui.FieldLayout} */\n\t\tthis.fieldLayout = null;\n\t\t/** @type {OO.ui.TextInputWidget} */\n\t\tthis.input = null;\n\t\t/** @type {OO.ui.CopyTextLayout} */\n\t\tthis.shortened = null;\n\t\t/** @type {OO.ui.ButtonInputWidget} */\n\t\tthis.submit = null;\n\t\t/** @type {HTMLImageElement} */\n\t\tthis.qrCodeImage = null;\n\t\t/** @type {HTMLAnchorElement} */\n\t\tthis.qrCodeDownloadButton = null;\n\t}\n\n\t/**\n\t * Validate the input URL clientside. Note that this is not the\n\t * only check - they are checked serverside too.\n\t *\n\t * Checks for both URL validity and AllowedDomains matching.\n\t *\n\t * @param {string} input the URL that is to be shortened\n\t * @return {boolean|Object} true if object is validated, an object matching what is\n\t *                         returned by the API in case of error.\n\t */\n\tvalidateInput( input ) {\n\t\tlet parsed, url;\n\n\t\ttry {\n\t\t\tparsed = new mw.Uri( input );\n\t\t} catch ( e ) {\n\t\t\tthis.fieldLayout.setErrors( [ mw.msg( 'urlshortener-error-malformed-url' ) ] );\n\t\t\treturn false;\n\t\t}\n\t\tif ( !parsed.host.match( this.regex ) ) {\n\t\t\turl = parsed.protocol + '://' + mw.html.escape( parsed.host );\n\t\t\tthis.fieldLayout.setErrors( [ mw.msg( 'urlshortener-error-disallowed-url', url ) ] );\n\t\t\treturn false;\n\t\t}\n\t\tif ( parsed.port &&\n\t\t\t!this.allowArbitraryPorts &&\n\t\t\t!( parsed.port === '80' || parsed.port === '443' )\n\t\t) {\n\t\t\tthis.fieldLayout.setErrors( [ mw.msg( 'urlshortener-error-badports' ) ] );\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( parsed.user || parsed.password ) {\n\t\t\tthis.fieldLayout.setErrors( [ mw.msg( 'urlshortener-error-nouserpass' ) ] );\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.fieldLayout.setErrors( [] );\n\t\treturn true;\n\t}\n\n\tshortUrlUiHandler( result ) {\n\t\tif ( !this.shortened ) {\n\t\t\tthis.shortened = new mw.widgets.CopyTextLayout( {\n\t\t\t\talign: 'top',\n\t\t\t\tlabel: mw.msg( 'urlshortener-shortened-url-label' ),\n\t\t\t\tclasses: [ 'ext-urlshortener-result' ],\n\t\t\t\tcopyText: result.shorturl,\n\t\t\t\thelp: mw.msg( 'urlshortener-shortened-url-alt' ),\n\t\t\t\thelpInline: true,\n\t\t\t\tsuccessMessage: mw.msg( 'urlshortener-copy-success' ),\n\t\t\t\tfailMessage: mw.msg( 'urlshortener-copy-fail' )\n\t\t\t} );\n\t\t\tthis.$alt = $( '<a>' );\n\t\t\tthis.shortened.$help.append( ' ', this.$alt );\n\t\t\t// Remove PHP result widget if present\n\t\t\t// eslint-disable-next-line no-jquery/no-global-selector\n\t\t\t$( '.ext-urlshortener-result' ).remove();\n\t\t\t// Wrap in a FieldLayout so we get the label\n\t\t\tthis.fieldLayout.$element.after( this.shortened.$element );\n\t\t} else {\n\t\t\tthis.shortened.textInput.setValue( result.shorturl );\n\t\t}\n\n\t\tthis.$alt.attr( 'href', result.shorturlalt ).text( result.shorturlalt );\n\t\tthis.$alt.off( 'click' ).on( 'click', ( e ) => {\n\t\t\tthis.shortened.textInput.setValue( result.shorturlalt );\n\t\t\tthis.shortened.onButtonClick();\n\t\t\tthis.shortened.textInput.setValue( result.shorturl );\n\t\t\tthis.$alt[ 0 ].focus();\n\t\t\te.preventDefault();\n\t\t} );\n\t\tthis.shortened.textInput.select();\n\t}\n\n\tqrCodeUiHandler( qrCodeSvg ) {\n\t\tconst qrCodeUri = `data:image/svg+xml,${ encodeURIComponent( qrCodeSvg ) }`;\n\t\tif ( this.qrCodeImage ) {\n\t\t\tthis.qrCodeImage.src = qrCodeUri;\n\t\t\tthis.qrCodeDownloadButton.href = qrCodeUri;\n\t\t\treturn;\n\t\t}\n\t\t// Remove PHP result if present\n\t\t// eslint-disable-next-line no-jquery/no-global-selector\n\t\t$( '.ext-urlshortener-qrcode-container' ).remove();\n\t\tthis.qrCodeImage = document.createElement( 'img' );\n\t\tthis.qrCodeImage.src = qrCodeUri;\n\t\tconst qrCodeNode = document.createElement( 'div' );\n\t\tqrCodeNode.className = 'ext-urlshortener-qrcode';\n\t\tqrCodeNode.append( this.qrCodeImage );\n\t\tconst qrCodeDownloadIcon = document.createElement( 'span' );\n\t\tqrCodeDownloadIcon.className = 'cdx-icon cdx-icon--medium';\n\t\tthis.qrCodeDownloadButton = document.createElement( 'a' );\n\t\tthis.qrCodeDownloadButton.classList.add(\n\t\t\t'ext-urlshortener-download-qr-button',\n\t\t\t'cdx-button',\n\t\t\t'cdx-button--fake-button',\n\t\t\t'cdx-button--fake-button--enabled'\n\t\t);\n\t\tthis.qrCodeDownloadButton.href = qrCodeUri;\n\t\tthis.qrCodeDownloadButton.download = 'qrcode.svg';\n\t\tthis.qrCodeDownloadButton.append(\n\t\t\tqrCodeDownloadIcon,\n\t\t\tmw.msg( 'urlshortener-toolbox-qrcode' )\n\t\t);\n\t\tconst qrCodeContainer = document.createElement( 'div' );\n\t\tqrCodeContainer.className = 'ext-urlshortener-qrcode-container';\n\t\tqrCodeContainer.append( qrCodeNode, this.qrCodeDownloadButton );\n\t\tdocument.querySelector( '.ext-urlshortener-container' )\n\t\t\t.append( qrCodeContainer );\n\t}\n\n\t/**\n\t * Click handler for the submit button\n\t */\n\tonSubmit() {\n\t\tthis.input.getValidity().done( () => {\n\t\t\tthis.input.pushPending().setReadOnly( true );\n\t\t\tthis.setSubmit( 'submitting' );\n\t\t\tthis.shortenUrl(\n\t\t\t\tthis.input.getValue()\n\t\t\t).done( ( result ) => {\n\t\t\t\t// shortUrlUiHandler() *may* be called for Special:QrCode, not always\n\t\t\t\tif ( result.shorturl ) {\n\t\t\t\t\tthis.shortUrlUiHandler( result );\n\t\t\t\t} else if ( this.shortened ) {\n\t\t\t\t\t// There's no `shorturl` in the response, so remove the shortened field.\n\t\t\t\t\tthis.shortened.$element.remove();\n\t\t\t\t\tthis.shortened = null;\n\t\t\t\t}\n\t\t\t\t// qrCodeUiHandler() should only be called for Special:QrCode,\n\t\t\t\t// (but in that case result.qrcode shouldn't be present, anyway)\n\t\t\t\tif ( this.isQrCode ) {\n\t\t\t\t\tthis.qrCodeUiHandler( result.qrcode );\n\t\t\t\t}\n\t\t\t} ).fail( ( err ) => {\n\t\t\t\tthis.fieldLayout.setErrors( [ err.info ] );\n\t\t\t} ).always( () => {\n\t\t\t\tthis.setSubmit( 'submit' );\n\t\t\t\tthis.input.popPending().setReadOnly( false );\n\t\t\t} );\n\t\t} );\n\t}\n\n\tinit() {\n\t\t// eslint-disable-next-line no-jquery/no-global-selector\n\t\tconst $field = $( 'form > .mw-htmlform-field-HTMLTextFieldWithButton' );\n\t\tif ( $field.length ) {\n\t\t\tthis.fieldLayout = OO.ui.infuse( $field );\n\t\t\tthis.input = this.fieldLayout.fieldWidget;\n\t\t\tthis.input.setValidation( this.validateInput.bind( this ) );\n\t\t\tthis.submit = this.fieldLayout.buttonWidget;\n\t\t\tthis.submit.on( 'click', this.onSubmit.bind( this ) );\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} status either 'submitting' or 'submit'\n\t */\n\tsetSubmit( status ) {\n\t\tif ( this.isQrCode ) {\n\t\t\tthis.submit.setLabel( mw.msg( 'urlshortener-qrcode-form-submit' ) );\n\t\t} else {\n\t\t\t// The following messages are used here:\n\t\t\t// * urlshortener-url-input-submitting\n\t\t\t// * urlshortener-url-input-submit\n\t\t\tthis.submit.setLabel( mw.msg( 'urlshortener-url-input-' + status ) );\n\t\t\tthis.submit.setDisabled( status === 'submitting' );\n\t\t}\n\t}\n\n\t/**\n\t * Shorten the provided url\n\t *\n\t * @param {string} url\n\t * @return {jQuery.Promise}\n\t */\n\tshortenUrl( url ) {\n\t\tconst params = {\n\t\t\taction: 'shortenurl',\n\t\t\turl\n\t\t};\n\t\tif ( this.isQrCode ) {\n\t\t\tparams.qrcode = true;\n\t\t}\n\t\treturn this.api.post( params ).then( ( data ) => data.shortenurl, ( errCode, data ) => $.Deferred().reject( data.error ).promise() );\n\t}\n}\n\n$( () => {\n\tconst urlShortener = new UrlShortener();\n\turlShortener.init();\n} );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/modules/ext.urlShortener.toolbar.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":3,"column":26,"nodeType":"CallExpression","endLine":3,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":9,"column":17,"nodeType":"CallExpression","endLine":9,"endColumn":65,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":12,"column":17,"nodeType":"CallExpression","endLine":12,"endColumn":46,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]}]

--- end ---
$ ./node_modules/.bin/grunt stylelint
--- stdout ---
Running "stylelint:all" (stylelint) task
>> modules/ext.urlShortener.qrCode.special.less
>>   3: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
>> 
>> ⚠ 1 problem (0 errors, 1 warning)

⚠ 1 warning

>> Linted 2 files without errors

Done.

--- end ---
$ /usr/bin/npm ci
--- stdout ---

added 426 packages, and audited 427 packages in 5s

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

found 0 vulnerabilities

--- end ---
$ /usr/bin/npm test
--- stdout ---

> test
> grunt test

Running "tyops:src" (tyops) task
>> No typos found; 287 files checked for 12 typos.

Running "eslint:all" (eslint) task

/src/repo/modules/ext.urlShortener.special.js
  209:1  warning  This line has a length of 141. Maximum allowed is 100  max-len

✖ 1 problem (0 errors, 1 warning)


Running "banana:UrlShortener" (banana) task
>> 2 message directories checked.

Running "stylelint:all" (stylelint) task
>> modules/ext.urlShortener.qrCode.special.less
>>   3: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
>> 
>> ⚠ 1 problem (0 errors, 1 warning)

⚠ 1 warning

>> Linted 2 files without errors

Done.

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {},
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 0,
      "critical": 0,
      "total": 0
    },
    "dependencies": {
      "prod": 1,
      "dev": 426,
      "optional": 0,
      "peer": 1,
      "peerOptional": 0,
      "total": 426
    }
  }
}

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

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

* eslint-config-wikimedia: 0.28.0 → 0.28.2
* grunt-stylelint: 0.20.0 → 0.20.1
* stylelint-config-wikimedia: 0.17.1 → 0.17.2

$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmp7os675hz
--- stdout ---
[master 7d6e707] build: Updating npm dependencies
 2 files changed, 33 insertions(+), 33 deletions(-)

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

* eslint-config-wikimedia: 0.28.0 → 0.28.2
* grunt-stylelint: 0.20.0 → 0.20.1
* stylelint-config-wikimedia: 0.17.1 → 0.17.2

Change-Id: I6e97c920bb6d8ba7ede80536d9a770023d6ef319
---
 package-lock.json | 60 +++++++++++++++++++++++------------------------
 package.json      |  6 ++---
 2 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index ed7862e..78c35cc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,13 +6,13 @@
 		"": {
 			"name": "urlshortener",
 			"devDependencies": {
-				"eslint-config-wikimedia": "0.28.0",
+				"eslint-config-wikimedia": "0.28.2",
 				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.13.0",
 				"grunt-eslint": "24.3.0",
-				"grunt-stylelint": "0.20.0",
+				"grunt-stylelint": "0.20.1",
 				"grunt-tyops": "0.1.1",
-				"stylelint-config-wikimedia": "0.17.1"
+				"stylelint-config-wikimedia": "0.17.2"
 			}
 		},
 		"node_modules/@aashutoshrathi/word-wrap": {
@@ -1463,9 +1463,9 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.28.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.0.tgz",
-			"integrity": "sha512-qDkELhXoDvQP+kYYo5MilhvqJ4Agk78Pzu95K1l1h68xPEWagD4k/dvrgmVyKjcp5KyAnZr++7qChLiFhDdBDA==",
+			"version": "0.28.2",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz",
+			"integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==",
 			"dev": true,
 			"dependencies": {
 				"browserslist-config-wikimedia": "^0.7.0",
@@ -1478,7 +1478,7 @@
 				"eslint-plugin-mediawiki": "^0.7.0",
 				"eslint-plugin-mocha": "^10.4.3",
 				"eslint-plugin-n": "^17.7.0",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^53.0.0",
@@ -1682,12 +1682,12 @@
 			}
 		},
 		"node_modules/eslint-plugin-no-jquery": {
-			"version": "2.7.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz",
-			"integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==",
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz",
+			"integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==",
 			"dev": true,
 			"peerDependencies": {
-				"eslint": ">=2.3.0"
+				"eslint": ">=8.0.0"
 			}
 		},
 		"node_modules/eslint-plugin-qunit": {
@@ -2583,9 +2583,9 @@
 			}
 		},
 		"node_modules/grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"dependencies": {
 				"chalk": "^4.1.2"
@@ -4418,9 +4418,9 @@
 			}
 		},
 		"node_modules/stylelint-config-wikimedia": {
-			"version": "0.17.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.1.tgz",
-			"integrity": "sha512-wLgadkHgAkz9jLLOVjBETSU+P3fzHB+rbx4ajct6+w/sqtKd2N9DM77ufJXZXA+Ai0HHanU9ltAy9XzFEFkT2Q==",
+			"version": "0.17.2",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz",
+			"integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==",
 			"dev": true,
 			"dependencies": {
 				"@stylistic/stylelint-config": "1.0.1",
@@ -6200,9 +6200,9 @@
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.28.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.0.tgz",
-			"integrity": "sha512-qDkELhXoDvQP+kYYo5MilhvqJ4Agk78Pzu95K1l1h68xPEWagD4k/dvrgmVyKjcp5KyAnZr++7qChLiFhDdBDA==",
+			"version": "0.28.2",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz",
+			"integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==",
 			"dev": true,
 			"requires": {
 				"browserslist-config-wikimedia": "^0.7.0",
@@ -6215,7 +6215,7 @@
 				"eslint-plugin-mediawiki": "^0.7.0",
 				"eslint-plugin-mocha": "^10.4.3",
 				"eslint-plugin-n": "^17.7.0",
-				"eslint-plugin-no-jquery": "^2.7.0",
+				"eslint-plugin-no-jquery": "^3.0.1",
 				"eslint-plugin-qunit": "^8.1.1",
 				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^53.0.0",
@@ -6350,9 +6350,9 @@
 			}
 		},
 		"eslint-plugin-no-jquery": {
-			"version": "2.7.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz",
-			"integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==",
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz",
+			"integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==",
 			"dev": true,
 			"requires": {}
 		},
@@ -6996,9 +6996,9 @@
 			}
 		},
 		"grunt-stylelint": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.0.tgz",
-			"integrity": "sha512-TG17gIrP2//lNq5G0YOXFC55WjXOI5Ybib3XVlatEuZcATlo/FO7cfVMgAAxbO2k6f45LP/naS/3iJTod0dVjg==",
+			"version": "0.20.1",
+			"resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz",
+			"integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==",
 			"dev": true,
 			"requires": {
 				"chalk": "^4.1.2"
@@ -8372,9 +8372,9 @@
 			"requires": {}
 		},
 		"stylelint-config-wikimedia": {
-			"version": "0.17.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.1.tgz",
-			"integrity": "sha512-wLgadkHgAkz9jLLOVjBETSU+P3fzHB+rbx4ajct6+w/sqtKd2N9DM77ufJXZXA+Ai0HHanU9ltAy9XzFEFkT2Q==",
+			"version": "0.17.2",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz",
+			"integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==",
 			"dev": true,
 			"requires": {
 				"@stylistic/stylelint-config": "1.0.1",
diff --git a/package.json b/package.json
index 9f86fcb..c1684d9 100644
--- a/package.json
+++ b/package.json
@@ -5,12 +5,12 @@
 		"test": "grunt test"
 	},
 	"devDependencies": {
-		"eslint-config-wikimedia": "0.28.0",
+		"eslint-config-wikimedia": "0.28.2",
 		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.13.0",
 		"grunt-eslint": "24.3.0",
-		"grunt-stylelint": "0.20.0",
+		"grunt-stylelint": "0.20.1",
 		"grunt-tyops": "0.1.1",
-		"stylelint-config-wikimedia": "0.17.1"
+		"stylelint-config-wikimedia": "0.17.2"
 	}
 }
-- 
2.39.2


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