mediawiki/extensions/PhotoSwipe: main (log #1044410)

sourcepatches

This run took 35 seconds.

From 11651869b88d5f3c1ecef5d14e1d12f873dfce10 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Tue, 30 May 2023 00:44:14 +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.24.0 → 0.25.0
* grunt-eslint: 24.0.0 → 24.0.1

Change-Id: Ib0a411c8f38da499d62b29e7f477132f25059ee9
---
 package-lock.json | 86 +++++++++++++++++++++++++++++++++--------------
 package.json      |  4 +--
 2 files changed, 62 insertions(+), 28 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index ae93f55..b6eab72 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,10 +15,10 @@
 				"photoswipe-dynamic-caption-plugin": "^1.1.1"
 			},
 			"devDependencies": {
-				"eslint-config-wikimedia": "0.24.0",
+				"eslint-config-wikimedia": "0.25.0",
 				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.10.0",
-				"grunt-eslint": "24.0.0",
+				"grunt-eslint": "24.0.1",
 				"grunt-stylelint": "0.18.0",
 				"stylelint-config-wikimedia": "0.14.0"
 			}
@@ -1103,28 +1103,35 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.24.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz",
-			"integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==",
+			"version": "0.25.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.25.0.tgz",
+			"integrity": "sha512-xLvXPyPmBLMPCE/FDy69ViFNsA3+uvFpH63IKtiqS9Olv1kWU2TWFlpJMFFEu0RWVnbciUKFOoLy3P36UvNHag==",
 			"dev": true,
 			"dependencies": {
-				"browserslist-config-wikimedia": "^0.4.0",
+				"browserslist-config-wikimedia": "^0.5.0",
 				"eslint": "^8.31.0",
 				"eslint-plugin-compat": "^4.0.2",
 				"eslint-plugin-es-x": "^5.2.1",
 				"eslint-plugin-jsdoc": "39.2.2",
 				"eslint-plugin-json-es": "^1.5.7",
-				"eslint-plugin-mediawiki": "^0.4.0",
+				"eslint-plugin-mediawiki": "^0.5.0",
 				"eslint-plugin-mocha": "^9.0.0",
 				"eslint-plugin-no-jquery": "^2.7.0",
 				"eslint-plugin-node": "^11.1.0",
-				"eslint-plugin-qunit": "^7.2.0",
+				"eslint-plugin-qunit": "^7.3.0",
+				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^42.0.0",
 				"eslint-plugin-vue": "^8.7.1",
 				"eslint-plugin-wdio": "^7.19.4",
 				"eslint-plugin-yml": "^0.14.0"
 			}
 		},
+		"node_modules/eslint-config-wikimedia/node_modules/browserslist-config-wikimedia": {
+			"version": "0.5.0",
+			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz",
+			"integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==",
+			"dev": true
+		},
 		"node_modules/eslint-plugin-compat": {
 			"version": "4.0.2",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz",
@@ -1216,9 +1223,9 @@
 			}
 		},
 		"node_modules/eslint-plugin-mediawiki": {
-			"version": "0.4.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.4.0.tgz",
-			"integrity": "sha512-Eufptb8lrElYwIONvgxlMBnPD6PYT4xAFprWlBxV5brCmUh8MZ41+lMxt2TPwEC6C85ngflkVez8BV8tWS9RyQ==",
+			"version": "0.5.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.5.0.tgz",
+			"integrity": "sha512-rjkHFyv3VDan/dmu7YpD1Rl9h64NOlz4mqqesRN316R+571+ymmb6lXVOdNMbT8H1iPhmtHc+nijVLVkn7pYDw==",
 			"dev": true,
 			"dependencies": {
 				"eslint-plugin-vue": "^8.7.1",
@@ -1338,6 +1345,15 @@
 				"node": "12.x || 14.x || >=16.0.0"
 			}
 		},
+		"node_modules/eslint-plugin-security": {
+			"version": "1.7.1",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz",
+			"integrity": "sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==",
+			"dev": true,
+			"dependencies": {
+				"safe-regex": "^2.1.1"
+			}
+		},
 		"node_modules/eslint-plugin-unicorn": {
 			"version": "42.0.0",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz",
@@ -1958,9 +1974,9 @@
 			}
 		},
 		"node_modules/grunt-eslint": {
-			"version": "24.0.0",
-			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.0.tgz",
-			"integrity": "sha512-WpTeBBFweyhMuPjGwRSQV9JFJ+EczIdlsc7Dd/1g78QVI1aZsk4g/H3e+3S5HEwsS1RKL2YZIrGj8hMLlBfN8w==",
+			"version": "24.0.1",
+			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.1.tgz",
+			"integrity": "sha512-gFzp+ikAkwyu6nqBE2zx1pLVL0JPrerG7jaO4uJV3XUGKPIipv4mfhDOS5MyiMrzUtGdXSW8FkRHjoUnfqbW+g==",
 			"dev": true,
 			"dependencies": {
 				"chalk": "^4.1.2",
@@ -5237,26 +5253,35 @@
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.24.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz",
-			"integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==",
+			"version": "0.25.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.25.0.tgz",
+			"integrity": "sha512-xLvXPyPmBLMPCE/FDy69ViFNsA3+uvFpH63IKtiqS9Olv1kWU2TWFlpJMFFEu0RWVnbciUKFOoLy3P36UvNHag==",
 			"dev": true,
 			"requires": {
-				"browserslist-config-wikimedia": "^0.4.0",
+				"browserslist-config-wikimedia": "^0.5.0",
 				"eslint": "^8.31.0",
 				"eslint-plugin-compat": "^4.0.2",
 				"eslint-plugin-es-x": "^5.2.1",
 				"eslint-plugin-jsdoc": "39.2.2",
 				"eslint-plugin-json-es": "^1.5.7",
-				"eslint-plugin-mediawiki": "^0.4.0",
+				"eslint-plugin-mediawiki": "^0.5.0",
 				"eslint-plugin-mocha": "^9.0.0",
 				"eslint-plugin-no-jquery": "^2.7.0",
 				"eslint-plugin-node": "^11.1.0",
-				"eslint-plugin-qunit": "^7.2.0",
+				"eslint-plugin-qunit": "^7.3.0",
+				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^42.0.0",
 				"eslint-plugin-vue": "^8.7.1",
 				"eslint-plugin-wdio": "^7.19.4",
 				"eslint-plugin-yml": "^0.14.0"
+			},
+			"dependencies": {
+				"browserslist-config-wikimedia": {
+					"version": "0.5.0",
+					"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz",
+					"integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==",
+					"dev": true
+				}
 			}
 		},
 		"eslint-plugin-compat": {
@@ -5322,9 +5347,9 @@
 			}
 		},
 		"eslint-plugin-mediawiki": {
-			"version": "0.4.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.4.0.tgz",
-			"integrity": "sha512-Eufptb8lrElYwIONvgxlMBnPD6PYT4xAFprWlBxV5brCmUh8MZ41+lMxt2TPwEC6C85ngflkVez8BV8tWS9RyQ==",
+			"version": "0.5.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.5.0.tgz",
+			"integrity": "sha512-rjkHFyv3VDan/dmu7YpD1Rl9h64NOlz4mqqesRN316R+571+ymmb6lXVOdNMbT8H1iPhmtHc+nijVLVkn7pYDw==",
 			"dev": true,
 			"requires": {
 				"eslint-plugin-vue": "^8.7.1",
@@ -5405,6 +5430,15 @@
 				"requireindex": "^1.2.0"
 			}
 		},
+		"eslint-plugin-security": {
+			"version": "1.7.1",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz",
+			"integrity": "sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==",
+			"dev": true,
+			"requires": {
+				"safe-regex": "^2.1.1"
+			}
+		},
 		"eslint-plugin-unicorn": {
 			"version": "42.0.0",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz",
@@ -5893,9 +5927,9 @@
 			}
 		},
 		"grunt-eslint": {
-			"version": "24.0.0",
-			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.0.tgz",
-			"integrity": "sha512-WpTeBBFweyhMuPjGwRSQV9JFJ+EczIdlsc7Dd/1g78QVI1aZsk4g/H3e+3S5HEwsS1RKL2YZIrGj8hMLlBfN8w==",
+			"version": "24.0.1",
+			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.1.tgz",
+			"integrity": "sha512-gFzp+ikAkwyu6nqBE2zx1pLVL0JPrerG7jaO4uJV3XUGKPIipv4mfhDOS5MyiMrzUtGdXSW8FkRHjoUnfqbW+g==",
 			"dev": true,
 			"requires": {
 				"chalk": "^4.1.2",
diff --git a/package.json b/package.json
index 8d535d3..1d883bf 100644
--- a/package.json
+++ b/package.json
@@ -7,10 +7,10 @@
 	"main": "Gruntfile.js",
 	"private": true,
 	"devDependencies": {
-		"eslint-config-wikimedia": "0.24.0",
+		"eslint-config-wikimedia": "0.25.0",
 		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.10.0",
-		"grunt-eslint": "24.0.0",
+		"grunt-eslint": "24.0.1",
 		"grunt-stylelint": "0.18.0",
 		"stylelint-config-wikimedia": "0.14.0"
 	},
-- 
2.30.2

$ date
--- stdout ---
Tue May 30 00:43:47 UTC 2023

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-PhotoSwipe.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 ---
d233101af275b1783304897c4bd5695e641a48a7 refs/heads/master

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

--- end ---
$ /usr/bin/composer install
--- stderr ---
No lock file found. Updating dependencies instead of installing from lock file. Use composer update over composer install if you do not have a lock file.
Loading composer repositories with package information
Info from https://repo.packagist.org: #StandWithUkraine
Updating dependencies
Lock file operations: 24 installs, 0 updates, 0 removals
  - Locking adhocore/json-comment (1.2.1)
  - Locking composer/installers (v2.2.0)
  - Locking composer/semver (3.3.2)
  - Locking composer/spdx-licenses (1.5.7)
  - Locking mediawiki/mediawiki-codesniffer (v41.0.0)
  - Locking mediawiki/minus-x (1.1.1)
  - Locking php-parallel-lint/php-console-color (v1.0.1)
  - Locking php-parallel-lint/php-console-highlighter (v1.0.0)
  - Locking php-parallel-lint/php-parallel-lint (v1.3.2)
  - Locking psr/container (1.1.2)
  - Locking respect/stringifier (0.2.0)
  - Locking respect/validation (2.2.4)
  - Locking seld/jsonlint (1.10.0)
  - Locking squizlabs/php_codesniffer (3.7.2)
  - Locking symfony/console (v5.4.24)
  - Locking symfony/deprecation-contracts (v2.5.2)
  - Locking symfony/polyfill-ctype (v1.27.0)
  - Locking symfony/polyfill-intl-grapheme (v1.27.0)
  - Locking symfony/polyfill-intl-normalizer (v1.27.0)
  - Locking symfony/polyfill-mbstring (v1.27.0)
  - Locking symfony/polyfill-php73 (v1.27.0)
  - Locking symfony/polyfill-php80 (v1.27.0)
  - Locking symfony/service-contracts (v2.5.2)
  - Locking symfony/string (v5.4.22)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 24 installs, 0 updates, 0 removals
  - Downloading adhocore/json-comment (1.2.1)
  - Downloading respect/validation (2.2.4)
 0/2 [>---------------------------]   0%
 2/2 [============================] 100%  - Installing composer/installers (v2.2.0): Extracting archive
  - Installing symfony/polyfill-ctype (v1.27.0): Extracting archive
  - Installing adhocore/json-comment (1.2.1): Extracting archive
  - Installing symfony/polyfill-php80 (v1.27.0): Extracting archive
  - Installing squizlabs/php_codesniffer (3.7.2): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.27.0): Extracting archive
  - Installing composer/spdx-licenses (1.5.7): Extracting archive
  - Installing composer/semver (3.3.2): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v41.0.0): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.27.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.27.0): Extracting archive
  - Installing symfony/string (v5.4.22): Extracting archive
  - Installing symfony/deprecation-contracts (v2.5.2): Extracting archive
  - Installing psr/container (1.1.2): Extracting archive
  - Installing symfony/service-contracts (v2.5.2): Extracting archive
  - Installing symfony/polyfill-php73 (v1.27.0): Extracting archive
  - Installing symfony/console (v5.4.24): Extracting archive
  - Installing mediawiki/minus-x (1.1.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.3.2): Extracting archive
  - Installing respect/stringifier (0.2.0): Extracting archive
  - Installing respect/validation (2.2.4): Extracting archive
  - Installing seld/jsonlint (1.10.0): Extracting archive
  0/14 [>---------------------------]   0%
 10/14 [====================>-------]  71%
 14/14 [============================] 100%7 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating optimized autoload files
15 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---

--- end ---
Upgrading n:eslint-config-wikimedia from 0.24.0 -> 0.25.0
Upgrading n:grunt-eslint from 24.0.0 -> 24.0.1
$ /usr/bin/npm install
--- stdout ---

added 395 packages, and audited 396 packages in 4s

69 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.0.1 --save-exact
--- stdout ---

up to date, audited 396 packages in 836ms

69 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 . --fix
--- stdout ---

/src/repo/modules/ext.photoSwipe/ext.photoSwipe.js
   22:22  warning  'config' was used before it was defined                      no-use-before-define
   23:8   warning  'config' was used before it was defined                      no-use-before-define
   23:8   warning  ES2016 'Array.prototype.includes' method is forbidden        es-x/no-array-prototype-includes
   26:24  warning  'config' was used before it was defined                      no-use-before-define
   27:18  warning  'config' was used before it was defined                      no-use-before-define
   28:22  warning  'config' was used before it was defined                      no-use-before-define
   29:10  warning  'config' was used before it was defined                      no-use-before-define
   42:2   warning  Unexpected console statement                                 no-console
   43:6   warning  'dynamiccaption' is defined but never used                   no-unused-vars
   50:6   warning  'videoplugin' is defined but never used                      no-unused-vars
   61:3   warning  'PhotoSwipe' is assigned a value but never used              no-unused-vars
   79:4   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
   79:4   warning  'jQuery' is not defined                                      no-undef
   82:5   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
   82:5   warning  'jQuery' is not defined                                      no-undef
   94:4   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
   94:4   warning  'jQuery' is not defined                                      no-undef
   95:32  warning  'pswpModule' is not defined                                  no-undef
   97:37  warning  A constructor name should not start with a lowercase letter  new-cap
  129:4   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
  129:4   warning  'jQuery' is not defined                                      no-undef
  132:5   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
  132:5   warning  'jQuery' is not defined                                      no-undef
  138:1   warning  This line has a length of 122. Maximum allowed is 100        max-len
  138:58  warning  A constructor name should not start with a lowercase letter  new-cap
  141:1   warning  This line has a length of 122. Maximum allowed is 100        max-len
  141:58  warning  A constructor name should not start with a lowercase letter  new-cap
  144:1   warning  This line has a length of 113. Maximum allowed is 100        max-len
  144:52  warning  A constructor name should not start with a lowercase letter  new-cap
  151:4   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
  151:4   warning  'jQuery' is not defined                                      no-undef
  154:5   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
  154:5   warning  'jQuery' is not defined                                      no-undef

✖ 33 problems (0 errors, 33 warnings)


--- end ---
$ ./node_modules/.bin/eslint . -f json
--- stdout ---
[{"filePath":"/src/repo/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/.stylelintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/Gruntfile.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/composer.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/extension.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/i18n/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/i18n/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/modules/ext.photoSwipe/ext.photoSwipe.js","messages":[{"ruleId":"no-use-before-define","severity":1,"message":"'config' was used before it was defined.","line":22,"column":22,"nodeType":"Identifier","messageId":"usedBeforeDefined","endLine":22,"endColumn":28},{"ruleId":"no-use-before-define","severity":1,"message":"'config' was used before it was defined.","line":23,"column":8,"nodeType":"Identifier","messageId":"usedBeforeDefined","endLine":23,"endColumn":14},{"ruleId":"es-x/no-array-prototype-includes","severity":1,"message":"ES2016 'Array.prototype.includes' method is forbidden.","line":23,"column":8,"nodeType":"MemberExpression","messageId":"forbidden","endLine":23,"endColumn":31},{"ruleId":"no-use-before-define","severity":1,"message":"'config' was used before it was defined.","line":26,"column":24,"nodeType":"Identifier","messageId":"usedBeforeDefined","endLine":26,"endColumn":30},{"ruleId":"no-use-before-define","severity":1,"message":"'config' was used before it was defined.","line":27,"column":18,"nodeType":"Identifier","messageId":"usedBeforeDefined","endLine":27,"endColumn":24},{"ruleId":"no-use-before-define","severity":1,"message":"'config' was used before it was defined.","line":28,"column":22,"nodeType":"Identifier","messageId":"usedBeforeDefined","endLine":28,"endColumn":28},{"ruleId":"no-use-before-define","severity":1,"message":"'config' was used before it was defined.","line":29,"column":10,"nodeType":"Identifier","messageId":"usedBeforeDefined","endLine":29,"endColumn":16},{"ruleId":"no-console","severity":1,"message":"Unexpected console statement.","line":42,"column":2,"nodeType":"MemberExpression","messageId":"unexpected","endLine":42,"endColumn":13},{"ruleId":"no-unused-vars","severity":1,"message":"'dynamiccaption' is defined but never used.","line":43,"column":6,"nodeType":"Identifier","messageId":"unusedVar","endLine":43,"endColumn":20},{"ruleId":"no-unused-vars","severity":1,"message":"'videoplugin' is defined but never used.","line":50,"column":6,"nodeType":"Identifier","messageId":"unusedVar","endLine":50,"endColumn":17},{"ruleId":"no-unused-vars","severity":1,"message":"'PhotoSwipe' is assigned a value but never used.","line":61,"column":3,"nodeType":"Identifier","messageId":"unusedVar","endLine":61,"endColumn":13},{"ruleId":"no-jquery/no-global-eval","severity":1,"message":"$.globalEval is not allowed","line":79,"column":4,"nodeType":"CallExpression","endLine":79,"endColumn":69},{"ruleId":"no-undef","severity":1,"message":"'jQuery' is not defined.","line":79,"column":4,"nodeType":"Identifier","messageId":"undef","endLine":79,"endColumn":10},{"ruleId":"no-jquery/no-global-eval","severity":1,"message":"$.globalEval is not allowed","line":82,"column":5,"nodeType":"CallExpression","endLine":82,"endColumn":54},{"ruleId":"no-undef","severity":1,"message":"'jQuery' is not defined.","line":82,"column":5,"nodeType":"Identifier","messageId":"undef","endLine":82,"endColumn":11},{"ruleId":"no-jquery/no-global-eval","severity":1,"message":"$.globalEval is not allowed","line":94,"column":4,"nodeType":"CallExpression","endLine":94,"endColumn":97},{"ruleId":"no-undef","severity":1,"message":"'jQuery' is not defined.","line":94,"column":4,"nodeType":"Identifier","messageId":"undef","endLine":94,"endColumn":10},{"ruleId":"no-undef","severity":1,"message":"'pswpModule' is not defined.","line":95,"column":32,"nodeType":"Identifier","messageId":"undef","endLine":95,"endColumn":42},{"ruleId":"new-cap","severity":1,"message":"A constructor name should not start with a lowercase letter.","line":97,"column":37,"nodeType":"NewExpression","messageId":"lower","endLine":97,"endColumn":44},{"ruleId":"no-jquery/no-global-eval","severity":1,"message":"$.globalEval is not allowed","line":129,"column":4,"nodeType":"CallExpression","endLine":129,"endColumn":70},{"ruleId":"no-undef","severity":1,"message":"'jQuery' is not defined.","line":129,"column":4,"nodeType":"Identifier","messageId":"undef","endLine":129,"endColumn":10},{"ruleId":"no-jquery/no-global-eval","severity":1,"message":"$.globalEval is not allowed","line":132,"column":5,"nodeType":"CallExpression","endLine":132,"endColumn":54},{"ruleId":"no-undef","severity":1,"message":"'jQuery' is not defined.","line":132,"column":5,"nodeType":"Identifier","messageId":"undef","endLine":132,"endColumn":11},{"ruleId":"max-len","severity":1,"message":"This line has a length of 122. Maximum allowed is 100.","line":138,"column":1,"nodeType":"Program","messageId":"max","endLine":138,"endColumn":117},{"ruleId":"new-cap","severity":1,"message":"A constructor name should not start with a lowercase letter.","line":138,"column":58,"nodeType":"NewExpression","messageId":"lower","endLine":138,"endColumn":65},{"ruleId":"max-len","severity":1,"message":"This line has a length of 122. Maximum allowed is 100.","line":141,"column":1,"nodeType":"Program","messageId":"max","endLine":141,"endColumn":117},{"ruleId":"new-cap","severity":1,"message":"A constructor name should not start with a lowercase letter.","line":141,"column":58,"nodeType":"NewExpression","messageId":"lower","endLine":141,"endColumn":65},{"ruleId":"max-len","severity":1,"message":"This line has a length of 113. Maximum allowed is 100.","line":144,"column":1,"nodeType":"Program","messageId":"max","endLine":144,"endColumn":108},{"ruleId":"new-cap","severity":1,"message":"A constructor name should not start with a lowercase letter.","line":144,"column":52,"nodeType":"NewExpression","messageId":"lower","endLine":144,"endColumn":59},{"ruleId":"no-jquery/no-global-eval","severity":1,"message":"$.globalEval is not allowed","line":151,"column":4,"nodeType":"CallExpression","endLine":151,"endColumn":63},{"ruleId":"no-undef","severity":1,"message":"'jQuery' is not defined.","line":151,"column":4,"nodeType":"Identifier","messageId":"undef","endLine":151,"endColumn":10},{"ruleId":"no-jquery/no-global-eval","severity":1,"message":"$.globalEval is not allowed","line":154,"column":5,"nodeType":"CallExpression","endLine":154,"endColumn":54},{"ruleId":"no-undef","severity":1,"message":"'jQuery' is not defined.","line":154,"column":5,"nodeType":"Identifier","messageId":"undef","endLine":154,"endColumn":11}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":33,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/*\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program.  If not, see <https://gnu.org/licenses/>.\n */\n\n// https://attacomsian.com/blog/javascript-check-variable-is-object\nconst isObject = ( obj ) => {\n\treturn Object.prototype.toString.call( obj ) === '[object Object]';\n};\n\nconst isEnabled = ( plugin ) => {\n\tif ( Array.isArray( config.plugins ) ) {\n\t\tif ( config.plugins.includes( plugin ) ) {\n\t\t\treturn true;\n\t\t}\n\t} else if ( isObject( config.plugins ) ) {\n\t\tif ( plugin in config.plugins ) {\n\t\t\tif ( 'enabled' in config.plugins[ plugin ] ) {\n\t\t\t\tif ( config.plugins[ plugin ].enabled ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nconst config = mw.config.get( 'wgPhotoSwipeConfig' );\nif ( config ) {\n\tconsole.log( 'Loading PhotoSwipe', config );\n\tlet dynamiccaption;\n\tlet lightbox;\n\tlet PhotoSwipe;\n\tlet PhotoSwipeLightbox;\n\tlet PhotoSwipeDeepZoomPlugin;\n\tlet PhotoSwipeDynamicCaption;\n\tlet PhotoSwipeVideoPlugin;\n\tlet videoplugin;\n\n\t/*\n\t * mode: recommended -> https://photoswipe.com/getting-started/#initialization\n\t * mode: withoutdynamicimport -> https://photoswipe.com/getting-started/#without-dynamic-import\n\t * mode: withoutlightbox -> https://photoswipe.com/data-sources/#without-lightbox-module\n\t */\n\tif ( config.mode !== 'withoutlightbox' ) {\n\t\tPhotoSwipeLightbox = require( 'js.photoswipe-lightbox' );\n\t}\n\tif ( config.mode === 'withoutdynamicimport' ) {\n\t\tPhotoSwipe = require( 'js.photoswipe' );\n\t}\n\tif ( isEnabled( 'DeepZoomPlugin' ) ) {\n\t\tPhotoSwipeDeepZoomPlugin = require( 'js.photoswipe-deep-zoom-plugin' );\n\t}\n\tif ( isEnabled( 'DynamicCaption' ) ) {\n\t\tPhotoSwipeDynamicCaption = require( 'js.photoswipe-dynamic-caption-plugin' );\n\t}\n\tif ( isEnabled( 'VideoPlugin' ) ) {\n\t\tPhotoSwipeVideoPlugin = require( 'js.photoswipe-video-plugin' );\n\t}\n\n\t// https://en.wikipedia.org/wiki/Cross-site_scripting\n\t// https://mediawiki.org/wiki/Requests_for_comment/Content-Security-Policy\n\t// https://mediawiki.org/wiki/Manual:$wgCSPHeader\n\t// https://mediawiki.org/wiki/Manual:$wgCSPReportOnlyHeader\n\tif ( config.addBeginning ) {\n\t\tif ( typeof config.addBeginning === 'string' ) {\n\t\t\tjQuery.globalEval( config.addBeginning, { nonce: config.nonce } );\n\t\t} else if ( Array.isArray( config.addBeginning ) ) {\n\t\t\tconfig.addBeginning.forEach( ( str ) => {\n\t\t\t\tjQuery.globalEval( str, { nonce: config.nonce } );\n\t\t\t} );\n\t\t}\n\t}\n\n\t// https://photoswipe.com/data-sources/#without-lightbox-module\n\tif ( config.mode !== 'withoutlightbox' ) {\n\t\tif ( typeof config.options.pswpModule === 'string' ) {\n\t\t\t// Prepare require variable to be globally accessible within jQuery.globalEval\n\t\t\tif ( !( 'require' in window ) ) {\n\t\t\t\twindow.require = require;\n\t\t\t}\n\t\t\tjQuery.globalEval( `var pswpModule = ${config.options.pswpModule}`, { nonce: config.nonce } );\n\t\t\tconfig.options.pswpModule = pswpModule;\n\t\t}\n\t\tlightbox = new PhotoSwipeLightbox.default( config.options );\n\t\t// Prepare lightbox variable to be globally accessible within jQuery.globalEval\n\t\tif ( !( 'lightbox' in window ) ) {\n\t\t\twindow.lightbox = lightbox;\n\t\t}\n\t}\n\n\t/*\n\t * Eventables: For executing lightbox events, filters, methods, and other relevant JS code.\n\t *\n\t * https://photoswipe.com/events/\n\t * https://photoswipe.com/filters/\n\t * https://photoswipe.com/methods/\n\t *\n\t * https://photoswipe.com/opening-or-closing-transition/#transition-duration-and-easing\n\t * https://photoswipe.com/opening-or-closing-transition/#hiding-elements-that-overlap-thumbnails\n\t * https://photoswipe.com/adding-ui-elements/#adding-a-button-to-the-toolbar\n\t * https://photoswipe.com/adding-ui-elements/#adding-html-indicator-to-the-toolbar\n\t * https://photoswipe.com/adding-ui-elements/#adding-download-button\n\t * https://photoswipe.com/adding-ui-elements/#adding-navigation-indicator-bullets\n\t * https://photoswipe.com/adding-ui-elements/#uiregisterelement-api\n\t * https://photoswipe.com/caption/\n\t * https://photoswipe.com/custom-content/#using-webp-image-format\n\t * https://photoswipe.com/custom-content/#google-maps-demo\n\t * https://photoswipe.com/data-sources/#custom-last-slide\n\t * https://photoswipe.com/data-sources/#dynamically-generated-data\n\t * https://photoswipe.com/data-sources/#custom-html-markup\n\t * https://photoswipe.com/data-sources/#separate-dom-and-data\n\t * https://photoswipe.com/native-fullscreen-on-open/\n\t */\n\tif ( config.addEventables ) {\n\t\tif ( typeof config.addEventables === 'string' ) {\n\t\t\tjQuery.globalEval( config.addEventables, { nonce: config.nonce } );\n\t\t} else if ( Array.isArray( config.addEventables ) ) {\n\t\t\tconfig.addEventables.forEach( ( str ) => {\n\t\t\t\tjQuery.globalEval( str, { nonce: config.nonce } );\n\t\t\t} );\n\t\t}\n\t}\n\n\tif ( isEnabled( 'DeepZoomPlugin' ) ) {\n\t\tlightbox.deepzoomplugin = new PhotoSwipeDeepZoomPlugin.default( lightbox, config.plugins.DeepZoomPlugin.options );\n\t}\n\tif ( isEnabled( 'DynamicCaption' ) ) {\n\t\tlightbox.dynamiccaption = new PhotoSwipeDynamicCaption.default( lightbox, config.plugins.DynamicCaption.options );\n\t}\n\tif ( isEnabled( 'VideoPlugin' ) ) {\n\t\tlightbox.videoplugin = new PhotoSwipeVideoPlugin.default( lightbox, config.plugins.VideoPlugin.options );\n\t}\n\n\tlightbox.init();\n\n\tif ( config.addEnd ) {\n\t\tif ( typeof config.addEnd === 'string' ) {\n\t\t\tjQuery.globalEval( config.addEnd, { nonce: config.nonce } );\n\t\t} else if ( Array.isArray( config.addEnd ) ) {\n\t\t\tconfig.addEnd.forEach( ( str ) => {\n\t\t\t\tjQuery.globalEval( str, { nonce: config.nonce } );\n\t\t\t} );\n\t\t}\n\t}\n}\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]}]

--- end ---
$ /usr/bin/npm ci --legacy-peer-deps
--- stdout ---

added 395 packages, and audited 396 packages in 5s

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

found 0 vulnerabilities

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

> mediawiki-extensions-photoswipe@1.0.0 test
> grunt test

Running "eslint:all" (eslint) task

/src/repo/modules/ext.photoSwipe/ext.photoSwipe.js
   22:22  warning  'config' was used before it was defined                      no-use-before-define
   23:8   warning  'config' was used before it was defined                      no-use-before-define
   23:8   warning  ES2016 'Array.prototype.includes' method is forbidden        es-x/no-array-prototype-includes
   26:24  warning  'config' was used before it was defined                      no-use-before-define
   27:18  warning  'config' was used before it was defined                      no-use-before-define
   28:22  warning  'config' was used before it was defined                      no-use-before-define
   29:10  warning  'config' was used before it was defined                      no-use-before-define
   42:2   warning  Unexpected console statement                                 no-console
   43:6   warning  'dynamiccaption' is defined but never used                   no-unused-vars
   50:6   warning  'videoplugin' is defined but never used                      no-unused-vars
   61:3   warning  'PhotoSwipe' is assigned a value but never used              no-unused-vars
   79:4   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
   79:4   warning  'jQuery' is not defined                                      no-undef
   82:5   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
   82:5   warning  'jQuery' is not defined                                      no-undef
   94:4   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
   94:4   warning  'jQuery' is not defined                                      no-undef
   95:32  warning  'pswpModule' is not defined                                  no-undef
   97:37  warning  A constructor name should not start with a lowercase letter  new-cap
  129:4   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
  129:4   warning  'jQuery' is not defined                                      no-undef
  132:5   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
  132:5   warning  'jQuery' is not defined                                      no-undef
  138:1   warning  This line has a length of 122. Maximum allowed is 100        max-len
  138:58  warning  A constructor name should not start with a lowercase letter  new-cap
  141:1   warning  This line has a length of 122. Maximum allowed is 100        max-len
  141:58  warning  A constructor name should not start with a lowercase letter  new-cap
  144:1   warning  This line has a length of 113. Maximum allowed is 100        max-len
  144:52  warning  A constructor name should not start with a lowercase letter  new-cap
  151:4   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
  151:4   warning  'jQuery' is not defined                                      no-undef
  154:5   warning  $.globalEval is not allowed                                  no-jquery/no-global-eval
  154:5   warning  'jQuery' is not defined                                      no-undef

✖ 33 problems (0 errors, 33 warnings)


Running "stylelint:all" (stylelint) task
>> Linted 0 files without errors

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

Done.

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

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

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

* eslint-config-wikimedia: 0.24.0 → 0.25.0
* grunt-eslint: 24.0.0 → 24.0.1

$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmp83tqm7ga
--- stdout ---
[master 1165186] build: Updating npm dependencies
 2 files changed, 62 insertions(+), 28 deletions(-)

--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From 11651869b88d5f3c1ecef5d14e1d12f873dfce10 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Tue, 30 May 2023 00:44:14 +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.24.0 → 0.25.0
* grunt-eslint: 24.0.0 → 24.0.1

Change-Id: Ib0a411c8f38da499d62b29e7f477132f25059ee9
---
 package-lock.json | 86 +++++++++++++++++++++++++++++++++--------------
 package.json      |  4 +--
 2 files changed, 62 insertions(+), 28 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index ae93f55..b6eab72 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,10 +15,10 @@
 				"photoswipe-dynamic-caption-plugin": "^1.1.1"
 			},
 			"devDependencies": {
-				"eslint-config-wikimedia": "0.24.0",
+				"eslint-config-wikimedia": "0.25.0",
 				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.10.0",
-				"grunt-eslint": "24.0.0",
+				"grunt-eslint": "24.0.1",
 				"grunt-stylelint": "0.18.0",
 				"stylelint-config-wikimedia": "0.14.0"
 			}
@@ -1103,28 +1103,35 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.24.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz",
-			"integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==",
+			"version": "0.25.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.25.0.tgz",
+			"integrity": "sha512-xLvXPyPmBLMPCE/FDy69ViFNsA3+uvFpH63IKtiqS9Olv1kWU2TWFlpJMFFEu0RWVnbciUKFOoLy3P36UvNHag==",
 			"dev": true,
 			"dependencies": {
-				"browserslist-config-wikimedia": "^0.4.0",
+				"browserslist-config-wikimedia": "^0.5.0",
 				"eslint": "^8.31.0",
 				"eslint-plugin-compat": "^4.0.2",
 				"eslint-plugin-es-x": "^5.2.1",
 				"eslint-plugin-jsdoc": "39.2.2",
 				"eslint-plugin-json-es": "^1.5.7",
-				"eslint-plugin-mediawiki": "^0.4.0",
+				"eslint-plugin-mediawiki": "^0.5.0",
 				"eslint-plugin-mocha": "^9.0.0",
 				"eslint-plugin-no-jquery": "^2.7.0",
 				"eslint-plugin-node": "^11.1.0",
-				"eslint-plugin-qunit": "^7.2.0",
+				"eslint-plugin-qunit": "^7.3.0",
+				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^42.0.0",
 				"eslint-plugin-vue": "^8.7.1",
 				"eslint-plugin-wdio": "^7.19.4",
 				"eslint-plugin-yml": "^0.14.0"
 			}
 		},
+		"node_modules/eslint-config-wikimedia/node_modules/browserslist-config-wikimedia": {
+			"version": "0.5.0",
+			"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz",
+			"integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==",
+			"dev": true
+		},
 		"node_modules/eslint-plugin-compat": {
 			"version": "4.0.2",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.0.2.tgz",
@@ -1216,9 +1223,9 @@
 			}
 		},
 		"node_modules/eslint-plugin-mediawiki": {
-			"version": "0.4.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.4.0.tgz",
-			"integrity": "sha512-Eufptb8lrElYwIONvgxlMBnPD6PYT4xAFprWlBxV5brCmUh8MZ41+lMxt2TPwEC6C85ngflkVez8BV8tWS9RyQ==",
+			"version": "0.5.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.5.0.tgz",
+			"integrity": "sha512-rjkHFyv3VDan/dmu7YpD1Rl9h64NOlz4mqqesRN316R+571+ymmb6lXVOdNMbT8H1iPhmtHc+nijVLVkn7pYDw==",
 			"dev": true,
 			"dependencies": {
 				"eslint-plugin-vue": "^8.7.1",
@@ -1338,6 +1345,15 @@
 				"node": "12.x || 14.x || >=16.0.0"
 			}
 		},
+		"node_modules/eslint-plugin-security": {
+			"version": "1.7.1",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz",
+			"integrity": "sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==",
+			"dev": true,
+			"dependencies": {
+				"safe-regex": "^2.1.1"
+			}
+		},
 		"node_modules/eslint-plugin-unicorn": {
 			"version": "42.0.0",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz",
@@ -1958,9 +1974,9 @@
 			}
 		},
 		"node_modules/grunt-eslint": {
-			"version": "24.0.0",
-			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.0.tgz",
-			"integrity": "sha512-WpTeBBFweyhMuPjGwRSQV9JFJ+EczIdlsc7Dd/1g78QVI1aZsk4g/H3e+3S5HEwsS1RKL2YZIrGj8hMLlBfN8w==",
+			"version": "24.0.1",
+			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.1.tgz",
+			"integrity": "sha512-gFzp+ikAkwyu6nqBE2zx1pLVL0JPrerG7jaO4uJV3XUGKPIipv4mfhDOS5MyiMrzUtGdXSW8FkRHjoUnfqbW+g==",
 			"dev": true,
 			"dependencies": {
 				"chalk": "^4.1.2",
@@ -5237,26 +5253,35 @@
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.24.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz",
-			"integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==",
+			"version": "0.25.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.25.0.tgz",
+			"integrity": "sha512-xLvXPyPmBLMPCE/FDy69ViFNsA3+uvFpH63IKtiqS9Olv1kWU2TWFlpJMFFEu0RWVnbciUKFOoLy3P36UvNHag==",
 			"dev": true,
 			"requires": {
-				"browserslist-config-wikimedia": "^0.4.0",
+				"browserslist-config-wikimedia": "^0.5.0",
 				"eslint": "^8.31.0",
 				"eslint-plugin-compat": "^4.0.2",
 				"eslint-plugin-es-x": "^5.2.1",
 				"eslint-plugin-jsdoc": "39.2.2",
 				"eslint-plugin-json-es": "^1.5.7",
-				"eslint-plugin-mediawiki": "^0.4.0",
+				"eslint-plugin-mediawiki": "^0.5.0",
 				"eslint-plugin-mocha": "^9.0.0",
 				"eslint-plugin-no-jquery": "^2.7.0",
 				"eslint-plugin-node": "^11.1.0",
-				"eslint-plugin-qunit": "^7.2.0",
+				"eslint-plugin-qunit": "^7.3.0",
+				"eslint-plugin-security": "^1.7.1",
 				"eslint-plugin-unicorn": "^42.0.0",
 				"eslint-plugin-vue": "^8.7.1",
 				"eslint-plugin-wdio": "^7.19.4",
 				"eslint-plugin-yml": "^0.14.0"
+			},
+			"dependencies": {
+				"browserslist-config-wikimedia": {
+					"version": "0.5.0",
+					"resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz",
+					"integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==",
+					"dev": true
+				}
 			}
 		},
 		"eslint-plugin-compat": {
@@ -5322,9 +5347,9 @@
 			}
 		},
 		"eslint-plugin-mediawiki": {
-			"version": "0.4.0",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.4.0.tgz",
-			"integrity": "sha512-Eufptb8lrElYwIONvgxlMBnPD6PYT4xAFprWlBxV5brCmUh8MZ41+lMxt2TPwEC6C85ngflkVez8BV8tWS9RyQ==",
+			"version": "0.5.0",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.5.0.tgz",
+			"integrity": "sha512-rjkHFyv3VDan/dmu7YpD1Rl9h64NOlz4mqqesRN316R+571+ymmb6lXVOdNMbT8H1iPhmtHc+nijVLVkn7pYDw==",
 			"dev": true,
 			"requires": {
 				"eslint-plugin-vue": "^8.7.1",
@@ -5405,6 +5430,15 @@
 				"requireindex": "^1.2.0"
 			}
 		},
+		"eslint-plugin-security": {
+			"version": "1.7.1",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz",
+			"integrity": "sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==",
+			"dev": true,
+			"requires": {
+				"safe-regex": "^2.1.1"
+			}
+		},
 		"eslint-plugin-unicorn": {
 			"version": "42.0.0",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz",
@@ -5893,9 +5927,9 @@
 			}
 		},
 		"grunt-eslint": {
-			"version": "24.0.0",
-			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.0.tgz",
-			"integrity": "sha512-WpTeBBFweyhMuPjGwRSQV9JFJ+EczIdlsc7Dd/1g78QVI1aZsk4g/H3e+3S5HEwsS1RKL2YZIrGj8hMLlBfN8w==",
+			"version": "24.0.1",
+			"resolved": "https://registry.npmjs.org/grunt-eslint/-/grunt-eslint-24.0.1.tgz",
+			"integrity": "sha512-gFzp+ikAkwyu6nqBE2zx1pLVL0JPrerG7jaO4uJV3XUGKPIipv4mfhDOS5MyiMrzUtGdXSW8FkRHjoUnfqbW+g==",
 			"dev": true,
 			"requires": {
 				"chalk": "^4.1.2",
diff --git a/package.json b/package.json
index 8d535d3..1d883bf 100644
--- a/package.json
+++ b/package.json
@@ -7,10 +7,10 @@
 	"main": "Gruntfile.js",
 	"private": true,
 	"devDependencies": {
-		"eslint-config-wikimedia": "0.24.0",
+		"eslint-config-wikimedia": "0.25.0",
 		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.10.0",
-		"grunt-eslint": "24.0.0",
+		"grunt-eslint": "24.0.1",
 		"grunt-stylelint": "0.18.0",
 		"stylelint-config-wikimedia": "0.14.0"
 	},
-- 
2.30.2


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