mediawiki/extensions/SpamRegex: main (log #953320)

sourcepatches

This run took 38 seconds.

From 3f82404729ea29f74d89a54e3488bd2211a34884 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Wed, 15 Mar 2023 23:35:22 +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.23.0 → 0.24.0
* grunt: 1.5.3 → 1.6.1
* stylelint-config-wikimedia: 0.13.1 → 0.14.0

Change-Id: Ibd33e9ad77b294142dcebc1d0d5821bc892793a9
---
 package-lock.json | 516 ++++++++++++++++++----------------------------
 package.json      |   6 +-
 2 files changed, 200 insertions(+), 322 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 841d365..6b3770e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,12 +6,12 @@
 		"": {
 			"name": "SpamRegex",
 			"devDependencies": {
-				"eslint-config-wikimedia": "0.23.0",
-				"grunt": "1.5.3",
+				"eslint-config-wikimedia": "0.24.0",
+				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.10.0",
 				"grunt-eslint": "24.0.1",
 				"grunt-stylelint": "0.18.0",
-				"stylelint-config-wikimedia": "0.13.1"
+				"stylelint-config-wikimedia": "0.14.0"
 			}
 		},
 		"node_modules/@babel/code-frame": {
@@ -120,10 +120,27 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/@csstools/selector-specificity": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz",
+			"integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==",
+			"dev": true,
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/csstools"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4",
+				"postcss-selector-parser": "^6.0.10"
+			}
+		},
 		"node_modules/@es-joy/jsdoccomment": {
-			"version": "0.22.2",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.22.2.tgz",
-			"integrity": "sha512-pM6WQKcuAtdYoqCsXSvVSu3Ij8K0HY50L8tIheOKHDl0wH1uA4zbP88etY8SIeP16NVCMCTFU+Q2DahSKheGGQ==",
+			"version": "0.23.6",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz",
+			"integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==",
 			"dev": true,
 			"dependencies": {
 				"comment-parser": "1.3.1",
@@ -597,18 +614,6 @@
 				"wrap-ansi": "^7.0.0"
 			}
 		},
-		"node_modules/clone-regexp": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
-			"integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
-			"dev": true,
-			"dependencies": {
-				"is-regexp": "^2.0.0"
-			},
-			"engines": {
-				"node": ">=6"
-			}
-		},
 		"node_modules/color-convert": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -773,9 +778,9 @@
 			}
 		},
 		"node_modules/dateformat": {
-			"version": "3.0.3",
-			"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
-			"integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+			"version": "4.6.3",
+			"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+			"integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
 			"dev": true,
 			"engines": {
 				"node": "*"
@@ -1070,16 +1075,16 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.23.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.23.0.tgz",
-			"integrity": "sha512-miZGPrfSZL9RcsSn8OSiQWZpeeMc3xCgIIimNWF6C+8Nfd38gb1FCdcgKQFC7HscFanMQL21DaPErMJVW+FB1Q==",
+			"version": "0.24.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz",
+			"integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==",
 			"dev": true,
 			"dependencies": {
 				"browserslist-config-wikimedia": "^0.4.0",
-				"eslint": "^8.14.0",
+				"eslint": "^8.31.0",
 				"eslint-plugin-compat": "^4.0.2",
 				"eslint-plugin-es-x": "^5.2.1",
-				"eslint-plugin-jsdoc": "^38.1.6",
+				"eslint-plugin-jsdoc": "39.2.2",
 				"eslint-plugin-json-es": "^1.5.7",
 				"eslint-plugin-mediawiki": "^0.4.0",
 				"eslint-plugin-mocha": "^9.0.0",
@@ -1177,27 +1182,41 @@
 			}
 		},
 		"node_modules/eslint-plugin-jsdoc": {
-			"version": "38.1.6",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-38.1.6.tgz",
-			"integrity": "sha512-n4s95oYlg0L43Bs8C0dkzIldxYf8pLCutC/tCbjIdF7VDiobuzPI+HZn9Q0BvgOvgPNgh5n7CSStql25HUG4Tw==",
+			"version": "39.2.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz",
+			"integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==",
 			"dev": true,
 			"dependencies": {
-				"@es-joy/jsdoccomment": "~0.22.1",
+				"@es-joy/jsdoccomment": "~0.23.1",
 				"comment-parser": "1.3.1",
 				"debug": "^4.3.4",
 				"escape-string-regexp": "^4.0.0",
 				"esquery": "^1.4.0",
-				"regextras": "^0.8.0",
-				"semver": "^7.3.5",
+				"semver": "^7.3.7",
 				"spdx-expression-parse": "^3.0.1"
 			},
 			"engines": {
-				"node": "^12 || ^14 || ^16 || ^17"
+				"node": "^14 || ^16 || ^17"
 			},
 			"peerDependencies": {
 				"eslint": "^7.0.0 || ^8.0.0"
 			}
 		},
+		"node_modules/eslint-plugin-jsdoc/node_modules/semver": {
+			"version": "7.3.8",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+			"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+			"dev": true,
+			"dependencies": {
+				"lru-cache": "^6.0.0"
+			},
+			"bin": {
+				"semver": "bin/semver.js"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
 		"node_modules/eslint-plugin-json-es": {
 			"version": "1.5.7",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz",
@@ -1523,18 +1542,6 @@
 			"integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==",
 			"dev": true
 		},
-		"node_modules/execall": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
-			"integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
-			"dev": true,
-			"dependencies": {
-				"clone-regexp": "^2.1.0"
-			},
-			"engines": {
-				"node": ">=8"
-			}
-		},
 		"node_modules/exit": {
 			"version": "0.1.2",
 			"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
@@ -1667,31 +1674,18 @@
 			}
 		},
 		"node_modules/findup-sync": {
-			"version": "0.3.0",
-			"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
-			"integrity": "sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg==",
-			"dev": true,
-			"dependencies": {
-				"glob": "~5.0.0"
-			},
-			"engines": {
-				"node": ">= 0.6.0"
-			}
-		},
-		"node_modules/findup-sync/node_modules/glob": {
-			"version": "5.0.15",
-			"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
-			"integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz",
+			"integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==",
 			"dev": true,
 			"dependencies": {
-				"inflight": "^1.0.4",
-				"inherits": "2",
-				"minimatch": "2 || 3",
-				"once": "^1.3.0",
-				"path-is-absolute": "^1.0.0"
+				"detect-file": "^1.0.0",
+				"is-glob": "^4.0.3",
+				"micromatch": "^4.0.4",
+				"resolve-dir": "^1.0.1"
 			},
 			"engines": {
-				"node": "*"
+				"node": ">= 10.13.0"
 			}
 		},
 		"node_modules/fined": {
@@ -1780,18 +1774,6 @@
 				"node": "6.* || 8.* || >= 10.*"
 			}
 		},
-		"node_modules/get-stdin": {
-			"version": "8.0.0",
-			"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
-			"integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
-			"dev": true,
-			"engines": {
-				"node": ">=10"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
-			}
-		},
 		"node_modules/getobject": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz",
@@ -1919,32 +1901,30 @@
 			"dev": true
 		},
 		"node_modules/grunt": {
-			"version": "1.5.3",
-			"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz",
-			"integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==",
+			"version": "1.6.1",
+			"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz",
+			"integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==",
 			"dev": true,
 			"dependencies": {
-				"dateformat": "~3.0.3",
+				"dateformat": "~4.6.2",
 				"eventemitter2": "~0.4.13",
 				"exit": "~0.1.2",
-				"findup-sync": "~0.3.0",
+				"findup-sync": "~5.0.0",
 				"glob": "~7.1.6",
 				"grunt-cli": "~1.4.3",
 				"grunt-known-options": "~2.0.0",
 				"grunt-legacy-log": "~3.0.0",
 				"grunt-legacy-util": "~2.0.1",
-				"iconv-lite": "~0.4.13",
+				"iconv-lite": "~0.6.3",
 				"js-yaml": "~3.14.0",
 				"minimatch": "~3.0.4",
-				"mkdirp": "~1.0.4",
-				"nopt": "~3.0.6",
-				"rimraf": "~3.0.2"
+				"nopt": "~3.0.6"
 			},
 			"bin": {
 				"grunt": "bin/grunt"
 			},
 			"engines": {
-				"node": ">=8"
+				"node": ">=16"
 			}
 		},
 		"node_modules/grunt-banana-checker": {
@@ -2209,12 +2189,12 @@
 			}
 		},
 		"node_modules/iconv-lite": {
-			"version": "0.4.24",
-			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-			"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+			"version": "0.6.3",
+			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+			"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
 			"dev": true,
 			"dependencies": {
-				"safer-buffer": ">= 2.1.2 < 3"
+				"safer-buffer": ">= 2.1.2 < 3.0.0"
 			},
 			"engines": {
 				"node": ">=0.10.0"
@@ -2415,15 +2395,6 @@
 				"node": ">=0.10.0"
 			}
 		},
-		"node_modules/is-regexp": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
-			"integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
-			"dev": true,
-			"engines": {
-				"node": ">=6"
-			}
-		},
 		"node_modules/is-relative": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
@@ -2543,9 +2514,9 @@
 			}
 		},
 		"node_modules/known-css-properties": {
-			"version": "0.24.0",
-			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz",
-			"integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==",
+			"version": "0.26.0",
+			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz",
+			"integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==",
 			"dev": true
 		},
 		"node_modules/ldjson-stream": {
@@ -2849,18 +2820,6 @@
 				"node": ">= 6"
 			}
 		},
-		"node_modules/mkdirp": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-			"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-			"dev": true,
-			"bin": {
-				"mkdirp": "bin/cmd.js"
-			},
-			"engines": {
-				"node": ">=10"
-			}
-		},
 		"node_modules/ms": {
 			"version": "2.1.2",
 			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -2961,12 +2920,6 @@
 				"node": ">=0.10.0"
 			}
 		},
-		"node_modules/normalize-selector": {
-			"version": "0.2.0",
-			"resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
-			"integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==",
-			"dev": true
-		},
 		"node_modules/nth-check": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -3572,15 +3525,6 @@
 				"url": "https://github.com/sponsors/mysticatea"
 			}
 		},
-		"node_modules/regextras": {
-			"version": "0.8.0",
-			"resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz",
-			"integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==",
-			"dev": true,
-			"engines": {
-				"node": ">=0.1.14"
-			}
-		},
 		"node_modules/require-directory": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -3890,15 +3834,6 @@
 			"integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
 			"dev": true
 		},
-		"node_modules/specificity": {
-			"version": "0.4.1",
-			"resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
-			"integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
-			"dev": true,
-			"bin": {
-				"specificity": "bin/specificity"
-			}
-		},
 		"node_modules/split2": {
 			"version": "0.2.1",
 			"resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz",
@@ -3999,52 +3934,49 @@
 			"dev": true
 		},
 		"node_modules/stylelint": {
-			"version": "14.8.1",
-			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz",
-			"integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==",
+			"version": "14.16.1",
+			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz",
+			"integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==",
 			"dev": true,
 			"dependencies": {
+				"@csstools/selector-specificity": "^2.0.2",
 				"balanced-match": "^2.0.0",
-				"colord": "^2.9.2",
-				"cosmiconfig": "^7.0.1",
-				"css-functions-list": "^3.0.1",
+				"colord": "^2.9.3",
+				"cosmiconfig": "^7.1.0",
+				"css-functions-list": "^3.1.0",
 				"debug": "^4.3.4",
-				"execall": "^2.0.0",
-				"fast-glob": "^3.2.11",
-				"fastest-levenshtein": "^1.0.12",
+				"fast-glob": "^3.2.12",
+				"fastest-levenshtein": "^1.0.16",
 				"file-entry-cache": "^6.0.1",
-				"get-stdin": "^8.0.0",
 				"global-modules": "^2.0.0",
 				"globby": "^11.1.0",
 				"globjoin": "^0.1.4",
 				"html-tags": "^3.2.0",
-				"ignore": "^5.2.0",
+				"ignore": "^5.2.1",
 				"import-lazy": "^4.0.0",
 				"imurmurhash": "^0.1.4",
 				"is-plain-object": "^5.0.0",
-				"known-css-properties": "^0.24.0",
+				"known-css-properties": "^0.26.0",
 				"mathml-tag-names": "^2.1.3",
 				"meow": "^9.0.0",
 				"micromatch": "^4.0.5",
 				"normalize-path": "^3.0.0",
-				"normalize-selector": "^0.2.0",
 				"picocolors": "^1.0.0",
-				"postcss": "^8.4.12",
+				"postcss": "^8.4.19",
 				"postcss-media-query-parser": "^0.2.3",
 				"postcss-resolve-nested-selector": "^0.1.1",
 				"postcss-safe-parser": "^6.0.0",
-				"postcss-selector-parser": "^6.0.10",
+				"postcss-selector-parser": "^6.0.11",
 				"postcss-value-parser": "^4.2.0",
 				"resolve-from": "^5.0.0",
-				"specificity": "^0.4.1",
 				"string-width": "^4.2.3",
 				"strip-ansi": "^6.0.1",
 				"style-search": "^0.1.0",
-				"supports-hyperlinks": "^2.2.0",
+				"supports-hyperlinks": "^2.3.0",
 				"svg-tags": "^1.0.0",
-				"table": "^6.8.0",
+				"table": "^6.8.1",
 				"v8-compile-cache": "^2.3.0",
-				"write-file-atomic": "^4.0.1"
+				"write-file-atomic": "^4.0.2"
 			},
 			"bin": {
 				"stylelint": "bin/stylelint.js"
@@ -4058,46 +3990,46 @@
 			}
 		},
 		"node_modules/stylelint-config-recommended": {
-			"version": "7.0.0",
-			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz",
-			"integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==",
+			"version": "9.0.0",
+			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz",
+			"integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==",
 			"dev": true,
 			"peerDependencies": {
-				"stylelint": "^14.4.0"
+				"stylelint": "^14.10.0"
 			}
 		},
 		"node_modules/stylelint-config-wikimedia": {
-			"version": "0.13.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.1.tgz",
-			"integrity": "sha512-Wpm+cVJ2eZmlPO8HCv223OZZwyVZh5Ha11dRkzlccZwscxVkoKj/lo6xo10GNWBV9kpEA0+ksYJTIXXmRw1AoA==",
+			"version": "0.14.0",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.14.0.tgz",
+			"integrity": "sha512-8gc5fcYsavMU6yBxE4Ium0XX8Ekedg+kcU0Oojjg5di6Jhv74bx3pcdfW+Z4bDYKWx3pg3Glemy/CBRqg+JViQ==",
 			"dev": true,
 			"dependencies": {
 				"browserslist-config-wikimedia": "0.4.0",
 				"postcss-html": "1.5.0",
 				"postcss-less": "6.0.0",
-				"stylelint": "14.8.1",
-				"stylelint-config-recommended": "7.0.0",
-				"stylelint-no-unsupported-browser-features": "5.0.3"
+				"stylelint": "14.16.1",
+				"stylelint-config-recommended": "9.0.0",
+				"stylelint-no-unsupported-browser-features": "6.1.0"
 			},
 			"peerDependencies": {
 				"postcss-less": "^6.0.0"
 			}
 		},
 		"node_modules/stylelint-no-unsupported-browser-features": {
-			"version": "5.0.3",
-			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz",
-			"integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==",
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz",
+			"integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==",
 			"dev": true,
 			"dependencies": {
 				"doiuse": "^4.4.1",
 				"lodash": "^4.17.15",
-				"postcss": "^8.3.6"
+				"postcss": "^8.4.16"
 			},
 			"engines": {
-				"node": ">=12"
+				"node": ">=14"
 			},
 			"peerDependencies": {
-				"stylelint": ">=13.0.0"
+				"stylelint": "^14.0.0||^15.0.0"
 			}
 		},
 		"node_modules/stylelint/node_modules/balanced-match": {
@@ -4221,9 +4153,9 @@
 			}
 		},
 		"node_modules/through2/node_modules/readable-stream": {
-			"version": "3.6.0",
-			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-			"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+			"version": "3.6.2",
+			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+			"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
 			"dev": true,
 			"dependencies": {
 				"inherits": "^2.0.3",
@@ -4645,10 +4577,17 @@
 				}
 			}
 		},
+		"@csstools/selector-specificity": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz",
+			"integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==",
+			"dev": true,
+			"requires": {}
+		},
 		"@es-joy/jsdoccomment": {
-			"version": "0.22.2",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.22.2.tgz",
-			"integrity": "sha512-pM6WQKcuAtdYoqCsXSvVSu3Ij8K0HY50L8tIheOKHDl0wH1uA4zbP88etY8SIeP16NVCMCTFU+Q2DahSKheGGQ==",
+			"version": "0.23.6",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz",
+			"integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==",
 			"dev": true,
 			"requires": {
 				"comment-parser": "1.3.1",
@@ -4991,15 +4930,6 @@
 				"wrap-ansi": "^7.0.0"
 			}
 		},
-		"clone-regexp": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
-			"integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
-			"dev": true,
-			"requires": {
-				"is-regexp": "^2.0.0"
-			}
-		},
 		"color-convert": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -5134,9 +5064,9 @@
 			"dev": true
 		},
 		"dateformat": {
-			"version": "3.0.3",
-			"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
-			"integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+			"version": "4.6.3",
+			"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+			"integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
 			"dev": true
 		},
 		"debug": {
@@ -5353,16 +5283,16 @@
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.23.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.23.0.tgz",
-			"integrity": "sha512-miZGPrfSZL9RcsSn8OSiQWZpeeMc3xCgIIimNWF6C+8Nfd38gb1FCdcgKQFC7HscFanMQL21DaPErMJVW+FB1Q==",
+			"version": "0.24.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz",
+			"integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==",
 			"dev": true,
 			"requires": {
 				"browserslist-config-wikimedia": "^0.4.0",
-				"eslint": "^8.14.0",
+				"eslint": "^8.31.0",
 				"eslint-plugin-compat": "^4.0.2",
 				"eslint-plugin-es-x": "^5.2.1",
-				"eslint-plugin-jsdoc": "^38.1.6",
+				"eslint-plugin-jsdoc": "39.2.2",
 				"eslint-plugin-json-es": "^1.5.7",
 				"eslint-plugin-mediawiki": "^0.4.0",
 				"eslint-plugin-mocha": "^9.0.0",
@@ -5429,19 +5359,29 @@
 			}
 		},
 		"eslint-plugin-jsdoc": {
-			"version": "38.1.6",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-38.1.6.tgz",
-			"integrity": "sha512-n4s95oYlg0L43Bs8C0dkzIldxYf8pLCutC/tCbjIdF7VDiobuzPI+HZn9Q0BvgOvgPNgh5n7CSStql25HUG4Tw==",
+			"version": "39.2.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz",
+			"integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==",
 			"dev": true,
 			"requires": {
-				"@es-joy/jsdoccomment": "~0.22.1",
+				"@es-joy/jsdoccomment": "~0.23.1",
 				"comment-parser": "1.3.1",
 				"debug": "^4.3.4",
 				"escape-string-regexp": "^4.0.0",
 				"esquery": "^1.4.0",
-				"regextras": "^0.8.0",
-				"semver": "^7.3.5",
+				"semver": "^7.3.7",
 				"spdx-expression-parse": "^3.0.1"
+			},
+			"dependencies": {
+				"semver": {
+					"version": "7.3.8",
+					"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+					"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+					"dev": true,
+					"requires": {
+						"lru-cache": "^6.0.0"
+					}
+				}
 			}
 		},
 		"eslint-plugin-json-es": {
@@ -5668,15 +5608,6 @@
 			"integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==",
 			"dev": true
 		},
-		"execall": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
-			"integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
-			"dev": true,
-			"requires": {
-				"clone-regexp": "^2.1.0"
-			}
-		},
 		"exit": {
 			"version": "0.1.2",
 			"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
@@ -5784,27 +5715,15 @@
 			}
 		},
 		"findup-sync": {
-			"version": "0.3.0",
-			"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
-			"integrity": "sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg==",
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz",
+			"integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==",
 			"dev": true,
 			"requires": {
-				"glob": "~5.0.0"
-			},
-			"dependencies": {
-				"glob": {
-					"version": "5.0.15",
-					"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
-					"integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
-					"dev": true,
-					"requires": {
-						"inflight": "^1.0.4",
-						"inherits": "2",
-						"minimatch": "2 || 3",
-						"once": "^1.3.0",
-						"path-is-absolute": "^1.0.0"
-					}
-				}
+				"detect-file": "^1.0.0",
+				"is-glob": "^4.0.3",
+				"micromatch": "^4.0.4",
+				"resolve-dir": "^1.0.1"
 			}
 		},
 		"fined": {
@@ -5875,12 +5794,6 @@
 			"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
 			"dev": true
 		},
-		"get-stdin": {
-			"version": "8.0.0",
-			"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
-			"integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
-			"dev": true
-		},
 		"getobject": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz",
@@ -5977,26 +5890,24 @@
 			"dev": true
 		},
 		"grunt": {
-			"version": "1.5.3",
-			"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz",
-			"integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==",
+			"version": "1.6.1",
+			"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz",
+			"integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==",
 			"dev": true,
 			"requires": {
-				"dateformat": "~3.0.3",
+				"dateformat": "~4.6.2",
 				"eventemitter2": "~0.4.13",
 				"exit": "~0.1.2",
-				"findup-sync": "~0.3.0",
+				"findup-sync": "~5.0.0",
 				"glob": "~7.1.6",
 				"grunt-cli": "~1.4.3",
 				"grunt-known-options": "~2.0.0",
 				"grunt-legacy-log": "~3.0.0",
 				"grunt-legacy-util": "~2.0.1",
-				"iconv-lite": "~0.4.13",
+				"iconv-lite": "~0.6.3",
 				"js-yaml": "~3.14.0",
 				"minimatch": "~3.0.4",
-				"mkdirp": "~1.0.4",
-				"nopt": "~3.0.6",
-				"rimraf": "~3.0.2"
+				"nopt": "~3.0.6"
 			},
 			"dependencies": {
 				"argparse": {
@@ -6189,12 +6100,12 @@
 			}
 		},
 		"iconv-lite": {
-			"version": "0.4.24",
-			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-			"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+			"version": "0.6.3",
+			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+			"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
 			"dev": true,
 			"requires": {
-				"safer-buffer": ">= 2.1.2 < 3"
+				"safer-buffer": ">= 2.1.2 < 3.0.0"
 			}
 		},
 		"ignore": {
@@ -6341,12 +6252,6 @@
 				"isobject": "^3.0.1"
 			}
 		},
-		"is-regexp": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
-			"integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
-			"dev": true
-		},
 		"is-relative": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
@@ -6441,9 +6346,9 @@
 			"dev": true
 		},
 		"known-css-properties": {
-			"version": "0.24.0",
-			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz",
-			"integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==",
+			"version": "0.26.0",
+			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz",
+			"integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==",
 			"dev": true
 		},
 		"ldjson-stream": {
@@ -6686,12 +6591,6 @@
 				"kind-of": "^6.0.3"
 			}
 		},
-		"mkdirp": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-			"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-			"dev": true
-		},
 		"ms": {
 			"version": "2.1.2",
 			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -6772,12 +6671,6 @@
 			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
 			"dev": true
 		},
-		"normalize-selector": {
-			"version": "0.2.0",
-			"resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
-			"integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==",
-			"dev": true
-		},
 		"nth-check": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -7210,12 +7103,6 @@
 			"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
 			"dev": true
 		},
-		"regextras": {
-			"version": "0.8.0",
-			"resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz",
-			"integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==",
-			"dev": true
-		},
 		"require-directory": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -7432,12 +7319,6 @@
 			"integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
 			"dev": true
 		},
-		"specificity": {
-			"version": "0.4.1",
-			"resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
-			"integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
-			"dev": true
-		},
 		"split2": {
 			"version": "0.2.1",
 			"resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz",
@@ -7525,52 +7406,49 @@
 			"dev": true
 		},
 		"stylelint": {
-			"version": "14.8.1",
-			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz",
-			"integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==",
+			"version": "14.16.1",
+			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz",
+			"integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==",
 			"dev": true,
 			"requires": {
+				"@csstools/selector-specificity": "^2.0.2",
 				"balanced-match": "^2.0.0",
-				"colord": "^2.9.2",
-				"cosmiconfig": "^7.0.1",
-				"css-functions-list": "^3.0.1",
+				"colord": "^2.9.3",
+				"cosmiconfig": "^7.1.0",
+				"css-functions-list": "^3.1.0",
 				"debug": "^4.3.4",
-				"execall": "^2.0.0",
-				"fast-glob": "^3.2.11",
-				"fastest-levenshtein": "^1.0.12",
+				"fast-glob": "^3.2.12",
+				"fastest-levenshtein": "^1.0.16",
 				"file-entry-cache": "^6.0.1",
-				"get-stdin": "^8.0.0",
 				"global-modules": "^2.0.0",
 				"globby": "^11.1.0",
 				"globjoin": "^0.1.4",
 				"html-tags": "^3.2.0",
-				"ignore": "^5.2.0",
+				"ignore": "^5.2.1",
 				"import-lazy": "^4.0.0",
 				"imurmurhash": "^0.1.4",
 				"is-plain-object": "^5.0.0",
-				"known-css-properties": "^0.24.0",
+				"known-css-properties": "^0.26.0",
 				"mathml-tag-names": "^2.1.3",
 				"meow": "^9.0.0",
 				"micromatch": "^4.0.5",
 				"normalize-path": "^3.0.0",
-				"normalize-selector": "^0.2.0",
 				"picocolors": "^1.0.0",
-				"postcss": "^8.4.12",
+				"postcss": "^8.4.19",
 				"postcss-media-query-parser": "^0.2.3",
 				"postcss-resolve-nested-selector": "^0.1.1",
 				"postcss-safe-parser": "^6.0.0",
-				"postcss-selector-parser": "^6.0.10",
+				"postcss-selector-parser": "^6.0.11",
 				"postcss-value-parser": "^4.2.0",
 				"resolve-from": "^5.0.0",
-				"specificity": "^0.4.1",
 				"string-width": "^4.2.3",
 				"strip-ansi": "^6.0.1",
 				"style-search": "^0.1.0",
-				"supports-hyperlinks": "^2.2.0",
+				"supports-hyperlinks": "^2.3.0",
 				"svg-tags": "^1.0.0",
-				"table": "^6.8.0",
+				"table": "^6.8.1",
 				"v8-compile-cache": "^2.3.0",
-				"write-file-atomic": "^4.0.1"
+				"write-file-atomic": "^4.0.2"
 			},
 			"dependencies": {
 				"balanced-match": {
@@ -7594,35 +7472,35 @@
 			}
 		},
 		"stylelint-config-recommended": {
-			"version": "7.0.0",
-			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz",
-			"integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==",
+			"version": "9.0.0",
+			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz",
+			"integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==",
 			"dev": true,
 			"requires": {}
 		},
 		"stylelint-config-wikimedia": {
-			"version": "0.13.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.1.tgz",
-			"integrity": "sha512-Wpm+cVJ2eZmlPO8HCv223OZZwyVZh5Ha11dRkzlccZwscxVkoKj/lo6xo10GNWBV9kpEA0+ksYJTIXXmRw1AoA==",
+			"version": "0.14.0",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.14.0.tgz",
+			"integrity": "sha512-8gc5fcYsavMU6yBxE4Ium0XX8Ekedg+kcU0Oojjg5di6Jhv74bx3pcdfW+Z4bDYKWx3pg3Glemy/CBRqg+JViQ==",
 			"dev": true,
 			"requires": {
 				"browserslist-config-wikimedia": "0.4.0",
 				"postcss-html": "1.5.0",
 				"postcss-less": "6.0.0",
-				"stylelint": "14.8.1",
-				"stylelint-config-recommended": "7.0.0",
-				"stylelint-no-unsupported-browser-features": "5.0.3"
+				"stylelint": "14.16.1",
+				"stylelint-config-recommended": "9.0.0",
+				"stylelint-no-unsupported-browser-features": "6.1.0"
 			}
 		},
 		"stylelint-no-unsupported-browser-features": {
-			"version": "5.0.3",
-			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz",
-			"integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==",
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz",
+			"integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==",
 			"dev": true,
 			"requires": {
 				"doiuse": "^4.4.1",
 				"lodash": "^4.17.15",
-				"postcss": "^8.3.6"
+				"postcss": "^8.4.16"
 			}
 		},
 		"supports-color": {
@@ -7705,9 +7583,9 @@
 			},
 			"dependencies": {
 				"readable-stream": {
-					"version": "3.6.0",
-					"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-					"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+					"version": "3.6.2",
+					"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+					"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
 					"dev": true,
 					"requires": {
 						"inherits": "^2.0.3",
diff --git a/package.json b/package.json
index f197f82..ddb916c 100644
--- a/package.json
+++ b/package.json
@@ -5,11 +5,11 @@
 		"test": "grunt test"
 	},
 	"devDependencies": {
-		"eslint-config-wikimedia": "0.23.0",
-		"grunt": "1.5.3",
+		"eslint-config-wikimedia": "0.24.0",
+		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.10.0",
 		"grunt-eslint": "24.0.1",
 		"grunt-stylelint": "0.18.0",
-		"stylelint-config-wikimedia": "0.13.1"
+		"stylelint-config-wikimedia": "0.14.0"
 	}
 }
-- 
2.30.2

$ date
--- stdout ---
Wed Mar 15 23:34:51 UTC 2023

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-SpamRegex.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 ---
9c26e4c9d837a3882aab555d5831c3886ec55575 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": 1,
      "dev": 395,
      "optional": 0,
      "peer": 0,
      "peerOptional": 0,
      "total": 395
    }
  }
}

--- 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: 19 installs, 0 updates, 0 removals
  - 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 squizlabs/php_codesniffer (3.7.2)
  - Locking symfony/console (v5.4.21)
  - 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.21)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 19 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]    0 [--->------------------------]  - 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/polyfill-ctype (v1.27.0): Extracting archive
  - Installing symfony/string (v5.4.21): 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.21): 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
  0/10 [>---------------------------]   0%
 10/10 [============================] 100%5 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
12 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.23.0 -> 0.24.0
Upgrading n:grunt from 1.5.3 -> 1.6.1
Upgrading n:stylelint-config-wikimedia from 0.13.1 -> 0.14.0
$ /usr/bin/npm install
--- stdout ---

added 388 packages, and audited 389 packages in 5s

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 389 packages in 925ms

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 i18n/hi.json i18n/mdf.json i18n/pt-br.json Gruntfile.js i18n/fa.json i18n/nb.json i18n/es.json i18n/ro.json i18n/af.json i18n/te.json i18n/he.json i18n/km.json i18n/nn.json i18n/sdc.json i18n/fi.json i18n/de.json i18n/fr.json i18n/sl.json i18n/ksh.json i18n/gsw.json i18n/ia.json i18n/hr.json i18n/tg-cyrl.json i18n/pnb.json i18n/gl.json i18n/an.json i18n/ckb.json i18n/bs.json i18n/ku-latn.json i18n/zh-hans.json i18n/oc.json i18n/mt.json i18n/ml.json i18n/be.json i18n/yi.json i18n/az.json i18n/is.json i18n/kn.json i18n/el.json i18n/bg.json i18n/ast.json i18n/roa-tara.json i18n/hsb.json i18n/it.json i18n/ru.json extension.json i18n/et.json i18n/vi.json i18n/tg-latn.json i18n/tr.json i18n/dsb.json i18n/ms.json i18n/lag.json i18n/su.json i18n/id.json i18n/ja.json i18n/skr-arab.json i18n/ar.json i18n/sms.json i18n/sr-el.json i18n/sv.json i18n/be-tarask.json i18n/uk.json i18n/en.json i18n/sd.json i18n/scn.json i18n/zh-hant.json composer.json i18n/bn.json i18n/pl.json i18n/ban.json i18n/qqq.json package.json package-lock.json i18n/tl.json i18n/mr.json i18n/io.json i18n/eu.json resources/js/ext.spamRegex.js i18n/nl.json i18n/myv.json i18n/sk.json i18n/mk.json i18n/ca.json i18n/pt.json i18n/sr-ec.json i18n/smn.json i18n/hu.json i18n/fy.json i18n/ka.json i18n/eo.json i18n/frp.json i18n/lb.json i18n/pms.json i18n/ha.json i18n/da.json i18n/jv.json i18n/de-formal.json i18n/grc.json i18n/ko.json i18n/pfl.json i18n/arz.json i18n/ce.json i18n/br.json --fix
--- stdout ---

/src/repo/resources/js/ext.spamRegex.js
   3:6   warning  jQuery collection names must match the variablePattern                              no-jquery/variable-pattern
   3:25  warning  Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible  no-jquery/no-global-selector
   4:3   warning  jQuery collection names must match the variablePattern                              no-jquery/variable-pattern
   4:22  warning  Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible  no-jquery/no-global-selector
  14:2   warning  Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible  no-jquery/no-global-selector
  23:2   warning  Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible  no-jquery/no-global-selector
  32:7   warning  jQuery collection names must match the variablePattern                              no-jquery/variable-pattern
  44:5   warning  Unexpected alert                                                                    no-alert

✖ 8 problems (0 errors, 8 warnings)


--- end ---
$ ./node_modules/.bin/eslint i18n/hi.json i18n/mdf.json i18n/pt-br.json Gruntfile.js i18n/fa.json i18n/nb.json i18n/es.json i18n/ro.json i18n/af.json i18n/te.json i18n/he.json i18n/km.json i18n/nn.json i18n/sdc.json i18n/fi.json i18n/de.json i18n/fr.json i18n/sl.json i18n/ksh.json i18n/gsw.json i18n/ia.json i18n/hr.json i18n/tg-cyrl.json i18n/pnb.json i18n/gl.json i18n/an.json i18n/ckb.json i18n/bs.json i18n/ku-latn.json i18n/zh-hans.json i18n/oc.json i18n/mt.json i18n/ml.json i18n/be.json i18n/yi.json i18n/az.json i18n/is.json i18n/kn.json i18n/el.json i18n/bg.json i18n/ast.json i18n/roa-tara.json i18n/hsb.json i18n/it.json i18n/ru.json extension.json i18n/et.json i18n/vi.json i18n/tg-latn.json i18n/tr.json i18n/dsb.json i18n/ms.json i18n/lag.json i18n/su.json i18n/id.json i18n/ja.json i18n/skr-arab.json i18n/ar.json i18n/sms.json i18n/sr-el.json i18n/sv.json i18n/be-tarask.json i18n/uk.json i18n/en.json i18n/sd.json i18n/scn.json i18n/zh-hant.json composer.json i18n/bn.json i18n/pl.json i18n/ban.json i18n/qqq.json package.json package-lock.json i18n/tl.json i18n/mr.json i18n/io.json i18n/eu.json resources/js/ext.spamRegex.js i18n/nl.json i18n/myv.json i18n/sk.json i18n/mk.json i18n/ca.json i18n/pt.json i18n/sr-ec.json i18n/smn.json i18n/hu.json i18n/fy.json i18n/ka.json i18n/eo.json i18n/frp.json i18n/lb.json i18n/pms.json i18n/ha.json i18n/da.json i18n/jv.json i18n/de-formal.json i18n/grc.json i18n/ko.json i18n/pfl.json i18n/arz.json i18n/ce.json i18n/br.json -f json
--- stdout ---
[{"filePath":"/src/repo/Gruntfile.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/composer.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/extension.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/af.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/an.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/arz.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ast.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/az.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ban.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/be-tarask.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/be.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/bg.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/bn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/bs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ca.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ce.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ckb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/da.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/de-formal.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/dsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/eo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/et.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/eu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/fi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/frp.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/fy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/gl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/grc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/gsw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ha.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/hi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/hr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/hsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/hu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/id.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/io.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/is.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ja.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ka.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/km.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/kn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ksh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ku-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/lag.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/mdf.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ml.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/mr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/mt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/myv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/nb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/nn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/oc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/pfl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/pl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/pms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/pnb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/pt-br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/pt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ro.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/roa-tara.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ru.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/scn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sd.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sdc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/skr-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/smn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sr-ec.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sr-el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/su.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/te.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/tg-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/tg-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/tl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/uk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/vi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/yi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/js/ext.spamRegex.js","messages":[{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":3,"column":6,"nodeType":"VariableDeclarator","endLine":3,"endColumn":49},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":3,"column":25,"nodeType":"CallExpression","endLine":3,"endColumn":49},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":4,"column":3,"nodeType":"VariableDeclarator","endLine":4,"endColumn":46},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":4,"column":22,"nodeType":"CallExpression","endLine":4,"endColumn":46},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":14,"column":2,"nodeType":"CallExpression","endLine":14,"endColumn":26},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":23,"column":2,"nodeType":"CallExpression","endLine":23,"endColumn":42},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":32,"column":7,"nodeType":"VariableDeclarator","endLine":32,"endColumn":30},{"ruleId":"no-alert","severity":1,"message":"Unexpected alert.","line":44,"column":5,"nodeType":"CallExpression","messageId":"unexpected","endLine":44,"endColumn":52}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"$( function () {\n\t// This JS ensures that at least one block mode is always checked\n\tvar SRTextboxControl = $( '#wpBlockedTextbox' ),\n\t\tSRSummaryControl = $( '#wpBlockedSummary' );\n\n\tSRTextboxControl.on( 'click', function () {\n\t\tif ( !SRTextboxControl.prop( 'checked' ) ) {\n\t\t\tif ( !SRSummaryControl.prop( 'checked' ) ) {\n\t\t\t\tSRSummaryControl.prop( 'checked', true );\n\t\t\t}\n\t\t}\n\t} );\n\n\t$( '#wpBlockedSummary' ).on( 'click', function () {\n\t\tif ( !SRSummaryControl.prop( 'checked' ) ) {\n\t\t\tif ( !SRTextboxControl.prop( 'checked' ) ) {\n\t\t\t\tSRTextboxControl.prop( 'checked', true );\n\t\t\t}\n\t\t}\n\t} );\n\n\t// Handle clicks on the \"remove\" link for users w/ JS enabled\n\t$( '.spamregex-entry ul li a.external' ).on( 'click', function ( e ) {\n\t\t// Don't bother following the link since we have JS, d'oh...\n\t\te.preventDefault();\n\n\t\t// Wow, this is nasty.\n\t\t// 1) Get the href (no-JS unblocking form URL),\n\t\t// 2) split it along the ampersands,\n\t\t// 3) get the last part (text=<phrase to unblock>)\n\t\t// 4) and remove \"text=\" from it, which leaves us with only the phrase to unblock\n\t\tvar thisElement = $( this ),\n\t\t\tphrase = thisElement.attr( 'href' ).split( /&/ ).pop().replace( /text=/, '' );\n\n\t\t( new mw.Api() ).postWithToken( 'csrf', {\n\t\t\taction: 'spamregex',\n\t\t\tformat: 'json',\n\t\t\tdo: 'delete',\n\t\t\tphrase: phrase\n\t\t} ).done( function ( data ) {\n\t\t\tif ( data.spamregex.result === 'ok' ) {\n\t\t\t\tthisElement.parent().parent().parent().fadeOut( 500 );\n\t\t\t} else if ( data.spamregex.result === 'error' ) {\n\t\t\t\talert( mw.msg( 'spamregex-error-unblocking' ) );\n\t\t\t}\n\t\t} );\n\t} );\n} );\n","usedDeprecatedRules":[]}]

--- end ---
$ ./node_modules/.bin/grunt stylelint
--- stdout ---
Running "stylelint:all" (stylelint) task
>> Linted 1 files without errors

Done.

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

added 388 packages, and audited 389 packages in 4s

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

found 0 vulnerabilities

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

> test
> grunt test

Running "eslint:all" (eslint) task

/src/repo/resources/js/ext.spamRegex.js
   3:6   warning  jQuery collection names must match the variablePattern                              no-jquery/variable-pattern
   3:25  warning  Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible  no-jquery/no-global-selector
   4:3   warning  jQuery collection names must match the variablePattern                              no-jquery/variable-pattern
   4:22  warning  Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible  no-jquery/no-global-selector
  14:2   warning  Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible  no-jquery/no-global-selector
  23:2   warning  Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible  no-jquery/no-global-selector
  32:7   warning  jQuery collection names must match the variablePattern                              no-jquery/variable-pattern
  44:5   warning  Unexpected alert                                                                    no-alert

✖ 8 problems (0 errors, 8 warnings)


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

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

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": 1,
      "dev": 388,
      "optional": 0,
      "peer": 0,
      "peerOptional": 0,
      "total": 388
    }
  }
}

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

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

* eslint-config-wikimedia: 0.23.0 → 0.24.0
* grunt: 1.5.3 → 1.6.1
* stylelint-config-wikimedia: 0.13.1 → 0.14.0

$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmpbtbry2py
--- stdout ---
[master 3f82404] build: Updating npm dependencies
 2 files changed, 200 insertions(+), 322 deletions(-)

--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From 3f82404729ea29f74d89a54e3488bd2211a34884 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Wed, 15 Mar 2023 23:35:22 +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.23.0 → 0.24.0
* grunt: 1.5.3 → 1.6.1
* stylelint-config-wikimedia: 0.13.1 → 0.14.0

Change-Id: Ibd33e9ad77b294142dcebc1d0d5821bc892793a9
---
 package-lock.json | 516 ++++++++++++++++++----------------------------
 package.json      |   6 +-
 2 files changed, 200 insertions(+), 322 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 841d365..6b3770e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,12 +6,12 @@
 		"": {
 			"name": "SpamRegex",
 			"devDependencies": {
-				"eslint-config-wikimedia": "0.23.0",
-				"grunt": "1.5.3",
+				"eslint-config-wikimedia": "0.24.0",
+				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.10.0",
 				"grunt-eslint": "24.0.1",
 				"grunt-stylelint": "0.18.0",
-				"stylelint-config-wikimedia": "0.13.1"
+				"stylelint-config-wikimedia": "0.14.0"
 			}
 		},
 		"node_modules/@babel/code-frame": {
@@ -120,10 +120,27 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/@csstools/selector-specificity": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz",
+			"integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==",
+			"dev": true,
+			"engines": {
+				"node": "^14 || ^16 || >=18"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/csstools"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4",
+				"postcss-selector-parser": "^6.0.10"
+			}
+		},
 		"node_modules/@es-joy/jsdoccomment": {
-			"version": "0.22.2",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.22.2.tgz",
-			"integrity": "sha512-pM6WQKcuAtdYoqCsXSvVSu3Ij8K0HY50L8tIheOKHDl0wH1uA4zbP88etY8SIeP16NVCMCTFU+Q2DahSKheGGQ==",
+			"version": "0.23.6",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz",
+			"integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==",
 			"dev": true,
 			"dependencies": {
 				"comment-parser": "1.3.1",
@@ -597,18 +614,6 @@
 				"wrap-ansi": "^7.0.0"
 			}
 		},
-		"node_modules/clone-regexp": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
-			"integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
-			"dev": true,
-			"dependencies": {
-				"is-regexp": "^2.0.0"
-			},
-			"engines": {
-				"node": ">=6"
-			}
-		},
 		"node_modules/color-convert": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -773,9 +778,9 @@
 			}
 		},
 		"node_modules/dateformat": {
-			"version": "3.0.3",
-			"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
-			"integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+			"version": "4.6.3",
+			"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+			"integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
 			"dev": true,
 			"engines": {
 				"node": "*"
@@ -1070,16 +1075,16 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.23.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.23.0.tgz",
-			"integrity": "sha512-miZGPrfSZL9RcsSn8OSiQWZpeeMc3xCgIIimNWF6C+8Nfd38gb1FCdcgKQFC7HscFanMQL21DaPErMJVW+FB1Q==",
+			"version": "0.24.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz",
+			"integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==",
 			"dev": true,
 			"dependencies": {
 				"browserslist-config-wikimedia": "^0.4.0",
-				"eslint": "^8.14.0",
+				"eslint": "^8.31.0",
 				"eslint-plugin-compat": "^4.0.2",
 				"eslint-plugin-es-x": "^5.2.1",
-				"eslint-plugin-jsdoc": "^38.1.6",
+				"eslint-plugin-jsdoc": "39.2.2",
 				"eslint-plugin-json-es": "^1.5.7",
 				"eslint-plugin-mediawiki": "^0.4.0",
 				"eslint-plugin-mocha": "^9.0.0",
@@ -1177,27 +1182,41 @@
 			}
 		},
 		"node_modules/eslint-plugin-jsdoc": {
-			"version": "38.1.6",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-38.1.6.tgz",
-			"integrity": "sha512-n4s95oYlg0L43Bs8C0dkzIldxYf8pLCutC/tCbjIdF7VDiobuzPI+HZn9Q0BvgOvgPNgh5n7CSStql25HUG4Tw==",
+			"version": "39.2.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz",
+			"integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==",
 			"dev": true,
 			"dependencies": {
-				"@es-joy/jsdoccomment": "~0.22.1",
+				"@es-joy/jsdoccomment": "~0.23.1",
 				"comment-parser": "1.3.1",
 				"debug": "^4.3.4",
 				"escape-string-regexp": "^4.0.0",
 				"esquery": "^1.4.0",
-				"regextras": "^0.8.0",
-				"semver": "^7.3.5",
+				"semver": "^7.3.7",
 				"spdx-expression-parse": "^3.0.1"
 			},
 			"engines": {
-				"node": "^12 || ^14 || ^16 || ^17"
+				"node": "^14 || ^16 || ^17"
 			},
 			"peerDependencies": {
 				"eslint": "^7.0.0 || ^8.0.0"
 			}
 		},
+		"node_modules/eslint-plugin-jsdoc/node_modules/semver": {
+			"version": "7.3.8",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+			"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+			"dev": true,
+			"dependencies": {
+				"lru-cache": "^6.0.0"
+			},
+			"bin": {
+				"semver": "bin/semver.js"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
 		"node_modules/eslint-plugin-json-es": {
 			"version": "1.5.7",
 			"resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz",
@@ -1523,18 +1542,6 @@
 			"integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==",
 			"dev": true
 		},
-		"node_modules/execall": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
-			"integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
-			"dev": true,
-			"dependencies": {
-				"clone-regexp": "^2.1.0"
-			},
-			"engines": {
-				"node": ">=8"
-			}
-		},
 		"node_modules/exit": {
 			"version": "0.1.2",
 			"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
@@ -1667,31 +1674,18 @@
 			}
 		},
 		"node_modules/findup-sync": {
-			"version": "0.3.0",
-			"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
-			"integrity": "sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg==",
-			"dev": true,
-			"dependencies": {
-				"glob": "~5.0.0"
-			},
-			"engines": {
-				"node": ">= 0.6.0"
-			}
-		},
-		"node_modules/findup-sync/node_modules/glob": {
-			"version": "5.0.15",
-			"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
-			"integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz",
+			"integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==",
 			"dev": true,
 			"dependencies": {
-				"inflight": "^1.0.4",
-				"inherits": "2",
-				"minimatch": "2 || 3",
-				"once": "^1.3.0",
-				"path-is-absolute": "^1.0.0"
+				"detect-file": "^1.0.0",
+				"is-glob": "^4.0.3",
+				"micromatch": "^4.0.4",
+				"resolve-dir": "^1.0.1"
 			},
 			"engines": {
-				"node": "*"
+				"node": ">= 10.13.0"
 			}
 		},
 		"node_modules/fined": {
@@ -1780,18 +1774,6 @@
 				"node": "6.* || 8.* || >= 10.*"
 			}
 		},
-		"node_modules/get-stdin": {
-			"version": "8.0.0",
-			"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
-			"integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
-			"dev": true,
-			"engines": {
-				"node": ">=10"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
-			}
-		},
 		"node_modules/getobject": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz",
@@ -1919,32 +1901,30 @@
 			"dev": true
 		},
 		"node_modules/grunt": {
-			"version": "1.5.3",
-			"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz",
-			"integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==",
+			"version": "1.6.1",
+			"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz",
+			"integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==",
 			"dev": true,
 			"dependencies": {
-				"dateformat": "~3.0.3",
+				"dateformat": "~4.6.2",
 				"eventemitter2": "~0.4.13",
 				"exit": "~0.1.2",
-				"findup-sync": "~0.3.0",
+				"findup-sync": "~5.0.0",
 				"glob": "~7.1.6",
 				"grunt-cli": "~1.4.3",
 				"grunt-known-options": "~2.0.0",
 				"grunt-legacy-log": "~3.0.0",
 				"grunt-legacy-util": "~2.0.1",
-				"iconv-lite": "~0.4.13",
+				"iconv-lite": "~0.6.3",
 				"js-yaml": "~3.14.0",
 				"minimatch": "~3.0.4",
-				"mkdirp": "~1.0.4",
-				"nopt": "~3.0.6",
-				"rimraf": "~3.0.2"
+				"nopt": "~3.0.6"
 			},
 			"bin": {
 				"grunt": "bin/grunt"
 			},
 			"engines": {
-				"node": ">=8"
+				"node": ">=16"
 			}
 		},
 		"node_modules/grunt-banana-checker": {
@@ -2209,12 +2189,12 @@
 			}
 		},
 		"node_modules/iconv-lite": {
-			"version": "0.4.24",
-			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-			"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+			"version": "0.6.3",
+			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+			"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
 			"dev": true,
 			"dependencies": {
-				"safer-buffer": ">= 2.1.2 < 3"
+				"safer-buffer": ">= 2.1.2 < 3.0.0"
 			},
 			"engines": {
 				"node": ">=0.10.0"
@@ -2415,15 +2395,6 @@
 				"node": ">=0.10.0"
 			}
 		},
-		"node_modules/is-regexp": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
-			"integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
-			"dev": true,
-			"engines": {
-				"node": ">=6"
-			}
-		},
 		"node_modules/is-relative": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
@@ -2543,9 +2514,9 @@
 			}
 		},
 		"node_modules/known-css-properties": {
-			"version": "0.24.0",
-			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz",
-			"integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==",
+			"version": "0.26.0",
+			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz",
+			"integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==",
 			"dev": true
 		},
 		"node_modules/ldjson-stream": {
@@ -2849,18 +2820,6 @@
 				"node": ">= 6"
 			}
 		},
-		"node_modules/mkdirp": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-			"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-			"dev": true,
-			"bin": {
-				"mkdirp": "bin/cmd.js"
-			},
-			"engines": {
-				"node": ">=10"
-			}
-		},
 		"node_modules/ms": {
 			"version": "2.1.2",
 			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -2961,12 +2920,6 @@
 				"node": ">=0.10.0"
 			}
 		},
-		"node_modules/normalize-selector": {
-			"version": "0.2.0",
-			"resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
-			"integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==",
-			"dev": true
-		},
 		"node_modules/nth-check": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -3572,15 +3525,6 @@
 				"url": "https://github.com/sponsors/mysticatea"
 			}
 		},
-		"node_modules/regextras": {
-			"version": "0.8.0",
-			"resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz",
-			"integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==",
-			"dev": true,
-			"engines": {
-				"node": ">=0.1.14"
-			}
-		},
 		"node_modules/require-directory": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -3890,15 +3834,6 @@
 			"integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
 			"dev": true
 		},
-		"node_modules/specificity": {
-			"version": "0.4.1",
-			"resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
-			"integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
-			"dev": true,
-			"bin": {
-				"specificity": "bin/specificity"
-			}
-		},
 		"node_modules/split2": {
 			"version": "0.2.1",
 			"resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz",
@@ -3999,52 +3934,49 @@
 			"dev": true
 		},
 		"node_modules/stylelint": {
-			"version": "14.8.1",
-			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz",
-			"integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==",
+			"version": "14.16.1",
+			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz",
+			"integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==",
 			"dev": true,
 			"dependencies": {
+				"@csstools/selector-specificity": "^2.0.2",
 				"balanced-match": "^2.0.0",
-				"colord": "^2.9.2",
-				"cosmiconfig": "^7.0.1",
-				"css-functions-list": "^3.0.1",
+				"colord": "^2.9.3",
+				"cosmiconfig": "^7.1.0",
+				"css-functions-list": "^3.1.0",
 				"debug": "^4.3.4",
-				"execall": "^2.0.0",
-				"fast-glob": "^3.2.11",
-				"fastest-levenshtein": "^1.0.12",
+				"fast-glob": "^3.2.12",
+				"fastest-levenshtein": "^1.0.16",
 				"file-entry-cache": "^6.0.1",
-				"get-stdin": "^8.0.0",
 				"global-modules": "^2.0.0",
 				"globby": "^11.1.0",
 				"globjoin": "^0.1.4",
 				"html-tags": "^3.2.0",
-				"ignore": "^5.2.0",
+				"ignore": "^5.2.1",
 				"import-lazy": "^4.0.0",
 				"imurmurhash": "^0.1.4",
 				"is-plain-object": "^5.0.0",
-				"known-css-properties": "^0.24.0",
+				"known-css-properties": "^0.26.0",
 				"mathml-tag-names": "^2.1.3",
 				"meow": "^9.0.0",
 				"micromatch": "^4.0.5",
 				"normalize-path": "^3.0.0",
-				"normalize-selector": "^0.2.0",
 				"picocolors": "^1.0.0",
-				"postcss": "^8.4.12",
+				"postcss": "^8.4.19",
 				"postcss-media-query-parser": "^0.2.3",
 				"postcss-resolve-nested-selector": "^0.1.1",
 				"postcss-safe-parser": "^6.0.0",
-				"postcss-selector-parser": "^6.0.10",
+				"postcss-selector-parser": "^6.0.11",
 				"postcss-value-parser": "^4.2.0",
 				"resolve-from": "^5.0.0",
-				"specificity": "^0.4.1",
 				"string-width": "^4.2.3",
 				"strip-ansi": "^6.0.1",
 				"style-search": "^0.1.0",
-				"supports-hyperlinks": "^2.2.0",
+				"supports-hyperlinks": "^2.3.0",
 				"svg-tags": "^1.0.0",
-				"table": "^6.8.0",
+				"table": "^6.8.1",
 				"v8-compile-cache": "^2.3.0",
-				"write-file-atomic": "^4.0.1"
+				"write-file-atomic": "^4.0.2"
 			},
 			"bin": {
 				"stylelint": "bin/stylelint.js"
@@ -4058,46 +3990,46 @@
 			}
 		},
 		"node_modules/stylelint-config-recommended": {
-			"version": "7.0.0",
-			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz",
-			"integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==",
+			"version": "9.0.0",
+			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz",
+			"integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==",
 			"dev": true,
 			"peerDependencies": {
-				"stylelint": "^14.4.0"
+				"stylelint": "^14.10.0"
 			}
 		},
 		"node_modules/stylelint-config-wikimedia": {
-			"version": "0.13.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.1.tgz",
-			"integrity": "sha512-Wpm+cVJ2eZmlPO8HCv223OZZwyVZh5Ha11dRkzlccZwscxVkoKj/lo6xo10GNWBV9kpEA0+ksYJTIXXmRw1AoA==",
+			"version": "0.14.0",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.14.0.tgz",
+			"integrity": "sha512-8gc5fcYsavMU6yBxE4Ium0XX8Ekedg+kcU0Oojjg5di6Jhv74bx3pcdfW+Z4bDYKWx3pg3Glemy/CBRqg+JViQ==",
 			"dev": true,
 			"dependencies": {
 				"browserslist-config-wikimedia": "0.4.0",
 				"postcss-html": "1.5.0",
 				"postcss-less": "6.0.0",
-				"stylelint": "14.8.1",
-				"stylelint-config-recommended": "7.0.0",
-				"stylelint-no-unsupported-browser-features": "5.0.3"
+				"stylelint": "14.16.1",
+				"stylelint-config-recommended": "9.0.0",
+				"stylelint-no-unsupported-browser-features": "6.1.0"
 			},
 			"peerDependencies": {
 				"postcss-less": "^6.0.0"
 			}
 		},
 		"node_modules/stylelint-no-unsupported-browser-features": {
-			"version": "5.0.3",
-			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz",
-			"integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==",
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz",
+			"integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==",
 			"dev": true,
 			"dependencies": {
 				"doiuse": "^4.4.1",
 				"lodash": "^4.17.15",
-				"postcss": "^8.3.6"
+				"postcss": "^8.4.16"
 			},
 			"engines": {
-				"node": ">=12"
+				"node": ">=14"
 			},
 			"peerDependencies": {
-				"stylelint": ">=13.0.0"
+				"stylelint": "^14.0.0||^15.0.0"
 			}
 		},
 		"node_modules/stylelint/node_modules/balanced-match": {
@@ -4221,9 +4153,9 @@
 			}
 		},
 		"node_modules/through2/node_modules/readable-stream": {
-			"version": "3.6.0",
-			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-			"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+			"version": "3.6.2",
+			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+			"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
 			"dev": true,
 			"dependencies": {
 				"inherits": "^2.0.3",
@@ -4645,10 +4577,17 @@
 				}
 			}
 		},
+		"@csstools/selector-specificity": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz",
+			"integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==",
+			"dev": true,
+			"requires": {}
+		},
 		"@es-joy/jsdoccomment": {
-			"version": "0.22.2",
-			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.22.2.tgz",
-			"integrity": "sha512-pM6WQKcuAtdYoqCsXSvVSu3Ij8K0HY50L8tIheOKHDl0wH1uA4zbP88etY8SIeP16NVCMCTFU+Q2DahSKheGGQ==",
+			"version": "0.23.6",
+			"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz",
+			"integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==",
 			"dev": true,
 			"requires": {
 				"comment-parser": "1.3.1",
@@ -4991,15 +4930,6 @@
 				"wrap-ansi": "^7.0.0"
 			}
 		},
-		"clone-regexp": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
-			"integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
-			"dev": true,
-			"requires": {
-				"is-regexp": "^2.0.0"
-			}
-		},
 		"color-convert": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -5134,9 +5064,9 @@
 			"dev": true
 		},
 		"dateformat": {
-			"version": "3.0.3",
-			"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
-			"integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+			"version": "4.6.3",
+			"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+			"integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
 			"dev": true
 		},
 		"debug": {
@@ -5353,16 +5283,16 @@
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.23.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.23.0.tgz",
-			"integrity": "sha512-miZGPrfSZL9RcsSn8OSiQWZpeeMc3xCgIIimNWF6C+8Nfd38gb1FCdcgKQFC7HscFanMQL21DaPErMJVW+FB1Q==",
+			"version": "0.24.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz",
+			"integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==",
 			"dev": true,
 			"requires": {
 				"browserslist-config-wikimedia": "^0.4.0",
-				"eslint": "^8.14.0",
+				"eslint": "^8.31.0",
 				"eslint-plugin-compat": "^4.0.2",
 				"eslint-plugin-es-x": "^5.2.1",
-				"eslint-plugin-jsdoc": "^38.1.6",
+				"eslint-plugin-jsdoc": "39.2.2",
 				"eslint-plugin-json-es": "^1.5.7",
 				"eslint-plugin-mediawiki": "^0.4.0",
 				"eslint-plugin-mocha": "^9.0.0",
@@ -5429,19 +5359,29 @@
 			}
 		},
 		"eslint-plugin-jsdoc": {
-			"version": "38.1.6",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-38.1.6.tgz",
-			"integrity": "sha512-n4s95oYlg0L43Bs8C0dkzIldxYf8pLCutC/tCbjIdF7VDiobuzPI+HZn9Q0BvgOvgPNgh5n7CSStql25HUG4Tw==",
+			"version": "39.2.2",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz",
+			"integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==",
 			"dev": true,
 			"requires": {
-				"@es-joy/jsdoccomment": "~0.22.1",
+				"@es-joy/jsdoccomment": "~0.23.1",
 				"comment-parser": "1.3.1",
 				"debug": "^4.3.4",
 				"escape-string-regexp": "^4.0.0",
 				"esquery": "^1.4.0",
-				"regextras": "^0.8.0",
-				"semver": "^7.3.5",
+				"semver": "^7.3.7",
 				"spdx-expression-parse": "^3.0.1"
+			},
+			"dependencies": {
+				"semver": {
+					"version": "7.3.8",
+					"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+					"integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+					"dev": true,
+					"requires": {
+						"lru-cache": "^6.0.0"
+					}
+				}
 			}
 		},
 		"eslint-plugin-json-es": {
@@ -5668,15 +5608,6 @@
 			"integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==",
 			"dev": true
 		},
-		"execall": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
-			"integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
-			"dev": true,
-			"requires": {
-				"clone-regexp": "^2.1.0"
-			}
-		},
 		"exit": {
 			"version": "0.1.2",
 			"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
@@ -5784,27 +5715,15 @@
 			}
 		},
 		"findup-sync": {
-			"version": "0.3.0",
-			"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
-			"integrity": "sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg==",
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz",
+			"integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==",
 			"dev": true,
 			"requires": {
-				"glob": "~5.0.0"
-			},
-			"dependencies": {
-				"glob": {
-					"version": "5.0.15",
-					"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
-					"integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
-					"dev": true,
-					"requires": {
-						"inflight": "^1.0.4",
-						"inherits": "2",
-						"minimatch": "2 || 3",
-						"once": "^1.3.0",
-						"path-is-absolute": "^1.0.0"
-					}
-				}
+				"detect-file": "^1.0.0",
+				"is-glob": "^4.0.3",
+				"micromatch": "^4.0.4",
+				"resolve-dir": "^1.0.1"
 			}
 		},
 		"fined": {
@@ -5875,12 +5794,6 @@
 			"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
 			"dev": true
 		},
-		"get-stdin": {
-			"version": "8.0.0",
-			"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
-			"integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
-			"dev": true
-		},
 		"getobject": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz",
@@ -5977,26 +5890,24 @@
 			"dev": true
 		},
 		"grunt": {
-			"version": "1.5.3",
-			"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz",
-			"integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==",
+			"version": "1.6.1",
+			"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz",
+			"integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==",
 			"dev": true,
 			"requires": {
-				"dateformat": "~3.0.3",
+				"dateformat": "~4.6.2",
 				"eventemitter2": "~0.4.13",
 				"exit": "~0.1.2",
-				"findup-sync": "~0.3.0",
+				"findup-sync": "~5.0.0",
 				"glob": "~7.1.6",
 				"grunt-cli": "~1.4.3",
 				"grunt-known-options": "~2.0.0",
 				"grunt-legacy-log": "~3.0.0",
 				"grunt-legacy-util": "~2.0.1",
-				"iconv-lite": "~0.4.13",
+				"iconv-lite": "~0.6.3",
 				"js-yaml": "~3.14.0",
 				"minimatch": "~3.0.4",
-				"mkdirp": "~1.0.4",
-				"nopt": "~3.0.6",
-				"rimraf": "~3.0.2"
+				"nopt": "~3.0.6"
 			},
 			"dependencies": {
 				"argparse": {
@@ -6189,12 +6100,12 @@
 			}
 		},
 		"iconv-lite": {
-			"version": "0.4.24",
-			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-			"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+			"version": "0.6.3",
+			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+			"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
 			"dev": true,
 			"requires": {
-				"safer-buffer": ">= 2.1.2 < 3"
+				"safer-buffer": ">= 2.1.2 < 3.0.0"
 			}
 		},
 		"ignore": {
@@ -6341,12 +6252,6 @@
 				"isobject": "^3.0.1"
 			}
 		},
-		"is-regexp": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
-			"integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
-			"dev": true
-		},
 		"is-relative": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
@@ -6441,9 +6346,9 @@
 			"dev": true
 		},
 		"known-css-properties": {
-			"version": "0.24.0",
-			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz",
-			"integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==",
+			"version": "0.26.0",
+			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz",
+			"integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==",
 			"dev": true
 		},
 		"ldjson-stream": {
@@ -6686,12 +6591,6 @@
 				"kind-of": "^6.0.3"
 			}
 		},
-		"mkdirp": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-			"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-			"dev": true
-		},
 		"ms": {
 			"version": "2.1.2",
 			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -6772,12 +6671,6 @@
 			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
 			"dev": true
 		},
-		"normalize-selector": {
-			"version": "0.2.0",
-			"resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
-			"integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==",
-			"dev": true
-		},
 		"nth-check": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -7210,12 +7103,6 @@
 			"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
 			"dev": true
 		},
-		"regextras": {
-			"version": "0.8.0",
-			"resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz",
-			"integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==",
-			"dev": true
-		},
 		"require-directory": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -7432,12 +7319,6 @@
 			"integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
 			"dev": true
 		},
-		"specificity": {
-			"version": "0.4.1",
-			"resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
-			"integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
-			"dev": true
-		},
 		"split2": {
 			"version": "0.2.1",
 			"resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz",
@@ -7525,52 +7406,49 @@
 			"dev": true
 		},
 		"stylelint": {
-			"version": "14.8.1",
-			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz",
-			"integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==",
+			"version": "14.16.1",
+			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz",
+			"integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==",
 			"dev": true,
 			"requires": {
+				"@csstools/selector-specificity": "^2.0.2",
 				"balanced-match": "^2.0.0",
-				"colord": "^2.9.2",
-				"cosmiconfig": "^7.0.1",
-				"css-functions-list": "^3.0.1",
+				"colord": "^2.9.3",
+				"cosmiconfig": "^7.1.0",
+				"css-functions-list": "^3.1.0",
 				"debug": "^4.3.4",
-				"execall": "^2.0.0",
-				"fast-glob": "^3.2.11",
-				"fastest-levenshtein": "^1.0.12",
+				"fast-glob": "^3.2.12",
+				"fastest-levenshtein": "^1.0.16",
 				"file-entry-cache": "^6.0.1",
-				"get-stdin": "^8.0.0",
 				"global-modules": "^2.0.0",
 				"globby": "^11.1.0",
 				"globjoin": "^0.1.4",
 				"html-tags": "^3.2.0",
-				"ignore": "^5.2.0",
+				"ignore": "^5.2.1",
 				"import-lazy": "^4.0.0",
 				"imurmurhash": "^0.1.4",
 				"is-plain-object": "^5.0.0",
-				"known-css-properties": "^0.24.0",
+				"known-css-properties": "^0.26.0",
 				"mathml-tag-names": "^2.1.3",
 				"meow": "^9.0.0",
 				"micromatch": "^4.0.5",
 				"normalize-path": "^3.0.0",
-				"normalize-selector": "^0.2.0",
 				"picocolors": "^1.0.0",
-				"postcss": "^8.4.12",
+				"postcss": "^8.4.19",
 				"postcss-media-query-parser": "^0.2.3",
 				"postcss-resolve-nested-selector": "^0.1.1",
 				"postcss-safe-parser": "^6.0.0",
-				"postcss-selector-parser": "^6.0.10",
+				"postcss-selector-parser": "^6.0.11",
 				"postcss-value-parser": "^4.2.0",
 				"resolve-from": "^5.0.0",
-				"specificity": "^0.4.1",
 				"string-width": "^4.2.3",
 				"strip-ansi": "^6.0.1",
 				"style-search": "^0.1.0",
-				"supports-hyperlinks": "^2.2.0",
+				"supports-hyperlinks": "^2.3.0",
 				"svg-tags": "^1.0.0",
-				"table": "^6.8.0",
+				"table": "^6.8.1",
 				"v8-compile-cache": "^2.3.0",
-				"write-file-atomic": "^4.0.1"
+				"write-file-atomic": "^4.0.2"
 			},
 			"dependencies": {
 				"balanced-match": {
@@ -7594,35 +7472,35 @@
 			}
 		},
 		"stylelint-config-recommended": {
-			"version": "7.0.0",
-			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz",
-			"integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==",
+			"version": "9.0.0",
+			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz",
+			"integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==",
 			"dev": true,
 			"requires": {}
 		},
 		"stylelint-config-wikimedia": {
-			"version": "0.13.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.1.tgz",
-			"integrity": "sha512-Wpm+cVJ2eZmlPO8HCv223OZZwyVZh5Ha11dRkzlccZwscxVkoKj/lo6xo10GNWBV9kpEA0+ksYJTIXXmRw1AoA==",
+			"version": "0.14.0",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.14.0.tgz",
+			"integrity": "sha512-8gc5fcYsavMU6yBxE4Ium0XX8Ekedg+kcU0Oojjg5di6Jhv74bx3pcdfW+Z4bDYKWx3pg3Glemy/CBRqg+JViQ==",
 			"dev": true,
 			"requires": {
 				"browserslist-config-wikimedia": "0.4.0",
 				"postcss-html": "1.5.0",
 				"postcss-less": "6.0.0",
-				"stylelint": "14.8.1",
-				"stylelint-config-recommended": "7.0.0",
-				"stylelint-no-unsupported-browser-features": "5.0.3"
+				"stylelint": "14.16.1",
+				"stylelint-config-recommended": "9.0.0",
+				"stylelint-no-unsupported-browser-features": "6.1.0"
 			}
 		},
 		"stylelint-no-unsupported-browser-features": {
-			"version": "5.0.3",
-			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz",
-			"integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==",
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz",
+			"integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==",
 			"dev": true,
 			"requires": {
 				"doiuse": "^4.4.1",
 				"lodash": "^4.17.15",
-				"postcss": "^8.3.6"
+				"postcss": "^8.4.16"
 			}
 		},
 		"supports-color": {
@@ -7705,9 +7583,9 @@
 			},
 			"dependencies": {
 				"readable-stream": {
-					"version": "3.6.0",
-					"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
-					"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+					"version": "3.6.2",
+					"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+					"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
 					"dev": true,
 					"requires": {
 						"inherits": "^2.0.3",
diff --git a/package.json b/package.json
index f197f82..ddb916c 100644
--- a/package.json
+++ b/package.json
@@ -5,11 +5,11 @@
 		"test": "grunt test"
 	},
 	"devDependencies": {
-		"eslint-config-wikimedia": "0.23.0",
-		"grunt": "1.5.3",
+		"eslint-config-wikimedia": "0.24.0",
+		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.10.0",
 		"grunt-eslint": "24.0.1",
 		"grunt-stylelint": "0.18.0",
-		"stylelint-config-wikimedia": "0.13.1"
+		"stylelint-config-wikimedia": "0.14.0"
 	}
 }
-- 
2.30.2


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