wikimedia/portals: main (log #2037750)

sourcepatches

This run took 177 seconds.

From c46cb8a90cc88ee4550d379c9b40d5ee325e70ba Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Fri, 1 Aug 2025 08:16:43 +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.30.0 → 0.31.0
* koa: 2.16.1 → 2.16.2
  * https://github.com/advisories/GHSA-jgmv-j7ww-jx2x

Change-Id: Ibcce7345f28cbbf87392bc21e585d54b60d89786
---
 package-lock.json | 498 ++++++++++++++++++++++++++++++++++++----------
 package.json      |   2 +-
 2 files changed, 399 insertions(+), 101 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index c7e6225..758469a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,7 @@
 				"browserslist-config-wikimedia": "0.7.0",
 				"cssnano": "^4.1.10",
 				"es-dev-server": "^1.54.1",
-				"eslint-config-wikimedia": "0.30.0",
+				"eslint-config-wikimedia": "0.31.0",
 				"eslint-plugin-unicorn": "40.1.0",
 				"eslint-plugin-yml": "0.13.0",
 				"glob": "^7.2.3",
@@ -1849,9 +1849,9 @@
 			}
 		},
 		"node_modules/@eslint-community/eslint-utils": {
-			"version": "4.4.1",
-			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
-			"integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
+			"version": "4.7.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+			"integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
 			"dev": true,
 			"dependencies": {
 				"eslint-visitor-keys": "^3.4.3"
@@ -2182,6 +2182,66 @@
 				"rollup": "^1.20.0||^2.0.0"
 			}
 		},
+		"node_modules/@stylistic/eslint-plugin": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-3.1.0.tgz",
+			"integrity": "sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/utils": "^8.13.0",
+				"eslint-visitor-keys": "^4.2.0",
+				"espree": "^10.3.0",
+				"estraverse": "^5.3.0",
+				"picomatch": "^4.0.2"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"peerDependencies": {
+				"eslint": ">=8.40.0"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": {
+			"version": "4.2.1",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+			"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+			"dev": true,
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/espree": {
+			"version": "10.4.0",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+			"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+			"dev": true,
+			"dependencies": {
+				"acorn": "^8.15.0",
+				"acorn-jsx": "^5.3.2",
+				"eslint-visitor-keys": "^4.2.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/picomatch": {
+			"version": "4.0.3",
+			"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+			"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+			"dev": true,
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/jonschlinkert"
+			}
+		},
 		"node_modules/@stylistic/stylelint-config": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-2.0.0.tgz",
@@ -2591,14 +2651,132 @@
 				"@types/node": "*"
 			}
 		},
+		"node_modules/@typescript-eslint/eslint-plugin": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz",
+			"integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==",
+			"dev": true,
+			"dependencies": {
+				"@eslint-community/regexpp": "^4.10.0",
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/type-utils": "8.35.1",
+				"@typescript-eslint/utils": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
+				"graphemer": "^1.4.0",
+				"ignore": "^7.0.0",
+				"natural-compare": "^1.4.0",
+				"ts-api-utils": "^2.1.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"@typescript-eslint/parser": "^8.35.1",
+				"eslint": "^8.57.0 || ^9.0.0",
+				"typescript": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+			"version": "7.0.5",
+			"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+			"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+			"dev": true,
+			"engines": {
+				"node": ">= 4"
+			}
+		},
+		"node_modules/@typescript-eslint/parser": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz",
+			"integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/typescript-estree": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
+				"debug": "^4.3.4"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^8.57.0 || ^9.0.0",
+				"typescript": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/@typescript-eslint/project-service": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz",
+			"integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/tsconfig-utils": "^8.35.1",
+				"@typescript-eslint/types": "^8.35.1",
+				"debug": "^4.3.4"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"typescript": ">=4.8.4 <5.9.0"
+			}
+		},
 		"node_modules/@typescript-eslint/scope-manager": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz",
-			"integrity": "sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz",
+			"integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@typescript-eslint/tsconfig-utils": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz",
+			"integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==",
+			"dev": true,
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"typescript": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/@typescript-eslint/type-utils": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz",
+			"integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/visitor-keys": "8.18.1"
+				"@typescript-eslint/typescript-estree": "8.35.1",
+				"@typescript-eslint/utils": "8.35.1",
+				"debug": "^4.3.4",
+				"ts-api-utils": "^2.1.0"
 			},
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2606,12 +2784,16 @@
 			"funding": {
 				"type": "opencollective",
 				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^8.57.0 || ^9.0.0",
+				"typescript": ">=4.8.4 <5.9.0"
 			}
 		},
 		"node_modules/@typescript-eslint/types": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz",
-			"integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz",
+			"integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==",
 			"dev": true,
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2622,19 +2804,21 @@
 			}
 		},
 		"node_modules/@typescript-eslint/typescript-estree": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz",
-			"integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz",
+			"integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/visitor-keys": "8.18.1",
+				"@typescript-eslint/project-service": "8.35.1",
+				"@typescript-eslint/tsconfig-utils": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
 				"debug": "^4.3.4",
 				"fast-glob": "^3.3.2",
 				"is-glob": "^4.0.3",
 				"minimatch": "^9.0.4",
 				"semver": "^7.6.0",
-				"ts-api-utils": "^1.3.0"
+				"ts-api-utils": "^2.1.0"
 			},
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2644,7 +2828,7 @@
 				"url": "https://opencollective.com/typescript-eslint"
 			},
 			"peerDependencies": {
-				"typescript": ">=4.8.4 <5.8.0"
+				"typescript": ">=4.8.4 <5.9.0"
 			}
 		},
 		"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
@@ -2672,9 +2856,9 @@
 			}
 		},
 		"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
-			"version": "7.6.3",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-			"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+			"version": "7.7.2",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+			"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
 			"dev": true,
 			"bin": {
 				"semver": "bin/semver.js"
@@ -2684,15 +2868,15 @@
 			}
 		},
 		"node_modules/@typescript-eslint/utils": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.1.tgz",
-			"integrity": "sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz",
+			"integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==",
 			"dev": true,
 			"dependencies": {
-				"@eslint-community/eslint-utils": "^4.4.0",
-				"@typescript-eslint/scope-manager": "8.18.1",
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/typescript-estree": "8.18.1"
+				"@eslint-community/eslint-utils": "^4.7.0",
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/typescript-estree": "8.35.1"
 			},
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2703,17 +2887,17 @@
 			},
 			"peerDependencies": {
 				"eslint": "^8.57.0 || ^9.0.0",
-				"typescript": ">=4.8.4 <5.8.0"
+				"typescript": ">=4.8.4 <5.9.0"
 			}
 		},
 		"node_modules/@typescript-eslint/visitor-keys": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz",
-			"integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz",
+			"integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "8.18.1",
-				"eslint-visitor-keys": "^4.2.0"
+				"@typescript-eslint/types": "8.35.1",
+				"eslint-visitor-keys": "^4.2.1"
 			},
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2724,9 +2908,9 @@
 			}
 		},
 		"node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
-			"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+			"version": "4.2.1",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+			"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
 			"dev": true,
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2799,9 +2983,9 @@
 			}
 		},
 		"node_modules/acorn": {
-			"version": "8.14.0",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
-			"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+			"version": "8.15.0",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+			"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
 			"dev": true,
 			"bin": {
 				"acorn": "bin/acorn"
@@ -5909,11 +6093,14 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.30.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.30.0.tgz",
-			"integrity": "sha512-i8ESzSoo0x3Jur/0JhAgCVPxbV51zfdI3MN3MVQPnjiFdmo21CNKmiBBmw8JnJ3fx/d5zHDrBa+yDjxSLpnDlA==",
+			"version": "0.31.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.31.0.tgz",
+			"integrity": "sha512-Z/t/zGPdxs/ehxb0EM6THNWAzueT7GtuqzjUvmBpkxcTKzZPJEXWnnpswdj/hgv8Ce8PIeDp0zwQxR4e3c9CIw==",
 			"dev": true,
 			"dependencies": {
+				"@stylistic/eslint-plugin": "^3.1.0",
+				"@typescript-eslint/eslint-plugin": "8.35.1",
+				"@typescript-eslint/parser": "8.35.1",
 				"browserslist-config-wikimedia": "^0.7.0",
 				"eslint": "^8.57.0",
 				"eslint-plugin-compat": "^4.2.0",
@@ -5933,7 +6120,7 @@
 				"eslint-plugin-yml": "^1.14.0"
 			},
 			"engines": {
-				"node": ">=18 <23"
+				"node": ">=18 <25"
 			}
 		},
 		"node_modules/eslint-config-wikimedia/node_modules/@eslint/eslintrc": {
@@ -10352,9 +10539,9 @@
 			"license": "MIT"
 		},
 		"node_modules/koa": {
-			"version": "2.16.1",
-			"resolved": "https://registry.npmjs.org/koa/-/koa-2.16.1.tgz",
-			"integrity": "sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==",
+			"version": "2.16.2",
+			"resolved": "https://registry.npmjs.org/koa/-/koa-2.16.2.tgz",
+			"integrity": "sha512-+CCssgnrWKx9aI3OeZwroa/ckG4JICxvIFnSiOUyl2Uv+UTI+xIw0FfFrWS7cQFpoePpr9o8csss7KzsTzNL8Q==",
 			"dev": true,
 			"dependencies": {
 				"accepts": "^1.3.5",
@@ -18313,15 +18500,15 @@
 			"dev": true
 		},
 		"node_modules/ts-api-utils": {
-			"version": "1.4.3",
-			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
-			"integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+			"integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
 			"dev": true,
 			"engines": {
-				"node": ">=16"
+				"node": ">=18.12"
 			},
 			"peerDependencies": {
-				"typescript": ">=4.2.0"
+				"typescript": ">=4.8.4"
 			}
 		},
 		"node_modules/tslib": {
@@ -20807,9 +20994,9 @@
 			}
 		},
 		"@eslint-community/eslint-utils": {
-			"version": "4.4.1",
-			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
-			"integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
+			"version": "4.7.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+			"integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
 			"dev": true,
 			"requires": {
 				"eslint-visitor-keys": "^3.4.3"
@@ -21052,6 +21239,44 @@
 				"picomatch": "^2.2.2"
 			}
 		},
+		"@stylistic/eslint-plugin": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-3.1.0.tgz",
+			"integrity": "sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/utils": "^8.13.0",
+				"eslint-visitor-keys": "^4.2.0",
+				"espree": "^10.3.0",
+				"estraverse": "^5.3.0",
+				"picomatch": "^4.0.2"
+			},
+			"dependencies": {
+				"eslint-visitor-keys": {
+					"version": "4.2.1",
+					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+					"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+					"dev": true
+				},
+				"espree": {
+					"version": "10.4.0",
+					"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+					"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+					"dev": true,
+					"requires": {
+						"acorn": "^8.15.0",
+						"acorn-jsx": "^5.3.2",
+						"eslint-visitor-keys": "^4.2.1"
+					}
+				},
+				"picomatch": {
+					"version": "4.0.3",
+					"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+					"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+					"dev": true
+				}
+			}
+		},
 		"@stylistic/stylelint-config": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-2.0.0.tgz",
@@ -21444,36 +21669,106 @@
 				"@types/node": "*"
 			}
 		},
+		"@typescript-eslint/eslint-plugin": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz",
+			"integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==",
+			"dev": true,
+			"requires": {
+				"@eslint-community/regexpp": "^4.10.0",
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/type-utils": "8.35.1",
+				"@typescript-eslint/utils": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
+				"graphemer": "^1.4.0",
+				"ignore": "^7.0.0",
+				"natural-compare": "^1.4.0",
+				"ts-api-utils": "^2.1.0"
+			},
+			"dependencies": {
+				"ignore": {
+					"version": "7.0.5",
+					"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+					"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+					"dev": true
+				}
+			}
+		},
+		"@typescript-eslint/parser": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz",
+			"integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/typescript-estree": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
+				"debug": "^4.3.4"
+			}
+		},
+		"@typescript-eslint/project-service": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz",
+			"integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/tsconfig-utils": "^8.35.1",
+				"@typescript-eslint/types": "^8.35.1",
+				"debug": "^4.3.4"
+			}
+		},
 		"@typescript-eslint/scope-manager": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz",
-			"integrity": "sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz",
+			"integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/visitor-keys": "8.18.1"
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1"
+			}
+		},
+		"@typescript-eslint/tsconfig-utils": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz",
+			"integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==",
+			"dev": true,
+			"requires": {}
+		},
+		"@typescript-eslint/type-utils": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz",
+			"integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/typescript-estree": "8.35.1",
+				"@typescript-eslint/utils": "8.35.1",
+				"debug": "^4.3.4",
+				"ts-api-utils": "^2.1.0"
 			}
 		},
 		"@typescript-eslint/types": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz",
-			"integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz",
+			"integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==",
 			"dev": true
 		},
 		"@typescript-eslint/typescript-estree": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz",
-			"integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz",
+			"integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/visitor-keys": "8.18.1",
+				"@typescript-eslint/project-service": "8.35.1",
+				"@typescript-eslint/tsconfig-utils": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
 				"debug": "^4.3.4",
 				"fast-glob": "^3.3.2",
 				"is-glob": "^4.0.3",
 				"minimatch": "^9.0.4",
 				"semver": "^7.6.0",
-				"ts-api-utils": "^1.3.0"
+				"ts-api-utils": "^2.1.0"
 			},
 			"dependencies": {
 				"brace-expansion": {
@@ -21495,39 +21790,39 @@
 					}
 				},
 				"semver": {
-					"version": "7.6.3",
-					"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-					"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+					"version": "7.7.2",
+					"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+					"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
 					"dev": true
 				}
 			}
 		},
 		"@typescript-eslint/utils": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.1.tgz",
-			"integrity": "sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz",
+			"integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==",
 			"dev": true,
 			"requires": {
-				"@eslint-community/eslint-utils": "^4.4.0",
-				"@typescript-eslint/scope-manager": "8.18.1",
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/typescript-estree": "8.18.1"
+				"@eslint-community/eslint-utils": "^4.7.0",
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/typescript-estree": "8.35.1"
 			}
 		},
 		"@typescript-eslint/visitor-keys": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz",
-			"integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz",
+			"integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "8.18.1",
-				"eslint-visitor-keys": "^4.2.0"
+				"@typescript-eslint/types": "8.35.1",
+				"eslint-visitor-keys": "^4.2.1"
 			},
 			"dependencies": {
 				"eslint-visitor-keys": {
-					"version": "4.2.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
-					"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+					"version": "4.2.1",
+					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+					"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
 					"dev": true
 				}
 			}
@@ -21585,9 +21880,9 @@
 			}
 		},
 		"acorn": {
-			"version": "8.14.0",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
-			"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+			"version": "8.15.0",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+			"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
 			"dev": true
 		},
 		"acorn-jsx": {
@@ -24159,11 +24454,14 @@
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.30.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.30.0.tgz",
-			"integrity": "sha512-i8ESzSoo0x3Jur/0JhAgCVPxbV51zfdI3MN3MVQPnjiFdmo21CNKmiBBmw8JnJ3fx/d5zHDrBa+yDjxSLpnDlA==",
+			"version": "0.31.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.31.0.tgz",
+			"integrity": "sha512-Z/t/zGPdxs/ehxb0EM6THNWAzueT7GtuqzjUvmBpkxcTKzZPJEXWnnpswdj/hgv8Ce8PIeDp0zwQxR4e3c9CIw==",
 			"dev": true,
 			"requires": {
+				"@stylistic/eslint-plugin": "^3.1.0",
+				"@typescript-eslint/eslint-plugin": "8.35.1",
+				"@typescript-eslint/parser": "8.35.1",
 				"browserslist-config-wikimedia": "^0.7.0",
 				"eslint": "^8.57.0",
 				"eslint-plugin-compat": "^4.2.0",
@@ -27489,9 +27787,9 @@
 			"dev": true
 		},
 		"koa": {
-			"version": "2.16.1",
-			"resolved": "https://registry.npmjs.org/koa/-/koa-2.16.1.tgz",
-			"integrity": "sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==",
+			"version": "2.16.2",
+			"resolved": "https://registry.npmjs.org/koa/-/koa-2.16.2.tgz",
+			"integrity": "sha512-+CCssgnrWKx9aI3OeZwroa/ckG4JICxvIFnSiOUyl2Uv+UTI+xIw0FfFrWS7cQFpoePpr9o8csss7KzsTzNL8Q==",
 			"dev": true,
 			"requires": {
 				"accepts": "^1.3.5",
@@ -33816,9 +34114,9 @@
 			"dev": true
 		},
 		"ts-api-utils": {
-			"version": "1.4.3",
-			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
-			"integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+			"integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
 			"dev": true,
 			"requires": {}
 		},
diff --git a/package.json b/package.json
index 2c78fcd..b60771b 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,7 @@
 		"browserslist-config-wikimedia": "0.7.0",
 		"cssnano": "^4.1.10",
 		"es-dev-server": "^1.54.1",
-		"eslint-config-wikimedia": "0.30.0",
+		"eslint-config-wikimedia": "0.31.0",
 		"eslint-plugin-unicorn": "40.1.0",
 		"eslint-plugin-yml": "0.13.0",
 		"glob": "^7.2.3",
-- 
2.39.5

$ date
--- stdout ---
Fri Aug  1 08:14:04 UTC 2025

--- end ---
$ git clone file:///srv/git/wikimedia-portals.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
--- stderr ---
Submodule 'prod' (https://gerrit.wikimedia.org/r/wikimedia/portals/deploy) registered for path 'prod'
Cloning into '/src/repo/prod'...
--- stdout ---
Submodule path 'prod': checked out 'ae1009042ab69b0ea76ce04463cb917416567f94'

--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.

--- end ---
$ git show-ref refs/heads/master
--- stdout ---
04085d7523240a4dc741871f6018a552678bc7cd refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@koa/cors": {
      "name": "@koa/cors",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1095223,
          "name": "@koa/cors",
          "dependency": "@koa/cors",
          "title": "Overly permissive origin policy",
          "url": "https://github.com/advisories/GHSA-qxrj-hx23-xp82",
          "severity": "high",
          "cwe": [
            "CWE-346"
          ],
          "cvss": {
            "score": 8.6,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N"
          },
          "range": "<5.0.0"
        }
      ],
      "effects": [
        "es-dev-server"
      ],
      "range": "<5.0.0",
      "nodes": [
        "node_modules/@koa/cors"
      ],
      "fixAvailable": true
    },
    "anymatch": {
      "name": "anymatch",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "micromatch"
      ],
      "effects": [
        "chokidar",
        "glob-watcher"
      ],
      "range": "1.2.0 - 2.0.0",
      "nodes": [
        "node_modules/glob-watcher/node_modules/anymatch"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "autoprefixer": {
      "name": "autoprefixer",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.0.20131222 - 8.6.5",
      "nodes": [
        "node_modules/autoprefixer"
      ],
      "fixAvailable": true
    },
    "braces": {
      "name": "braces",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098094,
          "name": "braces",
          "dependency": "braces",
          "title": "Uncontrolled resource consumption in braces",
          "url": "https://github.com/advisories/GHSA-grv7-fg5c-xmjg",
          "severity": "high",
          "cwe": [
            "CWE-400",
            "CWE-1050"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<3.0.3"
        }
      ],
      "effects": [
        "chokidar",
        "micromatch"
      ],
      "range": "<3.0.3",
      "nodes": [
        "node_modules/findup-sync/node_modules/braces",
        "node_modules/glob-watcher/node_modules/braces",
        "node_modules/matchdep/node_modules/braces"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "browserslist-useragent": {
      "name": "browserslist-useragent",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "useragent"
      ],
      "effects": [],
      "range": "<=3.1.4",
      "nodes": [
        "node_modules/browserslist-useragent"
      ],
      "fixAvailable": true
    },
    "cheerio": {
      "name": "cheerio",
      "severity": "high",
      "isDirect": false,
      "via": [
        "css-select",
        "lodash.pick"
      ],
      "effects": [
        "gulp-inline"
      ],
      "range": "0.19.0 - 1.0.0-rc.12",
      "nodes": [
        "node_modules/cheerio"
      ],
      "fixAvailable": {
        "name": "gulp-inline",
        "version": "0.1.2",
        "isSemVerMajor": true
      }
    },
    "chokidar": {
      "name": "chokidar",
      "severity": "high",
      "isDirect": false,
      "via": [
        "anymatch",
        "braces",
        "readdirp"
      ],
      "effects": [
        "glob-watcher"
      ],
      "range": "1.3.0 - 2.1.8",
      "nodes": [
        "node_modules/glob-watcher/node_modules/chokidar"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "color": {
      "name": "color",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "color-string"
      ],
      "effects": [
        "css-color-function"
      ],
      "range": "<=0.11.4",
      "nodes": [
        "node_modules/color"
      ],
      "fixAvailable": true
    },
    "color-string": {
      "name": "color-string",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1089718,
          "name": "color-string",
          "dependency": "color-string",
          "title": "Regular Expression Denial of Service (ReDOS)",
          "url": "https://github.com/advisories/GHSA-257v-vj4p-3w2h",
          "severity": "moderate",
          "cwe": [
            "CWE-770"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<1.5.5"
        }
      ],
      "effects": [
        "color"
      ],
      "range": "<1.5.5",
      "nodes": [
        "node_modules/color/node_modules/color-string"
      ],
      "fixAvailable": true
    },
    "cross-spawn": {
      "name": "cross-spawn",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1104663,
          "name": "cross-spawn",
          "dependency": "cross-spawn",
          "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn",
          "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<6.0.6"
        }
      ],
      "effects": [
        "pre-commit"
      ],
      "range": "<6.0.6",
      "nodes": [
        "node_modules/pre-commit/node_modules/cross-spawn"
      ],
      "fixAvailable": {
        "name": "pre-commit",
        "version": "1.0.10",
        "isSemVerMajor": true
      }
    },
    "css-color-function": {
      "name": "css-color-function",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "color"
      ],
      "effects": [
        "postcss-color-function"
      ],
      "range": "*",
      "nodes": [
        "node_modules/css-color-function"
      ],
      "fixAvailable": true
    },
    "css-declaration-sorter": {
      "name": "css-declaration-sorter",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=5.1.2",
      "nodes": [
        "node_modules/css-declaration-sorter"
      ],
      "fixAvailable": true
    },
    "css-select": {
      "name": "css-select",
      "severity": "high",
      "isDirect": false,
      "via": [
        "nth-check"
      ],
      "effects": [
        "cheerio",
        "svgo"
      ],
      "range": "<=3.1.0",
      "nodes": [
        "node_modules/css-select",
        "node_modules/svgo/node_modules/css-select"
      ],
      "fixAvailable": {
        "name": "gulp-inline",
        "version": "0.1.2",
        "isSemVerMajor": true
      }
    },
    "cssnano": {
      "name": "cssnano",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "cssnano-preset-default",
        "postcss"
      ],
      "effects": [],
      "range": "<=4.1.11",
      "nodes": [
        "node_modules/cssnano"
      ],
      "fixAvailable": {
        "name": "cssnano",
        "version": "7.1.0",
        "isSemVerMajor": true
      }
    },
    "cssnano-preset-default": {
      "name": "cssnano-preset-default",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "css-declaration-sorter",
        "cssnano-util-raw-cache",
        "postcss",
        "postcss-calc",
        "postcss-colormin",
        "postcss-convert-values",
        "postcss-discard-comments",
        "postcss-discard-duplicates",
        "postcss-discard-empty",
        "postcss-discard-overridden",
        "postcss-merge-longhand",
        "postcss-merge-rules",
        "postcss-minify-font-values",
        "postcss-minify-gradients",
        "postcss-minify-params",
        "postcss-minify-selectors",
        "postcss-normalize-charset",
        "postcss-normalize-display-values",
        "postcss-normalize-positions",
        "postcss-normalize-repeat-style",
        "postcss-normalize-string",
        "postcss-normalize-timing-functions",
        "postcss-normalize-unicode",
        "postcss-normalize-url",
        "postcss-normalize-whitespace",
        "postcss-ordered-values",
        "postcss-reduce-initial",
        "postcss-reduce-transforms",
        "postcss-svgo",
        "postcss-unique-selectors"
      ],
      "effects": [
        "cssnano"
      ],
      "range": "<=4.0.8",
      "nodes": [
        "node_modules/cssnano-preset-default"
      ],
      "fixAvailable": {
        "name": "cssnano",
        "version": "7.1.0",
        "isSemVerMajor": true
      }
    },
    "cssnano-util-raw-cache": {
      "name": "cssnano-util-raw-cache",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/cssnano-util-raw-cache"
      ],
      "fixAvailable": true
    },
    "es-dev-server": {
      "name": "es-dev-server",
      "severity": "high",
      "isDirect": true,
      "via": [
        "@koa/cors",
        "browserslist-useragent",
        "useragent"
      ],
      "effects": [],
      "range": ">=1.24.1",
      "nodes": [
        "node_modules/es-dev-server"
      ],
      "fixAvailable": true
    },
    "findup-sync": {
      "name": "findup-sync",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "micromatch"
      ],
      "effects": [
        "liftoff",
        "matchdep"
      ],
      "range": "0.4.0 - 3.0.0",
      "nodes": [
        "node_modules/findup-sync",
        "node_modules/matchdep/node_modules/findup-sync"
      ],
      "fixAvailable": true
    },
    "form-data": {
      "name": "form-data",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1106509,
          "name": "form-data",
          "dependency": "form-data",
          "title": "form-data uses unsafe random function in form-data for choosing boundary",
          "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4",
          "severity": "critical",
          "cwe": [
            "CWE-330"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<2.5.4"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<2.5.4",
      "nodes": [
        "node_modules/form-data"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "glob-watcher": {
      "name": "glob-watcher",
      "severity": "high",
      "isDirect": false,
      "via": [
        "anymatch",
        "chokidar"
      ],
      "effects": [
        "gulp"
      ],
      "range": "5.0.0 - 5.0.5",
      "nodes": [
        "node_modules/glob-watcher"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "gulp": {
      "name": "gulp",
      "severity": "high",
      "isDirect": true,
      "via": [
        "glob-watcher",
        "gulp-cli"
      ],
      "effects": [],
      "range": "4.0.0 - 4.0.2",
      "nodes": [
        "node_modules/gulp"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "gulp-cli": {
      "name": "gulp-cli",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "liftoff",
        "matchdep"
      ],
      "effects": [],
      "range": "1.3.0 - 2.3.0",
      "nodes": [
        "node_modules/gulp-cli"
      ],
      "fixAvailable": true
    },
    "gulp-compile-handlebars": {
      "name": "gulp-compile-handlebars",
      "severity": "high",
      "isDirect": true,
      "via": [
        "gulp-util"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/gulp-compile-handlebars"
      ],
      "fixAvailable": false
    },
    "gulp-htmlmin": {
      "name": "gulp-htmlmin",
      "severity": "high",
      "isDirect": true,
      "via": [
        "html-minifier"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/gulp-htmlmin"
      ],
      "fixAvailable": false
    },
    "gulp-inline": {
      "name": "gulp-inline",
      "severity": "high",
      "isDirect": true,
      "via": [
        "cheerio",
        "gulp-util"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/gulp-inline"
      ],
      "fixAvailable": {
        "name": "gulp-inline",
        "version": "0.1.2",
        "isSemVerMajor": true
      }
    },
    "gulp-postcss": {
      "name": "gulp-postcss",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=8.0.0",
      "nodes": [
        "node_modules/gulp-postcss"
      ],
      "fixAvailable": {
        "name": "gulp-postcss",
        "version": "10.0.0",
        "isSemVerMajor": true
      }
    },
    "gulp-svg-sprite": {
      "name": "gulp-svg-sprite",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "svg-sprite"
      ],
      "effects": [],
      "range": "1.3.0 - 1.5.0",
      "nodes": [
        "node_modules/gulp-svg-sprite"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "gulp-util": {
      "name": "gulp-util",
      "severity": "high",
      "isDirect": false,
      "via": [
        "lodash.template"
      ],
      "effects": [
        "gulp-compile-handlebars",
        "gulp-inline"
      ],
      "range": ">=1.1.0",
      "nodes": [
        "node_modules/gulp-util"
      ],
      "fixAvailable": false
    },
    "html-minifier": {
      "name": "html-minifier",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1105440,
          "name": "html-minifier",
          "dependency": "html-minifier",
          "title": "kangax html-minifier REDoS vulnerability",
          "url": "https://github.com/advisories/GHSA-pfq8-rq6v-vf5m",
          "severity": "high",
          "cwe": [
            "CWE-400",
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<=4.0.0"
        }
      ],
      "effects": [
        "gulp-htmlmin"
      ],
      "range": "*",
      "nodes": [
        "node_modules/html-minifier"
      ],
      "fixAvailable": false
    },
    "koa": {
      "name": "koa",
      "severity": "low",
      "isDirect": false,
      "via": [
        {
          "source": 1106793,
          "name": "koa",
          "dependency": "koa",
          "title": "Koa Open Redirect via Referrer Header (User-Controlled)",
          "url": "https://github.com/advisories/GHSA-jgmv-j7ww-jx2x",
          "severity": "low",
          "cwe": [
            "CWE-601"
          ],
          "cvss": {
            "score": 3.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:L/A:N"
          },
          "range": ">=2.0.0 <2.16.2"
        }
      ],
      "effects": [],
      "range": "2.0.0 - 2.16.1",
      "nodes": [
        "node_modules/koa"
      ],
      "fixAvailable": true
    },
    "liftoff": {
      "name": "liftoff",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "findup-sync"
      ],
      "effects": [
        "gulp-cli"
      ],
      "range": "2.2.3 - 3.1.0",
      "nodes": [
        "node_modules/liftoff"
      ],
      "fixAvailable": true
    },
    "lodash.pick": {
      "name": "lodash.pick",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1096303,
          "name": "lodash.pick",
          "dependency": "lodash.pick",
          "title": "Prototype Pollution in lodash",
          "url": "https://github.com/advisories/GHSA-p6mc-m468-83gw",
          "severity": "high",
          "cwe": [
            "CWE-770",
            "CWE-1321"
          ],
          "cvss": {
            "score": 7.4,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H"
          },
          "range": ">=4.0.0 <=4.4.0"
        }
      ],
      "effects": [
        "cheerio"
      ],
      "range": ">=4.0.0",
      "nodes": [
        "node_modules/lodash.pick"
      ],
      "fixAvailable": {
        "name": "gulp-inline",
        "version": "0.1.2",
        "isSemVerMajor": true
      }
    },
    "lodash.template": {
      "name": "lodash.template",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1096993,
          "name": "lodash.template",
          "dependency": "lodash.template",
          "title": "Command Injection in lodash",
          "url": "https://github.com/advisories/GHSA-35jh-r3h4-6jhm",
          "severity": "high",
          "cwe": [
            "CWE-77",
            "CWE-94"
          ],
          "cvss": {
            "score": 7.2,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": "<=4.5.0"
        }
      ],
      "effects": [
        "gulp-util",
        "postcss-initial"
      ],
      "range": "*",
      "nodes": [
        "node_modules/lodash.template",
        "node_modules/postcss-initial/node_modules/lodash.template"
      ],
      "fixAvailable": false
    },
    "matchdep": {
      "name": "matchdep",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "findup-sync",
        "micromatch"
      ],
      "effects": [
        "gulp-cli"
      ],
      "range": ">=1.0.1",
      "nodes": [
        "node_modules/matchdep"
      ],
      "fixAvailable": true
    },
    "micromatch": {
      "name": "micromatch",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098681,
          "name": "micromatch",
          "dependency": "micromatch",
          "title": "Regular Expression Denial of Service (ReDoS) in micromatch",
          "url": "https://github.com/advisories/GHSA-952p-6rrq-rcjv",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<4.0.8"
        },
        "braces"
      ],
      "effects": [
        "anymatch",
        "findup-sync",
        "matchdep",
        "readdirp"
      ],
      "range": "<=4.0.7",
      "nodes": [
        "node_modules/findup-sync/node_modules/micromatch",
        "node_modules/glob-watcher/node_modules/micromatch",
        "node_modules/matchdep/node_modules/micromatch"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "nth-check": {
      "name": "nth-check",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1095141,
          "name": "nth-check",
          "dependency": "nth-check",
          "title": "Inefficient Regular Expression Complexity in nth-check",
          "url": "https://github.com/advisories/GHSA-rp65-9cf3-cjxr",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<2.0.1"
        }
      ],
      "effects": [
        "css-select"
      ],
      "range": "<2.0.1",
      "nodes": [
        "node_modules/nth-check"
      ],
      "fixAvailable": {
        "name": "gulp-inline",
        "version": "0.1.2",
        "isSemVerMajor": true
      }
    },
    "phantomjs-prebuilt": {
      "name": "phantomjs-prebuilt",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "request"
      ],
      "effects": [
        "svg-sprite"
      ],
      "range": "*",
      "nodes": [
        "node_modules/phantomjs-prebuilt"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "pixrem": {
      "name": "pixrem",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/pixrem"
      ],
      "fixAvailable": true
    },
    "pleeease-filters": {
      "name": "pleeease-filters",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/pleeease-filters"
      ],
      "fixAvailable": true
    },
    "postcss": {
      "name": "postcss",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1093539,
          "name": "postcss",
          "dependency": "postcss",
          "title": "Regular Expression Denial of Service in postcss",
          "url": "https://github.com/advisories/GHSA-566m-qj78-rww5",
          "severity": "moderate",
          "cwe": [
            "CWE-400"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<7.0.36"
        },
        {
          "source": 1094544,
          "name": "postcss",
          "dependency": "postcss",
          "title": "PostCSS line return parsing error",
          "url": "https://github.com/advisories/GHSA-7fh5-64p2-3v2j",
          "severity": "moderate",
          "cwe": [
            "CWE-74",
            "CWE-144"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"
          },
          "range": "<8.4.31"
        }
      ],
      "effects": [
        "autoprefixer",
        "css-declaration-sorter",
        "cssnano",
        "cssnano-preset-default",
        "cssnano-util-raw-cache",
        "gulp-postcss",
        "pixrem",
        "pleeease-filters",
        "postcss-apply",
        "postcss-attribute-case-insensitive",
        "postcss-calc",
        "postcss-color-function",
        "postcss-color-gray",
        "postcss-color-hex-alpha",
        "postcss-color-hsl",
        "postcss-color-hwb",
        "postcss-color-rebeccapurple",
        "postcss-color-rgb",
        "postcss-color-rgba-fallback",
        "postcss-colormin",
        "postcss-convert-values",
        "postcss-cssnext",
        "postcss-custom-media",
        "postcss-custom-properties",
        "postcss-custom-selectors",
        "postcss-discard-comments",
        "postcss-discard-duplicates",
        "postcss-discard-empty",
        "postcss-discard-overridden",
        "postcss-font-family-system-ui",
        "postcss-font-variant",
        "postcss-image-set-polyfill",
        "postcss-import",
        "postcss-initial",
        "postcss-media-minmax",
        "postcss-merge-longhand",
        "postcss-merge-rules",
        "postcss-minify-font-values",
        "postcss-minify-gradients",
        "postcss-minify-params",
        "postcss-minify-selectors",
        "postcss-nesting",
        "postcss-normalize-charset",
        "postcss-normalize-display-values",
        "postcss-normalize-positions",
        "postcss-normalize-repeat-style",
        "postcss-normalize-string",
        "postcss-normalize-timing-functions",
        "postcss-normalize-unicode",
        "postcss-normalize-url",
        "postcss-normalize-whitespace",
        "postcss-ordered-values",
        "postcss-pseudo-class-any-link",
        "postcss-pseudoelements",
        "postcss-reduce-initial",
        "postcss-reduce-transforms",
        "postcss-replace-overflow-wrap",
        "postcss-reporter",
        "postcss-selector-matches",
        "postcss-selector-not",
        "postcss-svgo",
        "postcss-unique-selectors",
        "stylehacks"
      ],
      "range": "<=8.4.30",
      "nodes": [
        "node_modules/autoprefixer/node_modules/postcss",
        "node_modules/css-declaration-sorter/node_modules/postcss",
        "node_modules/cssnano-preset-default/node_modules/postcss",
        "node_modules/cssnano-util-raw-cache/node_modules/postcss",
        "node_modules/cssnano/node_modules/postcss",
        "node_modules/gulp-postcss/node_modules/postcss",
        "node_modules/pixrem/node_modules/postcss",
        "node_modules/pleeease-filters/node_modules/postcss",
        "node_modules/postcss-apply/node_modules/postcss",
        "node_modules/postcss-attribute-case-insensitive/node_modules/postcss",
        "node_modules/postcss-calc/node_modules/postcss",
        "node_modules/postcss-color-function/node_modules/postcss",
        "node_modules/postcss-color-gray/node_modules/postcss",
        "node_modules/postcss-color-hex-alpha/node_modules/postcss",
        "node_modules/postcss-color-hsl/node_modules/postcss",
        "node_modules/postcss-color-hwb/node_modules/postcss",
        "node_modules/postcss-color-rebeccapurple/node_modules/postcss",
        "node_modules/postcss-color-rgb/node_modules/postcss",
        "node_modules/postcss-color-rgba-fallback/node_modules/postcss",
        "node_modules/postcss-colormin/node_modules/postcss",
        "node_modules/postcss-convert-values/node_modules/postcss",
        "node_modules/postcss-cssnext/node_modules/postcss",
        "node_modules/postcss-cssnext/node_modules/postcss-calc/node_modules/postcss",
        "node_modules/postcss-custom-media/node_modules/postcss",
        "node_modules/postcss-custom-properties/node_modules/postcss",
        "node_modules/postcss-custom-selectors/node_modules/postcss",
        "node_modules/postcss-discard-comments/node_modules/postcss",
        "node_modules/postcss-discard-duplicates/node_modules/postcss",
        "node_modules/postcss-discard-empty/node_modules/postcss",
        "node_modules/postcss-discard-overridden/node_modules/postcss",
        "node_modules/postcss-font-family-system-ui/node_modules/postcss",
        "node_modules/postcss-font-variant/node_modules/postcss",
        "node_modules/postcss-image-set-polyfill/node_modules/postcss",
        "node_modules/postcss-import/node_modules/postcss",
        "node_modules/postcss-initial/node_modules/postcss",
        "node_modules/postcss-media-minmax/node_modules/postcss",
        "node_modules/postcss-merge-longhand/node_modules/postcss",
        "node_modules/postcss-merge-rules/node_modules/postcss",
        "node_modules/postcss-minify-font-values/node_modules/postcss",
        "node_modules/postcss-minify-gradients/node_modules/postcss",
        "node_modules/postcss-minify-params/node_modules/postcss",
        "node_modules/postcss-minify-selectors/node_modules/postcss",
        "node_modules/postcss-nesting/node_modules/postcss",
        "node_modules/postcss-normalize-charset/node_modules/postcss",
        "node_modules/postcss-normalize-display-values/node_modules/postcss",
        "node_modules/postcss-normalize-positions/node_modules/postcss",
        "node_modules/postcss-normalize-repeat-style/node_modules/postcss",
        "node_modules/postcss-normalize-string/node_modules/postcss",
        "node_modules/postcss-normalize-timing-functions/node_modules/postcss",
        "node_modules/postcss-normalize-unicode/node_modules/postcss",
        "node_modules/postcss-normalize-url/node_modules/postcss",
        "node_modules/postcss-normalize-whitespace/node_modules/postcss",
        "node_modules/postcss-ordered-values/node_modules/postcss",
        "node_modules/postcss-pseudo-class-any-link/node_modules/postcss",
        "node_modules/postcss-pseudoelements/node_modules/postcss",
        "node_modules/postcss-reduce-initial/node_modules/postcss",
        "node_modules/postcss-reduce-transforms/node_modules/postcss",
        "node_modules/postcss-replace-overflow-wrap/node_modules/postcss",
        "node_modules/postcss-reporter/node_modules/postcss",
        "node_modules/postcss-selector-matches/node_modules/postcss",
        "node_modules/postcss-selector-not/node_modules/postcss",
        "node_modules/postcss-svgo/node_modules/postcss",
        "node_modules/postcss-unique-selectors/node_modules/postcss",
        "node_modules/stylehacks/node_modules/postcss"
      ],
      "fixAvailable": {
        "name": "cssnano",
        "version": "7.1.0",
        "isSemVerMajor": true
      }
    },
    "postcss-apply": {
      "name": "postcss-apply",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=0.10.0",
      "nodes": [
        "node_modules/postcss-apply"
      ],
      "fixAvailable": false
    },
    "postcss-attribute-case-insensitive": {
      "name": "postcss-attribute-case-insensitive",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=3.0.1",
      "nodes": [
        "node_modules/postcss-attribute-case-insensitive"
      ],
      "fixAvailable": false
    },
    "postcss-calc": {
      "name": "postcss-calc",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "4.1.0 - 7.0.5",
      "nodes": [
        "node_modules/postcss-calc",
        "node_modules/postcss-cssnext/node_modules/postcss-calc"
      ],
      "fixAvailable": true
    },
    "postcss-color-function": {
      "name": "postcss-color-function",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "css-color-function",
        "postcss"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/postcss-color-function"
      ],
      "fixAvailable": true
    },
    "postcss-color-gray": {
      "name": "postcss-color-gray",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "3.0.0 - 4.1.0",
      "nodes": [
        "node_modules/postcss-color-gray"
      ],
      "fixAvailable": true
    },
    "postcss-color-hex-alpha": {
      "name": "postcss-color-hex-alpha",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.3.0 - 3.0.0",
      "nodes": [
        "node_modules/postcss-color-hex-alpha"
      ],
      "fixAvailable": true
    },
    "postcss-color-hsl": {
      "name": "postcss-color-hsl",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "*",
      "nodes": [
        "node_modules/postcss-color-hsl"
      ],
      "fixAvailable": false
    },
    "postcss-color-hwb": {
      "name": "postcss-color-hwb",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": ">=1.2.0",
      "nodes": [
        "node_modules/postcss-color-hwb"
      ],
      "fixAvailable": true
    },
    "postcss-color-rebeccapurple": {
      "name": "postcss-color-rebeccapurple",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.2.0 - 3.1.0",
      "nodes": [
        "node_modules/postcss-color-rebeccapurple"
      ],
      "fixAvailable": true
    },
    "postcss-color-rgb": {
      "name": "postcss-color-rgb",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/postcss-color-rgb"
      ],
      "fixAvailable": true
    },
    "postcss-color-rgba-fallback": {
      "name": "postcss-color-rgba-fallback",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=3.0.0",
      "nodes": [
        "node_modules/postcss-color-rgba-fallback"
      ],
      "fixAvailable": true
    },
    "postcss-colormin": {
      "name": "postcss-colormin",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.3",
      "nodes": [
        "node_modules/postcss-colormin"
      ],
      "fixAvailable": true
    },
    "postcss-convert-values": {
      "name": "postcss-convert-values",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/postcss-convert-values"
      ],
      "fixAvailable": true
    },
    "postcss-cssnext": {
      "name": "postcss-cssnext",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "autoprefixer",
        "pixrem",
        "pleeease-filters",
        "postcss",
        "postcss-apply",
        "postcss-attribute-case-insensitive",
        "postcss-calc",
        "postcss-color-function",
        "postcss-color-gray",
        "postcss-color-hex-alpha",
        "postcss-color-hsl",
        "postcss-color-hwb",
        "postcss-color-rebeccapurple",
        "postcss-color-rgb",
        "postcss-color-rgba-fallback",
        "postcss-custom-media",
        "postcss-custom-properties",
        "postcss-custom-selectors",
        "postcss-font-family-system-ui",
        "postcss-font-variant",
        "postcss-image-set-polyfill",
        "postcss-initial",
        "postcss-media-minmax",
        "postcss-nesting",
        "postcss-pseudo-class-any-link",
        "postcss-pseudoelements",
        "postcss-replace-overflow-wrap",
        "postcss-selector-matches",
        "postcss-selector-not"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/postcss-cssnext"
      ],
      "fixAvailable": false
    },
    "postcss-custom-media": {
      "name": "postcss-custom-media",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "4.0.0 - 6.0.0",
      "nodes": [
        "node_modules/postcss-custom-media"
      ],
      "fixAvailable": true
    },
    "postcss-custom-properties": {
      "name": "postcss-custom-properties",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "3.3.0 - 7.0.0",
      "nodes": [
        "node_modules/postcss-custom-properties"
      ],
      "fixAvailable": true
    },
    "postcss-custom-selectors": {
      "name": "postcss-custom-selectors",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss",
        "postcss-selector-matches"
      ],
      "effects": [],
      "range": "2.3.0 - 4.0.1",
      "nodes": [
        "node_modules/postcss-custom-selectors"
      ],
      "fixAvailable": true
    },
    "postcss-discard-comments": {
      "name": "postcss-discard-comments",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-discard-comments"
      ],
      "fixAvailable": true
    },
    "postcss-discard-duplicates": {
      "name": "postcss-discard-duplicates",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.1.0 - 4.0.2",
      "nodes": [
        "node_modules/postcss-discard-duplicates"
      ],
      "fixAvailable": true
    },
    "postcss-discard-empty": {
      "name": "postcss-discard-empty",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.1.0 - 4.0.1",
      "nodes": [
        "node_modules/postcss-discard-empty"
      ],
      "fixAvailable": true
    },
    "postcss-discard-overridden": {
      "name": "postcss-discard-overridden",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/postcss-discard-overridden"
      ],
      "fixAvailable": true
    },
    "postcss-font-family-system-ui": {
      "name": "postcss-font-family-system-ui",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=3.0.0",
      "nodes": [
        "node_modules/postcss-font-family-system-ui"
      ],
      "fixAvailable": false
    },
    "postcss-font-variant": {
      "name": "postcss-font-variant",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.2.0 - 3.0.0",
      "nodes": [
        "node_modules/postcss-font-variant"
      ],
      "fixAvailable": true
    },
    "postcss-image-set-polyfill": {
      "name": "postcss-image-set-polyfill",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=0.4.4",
      "nodes": [
        "node_modules/postcss-image-set-polyfill"
      ],
      "fixAvailable": false
    },
    "postcss-import": {
      "name": "postcss-import",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=12.0.1",
      "nodes": [
        "node_modules/postcss-import"
      ],
      "fixAvailable": {
        "name": "postcss-import",
        "version": "16.1.1",
        "isSemVerMajor": true
      }
    },
    "postcss-initial": {
      "name": "postcss-initial",
      "severity": "high",
      "isDirect": false,
      "via": [
        "lodash.template",
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=3.0.2 || 4.0.0",
      "nodes": [
        "node_modules/postcss-initial"
      ],
      "fixAvailable": false
    },
    "postcss-media-minmax": {
      "name": "postcss-media-minmax",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.2.0 - 3.0.0",
      "nodes": [
        "node_modules/postcss-media-minmax"
      ],
      "fixAvailable": true
    },
    "postcss-merge-longhand": {
      "name": "postcss-merge-longhand",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss",
        "stylehacks"
      ],
      "effects": [],
      "range": "<=4.0.11",
      "nodes": [
        "node_modules/postcss-merge-longhand"
      ],
      "fixAvailable": true
    },
    "postcss-merge-rules": {
      "name": "postcss-merge-rules",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.3",
      "nodes": [
        "node_modules/postcss-merge-rules"
      ],
      "fixAvailable": true
    },
    "postcss-minify-font-values": {
      "name": "postcss-minify-font-values",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-minify-font-values"
      ],
      "fixAvailable": true
    },
    "postcss-minify-gradients": {
      "name": "postcss-minify-gradients",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-minify-gradients"
      ],
      "fixAvailable": true
    },
    "postcss-minify-params": {
      "name": "postcss-minify-params",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-minify-params"
      ],
      "fixAvailable": true
    },
    "postcss-minify-selectors": {
      "name": "postcss-minify-selectors",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-minify-selectors"
      ],
      "fixAvailable": true
    },
    "postcss-nesting": {
      "name": "postcss-nesting",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=6.0.0",
      "nodes": [
        "node_modules/postcss-nesting"
      ],
      "fixAvailable": false
    },
    "postcss-normalize-charset": {
      "name": "postcss-normalize-charset",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/postcss-normalize-charset"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-display-values": {
      "name": "postcss-normalize-display-values",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-display-values"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-positions": {
      "name": "postcss-normalize-positions",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-positions"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-repeat-style": {
      "name": "postcss-normalize-repeat-style",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-repeat-style"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-string": {
      "name": "postcss-normalize-string",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-string"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-timing-functions": {
      "name": "postcss-normalize-timing-functions",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-timing-functions"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-unicode": {
      "name": "postcss-normalize-unicode",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/postcss-normalize-unicode"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-url": {
      "name": "postcss-normalize-url",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.1.0 - 4.0.1",
      "nodes": [
        "node_modules/postcss-normalize-url"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-whitespace": {
      "name": "postcss-normalize-whitespace",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-whitespace"
      ],
      "fixAvailable": true
    },
    "postcss-ordered-values": {
      "name": "postcss-ordered-values",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.1.2",
      "nodes": [
        "node_modules/postcss-ordered-values"
      ],
      "fixAvailable": true
    },
    "postcss-pseudo-class-any-link": {
      "name": "postcss-pseudo-class-any-link",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=5.0.0",
      "nodes": [
        "node_modules/postcss-pseudo-class-any-link"
      ],
      "fixAvailable": true
    },
    "postcss-pseudoelements": {
      "name": "postcss-pseudoelements",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": ">=2.2.0",
      "nodes": [
        "node_modules/postcss-pseudoelements"
      ],
      "fixAvailable": true
    },
    "postcss-reduce-initial": {
      "name": "postcss-reduce-initial",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.3",
      "nodes": [
        "node_modules/postcss-reduce-initial"
      ],
      "fixAvailable": true
    },
    "postcss-reduce-transforms": {
      "name": "postcss-reduce-transforms",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-reduce-transforms"
      ],
      "fixAvailable": true
    },
    "postcss-replace-overflow-wrap": {
      "name": "postcss-replace-overflow-wrap",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=2.0.0",
      "nodes": [
        "node_modules/postcss-replace-overflow-wrap"
      ],
      "fixAvailable": false
    },
    "postcss-reporter": {
      "name": "postcss-reporter",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=6.0.1",
      "nodes": [
        "node_modules/postcss-reporter"
      ],
      "fixAvailable": {
        "name": "postcss-reporter",
        "version": "7.1.0",
        "isSemVerMajor": true
      }
    },
    "postcss-selector-matches": {
      "name": "postcss-selector-matches",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=3.0.1",
      "nodes": [
        "node_modules/postcss-selector-matches"
      ],
      "fixAvailable": true
    },
    "postcss-selector-not": {
      "name": "postcss-selector-not",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=3.0.1",
      "nodes": [
        "node_modules/postcss-selector-not"
      ],
      "fixAvailable": true
    },
    "postcss-svgo": {
      "name": "postcss-svgo",
      "severity": "high",
      "isDirect": false,
      "via": [
        "postcss",
        "svgo"
      ],
      "effects": [],
      "range": "<=5.0.0-rc.2",
      "nodes": [
        "node_modules/postcss-svgo"
      ],
      "fixAvailable": true
    },
    "postcss-unique-selectors": {
      "name": "postcss-unique-selectors",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/postcss-unique-selectors"
      ],
      "fixAvailable": true
    },
    "pre-commit": {
      "name": "pre-commit",
      "severity": "high",
      "isDirect": true,
      "via": [
        "cross-spawn"
      ],
      "effects": [],
      "range": ">=1.1.0",
      "nodes": [
        "node_modules/pre-commit"
      ],
      "fixAvailable": {
        "name": "pre-commit",
        "version": "1.0.10",
        "isSemVerMajor": true
      }
    },
    "readdirp": {
      "name": "readdirp",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "micromatch"
      ],
      "effects": [
        "chokidar"
      ],
      "range": "2.2.0 - 2.2.1",
      "nodes": [
        "node_modules/glob-watcher/node_modules/readdirp"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "request": {
      "name": "request",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1096727,
          "name": "request",
          "dependency": "request",
          "title": "Server-Side Request Forgery in Request",
          "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
          "severity": "moderate",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 6.1,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
          },
          "range": "<=2.88.2"
        },
        "form-data",
        "tough-cookie"
      ],
      "effects": [
        "phantomjs-prebuilt"
      ],
      "range": "*",
      "nodes": [
        "node_modules/request"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "stylehacks": {
      "name": "stylehacks",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-merge-longhand"
      ],
      "range": "<=4.0.3",
      "nodes": [
        "node_modules/stylehacks"
      ],
      "fixAvailable": true
    },
    "svg-sprite": {
      "name": "svg-sprite",
      "severity": "high",
      "isDirect": false,
      "via": [
        "phantomjs-prebuilt",
        "svgo"
      ],
      "effects": [
        "gulp-svg-sprite"
      ],
      "range": "1.3.0 - 1.5.4",
      "nodes": [
        "node_modules/svg-sprite"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "svgo": {
      "name": "svgo",
      "severity": "high",
      "isDirect": false,
      "via": [
        "css-select"
      ],
      "effects": [
        "postcss-svgo",
        "svg-sprite"
      ],
      "range": "1.0.0 - 1.3.2",
      "nodes": [
        "node_modules/svgo"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "tough-cookie": {
      "name": "tough-cookie",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1097682,
          "name": "tough-cookie",
          "dependency": "tough-cookie",
          "title": "tough-cookie Prototype Pollution vulnerability",
          "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
          "severity": "moderate",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
          },
          "range": "<4.1.3"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<4.1.3",
      "nodes": [
        "node_modules/tough-cookie"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "useragent": {
      "name": "useragent",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1100298,
          "name": "useragent",
          "dependency": "useragent",
          "title": "useragent Regular Expression Denial of Service vulnerability",
          "url": "https://github.com/advisories/GHSA-mgfv-m47x-4wqp",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<=2.3.0"
        }
      ],
      "effects": [
        "browserslist-useragent",
        "es-dev-server"
      ],
      "range": "*",
      "nodes": [
        "node_modules/useragent"
      ],
      "fixAvailable": true
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 1,
      "moderate": 76,
      "high": 23,
      "critical": 2,
      "total": 102
    },
    "dependencies": {
      "prod": 1,
      "dev": 1665,
      "optional": 5,
      "peer": 1,
      "peerOptional": 0,
      "total": 1665
    }
  }
}

--- end ---
Upgrading n:eslint-config-wikimedia from 0.30.0 -> 0.31.0
$ /usr/bin/npm install
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-design-tokens@2.2.1',
npm WARN EBADENGINE   required: { node: '>=20', npm: '>=10.8.1' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated @types/browserslist@4.15.0: This is a stub types definition. browserslist provides its own type definitions, so you do not need this installed.
npm WARN deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated flatten@1.0.3: flatten is deprecated in favor of utility frameworks such as lodash.
npm WARN deprecated @babel/plugin-proposal-private-property-in-object@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.
npm WARN deprecated @babel/plugin-proposal-unicode-property-regex@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.
npm WARN deprecated @babel/plugin-proposal-private-methods@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.
npm WARN deprecated @babel/plugin-proposal-optional-catch-binding@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.
npm WARN deprecated @babel/plugin-proposal-numeric-separator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.
npm WARN deprecated @babel/plugin-proposal-nullish-coalescing-operator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.
npm WARN deprecated @babel/plugin-proposal-dynamic-import@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.
npm WARN deprecated @babel/plugin-proposal-class-static-block@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.
npm WARN deprecated @babel/plugin-proposal-json-strings@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.
npm WARN deprecated @babel/plugin-proposal-class-properties@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
npm WARN deprecated @babel/plugin-proposal-export-namespace-from@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.
npm WARN deprecated @babel/plugin-proposal-logical-assignment-operators@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.
npm WARN deprecated @babel/plugin-proposal-async-generator-functions@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated @babel/plugin-proposal-optional-chaining@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated @babel/plugin-proposal-object-rest-spread@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated gulp-util@3.0.8: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated phantomjs-prebuilt@2.1.16: this package is now deprecated
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated postcss-cssnext@3.1.1: 'postcss-cssnext' has been deprecated in favor of 'postcss-preset-env'. Read more at https://moox.io/blog/deprecating-cssnext/
npm WARN deprecated svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
npm WARN deprecated core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
--- stdout ---

added 1670 packages, and audited 1671 packages in 25s

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

102 vulnerabilities (1 low, 76 moderate, 23 high, 2 critical)

To address issues that do not require attention, run:
  npm audit fix

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

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

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

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

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

/src/repo/data/site-stats.js
  140:14  warning  Found readFileSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  150:8   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/data/stats.js
   50:1   warning  The type 'sort' is undefined                                               jsdoc/no-undefined-types
   50:1   warning  The type 'latin' is undefined                                              jsdoc/no-undefined-types
   88:15  warning  Found readdirSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
   91:21  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  302:1   warning  Missing JSDoc @return type                                                 jsdoc/require-returns-type
  308:1   warning  This line has a length of 130. Maximum allowed is 100                      max-len
  322:1   warning  This line has a length of 101. Maximum allowed is 100                      max-len

/src/repo/data/utils.js
  13:3  warning  Found unlink from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  37:5  warning  Found stat from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename

/src/repo/gulpfile.js/prod.js
  49:8   warning  Found existsSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  50:4   warning  Found rmdirSync from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename
  55:1   warning  This line has a length of 108. Maximum allowed is 100                     max-len
  68:7   warning  Found existsSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  70:3   warning  Found readdirSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  72:22  warning  Found unlinkSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename

/src/repo/gulpfile.js/sprites.js
  16:4  warning  Found unlink from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/src/common/assets/js/page-localized.js
  14:1  warning  Missing JSDoc @param "wmTest" type            jsdoc/require-param-type
  15:1  warning  Missing JSDoc @param "translationsHash" type  jsdoc/require-param-type
  16:1  warning  Missing JSDoc @param "mw" type                jsdoc/require-param-type
  17:1  warning  Missing JSDoc @param "rtlLangs" type          jsdoc/require-param-type

/src/repo/src/common/assets/js/topten-localized.js
   12:1  warning  Missing JSDoc @param "mw" type                         jsdoc/require-param-type
   13:1  warning  Missing JSDoc @param "wmTest" type                     jsdoc/require-param-type
  117:1  warning  This line has a length of 101. Maximum allowed is 100  max-len
  122:1  warning  This line has a length of 117. Maximum allowed is 100  max-len

✖ 26 problems (0 errors, 26 warnings)


--- end ---
$ ./node_modules/.bin/eslint . -f json
--- stdout ---
[{"filePath":"/src/repo/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/.stylelintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/data/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/data/l10n-overrides.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/data/site-stats.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found readFileSync from package \"fs\" with non literal argument at index 0","line":140,"column":14,"nodeType":"CallExpression","endLine":140,"endColumn":63},{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":150,"column":8,"nodeType":"CallExpression","endLine":150,"endColumn":42}],"suppressedMessages":[{"ruleId":"no-constant-condition","severity":2,"message":"Unexpected constant condition.","line":50,"column":7,"nodeType":"LogicalExpression","messageId":"unexpected","endLine":50,"endColumn":52,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-throw-literal","severity":2,"message":"Expected an error object to be thrown.","line":85,"column":4,"nodeType":"ThrowStatement","messageId":"object","endLine":85,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-throw-literal","severity":2,"message":"Expected an error object to be thrown.","line":92,"column":3,"nodeType":"ThrowStatement","messageId":"object","endLine":92,"endColumn":36,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"var BBPromise = require( 'bluebird' ),\n\tfs = require( 'fs' ),\n\tdeleteFiles = require( './utils' ),\n\n\t/**\n \t* Number of days to generate the stats over\n \t*/\n\tDAYS = 7,\n\n\tcodeMapping = {\n\t\tb: 'wikibooks',\n\t\td: 'wiktionary',\n\t\tf: 'foundationwiki',\n\t\tm: '',\n\t\tmw: 'wiki',\n\t\tn: 'wikinews',\n\t\tq: 'wikiquote',\n\t\ts: 'wikisource',\n\t\tv: 'wikiversity',\n\t\tvoy: 'wikivoyage',\n\t\tw: 'wiki',\n\t\twd: 'wikidatawiki',\n\t\tzero: ''\n\t};\n\nfunction httpGet( url ) {\n\tvar options = { headers: { 'User-Agent': 'Wikimedia portals updater' } };\n\n\treturn fetch( url, options )\n\t\t.then( response => response.text() )\n\t\t.then( responseText => {\n\t\t\ttry {\n\t\t\t\tconst responseJSON = JSON.parse( responseText );\n\t\t\t\treturn Promise.resolve( responseJSON );\n\t\t\t} catch {\n\t\t\t\treturn Promise.resolve( responseText );\n\t\t\t}\n\t\t} )\n\t\t.catch( cause => {\n\t\t\t// I can haz error message that makes sense?\n\t\t\tconst err = new Error( 'Error requesting ' + url, { cause } );\n\t\t\t// Gulp's logging ignores the stack trace, so we also log on our own\n\t\t\tconsole.error( err );\n\t\t\tthrow err;\n\t\t} );\n}\n\nfunction getPageCounts() {\n\t// eslint-disable-next-line no-constant-condition\n\tif ( process.env.MEDIAWIKI_DEPLOYMENT_DIR && false ) {\n\t\t// Production\n\t\t// TODO:\n\t} else {\n\t\t// Developer's machine\n\t\treturn httpGet( 'https://pagecounts.toolforge.org/pagecounts.json' )\n\t\t\t.then( function ( pagecounts ) {\n\t\t\t\tvar stats = {};\n\n\t\t\t\tObject.entries( pagecounts ).forEach( ( [ code, wiki ] ) => {\n\t\t\t\t\tcode = code.replace( /_/g, '-' );\n\t\t\t\t\tstats[ code ] = wiki.contentPages;\n\t\t\t\t} );\n\t\t\t\treturn BBPromise.resolve( stats );\n\t\t\t} );\n\t}\n}\n\nfunction getSiteMatrix() {\n\treturn httpGet( 'https://meta.wikimedia.org/w/api.php?action=sitematrix&format=json&smtype=language&smlangprop=code%7Csite&smsiteprop=url%7Cdbname%7Ccode' );\n}\n\nfunction parseProjectString( str ) {\n\tvar parts = str\n\t\t\t.split( '.' )\n\t\t\t.filter( function ( part ) {\n\t\t\t\treturn part !== 'm' && part !== 'zero';\n\t\t\t} ),\n\t\tname = parts.shift();\n\tif ( codeMapping[ name ] ) {\n\t\treturn codeMapping[ name ];\n\t}\n\n\tif ( parts.length ) {\n\t\tif ( !codeMapping[ parts[ 0 ] ] ) {\n\t\t\tthrow 'Cannot parse wiki ' + str; // eslint-disable-line no-throw-literal\n\t\t}\n\t\tname += codeMapping[ parts[ 0 ] ];\n\t} else {\n\t\tname += 'wiki';\n\t}\n\tif ( parts.length > 1 ) {\n\t\tthrow 'Cannot parse wiki ' + str; // eslint-disable-line no-throw-literal\n\t}\n\treturn name;\n}\n\nfunction generateFileList( days ) {\n\tconst list = [],\n\t\tcurrentDate = new Date();\n\n\tfor ( let d = 0; d < days; d++ ) {\n\t\tcurrentDate.setDate( currentDate.getDate() - 1 ); // Subtract a day\n\n\t\tconst year = currentDate.getFullYear();\n\t\tconst month = ( currentDate.getMonth() + 1 ).toString().padStart( 2, '0' );\n\t\tconst day = currentDate.getDate().toString().padStart( 2, '0' );\n\n\t\tconst baseUrl = 'https://dumps.wikimedia.org/other/pageviews/' + year + '/' + year + '-' + month + '/';\n\t\tconst baseName = 'projectviews-' + year + month + day;\n\n\t\tfor ( let i = 0; i <= 23; i++ ) {\n\t\t\tconst file = baseName + '-' + ( i < 10 ? '0' : '' ) + i.toString() + '0000';\n\t\t\tlist.push( { file: file, url: baseUrl + file } );\n\t\t}\n\t}\n\treturn list;\n}\n\nfunction garbageCollect() {\n\tdeleteFiles( __dirname + '/../cache/', DAYS + 2 );\n}\n\nfunction getViewsData() {\n\tvar list = generateFileList( DAYS ),\n\t\tstats = [],\n\t\tpromise = new BBPromise( function ( resolve ) {\n\t\t\tresolve();\n\t\t} );\n\n\tif ( !fs.existsSync( 'cache' ) ) {\n\t\tfs.mkdirSync( 'cache' );\n\t}\n\tgarbageCollect();\n\n\t// Go synchronously to avoid hitting throttling on the server\n\tlist.forEach( ( hour ) => {\n\t\tvar fileName = 'cache/' + hour.file,\n\t\t\tcontent;\n\t\ttry {\n\t\t\tcontent = fs.readFileSync( fileName, { encoding: 'utf8' } );\n\t\t\tstats.push( content );\n\t\t} catch ( ex ) {\n\t\t\tif ( !content ) {\n\t\t\t\tpromise = promise.then( function () {\n\t\t\t\t\treturn httpGet( hour.url )\n\t\t\t\t\t\t.then( function ( text ) {\n\t\t\t\t\t\t\tif ( !text ) {\n\t\t\t\t\t\t\t\tthrow new Error( `There was an error fetching the following URL: ${hour.url}` );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfs.writeFileSync( fileName, text );\n\t\t\t\t\t\t\tstats.push( text );\n\t\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} );\n\n\treturn promise.then( function () {\n\t\treturn BBPromise.resolve( stats );\n\t} );\n}\n\nfunction getProjectViews() {\n\treturn getViewsData()\n\t\t.then( function ( hourlies ) {\n\t\t\tvar views = {};\n\n\t\t\thourlies.forEach( ( hourly ) => {\n\t\t\t\tvar lines;\n\t\t\t\tif ( !hourly ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlines = hourly.toString().split( '\\n' );\n\t\t\t\tlines.forEach( ( line ) => {\n\t\t\t\t\tvar parts = line.split( /\\s+-?\\s*/ ),\n\t\t\t\t\t\twiki = parseProjectString( parts[ 0 ] );\n\t\t\t\t\tviews[ wiki ] = views[ wiki ] || 0;\n\t\t\t\t\tviews[ wiki ] += parseInt( parts[ 1 ], 10 );\n\t\t\t\t} );\n\t\t\t} );\n\t\t\tif ( !views ) {\n\t\t\t\t// We permit some hourly files to fail to be downloaded, but all of them missing\n\t\t\t\t// Is a sign of a problem\n\t\t\t\treturn BBPromise.reject( 'No hourly project views file was successfully loaded' );\n\t\t\t}\n\t\t\treturn BBPromise.resolve( views );\n\t\t} )\n\t\t.error( function () {} ); // Do nothing, last file can be being generated right now\n}\n\nfunction getSiteStats() {\n\tvar stats = {};\n\n\treturn BBPromise.all( [ getPageCounts(), getSiteMatrix(), getProjectViews() ] )\n\t\t.then( function ( data ) {\n\t\t\tvar counts = data[ 0 ],\n\t\t\t\tsiteMatrix = data[ 1 ].sitematrix,\n\t\t\t\tviews = data[ 2 ];\n\n\t\t\tObject.entries( siteMatrix ).forEach( ( [ propName, lang ] ) => {\n\t\t\t\tif ( !/^\\d+$/.test( propName ) ) {\n\t\t\t\t\treturn; // Not a language... Fuck, this API's output is ugly\n\t\t\t\t}\n\t\t\t\tObject.values( lang.site ).forEach( ( site ) => {\n\t\t\t\t\tvar dbname = site.dbname.replace( /_/g, '-' );\n\t\t\t\t\tstats[ site.code ] = stats[ site.code ] || {};\n\t\t\t\t\tstats[ site.code ][ lang.code ] = {\n\t\t\t\t\t\turl: site.url,\n\t\t\t\t\t\tnumPages: counts[ dbname ] || 0,\n\t\t\t\t\t\tviews: views[ dbname ] || 0,\n\t\t\t\t\t\tclosed: site.closed !== undefined\n\t\t\t\t\t};\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\treturn BBPromise.resolve( stats );\n\t\t} );\n\n}\n\nmodule.exports = {\n\tgetSiteStats: getSiteStats,\n\tparseProjectString: parseProjectString\n};\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/data/stats.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'sort' is undefined.","line":50,"column":1,"nodeType":"Block","endLine":50,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'latin' is undefined.","line":50,"column":1,"nodeType":"Block","endLine":50,"endColumn":1},{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found readdirSync from package \"fs\" with non literal argument at index 0","line":88,"column":15,"nodeType":"CallExpression","endLine":88,"endColumn":40},{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found readFileSync from package \"fs\" with non literal argument at index 0","line":91,"column":21,"nodeType":"CallExpression","endLine":91,"endColumn":67},{"ruleId":"jsdoc/require-returns-type","severity":1,"message":"Missing JSDoc @return type.","line":302,"column":1,"nodeType":"Block","endLine":302,"endColumn":1},{"ruleId":"max-len","severity":1,"message":"This line has a length of 130. Maximum allowed is 100.","line":308,"column":1,"nodeType":"Program","messageId":"max","endLine":308,"endColumn":119},{"ruleId":"max-len","severity":1,"message":"This line has a length of 101. Maximum allowed is 100.","line":322,"column":1,"nodeType":"Program","messageId":"max","endLine":322,"endColumn":87}],"suppressedMessages":[{"ruleId":"no-prototype-builtins","severity":2,"message":"Do not access Object.prototype method 'hasOwnProperty' from target object.","line":368,"column":31,"nodeType":"CallExpression","messageId":"prototypeBuildIn","endLine":368,"endColumn":45,"suggestions":[{"messageId":"callObjectPrototype","data":{"prop":"hasOwnProperty"},"fix":{"range":[10134,10172],"text":"Object.prototype.hasOwnProperty.call(Stats.nonStandardCodes, "},"desc":"Call Object.prototype.hasOwnProperty explicitly."}],"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"var siteStats = require( './site-stats.json' ),\n\tsiteDefsFormatting = require( './l10n-overrides.json' ),\n\tfs = require( 'fs' ),\n\tlanguageData = require( '@wikimedia/language-data' ),\n\t/** @type {Set.<string>} Languages for which language name warnings have already been issued */\n\twarnedLanguages = new Set(),\n\tStats = {},\n\tsiteDefs;\n\n/**\n * Determine whether there is a notable difference between two names\n * for the same language. `<bdi>` wrapping and upper-case first letter\n * in the site definition are ignored.\n *\n * @param {string} a Name in the site definition\n * @param {string} b Name in `language-data`\n * @return {boolean} Whether the names differ\n */\nfunction languageNamesDiffer( a, b ) {\n\tif ( a === b ) {\n\t\t// Fast path\n\t\treturn false;\n\t}\n\ta = a.replace( /^<bdi dir=\"rtl\">(.*)<\\/bdi>$/, '$1' );\n\tb = b.replace( /^./, char => char.toUpperCase() );\n\treturn a !== b;\n}\n\n/**\n * Print a warning to the console.\n *\n * @param {string} code Language code, to avoid printing the warning if\n *  it has already been printed\n * @param {string} text\n * @param {boolean} [info=false] Whether the message is only informational\n *  (as opposed to a warning)\n */\nfunction warn( code, text, info ) {\n\tif ( !warnedLanguages.has( code ) ) {\n\t\tconsole.log( ( info ? '\\x1b[34mInfo' : '\\x1b[33mWarning' ) + ':\\x1b[0m %s', text );\n\t\twarnedLanguages.add( code );\n\t}\n}\n\n/**\n * Get the different names for a language, primarily from `siteDefs`,\n * falling back to `language-data`.\n *\n * @param {string} code Code of the language\n * @return {{name: string, sort?: string, latin?: string}}\n */\nfunction getLanguageName( code ) {\n\tvar siteDef = siteDefs[ code ],\n\t\tlanguageDataAutonym = languageData.getAutonym( code );\n\tif ( siteDef ) {\n\t\tvar name = siteDef[ 'language-name' ],\n\t\t\tnames = { name: name || languageDataAutonym };\n\t\tif ( !name ) {\n\t\t\twarn(\n\t\t\t\tcode,\n\t\t\t\t`No 'language-name' for ${code}, using the one from @wikimedia/language-data (${languageDataAutonym})`\n\t\t\t);\n\t\t} else if ( languageNamesDiffer( name, languageDataAutonym ) ) {\n\t\t\twarn(\n\t\t\t\tcode,\n\t\t\t\t`'language-name' for ${code} (${name}) differs from the one from @wikimedia/language-data (${languageDataAutonym})`,\n\t\t\t\ttrue\n\t\t\t);\n\t\t}\n\t\tif ( siteDef[ 'language-name-romanized-sorted' ] ) {\n\t\t\tnames.sort = siteDef[ 'language-name-romanized-sorted' ];\n\t\t}\n\t\tif ( siteDef[ 'language-name-romanized' ] ) {\n\t\t\tnames.latin = siteDef[ 'language-name-romanized' ];\n\t\t}\n\t\treturn names;\n\t} else {\n\t\twarn(\n\t\t\tcode,\n\t\t\t`No siteDef for ${code}, using name from @wikimedia/language-data (${languageDataAutonym})`\n\t\t);\n\t\treturn { name: languageDataAutonym };\n\t}\n}\n\nStats.readi18nFiles = function ( dirname ) {\n\tvar siteDefinitions = {},\n\t\tfileNames = fs.readdirSync( dirname );\n\n\tfileNames.forEach( function ( filename ) {\n\t\tvar fileContent = fs.readFileSync( dirname + filename, 'utf-8' ),\n\t\t\tlangCode = filename.replace( '.json', '' );\n\n\t\t// T319137 skr translation file is named differently than\n\t\t// domain name and name in site-stats.json.\n\t\tif ( langCode === 'skr-arab' ) {\n\t\t\tlangCode = 'skr';\n\t\t}\n\n\t\tsiteDefinitions[ langCode ] = JSON.parse( fileContent );\n\n\t\tif ( siteDefsFormatting[ langCode ] ) {\n\t\t\tsiteDefinitions[ langCode ] = {\n\t\t\t\t...siteDefinitions[ langCode ],\n\t\t\t\t...siteDefsFormatting[ langCode ]\n\t\t\t};\n\t\t}\n\t} );\n\n\treturn siteDefinitions;\n};\n\nsiteDefs = Stats.readi18nFiles( __dirname + '/../l10n/' );\n\nStats.nonStandardCodes = {\n\t'zh-min-nan': 'nan',\n\t'skr-arab': 'skr'\n};\n/**\n * Get top `n` wikis with most `criteria`.\n *\n * @param {string} portal The portal to look at: `wiki`, `wiktionary`...\n * @param {string} criteria The criteria to look at: `numPages` or `views`.\n * @param {number} n Greater than 0.\n * @return {Array} List of wikis {code: code, <criteria>: x}.\n */\nStats.getTop = function ( portal, criteria, n ) {\n\n\t// Validate\n\tlet topViewed = Object.entries( siteStats[ portal ] )\n\t\t.map( ( [ code, stats ] ) => ( { ...stats, code } ) )\n\t\t.filter( function ( { code, closed } ) {\n\t\t\tvar siteDef = siteDefs[ code ],\n\t\t\t\tportalDef = siteDef && siteDef[ portal ];\n\t\t\t// T355001: Lacking localization should not bar the site from being top 10.\n\t\t\t// For Chinese sites, we will build zh entries from zh-hans and zh-hant entries later.\n\t\t\tif ( !portalDef && code !== 'zh' ) {\n\t\t\t\twarn( code, `No localization of the site name, entry name, and slogan for ${code}.${portal}.org` );\n\t\t\t}\n\t\t\treturn siteDef && closed === false;\n\t\t} );\n\n\t// Sort\n\ttopViewed.sort( function ( a, b ) {\n\t\treturn b[ criteria ] - a[ criteria ];\n\t} );\n\n\t// Return top 10\n\treturn topViewed.slice( 0, n );\n};\n\n/**\n * Get wikis with `criteria` in the range [`from`, `to`].\n *\n * @param {string} portal The portal to look at: `wiki`, `wiktionary`...\n * @param {string} criteria The criteria to look at: `numPages` or `views`.\n * @param {number} from\n * @param {number} [to]\n * @return {Array} List of wikis {code: code, <criteria>: x}.\n */\nStats.getRange = function ( portal, criteria, from, to ) {\n\n\t// Validate\n\tlet list = Object.entries( siteStats[ portal ] )\n\t\t.map( ( [ code, stats ] ) => ( { ...stats, code } ) )\n\t\t.filter( stats => stats[ criteria ] >= from && ( !to || stats[ criteria ] < to ) );\n\n\t// Sort alphabetically\n\tlist.sort( function ( a, b ) {\n\t\tvar aName = getLanguageName( a.code ),\n\t\t\tbName = getLanguageName( b.code ),\n\t\t\tasort = aName.sort || aName.latin || aName.name,\n\t\t\tbsort = bName.sort || bName.latin || bName.name;\n\n\t\tasort = asort.toLowerCase();\n\t\tbsort = bsort.toLowerCase();\n\n\t\tif ( asort < bsort ) {\n\t\t\treturn -1;\n\t\t} else if ( asort > bsort ) {\n\t\t\treturn 1;\n\n\t\t}\n\t\treturn 0;\n\t} );\n\n\t// Return code only\n\tlist = list.map( function ( wiki ) {\n\t\tvar light = {\n\t\t\tcode: wiki.code\n\t\t};\n\t\tlight[ criteria ] = wiki[ criteria ];\n\t\treturn light;\n\t} );\n\n\treturn list;\n};\n\n/**\n * Gets a raw list and formats it to manipulate in templates.\n *\n * Example of input:\n *\n *     [ {code: 'en'} ]\n *\n * Example of output:\n *\n *     [\n *       {\n *         url: 'en.wikipedia.org',\n *         numPages: 5011495,\n *         views: 264805605,\n *         closed: false,\n *         code: 'en',\n *         siteName: 'Wikipedia',\n *         articles: 'articles',\n *         slogan: 'The Free Encyclopedia',\n *         index: 1,\n *         name: 'English',\n *         lang: 'en\n *       }\n *     ]\n *\n * @param {string} portal The portal to look at: `wiki`, `wiktionary`...\n * @param {Array} list Raw list of wiki.\n * @param {Object} [optionsArg]\n * @param {boolean} [optionsArg.stripTags=false] Tags are removed from the `name`.\n *  **Note:** this is only removing tags, it is not escaping the string nor\n *  making it secure.\n * @param {boolean} [optionsArg.merge=false] Whether subwikis should be merged or not.\n * @return {Array} List of wikis with all their information.\n */\nStats.format = function ( portal, list, optionsArg ) {\n\tvar newList = [],\n\t\tnewListByCode = {},\n\t\toptions = optionsArg || {};\n\n\t/**\n\t * Merges some wikis together.\n\t *\n\t * Is used to merge Norsk (Nynorsk) and Norsk (Bokmål).\n\t *\n\t * @param {string} parentCode\n\t * @param {Object} wiki\n\t * @private\n\t */\n\tfunction mergeWikis( parentCode, wiki ) {\n\t\tvar matches = /(.+)\\(([^)]+)\\)/.exec( wiki.name );\n\n\t\tnewListByCode[ parentCode ] = newListByCode[ parentCode ] || {};\n\t\tnewListByCode[ parentCode ].sublinks = newListByCode[ parentCode ].sublinks || [];\n\t\tnewListByCode[ parentCode ].name = matches[ 1 ].trim();\n\t\tnewListByCode[ parentCode ].parentCode = parentCode;\n\n\t\twiki.name = matches[ 2 ];\n\n\t\tif ( wiki.code === parentCode ) {\n\t\t\tnewListByCode[ parentCode ].sublinks.unshift( wiki );\n\t\t} else {\n\t\t\tnewListByCode[ parentCode ].sublinks.push( wiki );\n\t\t}\n\t}\n\n\t// Format the list with all the information we have\n\tlist.forEach( function ( top, index ) {\n\n\t\tvar stats = siteStats[ portal ][ top.code ],\n\t\t\tsiteDef = siteDefs[ top.code ],\n\t\t\tportalDef = siteDef?.[ portal ] || {},\n\t\t\textendedl10n = [\n\t\t\t\t'language-button-text',\n\t\t\t\t'footer-description',\n\t\t\t\t'footer-donate',\n\t\t\t\t'app-links',\n\t\t\t\t'license',\n\t\t\t\t'terms',\n\t\t\t\t'privacy-policy',\n\t\t\t\t'terms-link',\n\t\t\t\t'privacy-policy-link',\n\t\t\t\t'other-languages-label',\n\t\t\t\t'wiki',\n\t\t\t\t'wiktionary',\n\t\t\t\t'wikibooks',\n\t\t\t\t'wikinews',\n\t\t\t\t'wikiquote',\n\t\t\t\t'wikisource',\n\t\t\t\t'wikiversity',\n\t\t\t\t'wikivoyage',\n\t\t\t\t'commons',\n\t\t\t\t'wikispecies',\n\t\t\t\t'wikidata',\n\t\t\t\t'mediawiki',\n\t\t\t\t'metawiki'\n\t\t\t],\n\t\t\tnonStandardCode;\n\n\t\t/**\n\t\t * Get a raw list of a variant and formats it.\n\t\t *\n\t\t * @param {string} variant\n\t\t * @private\n\t\t * @return list\n\t\t */\n\t\tfunction getVariantList( variant ) {\n\t\t\treturn Object.assign(\n\t\t\t\t{},\n\t\t\t\tsiteDefs[ variant ][ portal ],\n\t\t\t\tObject.fromEntries( Object.entries( siteDefs[ variant ] ).filter( ( [ key ] ) => extendedl10n.includes( key ) ) ),\n\t\t\t\t{\n\t\t\t\t\tlang: variant, // Used as HTML lang attribute\n\t\t\t\t\tcode: variant // Used in filename\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tfunction buildVariantedL10n( a, b, attrs ) {\n\t\t\tvar varianted = {};\n\t\t\tattrs.forEach( function ( attr ) {\n\t\t\t\tif ( a[ attr ] && b[ attr ] ) {\n\t\t\t\t\tvarianted[ attr ] = `${a[ attr ]} / ${b[ attr ]}`;\n\t\t\t\t} else if ( a[ attr ] ) {\n\t\t\t\t\tvarianted[ attr ] = a?.[ attr ] || b?.[ attr ] || siteStats[ portal ].en[ attr ];\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn varianted;\n\t\t}\n\n\t\tif ( top.code === 'zh' ) {\n\t\t\t// Carry translations for simp and trad Chinese, used later in controller.js\n\t\t\tportalDef.variants = {\n\t\t\t\t'zh-hans': getVariantList( 'zh-hans' ),\n\t\t\t\t'zh-hant': getVariantList( 'zh-hant' )\n\t\t\t};\n\t\t\tObject.assign( portalDef, buildVariantedL10n(\n\t\t\t\tportalDef.variants[ 'zh-hans' ],\n\t\t\t\tportalDef.variants[ 'zh-hant' ],\n\t\t\t\t[ 'name', 'slogan', 'entries' ]\n\t\t\t) );\n\t\t}\n\n\t\tconst formatted = {\n\t\t\t...top,\n\t\t\t...stats,\n\t\t\t...portalDef,\n\t\t\t...getLanguageName( top.code ),\n\t\t\tindex: ++index,\n\t\t\tsiteName: portalDef?.name || siteDefs.en[ portal ].name\n\t\t};\n\n\t\tformatted.lang = siteDef?.lang || formatted.code;\n\n\t\tif ( siteDef?.attrs ) {\n\t\t\tformatted.attrs = siteDef.attrs;\n\t\t}\n\n\t\tif ( siteDef ) {\n\t\t\textendedl10n.forEach( function ( prop ) {\n\t\t\t\tformatted[ prop ] = siteDef[ prop ];\n\t\t\t} );\n\t\t}\n\n\t\tif ( options.stripTags ) {\n\t\t\t// http://stackoverflow.com/a/5002161\n\t\t\tformatted.name = formatted.name.replace( /<\\/?[^>]+(>|$)/g, '' );\n\t\t}\n\n\t\t// eslint-disable-next-line no-prototype-builtins\n\t\tif ( Stats.nonStandardCodes.hasOwnProperty( formatted.code ) ) {\n\t\t\tnonStandardCode = Stats.nonStandardCodes[ formatted.code ];\n\t\t\ttop.code = nonStandardCode;\n\t\t\tformatted.code = nonStandardCode;\n\t\t}\n\n\t\tformatted.url = formatted.url.replace( 'https://', '' );\n\n\t\tif ( options.merge &&\n\t\t\t( formatted.code === 'nn' || formatted.code === 'no' || formatted.code === 'nb' )\n\t\t) {\n\t\t\tmergeWikis( 'no', formatted );\n\t\t} else {\n\t\t\tnewListByCode[ formatted.code ] = formatted;\n\t\t}\n\t} );\n\n\t// Need to rebuild the list as some wikis may have been merged.\n\tlist.forEach( function ( top ) {\n\t\tif ( newListByCode[ top.code ] ) {\n\t\t\tnewList.push( newListByCode[ top.code ] );\n\t\t}\n\t} );\n\n\treturn newList;\n};\n\n/**\n * @inheritdoc #getTop\n * @return {Array} A list formatted with {@link #format}.\n */\nStats.getTopFormatted = function ( portal, criteria, n ) {\n\tvar list = this.getTop( portal, criteria, n );\n\n\treturn this.format( portal, list );\n};\n\n/**\n * @inheritdoc #getRange\n * @return {Array} A list formatted with {@link #format}.\n */\nStats.getRangeFormatted = function ( portal, criteria, from, to ) {\n\tvar list = this.getRange( portal, criteria, from, to );\n\n\treturn this.format( portal, list, { merge: true } );\n};\n\nmodule.exports = Stats;\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/data/utils.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found unlink from package \"fs\" with non literal argument at index 0","line":13,"column":3,"nodeType":"CallExpression","endLine":17,"endColumn":6},{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found stat from package \"fs\" with non literal argument at index 0","line":37,"column":5,"nodeType":"CallExpression","endLine":40,"endColumn":8}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"var fs = require( 'fs' ),\n\tglob = require( 'glob' ),\n\tnumOfDays;\n\n/**\n * Delete files in a directory\n *\n * @param {string} loc directory location\n * @param {number} days number of days\n */\nfunction deleteFiles( loc, days ) {\n\tfunction unlinkFile( fileName ) { // Delete file\n\t\tfs.unlink( loc + fileName, function ( error ) {\n\t\t\tif ( error ) {\n\t\t\t\tconsole.error( 'Error deleting the file: ', error );\n\t\t\t}\n\t\t} );\n\t}\n\n\tfunction checkStats( error, fileStats, fileName ) {\n\t\t// Check if number of days >= days mentioned\n\t\tif ( error ) {\n\t\t\tconsole.error( 'Error finding the stats: ', error );\n\t\t} else {\n\t\t\tnumOfDays = ( ( Date.now() - fileStats.mtime.getTime() ) / ( 24 * 60 * 60 * 1000 ) );\n\t\t\tif ( numOfDays >= days ) {\n\t\t\t\tunlinkFile( fileName );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction findFiles( error, files ) {\n\t\tif ( error ) {\n\t\t\tconsole.error( 'Cannot find files: ', error );\n\t\t} else {\n\t\t\tfiles.forEach( function ( fileName ) {\n\t\t\t\tfs.stat( loc + fileName, function ( err, fileStats ) {\n\t\t\t\t\t// Find stats for each file\n\t\t\t\t\tcheckStats( err, fileStats, fileName );\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\t}\n\n\tglob( '*', { cwd: loc }, findFiles );\n}\n\nmodule.exports = deleteFiles;\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/gulpfile.js/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/gulpfile.js/config.js","messages":[],"suppressedMessages":[{"ruleId":"security/detect-non-literal-require","severity":1,"message":"Found non-literal argument in require","line":48,"column":17,"nodeType":"CallExpression","endLine":48,"endColumn":61,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/gulpfile.js/dev.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/gulpfile.js/handlebar.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/gulpfile.js/help.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/gulpfile.js/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/gulpfile.js/postcss.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/gulpfile.js/prod.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found existsSync from package \"fs\" with non literal argument at index 0","line":49,"column":8,"nodeType":"CallExpression","endLine":49,"endColumn":37},{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found rmdirSync from package \"fs\" with non literal argument at index 0","line":50,"column":4,"nodeType":"CallExpression","endLine":50,"endColumn":53},{"ruleId":"max-len","severity":1,"message":"This line has a length of 108. Maximum allowed is 100.","line":55,"column":1,"nodeType":"Program","messageId":"max","endLine":55,"endColumn":100},{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found existsSync from package \"fs\" with non literal argument at index 0","line":68,"column":7,"nodeType":"CallExpression","endLine":68,"endColumn":33},{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found readdirSync from package \"fs\" with non literal argument at index 0","line":70,"column":3,"nodeType":"CallExpression","endLine":70,"endColumn":30},{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found unlinkSync from package \"fs\" with non literal argument at index 0","line":72,"column":22,"nodeType":"CallExpression","endLine":72,"endColumn":67}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"var gulp = require( 'gulp' ),\n\tgulpLoadPlugins = require( 'gulp-load-plugins' ),\n\tplugins = gulpLoadPlugins(),\n\tfs = require( 'fs' ),\n\tpath = require( 'path' ),\n\targv = require( 'yargs' ).argv,\n\tportalParam = argv.portal,\n\tcssnano = require( 'cssnano' );\n\nconst { requirePortalParam, getBaseDir, getConfig, getProdDir } = require( './config' );\n\n/**\n * Inline assets of index.html in src folder\n * and move index.html into prod folder\n *\n * @return {Stream}\n */\nfunction inlineAssets() {\n\n\trequirePortalParam();\n\n\tconst preset = {\n\t\tpreset: [\n\t\t\t'default', {\n\t\t\t\tdiscardComments: {\n\t\t\t\t\tremoveAll: true\n\t\t\t\t}\n\t\t\t} ]\n\t};\n\n\treturn gulp.src( getBaseDir() + 'index.html' )\n\t\t.pipe( plugins.inline( {\n\t\t\tcss: plugins.postcss.bind( this, [ ( cssnano( preset ) ) ] ),\n\t\t\tdisabledTypes: [ 'svg', 'img', 'js' ]\n\t\t} ) )\n\t\t.pipe( gulp.dest( getProdDir() ) );\n}\n\n/**\n * Clean `assets/js/` folder from the prod folder.\n *\n * @param {Function} cb\n */\nfunction cleanProdJS( cb ) {\n\ttry {\n\t\tvar prodDir = getProdDir();\n\t\tvar jsFolderPath = path.join( prodDir, 'assets', 'js' );\n\n\t\tif ( fs.existsSync( jsFolderPath ) ) {\n\t\t\tfs.rmdirSync( jsFolderPath, { recursive: true } );\n\t\t\tconsole.log( `Cleaned: ${jsFolderPath}` );\n\t\t\tcb(); // Callback after success\n\t\t} else {\n\t\t\tconsole.log( `Directory does not exist: ${jsFolderPath}` );\n\t\t\tcb(); // Callback after success (assuming cleaning is not needed if the directory doesn't exist)\n\t\t}\n\t} catch ( error ) {\n\t\tconsole.error( 'Error cleaning prod JS:', error );\n\t\tcb( error ); // Callback with error if there's an error cleaning the directory\n\t}\n}\nfunction copyTranslationFiles() {\n\trequirePortalParam();\n\n\tconst prodDir = getProdDir();\n\tconst assetsDir = path.join( prodDir, 'assets', 'l10n' );\n\n\tif ( fs.existsSync( assetsDir ) ) {\n\t\t// Remove existing JSON files in the destination directory\n\t\tfs.readdirSync( assetsDir )\n\t\t\t.filter( file => file.endsWith( '.json' ) )\n\t\t\t.forEach( file => fs.unlinkSync( path.join( assetsDir, file ) ) );\n\t} else {\n\t\tconsole.log( `Directory does not exist: ${assetsDir}` );\n\t}\n\treturn gulp.src( path.join( getBaseDir(), 'assets', 'l10n/**/*.json' ) )\n\t\t.pipe( gulp.dest( assetsDir ) );\n}\n/**\n * Concatenate JS files into a single file and minify it.\n *\n * @return {Stream}\n */\nfunction concatMinifyJS() {\n\n\trequirePortalParam();\n\n\treturn gulp.src( getConfig().htmlmin.src )\n\t\t.pipe( plugins.useref( {\n\t\t\tsearchPath: getBaseDir(),\n\t\t\ttransformTargetPath: function ( filePath ) {\n\t\t\t\t/**\n\t\t\t\t * Rewrite concatenated file path to include symlink\n\t\t\t\t * necessary for production apache config.\n\t\t\t\t */\n\t\t\t\treturn `portal/${portalParam}/${filePath}`;\n\t\t\t}\n\t\t} ) )\n\t\t.pipe( plugins.if( '*.js', plugins.uglify() ) )\n\t\t.pipe( plugins.if( '*.js', plugins.rev() ) )\n\t\t.pipe( plugins.revReplace() )\n\t\t.pipe( gulp.dest( getProdDir() ) )\n\t\t.pipe( plugins.rev.manifest() )\n\t\t.pipe( gulp.dest( getBaseDir() + 'assets' ) );\n}\n\n/**\n * Minify index.html file in prod folder,\n * depends on inlineAssets which moves index.html from src to prod.\n *\n * @return {Stream}\n */\nfunction minifyHTML() {\n\n\trequirePortalParam();\n\n\treturn gulp.src( getConfig().htmlmin.src )\n\t\t.pipe( plugins.htmlmin( getConfig().htmlmin.options ) )\n\t\t.pipe( gulp.dest( getProdDir() ) );\n}\n\n/**\n * Copy images to prod folder.\n *\n * @return {Stream}\n */\nfunction copyImages() {\n\n\tvar conf = getConfig();\n\trequirePortalParam();\n\treturn gulp.src( conf.img.src ).pipe( gulp.dest( conf.img.dest ) );\n}\n\n/**\n * Creates a symlink in the production folder which is required\n * by the Apache config:\n * https://gerrit.wikimedia.org/r/plugins/gitiles/operations/puppet/+/refs/heads/production/modules/mediawiki/templates/apache/sites/wwwportals.conf.erb\n *\n * @return {Stream}\n */\nfunction createProdSymlink() {\n\treturn gulp.src( getProdDir() )\n\t\t.pipe( gulp.symlink( getProdDir() + '/portal',\n\t\t\t{ relativeSymlinks: true }\n\t\t) );\n}\n\nexports.inlineAssets = inlineAssets;\nexports.cleanProdJS = cleanProdJS;\nexports.copyTranslationFiles = copyTranslationFiles;\nexports.concatMinifyJS = concatMinifyJS;\nexports.minifyHTML = minifyHTML;\nexports.copyImages = copyImages;\nexports.createProdSymlink = createProdSymlink;\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/gulpfile.js/scap-urls.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/gulpfile.js/sprites.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found unlink from package \"fs\" with non literal argument at index 0","line":16,"column":4,"nodeType":"CallExpression","endLine":23,"endColumn":7}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"var gulp = require( 'gulp' ),\n\tgulpLoadPlugins = require( 'gulp-load-plugins' ),\n\tfs = require( 'fs' ),\n\tglob = require( 'glob' ),\n\tplugins = gulpLoadPlugins();\n\nconst { getBaseDir, getConfig } = require( './config' );\n\nfunction cleanSprites() {\n\tconst conf = getConfig();\n\tconst outputSVGGlob = conf.img.sprite.outputSVGGlob;\n\tconst outputSVGFiles = glob.sync( outputSVGGlob );\n\n\treturn Promise.all( outputSVGFiles.map( file => {\n\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\tfs.unlink( file, err => {\n\t\t\t\tif ( err ) {\n\t\t\t\t\treject( err );\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log( `Sprite file deleted: ${file}` );\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t} ) );\n}\n\nfunction createSvgSprite() {\n\tvar conf = getConfig();\n\treturn gulp.src( conf.img.sprite.assets )\n\t\t.pipe( plugins.svgSprite( {\n\t\t\tshape: {\n\t\t\t\tspacing: {\n\t\t\t\t\tpadding: 1\n\t\t\t\t},\n\t\t\t\ttransform: [ 'svgo' ]\n\t\t\t},\n\t\t\tmode: {\n\t\t\t\tcss: {\n\t\t\t\t\tlayout: 'vertical',\n\t\t\t\t\tsprite: '../' + conf.img.sprite.outputName + '.svg',\n\t\t\t\t\tbust: true,\n\t\t\t\t\tdimensions: true,\n\t\t\t\t\tcommon: conf.img.sprite.cssPrefix,\n\t\t\t\t\trender: {\n\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\tdimensions: true,\n\t\t\t\t\t\t\tdest: '../' + conf.img.sprite.outputCSS,\n\t\t\t\t\t\t\ttemplate: conf.img.sprite.template\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tvariables: {\n\t\t\t\tmapname: 'svg-sprite'\n\t\t\t}\n\t\t} ) )\n\t\t.pipe( plugins.if( '*.svg', gulp.dest( getBaseDir() + 'assets/img/' ), gulp.dest( getBaseDir() + 'assets/css/' ) ) );\n}\n\nexports.cleanSprites = cleanSprites;\nexports.createSvgSprite = createSvgSprite;\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/gulpfile.js/stats.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/hbs-helpers.global.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/lang-dropdown.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/mediawiki.lite.js","messages":[],"suppressedMessages":[{"ruleId":"no-redeclare","severity":2,"message":"'mw' is already defined as a built-in global variable.","line":2,"column":5,"nodeType":"Identifier","messageId":"redeclaredAsBuiltin","endLine":2,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-use-before-define","severity":2,"message":"'mw' was used before it was defined.","line":2,"column":10,"nodeType":"Identifier","messageId":"usedBeforeDefined","endLine":2,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/page-localized.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wmTest\" type.","line":14,"column":1,"nodeType":"Block","endLine":14,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"translationsHash\" type.","line":15,"column":1,"nodeType":"Block","endLine":15,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"mw\" type.","line":16,"column":1,"nodeType":"Block","endLine":16,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"rtlLangs\" type.","line":17,"column":1,"nodeType":"Block","endLine":17,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* global wmTest, translationsHash, translationsPortalKey, wmL10nVisible, rtlLangs,\n portalSearchDomain */\n\n/**\n * This script localizes the page text.\n * Text includes the footer text, language button text, sister project name & slogan.\n *\n * Each localized text node is given a class name that corresponds to a property\n * in the translation JSON object.\n *\n * eg: the class `jsl10n_wiktionary_name` will be translated to en.wikitionary.name value.\n * If a translation value is missing, page will default to english.\n *\n * @param wmTest\n * @param translationsHash\n * @param mw\n * @param rtlLangs\n */\n\n( function ( wmTest, translationsHash, mw, rtlLangs ) {\n\n\tvar primaryLang = wmTest.primaryLang,\n\t\tstoredTranslationHash,\n\t\tstoredTranslations,\n\t\tl10nReq,\n\t\tl10nInfo;\n\n\t/**\n\t * Helper function to safely parse JSON an return empty string on error.\n\t *\n\t * @param {JSON} json\n\t * @return {JSON}\n\t */\n\tfunction safelyParseJSON( json ) {\n\t\tvar parsed;\n\t\ttry {\n\t\t\tparsed = JSON.parse( json );\n\t\t} catch ( e ) {\n\t\t\tparsed = '';\n\t\t}\n\t\treturn parsed;\n\t}\n\n\tfunction isValidHash() {\n\t\tvar storedHash = mw.storage.get( 'translationHash' );\n\t\treturn ( translationsHash === storedHash ) ? storedHash : false;\n\t}\n\n\tif ( primaryLang === 'en' ) {\n\t\twmL10nVisible.makeVisible();\n\t\treturn;\n\t}\n\n\tstoredTranslationHash = isValidHash();\n\tstoredTranslations = storedTranslationHash ? safelyParseJSON( mw.storage.get( 'storedTranslations' ) ) || {} : {};\n\n\t/**\n\t * Saves translation to localstorage\n\t *\n\t * @param {string} lang language code that acts as the key to the translation.\n\t * @param {Object} translation translation data.\n\t */\n\tfunction saveTranslation( lang, translation ) {\n\t\tvar translations = safelyParseJSON( mw.storage.get( 'storedTranslations' ) ) || {};\n\n\t\ttranslations[ lang ] = translation;\n\t\tmw.storage.set( 'storedTranslations', JSON.stringify( translations ) );\n\t}\n\n\t/**\n\t * Takes an object and a string 'foo.bar' and returns object.foo.bar if exists,\n\t * otherwise returns `undefined`.\n\t *\n\t * @param {Object} obj The object to traverse.\n\t * @param {string} keys A string representing the dot notation of the object.\n\t *\n\t * @return {Mixed}\n\t */\n\tfunction getProp( obj, keys ) {\n\t\tvar i = 0;\n\t\tkeys = String( keys ).split( '.' );\n\t\twhile ( i < keys.length ) {\n\t\t\tif ( obj === undefined || obj === null ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tobj = obj[ keys[ i++ ] ];\n\t\t}\n\t\treturn obj;\n\t}\n\n\t/**\n\t * Takes the translation data object and replaces corresponding\n\t * DOM element textContent with translation values.\n\t *\n\t * @param {Object} info Object containing translation data.\n\t */\n\tfunction replacel10nText( info ) {\n\t\tvar domEls = document.querySelectorAll( '.jsl10n' ),\n\t\t\tvalidAnchor = new RegExp( /<a[^>]*>([^<]+)<\\/a>/ ),\n\t\t\ti, domEl, l10nAttr, textValue, termsHref, privacyHref;\n\n\t\tfor ( i = 0; i < domEls.length; i++ ) {\n\n\t\t\tdomEl = domEls[ i ];\n\t\t\t/**\n\t\t\t * This converts the generic \"portal\" keyword in the data-jsl10n\n\t\t\t * attributes e.g. 'data-jsl10n=\"portal.footer-description\"' into a portal-specific\n\t\t\t * keys as defined by the global `translationsPortalKey` variable inlined in index.html\n\t\t\t */\n\t\t\tl10nAttr = domEl.getAttribute( 'data-jsl10n' ).replace( 'portal.', translationsPortalKey + '.' );\n\t\t\ttextValue = getProp( info, l10nAttr );\n\n\t\t\tif ( typeof textValue === 'string' && textValue.length > 0 ) {\n\t\t\t\tswitch ( l10nAttr ) {\n\t\t\t\t\tcase 'app-links.other':\n\t\t\t\t\t\tif ( validAnchor.test( textValue ) ) {\n\t\t\t\t\t\t\tdomEl.innerHTML = textValue;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdomEl.firstChild.textContent = textValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'wikimedia-org-our-projects-desc':\n\t\t\t\t\tcase 'wikimedia-org-wmf':\n\t\t\t\t\tcase 'license':\n\t\t\t\t\t\tdomEl.innerHTML = textValue;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'terms':\n\t\t\t\t\t\tdomEl.firstChild.textContent = textValue;\n\t\t\t\t\t\ttermsHref = getProp( info, 'terms-link' );\n\t\t\t\t\t\tif ( termsHref ) {\n\t\t\t\t\t\t\tdomEl.firstChild.setAttribute( 'href', termsHref );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'privacy-policy':\n\t\t\t\t\t\tdomEl.firstChild.textContent = textValue;\n\t\t\t\t\t\tprivacyHref = getProp( info, 'privacy-policy-link' );\n\t\t\t\t\t\tif ( privacyHref ) {\n\t\t\t\t\t\t\tdomEl.firstChild.setAttribute( 'href', privacyHref );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tdomEl.textContent = textValue;\n\t\t\t\t\t\t// T254611 Specific 'lang' attribute for every localized text\n\t\t\t\t\t\tdomEl.setAttribute( 'lang', info.lang );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\twmL10nVisible.makeVisible();\n\t}\n\n\tfunction addHtmlLang( lang ) {\n\t\tdocument.documentElement.lang = lang;\n\t\tif ( rtlLangs.indexOf( lang ) >= 0 ) {\n\t\t\tdocument.dir = 'rtl';\n\t\t} else {\n\t\t\tdocument.dir = 'ltr';\n\t\t}\n\t}\n\t/**\n\t * If the primary language is not English, and the translation is missing or outdated,\n\t * fetch the latest one.\n\t */\n\tif ( !storedTranslations[ primaryLang ] ) {\n\n\t\tl10nReq = new XMLHttpRequest();\n\n\t\tl10nReq.open( 'GET', encodeURI( 'portal/' + portalSearchDomain + '/assets/l10n/' + primaryLang + '-' + translationsHash + '.json' ), true );\n\n\t\tl10nReq.onreadystatechange = function () {\n\t\t\tif ( l10nReq.readyState === 4 ) {\n\t\t\t\tif ( l10nReq.status === 200 ) {\n\n\t\t\t\t\tl10nInfo = safelyParseJSON( this.responseText );\n\n\t\t\t\t\tif ( l10nInfo ) {\n\t\t\t\t\t\tsaveTranslation( primaryLang, l10nInfo );\n\n\t\t\t\t\t\t// Skip if it took too long\n\t\t\t\t\t\tif ( wmL10nVisible.ready ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\taddHtmlLang( primaryLang );\n\t\t\t\t\t\treplacel10nText( l10nInfo );\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\twmL10nVisible.makeVisible();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tl10nReq.send();\n\t} else {\n\t\tl10nInfo = storedTranslations[ primaryLang ];\n\t\t// Skip if it took too long\n\t\tif ( wmL10nVisible.ready ) {\n\t\t\treturn;\n\t\t}\n\t\taddHtmlLang( primaryLang );\n\t\treplacel10nText( l10nInfo );\n\t}\n\n}( wmTest, translationsHash, mw, rtlLangs ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/polyfills.js","messages":[],"suppressedMessages":[{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"fn\" declaration.","line":3,"column":1,"nodeType":"Block","endLine":7,"endColumn":4,"fix":{"range":[22,169],"text":"/**\n * Queues the given function to be called once the DOM has finished loading.\n *\n * Based on jquery/src/core/ready.js@825ac37 (MIT licensed)\n * @param fn\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-implicit-globals","severity":2,"message":"Unexpected function declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable.","line":8,"column":1,"nodeType":"FunctionDeclaration","messageId":"globalNonLexicalBinding","endLine":24,"endColumn":2,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'doWhenReady' is defined but never used.","line":8,"column":10,"nodeType":"Identifier","messageId":"unusedVar","endLine":8,"endColumn":21,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":13,"column":16,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":13,"endColumn":17,"fix":{"range":[357,357],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"lang\" declaration.","line":30,"column":1,"nodeType":"Block","endLine":33,"endColumn":4,"fix":{"range":[725,823],"text":"/**\n * Converts strings to iso639.\n * http://www.iso.org/iso/home/standards/language_codes.htm\n * @param lang\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":30,"column":1,"nodeType":"Block","endLine":33,"endColumn":4,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-implicit-globals","severity":2,"message":"Unexpected function declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable.","line":34,"column":1,"nodeType":"FunctionDeclaration","messageId":"globalNonLexicalBinding","endLine":46,"endColumn":2,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'getIso639' is defined but never used.","line":34,"column":10,"nodeType":"Identifier","messageId":"unusedVar","endLine":34,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":41,"column":2,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":41,"endColumn":47,"fix":{"range":[990,991],"text":"I"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":48,"column":1,"nodeType":"Block","endLine":57,"endColumn":4,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag (preference). Replace \"returns\" JSDoc tag with \"return\".","line":56,"column":1,"nodeType":"Block","endLine":56,"endColumn":1,"fix":{"range":[1093,1380],"text":"/**\n * Detects reported or approximate device pixel ratio.\n * * 1.0 means 1 CSS pixel is 1 hardware pixel\n * * 2.0 means 1 CSS pixel is 2 hardware pixels\n * * etc.\n *\n * Uses window.devicePixelRatio if available, or CSS media queries on IE.\n *\n * @return {number} Device pixel ratio\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-implicit-globals","severity":2,"message":"Unexpected function declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable.","line":58,"column":1,"nodeType":"FunctionDeclaration","messageId":"globalNonLexicalBinding","endLine":71,"endColumn":2,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'getDevicePixelRatio' is defined but never used.","line":58,"column":10,"nodeType":"Identifier","messageId":"unusedVar","endLine":58,"endColumn":29,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Unexpected space before function parentheses.","line":58,"column":29,"nodeType":"FunctionDeclaration","messageId":"unexpectedSpace","endLine":58,"endColumn":30,"fix":{"range":[1409,1410],"text":""},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":77,"column":4,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":77,"endColumn":5,"fix":{"range":[1796,1796],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":77,"column":31,"nodeType":"Program","messageId":"missingClosingSpace","endLine":77,"endColumn":32,"fix":{"range":[1822,1822],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":83,"column":4,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":83,"endColumn":5,"fix":{"range":[1946,1946],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":83,"column":31,"nodeType":"Program","messageId":"missingClosingSpace","endLine":83,"endColumn":32,"fix":{"range":[1972,1972],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":84,"column":38,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":84,"endColumn":39,"fix":{"range":[2014,2014],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":84,"column":38,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":84,"endColumn":39,"fix":{"range":[2013,2013],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":84,"column":40,"nodeType":"Program","messageId":"missingClosingSpace","endLine":84,"endColumn":41,"fix":{"range":[2015,2015],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 2 tabs but found 1.","line":87,"column":1,"nodeType":"Keyword","messageId":"wrongIndentation","endLine":87,"endColumn":2,"fix":{"range":[2037,2038],"text":"\t\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 3 tabs but found 2.","line":88,"column":1,"nodeType":"Keyword","messageId":"wrongIndentation","endLine":88,"endColumn":3,"fix":{"range":[2043,2045],"text":"\t\t\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":88,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":88,"endColumn":7,"fix":{"range":[2049,2049],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":88,"column":37,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":88,"endColumn":38,"fix":{"range":[2080,2080],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":88,"column":43,"nodeType":"Program","messageId":"missingClosingSpace","endLine":88,"endColumn":44,"fix":{"range":[2085,2085],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":88,"column":44,"nodeType":"Program","messageId":"missingClosingSpace","endLine":88,"endColumn":45,"fix":{"range":[2086,2086],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":88,"column":46,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":88,"endColumn":56,"fix":{"range":[2088,2098],"text":"{return el;}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 3 tabs but found 2.","line":89,"column":1,"nodeType":"Identifier","messageId":"wrongIndentation","endLine":89,"endColumn":3,"fix":{"range":[2099,2101],"text":"\t\t\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 2 tabs but found 1.","line":90,"column":1,"nodeType":"Punctuator","messageId":"wrongIndentation","endLine":90,"endColumn":2,"fix":{"range":[2141,2142],"text":"\t\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":90,"column":10,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":90,"endColumn":11,"fix":{"range":[2151,2151],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":90,"column":43,"nodeType":"Program","messageId":"missingClosingSpace","endLine":90,"endColumn":44,"fix":{"range":[2183,2183],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 2 tabs but found 1.","line":91,"column":1,"nodeType":"Keyword","messageId":"wrongIndentation","endLine":91,"endColumn":2,"fix":{"range":[2186,2187],"text":"\t\t"},"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/search-language-picker.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/seedrandom.js","messages":[],"suppressedMessages":[{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"pool\" declaration.","line":101,"column":1,"nodeType":"Block","endLine":106,"endColumn":4,"fix":{"range":[4972,5117],"text":"/**\n * All code is in an anonymous closure to keep the global namespace clean.\n *\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param {number=} overflow\n * @param {number=} startdenom\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"math\" declaration.","line":101,"column":1,"nodeType":"Block","endLine":106,"endColumn":4,"fix":{"range":[4972,5117],"text":"/**\n * All code is in an anonymous closure to keep the global namespace clean.\n *\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param {number=} overflow\n * @param {number=} startdenom\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"width\" declaration.","line":101,"column":1,"nodeType":"Block","endLine":106,"endColumn":4,"fix":{"range":[4972,5117],"text":"/**\n * All code is in an anonymous closure to keep the global namespace clean.\n *\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param {number=} overflow\n * @param {number=} startdenom\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"chunks\" declaration.","line":101,"column":1,"nodeType":"Block","endLine":106,"endColumn":4,"fix":{"range":[4972,5117],"text":"/**\n * All code is in an anonymous closure to keep the global namespace clean.\n *\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param {number=} overflow\n * @param {number=} startdenom\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"significance\" declaration.","line":101,"column":1,"nodeType":"Block","endLine":106,"endColumn":4,"fix":{"range":[4972,5117],"text":"/**\n * All code is in an anonymous closure to keep the global namespace clean.\n *\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param {number=} overflow\n * @param {number=} startdenom\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/check-param-names","severity":1,"message":"Expected @param names to be \"pool, math, width, chunks, significance, overflow, startdenom\". Got \"overflow, startdenom\".","line":104,"column":1,"nodeType":"Block","endLine":104,"endColumn":1,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":107,"column":1,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":107,"endColumn":2,"fix":{"range":[5119,5119],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"wrap-iife","severity":2,"message":"Move the invocation into the parens that contain the function.","line":107,"column":1,"nodeType":"CallExpression","messageId":"moveInvocation","endLine":278,"endColumn":2,"fix":{"range":[10128,10413],"text":"(\n\t[],   // pool: entropy pool starts empty\n\tMath, // math: package containing random, pow, and seedrandom\n\t256,  // width: each RC4 output is 0 <= x < 256\n\t6,    // chunks: at least six RC4 outputs for each double\n\t52    // significance: there are 52 significant digits in a double\n))"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":107,"column":11,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":107,"endColumn":12,"fix":{"range":[5129,5129],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":107,"column":73,"nodeType":"Program","messageId":"missingClosingSpace","endLine":107,"endColumn":74,"fix":{"range":[5190,5190],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":110,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":110,"endColumn":1,"fix":{"range":[5210,5210],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":111,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":111,"endColumn":1,"fix":{"range":[5213,5213],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":112,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":112,"endColumn":1,"fix":{"range":[5229,5229],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":113,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":113,"endColumn":1,"fix":{"range":[5281,5281],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":114,"column":6,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":114,"endColumn":7,"fix":{"range":[5290,5290],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"dot-notation","severity":2,"message":"[\"seedrandom\"] is better written in dot notation.","line":114,"column":7,"nodeType":"Literal","messageId":"useDot","endLine":114,"endColumn":19,"fix":{"range":[5289,5303],"text":".seedrandom"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":114,"column":19,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":114,"endColumn":20,"fix":{"range":[5302,5302],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":114,"column":42,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":114,"endColumn":43,"fix":{"range":[5326,5326],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'use_entropy' is not in camel case.","line":114,"column":49,"nodeType":"Identifier","messageId":"notCamelCase","endLine":114,"endColumn":60,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":114,"column":60,"nodeType":"Program","messageId":"missingClosingSpace","endLine":114,"endColumn":61,"fix":{"range":[5343,5343],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":119,"column":16,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":119,"endColumn":17,"fix":{"range":[5464,5464],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'use_entropy' is not in camel case.","line":120,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":120,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required after '['.","line":120,"column":18,"nodeType":"ArrayExpression","messageId":"missingSpaceAfter","endLine":120,"endColumn":19,"fix":{"range":[5491,5491],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required before ']'.","line":120,"column":29,"nodeType":"ArrayExpression","messageId":"missingSpaceBefore","endLine":120,"endColumn":30,"fix":{"range":[5501,5501],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required after '['.","line":122,"column":6,"nodeType":"ArrayExpression","messageId":"missingSpaceAfter","endLine":122,"endColumn":7,"fix":{"range":[5541,5541],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"unicorn/prefer-date-now","severity":2,"message":"Prefer `Date.now()` over `Date#getTime()`.","line":122,"column":18,"nodeType":"Identifier","messageId":"prefer-date-now-over-methods","endLine":122,"endColumn":25,"fix":{"range":[5541,5561],"text":"Date.now()"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required before ']'.","line":122,"column":41,"nodeType":"ArrayExpression","messageId":"missingSpaceBefore","endLine":122,"endColumn":42,"fix":{"range":[5575,5575],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":122,"column":45,"nodeType":"Program","messageId":"missingClosingSpace","endLine":122,"endColumn":46,"fix":{"range":[5579,5579],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":122,"column":51,"nodeType":"Program","messageId":"missingClosingSpace","endLine":122,"endColumn":52,"fix":{"range":[5585,5585],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":125,"column":18,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":125,"endColumn":19,"fix":{"range":[5658,5658],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":125,"column":22,"nodeType":"Program","messageId":"missingClosingSpace","endLine":125,"endColumn":23,"fix":{"range":[5661,5661],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":128,"column":9,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":128,"endColumn":10,"fix":{"range":[5724,5724],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":128,"column":22,"nodeType":"Program","messageId":"missingClosingSpace","endLine":128,"endColumn":23,"fix":{"range":[5736,5736],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":135,"column":7,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":135,"endColumn":8,"fix":{"range":[5917,5917],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"dot-notation","severity":2,"message":"[\"seededrandom\"] is better written in dot notation.","line":135,"column":8,"nodeType":"Literal","messageId":"useDot","endLine":135,"endColumn":22,"fix":{"range":[5916,5932],"text":".seededrandom"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":135,"column":22,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":135,"endColumn":23,"fix":{"range":[5931,5931],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Closure to ...'.","line":135,"column":45,"nodeType":"Line","messageId":"multipleSpaces","endLine":135,"endColumn":47,"fix":{"range":[5954,5956],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":136,"column":18,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":136,"endColumn":19,"fix":{"range":[6012,6012],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":136,"column":25,"nodeType":"Program","messageId":"missingClosingSpace","endLine":136,"endColumn":26,"fix":{"range":[6018,6018],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Start with ...'.","line":136,"column":27,"nodeType":"Line","messageId":"multipleSpaces","endLine":136,"endColumn":40,"fix":{"range":[6020,6033],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '//   and denom...'.","line":137,"column":23,"nodeType":"Line","messageId":"multipleSpaces","endLine":137,"endColumn":40,"fix":{"range":[6092,6109],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":137,"column":40,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":137,"endColumn":72,"fix":{"range":[6114,6115],"text":"A"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '//   and no 'e...'.","line":138,"column":14,"nodeType":"Line","messageId":"multipleSpaces","endLine":138,"endColumn":40,"fix":{"range":[6155,6181],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":138,"column":40,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":138,"endColumn":70,"fix":{"range":[6186,6187],"text":"A"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":139,"column":10,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":139,"endColumn":11,"fix":{"range":[6222,6222],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":139,"column":27,"nodeType":"Program","messageId":"missingClosingSpace","endLine":139,"endColumn":28,"fix":{"range":[6238,6238],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Fill up all...'.","line":139,"column":30,"nodeType":"Line","messageId":"multipleSpaces","endLine":139,"endColumn":40,"fix":{"range":[6241,6251],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":140,"column":9,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":140,"endColumn":10,"fix":{"range":[6297,6297],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":140,"column":15,"nodeType":"Program","messageId":"missingClosingSpace","endLine":140,"endColumn":16,"fix":{"range":[6302,6302],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '//   shifting ...'.","line":140,"column":25,"nodeType":"Line","messageId":"multipleSpaces","endLine":140,"endColumn":39,"fix":{"range":[6312,6326],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":140,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":140,"endColumn":66,"fix":{"range":[6331,6332],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '//   denominat...'.","line":141,"column":16,"nodeType":"Line","messageId":"multipleSpaces","endLine":141,"endColumn":39,"fix":{"range":[6369,6392],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":141,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":141,"endColumn":72,"fix":{"range":[6397,6398],"text":"D"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":142,"column":15,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":142,"endColumn":16,"fix":{"range":[6441,6441],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":142,"column":17,"nodeType":"Program","messageId":"missingClosingSpace","endLine":142,"endColumn":18,"fix":{"range":[6442,6442],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '//   new least...'.","line":142,"column":19,"nodeType":"Line","messageId":"multipleSpaces","endLine":142,"endColumn":39,"fix":{"range":[6444,6464],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":142,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":142,"endColumn":71,"fix":{"range":[6469,6470],"text":"N"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":144,"column":10,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":144,"endColumn":11,"fix":{"range":[6512,6512],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":144,"column":24,"nodeType":"Program","messageId":"missingClosingSpace","endLine":144,"endColumn":25,"fix":{"range":[6525,6525],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// To avoid ro...'.","line":144,"column":27,"nodeType":"Line","messageId":"multipleSpaces","endLine":144,"endColumn":40,"fix":{"range":[6528,6541],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '//   last byte...'.","line":145,"column":12,"nodeType":"Line","messageId":"multipleSpaces","endLine":145,"endColumn":39,"fix":{"range":[6591,6618],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":145,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":145,"endColumn":71,"fix":{"range":[6623,6624],"text":"L"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '//   right usi...'.","line":146,"column":12,"nodeType":"Line","messageId":"multipleSpaces","endLine":146,"endColumn":39,"fix":{"range":[6662,6689],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":146,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":146,"endColumn":74,"fix":{"range":[6694,6695],"text":"R"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '>>>='.","line":147,"column":5,"nodeType":"AssignmentExpression","messageId":"unexpected","endLine":147,"endColumn":13,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '//   we have e...'.","line":147,"column":14,"nodeType":"Line","messageId":"multipleSpaces","endLine":147,"endColumn":39,"fix":{"range":[6738,6763],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":147,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":147,"endColumn":77,"fix":{"range":[6768,6769],"text":"W"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":149,"column":11,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":149,"endColumn":12,"fix":{"range":[6818,6818],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":149,"column":17,"nodeType":"Program","messageId":"missingClosingSpace","endLine":149,"endColumn":18,"fix":{"range":[6823,6823],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Form the nu...'.","line":149,"column":23,"nodeType":"Line","messageId":"multipleSpaces","endLine":149,"endColumn":40,"fix":{"range":[6829,6846],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":156,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":156,"endColumn":1,"fix":{"range":[6941,6941],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":157,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":157,"endColumn":1,"fix":{"range":[6944,6944],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":158,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":158,"endColumn":1,"fix":{"range":[6952,6952],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":159,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":159,"endColumn":1,"fix":{"range":[6955,6955],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":160,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":160,"endColumn":1,"fix":{"range":[7026,7026],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":161,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":161,"endColumn":1,"fix":{"range":[7099,7099],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":162,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":162,"endColumn":1,"fix":{"range":[7102,7102],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":163,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":163,"endColumn":1,"fix":{"range":[7174,7174],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":164,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":164,"endColumn":1,"fix":{"range":[7245,7245],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":165,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":165,"endColumn":1,"fix":{"range":[7295,7295],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"key\" declaration.","line":166,"column":2,"nodeType":"Block","endLine":166,"endColumn":21,"fix":{"range":[7299,7318],"text":"/**\n\t * @param key\n\t * @constructor\n\t */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":167,"column":15,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":167,"endColumn":16,"fix":{"range":[7334,7334],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":167,"column":19,"nodeType":"Program","messageId":"missingClosingSpace","endLine":167,"endColumn":20,"fix":{"range":[7337,7337],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":174,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":174,"endColumn":7,"fix":{"range":[7500,7500],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":174,"column":14,"nodeType":"Program","messageId":"missingClosingSpace","endLine":174,"endColumn":15,"fix":{"range":[7507,7507],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"brace-style","severity":2,"message":"Statement inside of curly braces should be on next line.","line":174,"column":16,"nodeType":"Punctuator","messageId":"blockSameLine","endLine":174,"endColumn":17,"fix":{"range":[7510,7510],"text":"\n"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":174,"column":18,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":174,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required after '['.","line":174,"column":24,"nodeType":"ArrayExpression","messageId":"missingSpaceAfter","endLine":174,"endColumn":25,"fix":{"range":[7518,7518],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required before ']'.","line":174,"column":33,"nodeType":"ArrayExpression","messageId":"missingSpaceBefore","endLine":174,"endColumn":34,"fix":{"range":[7526,7526],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"brace-style","severity":2,"message":"Closing curly brace should be on the same line as opening curly brace or on the line after the previous block.","line":174,"column":36,"nodeType":"Punctuator","messageId":"singleLineClose","endLine":174,"endColumn":37,"fix":{"range":[7529,7529],"text":"\n"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":177,"column":9,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":177,"endColumn":10,"fix":{"range":[7600,7600],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":177,"column":19,"nodeType":"Program","messageId":"missingClosingSpace","endLine":177,"endColumn":20,"fix":{"range":[7609,7609],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"brace-style","severity":2,"message":"Statement inside of curly braces should be on next line.","line":177,"column":21,"nodeType":"Punctuator","messageId":"blockSameLine","endLine":177,"endColumn":22,"fix":{"range":[7612,7612],"text":"\n"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":177,"column":23,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":177,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":177,"column":27,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":177,"endColumn":28,"fix":{"range":[7618,7618],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":177,"column":29,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":177,"endColumn":30,"fix":{"range":[7619,7619],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"brace-style","severity":2,"message":"Closing curly brace should be on the same line as opening curly brace or on the line after the previous block.","line":177,"column":38,"nodeType":"Punctuator","messageId":"singleLineClose","endLine":177,"endColumn":39,"fix":{"range":[7628,7628],"text":"\n"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":178,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":178,"endColumn":8,"fix":{"range":[7637,7637],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":178,"column":29,"nodeType":"Program","messageId":"missingClosingSpace","endLine":178,"endColumn":30,"fix":{"range":[7658,7658],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":179,"column":12,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":179,"endColumn":13,"fix":{"range":[7674,7674],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":179,"column":14,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":179,"endColumn":15,"fix":{"range":[7675,7675],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":180,"column":15,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":180,"endColumn":16,"fix":{"range":[7693,7693],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":180,"column":27,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":180,"endColumn":28,"fix":{"range":[7705,7705],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":180,"column":38,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":180,"endColumn":39,"fix":{"range":[7715,7715],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":180,"column":39,"nodeType":"Program","messageId":"missingClosingSpace","endLine":180,"endColumn":40,"fix":{"range":[7716,7716],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":181,"column":12,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":181,"endColumn":13,"fix":{"range":[7731,7731],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":181,"column":14,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":181,"endColumn":15,"fix":{"range":[7732,7732],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":182,"column":8,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":182,"endColumn":9,"fix":{"range":[7743,7743],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":182,"column":10,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":182,"endColumn":11,"fix":{"range":[7744,7744],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":183,"column":8,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":183,"endColumn":9,"fix":{"range":[7759,7759],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":183,"column":10,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":183,"endColumn":11,"fix":{"range":[7760,7760],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":187,"column":26,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":187,"endColumn":27,"fix":{"range":[7866,7866],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":187,"column":32,"nodeType":"Program","messageId":"missingClosingSpace","endLine":187,"endColumn":33,"fix":{"range":[7871,7871],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-shadow","severity":2,"message":"'i' is already declared in the upper scope on line 169 column 7.","line":189,"column":8,"nodeType":"Identifier","messageId":"noShadow","endLine":189,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":189,"column":19,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":189,"endColumn":20,"fix":{"range":[7911,7911],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":189,"column":28,"nodeType":"Program","messageId":"missingClosingSpace","endLine":189,"endColumn":29,"fix":{"range":[7919,7919],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":189,"column":31,"nodeType":"VariableDeclaration","messageId":"exceed","endLine":189,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-shadow","severity":2,"message":"'t' is already declared in the upper scope on line 168 column 7.","line":189,"column":35,"nodeType":"Identifier","messageId":"noShadow","endLine":189,"endColumn":36,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":189,"column":40,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":189,"endColumn":41,"fix":{"range":[7932,7932],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":189,"column":42,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":189,"endColumn":43,"fix":{"range":[7933,7933],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-shadow","severity":2,"message":"'j' is already declared in the upper scope on line 169 column 14.","line":190,"column":8,"nodeType":"Identifier","messageId":"noShadow","endLine":190,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":190,"column":19,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":190,"endColumn":20,"fix":{"range":[7955,7955],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":190,"column":28,"nodeType":"Program","messageId":"missingClosingSpace","endLine":190,"endColumn":29,"fix":{"range":[7963,7963],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":190,"column":31,"nodeType":"VariableDeclaration","messageId":"exceed","endLine":190,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-shadow","severity":2,"message":"'u' is already declared in the upper scope on line 168 column 10.","line":190,"column":35,"nodeType":"Identifier","messageId":"noShadow","endLine":190,"endColumn":36,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":190,"column":40,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":190,"endColumn":41,"fix":{"range":[7976,7976],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":190,"column":42,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":190,"endColumn":43,"fix":{"range":[7977,7977],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":191,"column":5,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":191,"endColumn":6,"fix":{"range":[7985,7985],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":191,"column":7,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":191,"endColumn":8,"fix":{"range":[7986,7986],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":192,"column":5,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":192,"endColumn":6,"fix":{"range":[7998,7998],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":192,"column":7,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":192,"endColumn":8,"fix":{"range":[7999,7999],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":193,"column":13,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":193,"endColumn":14,"fix":{"range":[8019,8019],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":193,"column":21,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":193,"endColumn":22,"fix":{"range":[8027,8027],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":193,"column":27,"nodeType":"Program","messageId":"missingClosingSpace","endLine":193,"endColumn":28,"fix":{"range":[8032,8032],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":193,"column":28,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":193,"endColumn":29,"fix":{"range":[8033,8033],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":194,"column":10,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":194,"endColumn":11,"fix":{"range":[8046,8046],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":194,"column":18,"nodeType":"Program","messageId":"missingClosingSpace","endLine":194,"endColumn":19,"fix":{"range":[8053,8053],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":195,"column":16,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":195,"endColumn":17,"fix":{"range":[8073,8073],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":195,"column":22,"nodeType":"Program","messageId":"missingClosingSpace","endLine":195,"endColumn":23,"fix":{"range":[8078,8078],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":195,"column":25,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":195,"endColumn":34,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":195,"column":30,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":195,"endColumn":31,"fix":{"range":[8087,8087],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":195,"column":32,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":195,"endColumn":33,"fix":{"range":[8088,8088],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":196,"column":16,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":196,"endColumn":17,"fix":{"range":[8107,8107],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":196,"column":22,"nodeType":"Program","messageId":"missingClosingSpace","endLine":196,"endColumn":23,"fix":{"range":[8112,8112],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":196,"column":25,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":196,"endColumn":34,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":196,"column":30,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":196,"endColumn":31,"fix":{"range":[8121,8121],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":196,"column":32,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":196,"endColumn":33,"fix":{"range":[8122,8122],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":197,"column":6,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":197,"endColumn":7,"fix":{"range":[8131,8131],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":197,"column":8,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":197,"endColumn":9,"fix":{"range":[8132,8132],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":198,"column":6,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":198,"endColumn":7,"fix":{"range":[8145,8145],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":198,"column":8,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":198,"endColumn":9,"fix":{"range":[8146,8146],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":199,"column":22,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":199,"endColumn":23,"fix":{"range":[8175,8175],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":199,"column":30,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":199,"endColumn":31,"fix":{"range":[8183,8183],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":199,"column":36,"nodeType":"Program","messageId":"missingClosingSpace","endLine":199,"endColumn":37,"fix":{"range":[8188,8188],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":199,"column":37,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":199,"endColumn":38,"fix":{"range":[8189,8189],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":207,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":207,"endColumn":8,"fix":{"range":[8370,8370],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":207,"column":13,"nodeType":"Program","messageId":"missingClosingSpace","endLine":207,"endColumn":14,"fix":{"range":[8375,8375],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":210,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":210,"endColumn":1,"fix":{"range":[8382,8382],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":211,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":211,"endColumn":1,"fix":{"range":[8385,8385],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":212,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":212,"endColumn":1,"fix":{"range":[8398,8398],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":213,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":213,"endColumn":1,"fix":{"range":[8454,8454],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/check-param-names","severity":1,"message":"Expected @param names to be \"obj, depth, result, prop, typ\". Got \"result, prop, typ\".","line":214,"column":1,"nodeType":"Block","endLine":214,"endColumn":1,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/multiline-blocks","severity":1,"message":"Should have no text on the \"0th\" line (after the `/**`).","line":214,"column":2,"nodeType":"Block","endLine":216,"endColumn":28,"fix":{"range":[8458,8539],"text":"/**\n\t * @param {Object=} result\n\t * @param {string=} prop\n\t * @param {string=} typ */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"obj\" declaration.","line":214,"column":2,"nodeType":"Block","endLine":216,"endColumn":28,"fix":{"range":[8458,8539],"text":"* @param obj\n* @param depth\n/** @param {Object=} result\n\t * @param {string=} prop\n\t * @param {string=} typ */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"depth\" declaration.","line":214,"column":2,"nodeType":"Block","endLine":216,"endColumn":28,"fix":{"range":[8458,8539],"text":"* @param obj\n* @param depth\n* @param obj\n* @param depth\n/** @param {Object=} result\n\t * @param {string=} prop\n\t * @param {string=} typ */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":214,"column":2,"nodeType":"Block","endLine":216,"endColumn":28,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/no-multi-asterisks","severity":2,"message":"Should be no multiple asterisks on end lines.","line":216,"column":1,"nodeType":"Block","endLine":216,"endColumn":1,"fix":{"range":[8458,8539],"text":"/** @param {Object=} result\n\t * @param {string=} prop\n\t  @param {string=} typ */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":217,"column":18,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":217,"endColumn":19,"fix":{"range":[8558,8558],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":217,"column":48,"nodeType":"Program","messageId":"missingClosingSpace","endLine":217,"endColumn":49,"fix":{"range":[8587,8587],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-unary-ops","severity":2,"message":"Unary word operator 'typeof' must be followed by whitespace.","line":219,"column":9,"nodeType":"UnaryExpression","messageId":"wordOperator","endLine":219,"endColumn":20,"fix":{"range":[8620,8620],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":219,"column":15,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":219,"endColumn":16,"fix":{"range":[8621,8621],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":219,"column":19,"nodeType":"Program","messageId":"missingClosingSpace","endLine":219,"endColumn":20,"fix":{"range":[8624,8624],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":220,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":220,"endColumn":7,"fix":{"range":[8633,8633],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"eqeqeq","severity":2,"message":"Expected '===' and instead saw '=='.","line":220,"column":20,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":220,"endColumn":22,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":220,"column":31,"nodeType":"Program","messageId":"missingClosingSpace","endLine":220,"endColumn":32,"fix":{"range":[8657,8657],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":221,"column":8,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":221,"endColumn":9,"fix":{"range":[8669,8669],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":221,"column":20,"nodeType":"Program","messageId":"missingClosingSpace","endLine":221,"endColumn":21,"fix":{"range":[8680,8680],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":222,"column":8,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":222,"endColumn":9,"fix":{"range":[8692,8692],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":222,"column":21,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":222,"endColumn":22,"fix":{"range":[8705,8705],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":222,"column":25,"nodeType":"Program","messageId":"missingClosingSpace","endLine":222,"endColumn":26,"fix":{"range":[8708,8708],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":222,"column":30,"nodeType":"Program","messageId":"missingClosingSpace","endLine":222,"endColumn":31,"fix":{"range":[8713,8713],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Avoid FF3 b...'.","line":222,"column":33,"nodeType":"Line","messageId":"multipleSpaces","endLine":222,"endColumn":37,"fix":{"range":[8716,8720],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"brace-style","severity":2,"message":"Statement inside of curly braces should be on next line.","line":223,"column":10,"nodeType":"Punctuator","messageId":"blockSameLine","endLine":223,"endColumn":11,"fix":{"range":[8770,8770],"text":"\n"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":223,"column":12,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":223,"endColumn":55,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":223,"column":23,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":223,"endColumn":24,"fix":{"range":[8783,8783],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":223,"column":31,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":223,"endColumn":32,"fix":{"range":[8791,8791],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":223,"column":35,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":223,"endColumn":36,"fix":{"range":[8795,8795],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":223,"column":40,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":223,"endColumn":41,"fix":{"range":[8799,8799],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":223,"column":52,"nodeType":"Program","messageId":"missingClosingSpace","endLine":223,"endColumn":53,"fix":{"range":[8811,8811],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":223,"column":53,"nodeType":"Program","messageId":"missingClosingSpace","endLine":223,"endColumn":54,"fix":{"range":[8812,8812],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"brace-style","severity":2,"message":"Closing curly brace should be on the same line as opening curly brace or on the line after the previous block.","line":223,"column":56,"nodeType":"Punctuator","messageId":"singleLineClose","endLine":223,"endColumn":57,"fix":{"range":[8815,8815],"text":"\n"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":223,"column":64,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":223,"endColumn":65,"fix":{"range":[8824,8824],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":223,"column":66,"nodeType":"Program","messageId":"missingClosingSpace","endLine":223,"endColumn":67,"fix":{"range":[8825,8825],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":227,"column":10,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":227,"endColumn":11,"fix":{"range":[8855,8855],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":227,"column":42,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":227,"endColumn":43,"fix":{"range":[8887,8887],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"eqeqeq","severity":2,"message":"Expected '!==' and instead saw '!='.","line":227,"column":47,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":227,"endColumn":49,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":227,"column":70,"nodeType":"Program","messageId":"missingClosingSpace","endLine":227,"endColumn":71,"fix":{"range":[8914,8914],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":227,"column":71,"nodeType":"Program","messageId":"missingClosingSpace","endLine":227,"endColumn":72,"fix":{"range":[8915,8915],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":230,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":230,"endColumn":1,"fix":{"range":[8922,8922],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":231,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":231,"endColumn":1,"fix":{"range":[8925,8925],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":232,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":232,"endColumn":1,"fix":{"range":[8937,8937],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":233,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":233,"endColumn":1,"fix":{"range":[9005,9005],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":234,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":234,"endColumn":1,"fix":{"range":[9078,9078],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/check-param-names","severity":1,"message":"Expected @param names to be \"seed, key, smear, j\". Got \"smear, j\".","line":235,"column":1,"nodeType":"Block","endLine":235,"endColumn":1,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/multiline-blocks","severity":1,"message":"Should have no text on the \"0th\" line (after the `/**`).","line":235,"column":2,"nodeType":"Block","endLine":236,"endColumn":26,"fix":{"range":[9082,9134],"text":"/**\n\t * @param {number=} smear\n\t * @param {number=} j */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"seed\" declaration.","line":235,"column":2,"nodeType":"Block","endLine":236,"endColumn":26,"fix":{"range":[9082,9134],"text":"* @param seed\n* @param key\n/** @param {number=} smear\n\t * @param {number=} j */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"key\" declaration.","line":235,"column":2,"nodeType":"Block","endLine":236,"endColumn":26,"fix":{"range":[9082,9134],"text":"* @param seed\n* @param key\n* @param seed\n* @param key\n/** @param {number=} smear\n\t * @param {number=} j */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":235,"column":2,"nodeType":"Block","endLine":236,"endColumn":26,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/no-multi-asterisks","severity":2,"message":"Should be no multiple asterisks on end lines.","line":236,"column":1,"nodeType":"Block","endLine":236,"endColumn":1,"fix":{"range":[9082,9134],"text":"/** @param {number=} smear\n\t  @param {number=} j */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":237,"column":17,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":237,"endColumn":18,"fix":{"range":[9152,9152],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":237,"column":37,"nodeType":"Program","messageId":"missingClosingSpace","endLine":237,"endColumn":38,"fix":{"range":[9171,9171],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-implicit-coercion","severity":2,"message":"use `seed = String(seed)` instead.","line":238,"column":3,"nodeType":"AssignmentExpression","messageId":"useRecommendation","endLine":238,"endColumn":13,"fix":{"range":[9177,9187],"text":"seed = String(seed)"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Ensure the ...'.","line":238,"column":14,"nodeType":"Line","messageId":"multipleSpaces","endLine":238,"endColumn":39,"fix":{"range":[9188,9213],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":240,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":240,"endColumn":8,"fix":{"range":[9264,9264],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":240,"column":35,"nodeType":"Program","messageId":"missingClosingSpace","endLine":240,"endColumn":36,"fix":{"range":[9291,9291],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":241,"column":7,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":241,"endColumn":8,"fix":{"range":[9302,9302],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":241,"column":15,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":241,"endColumn":16,"fix":{"range":[9310,9310],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":241,"column":17,"nodeType":"Program","messageId":"missingClosingSpace","endLine":241,"endColumn":18,"fix":{"range":[9311,9311],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":241,"column":18,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":241,"endColumn":19,"fix":{"range":[9312,9312],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":242,"column":12,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":242,"endColumn":13,"fix":{"range":[9328,9328],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":242,"column":13,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":242,"endColumn":14,"fix":{"range":[9329,9329],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '^='.","line":242,"column":14,"nodeType":"AssignmentExpression","messageId":"unexpected","endLine":242,"endColumn":43,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":242,"column":26,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":242,"endColumn":27,"fix":{"range":[9342,9342],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":242,"column":34,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":242,"endColumn":35,"fix":{"range":[9350,9350],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":242,"column":36,"nodeType":"Program","messageId":"missingClosingSpace","endLine":242,"endColumn":37,"fix":{"range":[9351,9351],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":242,"column":37,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":242,"endColumn":38,"fix":{"range":[9352,9352],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":242,"column":43,"nodeType":"Program","messageId":"missingClosingSpace","endLine":242,"endColumn":44,"fix":{"range":[9358,9358],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":242,"column":62,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":242,"endColumn":63,"fix":{"range":[9378,9378],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":242,"column":64,"nodeType":"Program","messageId":"missingClosingSpace","endLine":242,"endColumn":65,"fix":{"range":[9379,9379],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":242,"column":65,"nodeType":"Program","messageId":"missingClosingSpace","endLine":242,"endColumn":66,"fix":{"range":[9380,9380],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":245,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":245,"endColumn":8,"fix":{"range":[9407,9407],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":245,"column":16,"nodeType":"Program","messageId":"missingClosingSpace","endLine":245,"endColumn":17,"fix":{"range":[9415,9415],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"brace-style","severity":2,"message":"Statement inside of curly braces should be on next line.","line":245,"column":18,"nodeType":"Punctuator","messageId":"blockSameLine","endLine":245,"endColumn":19,"fix":{"range":[9418,9418],"text":"\n"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":245,"column":20,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":245,"endColumn":56,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":245,"column":47,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":245,"endColumn":48,"fix":{"range":[9447,9447],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":245,"column":51,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":245,"endColumn":52,"fix":{"range":[9451,9451],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":245,"column":53,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":245,"endColumn":54,"fix":{"range":[9452,9452],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":245,"column":54,"nodeType":"Program","messageId":"missingClosingSpace","endLine":245,"endColumn":55,"fix":{"range":[9453,9453],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"brace-style","severity":2,"message":"Closing curly brace should be on the same line as opening curly brace or on the line after the previous block.","line":245,"column":57,"nodeType":"Punctuator","messageId":"singleLineClose","endLine":245,"endColumn":58,"fix":{"range":[9456,9456],"text":"\n"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":249,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":249,"endColumn":1,"fix":{"range":[9477,9477],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":250,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":250,"endColumn":1,"fix":{"range":[9480,9480],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":251,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":251,"endColumn":1,"fix":{"range":[9493,9493],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":252,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":252,"endColumn":1,"fix":{"range":[9542,9542],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":253,"column":18,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":253,"endColumn":19,"fix":{"range":[9563,9563],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":253,"column":20,"nodeType":"Program","messageId":"missingClosingSpace","endLine":253,"endColumn":21,"fix":{"range":[9564,9564],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"brace-style","severity":2,"message":"Statement inside of curly braces should be on next line.","line":253,"column":22,"nodeType":"Punctuator","messageId":"blockSameLine","endLine":253,"endColumn":23,"fix":{"range":[9567,9567],"text":"\n"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":253,"column":24,"nodeType":"ReturnStatement","messageId":"exceed","endLine":253,"endColumn":47,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":253,"column":31,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":253,"endColumn":46,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":253,"column":35,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":253,"endColumn":36,"fix":{"range":[9580,9580],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":253,"column":45,"nodeType":"Program","messageId":"missingClosingSpace","endLine":253,"endColumn":46,"fix":{"range":[9589,9589],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"brace-style","severity":2,"message":"Closing curly brace should be on the same line as opening curly brace or on the line after the previous block.","line":253,"column":48,"nodeType":"Punctuator","messageId":"singleLineClose","endLine":253,"endColumn":49,"fix":{"range":[9592,9592],"text":"\n"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":255,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":255,"endColumn":1,"fix":{"range":[9595,9595],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":256,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":256,"endColumn":1,"fix":{"range":[9598,9598],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":257,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":257,"endColumn":1,"fix":{"range":[9657,9657],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":258,"column":23,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":258,"endColumn":24,"fix":{"range":[9683,9683],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":258,"column":37,"nodeType":"Program","messageId":"missingClosingSpace","endLine":258,"endColumn":38,"fix":{"range":[9696,9696],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":259,"column":25,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":259,"endColumn":26,"fix":{"range":[9724,9724],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":259,"column":41,"nodeType":"Program","messageId":"missingClosingSpace","endLine":259,"endColumn":42,"fix":{"range":[9739,9739],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":262,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":262,"endColumn":1,"fix":{"range":[9773,9773],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":263,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":263,"endColumn":1,"fix":{"range":[9776,9776],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":264,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":264,"endColumn":1,"fix":{"range":[9839,9839],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":265,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":265,"endColumn":1,"fix":{"range":[9902,9902],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":266,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":266,"endColumn":1,"fix":{"range":[9962,9962],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":267,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":267,"endColumn":1,"fix":{"range":[10025,10025],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":268,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":268,"endColumn":1,"fix":{"range":[10044,10044],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":269,"column":8,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":269,"endColumn":9,"fix":{"range":[10055,10055],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":269,"column":28,"nodeType":"Program","messageId":"missingClosingSpace","endLine":269,"endColumn":29,"fix":{"range":[10074,10074],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":272,"column":2,"nodeType":"Program","messageId":"missingClosingSpace","endLine":272,"endColumn":3,"fix":{"range":[10128,10128],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// pool: entro...'.","line":273,"column":5,"nodeType":"Line","messageId":"multipleSpaces","endLine":273,"endColumn":8,"fix":{"range":[10135,10138],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":273,"column":8,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":273,"endColumn":42,"fix":{"range":[10141,10142],"text":"P"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":274,"column":8,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":274,"endColumn":63,"fix":{"range":[10183,10184],"text":"M"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// width: each...'.","line":275,"column":6,"nodeType":"Line","messageId":"multipleSpaces","endLine":275,"endColumn":8,"fix":{"range":[10241,10243],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":275,"column":8,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":275,"endColumn":49,"fix":{"range":[10246,10247],"text":"W"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// chunks: at ...'.","line":276,"column":4,"nodeType":"Line","messageId":"multipleSpaces","endLine":276,"endColumn":8,"fix":{"range":[10288,10292],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":276,"column":8,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":276,"endColumn":59,"fix":{"range":[10295,10296],"text":"C"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// significanc...'.","line":277,"column":4,"nodeType":"Line","messageId":"multipleSpaces","endLine":277,"endColumn":8,"fix":{"range":[10347,10351],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":277,"column":8,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":277,"endColumn":68,"fix":{"range":[10354,10355],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/topten-localized.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"mw\" type.","line":12,"column":1,"nodeType":"Block","endLine":12,"endColumn":1},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wmTest\" type.","line":13,"column":1,"nodeType":"Block","endLine":13,"endColumn":1},{"ruleId":"max-len","severity":1,"message":"This line has a length of 101. Maximum allowed is 100.","line":117,"column":1,"nodeType":"Program","messageId":"max","endLine":117,"endColumn":93},{"ruleId":"max-len","severity":1,"message":"This line has a length of 117. Maximum allowed is 100.","line":122,"column":1,"nodeType":"Program","messageId":"max","endLine":122,"endColumn":109}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* global wmTest, translationsHash, wmL10nVisible, rtlLangs, portalSearchDomain */\n/**\n * This code was used to localize the top-ten language links\n * for the A/B test titled \"A/B test: browser language detection\"\n *\n * Depends on a global wmStats object generated by controller.js\n * and written to site-defs.js\n *\n * A/B test documented here:\n * https://www.mediawiki.org/wiki/Wikipedia.org_Portal_A/B_testing\n *\n * @param mw\n * @param wmTest\n */\n\n( function ( mw, wmTest ) {\n\n\tvar preferredLanguages = wmTest.userLangs,\n\t\tprimaryLang = wmTest.primaryLang,\n\t\ttopLinks = document.querySelectorAll( '.central-featured-lang' ),\n\t\ttopLinksContainer = document.querySelector( '.central-featured' ),\n\t\ttopLinkLangs,\n\t\tstoredTranslationHash = mw.storage.get( 'translationHash' ),\n\t\tstoredTranslations;\n\n\t/**\n\t * Helper function to safely parse JSON an return empty string on error.\n\t *\n\t * @param {string} json\n\t * @return {*}\n\t */\n\tfunction safelyParseJSON( json ) {\n\t\tvar parsed;\n\t\ttry {\n\t\t\tparsed = JSON.parse( json );\n\t\t} catch ( e ) {\n\t\t\tparsed = '';\n\t\t}\n\t\treturn parsed;\n\t}\n\n\tstoredTranslations = safelyParseJSON( mw.storage.get( 'storedTranslations' ) ) || {};\n\n\t// Generate an array of language codes based on the lang attributes of the top-ten links.\n\ttopLinkLangs = Array.prototype.map.call( topLinks, function ( link ) {\n\t\treturn link.getAttribute( 'lang' );\n\t} );\n\n\t/**\n\t * TranslationHash is a global variable that is a hash of all translation strings.\n\t * it is generated during the build step and placed onto the page with mustache templates.\n\t * For more info on how this hash is generated, see ../controller.js\n\t * This hash is now stored in localstorage.\n\t * If the localstorage version of the hash differs from the global variable,\n\t * that means a translation has changed and we need to ajax in new translations.\n\t */\n\tif ( storedTranslationHash !== translationsHash ) {\n\t\tmw.storage.set( 'translationHash', translationsHash );\n\t\tmw.storage.remove( 'storedTranslations' );\n\t}\n\n\t/**\n\t * Merges the preferred language codes {@link #preferredLanguages} with the\n\t * existing top ten languages {@link #topLinkLangs}.\n\t * - If a preferred language exists in the top ten, it is moved to the top of the array.\n\t * - If a preferred language doesn't exist, it is added to the array and the last language\n\t * is removed.\n\t *\n\t * Manipulates the {@link #topLinkLangs} array.\n\t */\n\tfunction mergeNewTopLinkLangs() {\n\t\tvar i, pl, plIndex, plExists, plRightSpot;\n\t\tfor ( i = 0; i < preferredLanguages.length; i++ ) {\n\t\t\tpl = preferredLanguages[ i ];\n\t\t\tplIndex = topLinkLangs.indexOf( pl );\n\t\t\tplExists = plIndex >= 0;\n\t\t\tplRightSpot = plIndex === i;\n\n\t\t\tif ( plExists ) {\n\t\t\t\tif ( !plRightSpot ) {\n\t\t\t\t\ttopLinkLangs.splice( i, 0, topLinkLangs.splice( plIndex, 1 )[ 0 ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttopLinkLangs.splice( i, 0, pl );\n\t\t\t\ttopLinkLangs.pop();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Manipulates the DOM of a top-ten item with new content.\n\t * Essentially, instead of creating new elements, we move existing elements and\n\t * replace their textContent and attributes with a different content.\n\t *\n\t * @param {HTMLElement} node A DOM Element from the top-ten links that will be modified.\n\t * @param {Object} wikiInfo The info to modify the node with.\n\t * @param {boolean} localizeVariant Whether we are only localizing to variant.\n\t */\n\tfunction updateTopLinkDOM( node, wikiInfo, localizeVariant ) {\n\t\tvar anchor = node.getElementsByTagName( 'a' )[ 0 ],\n\t\t\telePages = node.getElementsByTagName( 'small' )[ 0 ],\n\t\t\teleEntries = elePages.getElementsByTagName( 'span' )[ 0 ],\n\t\t\teleCaption = node.getElementsByTagName( 'strong' )[ 0 ];\n\n\t\tanchor.setAttribute( 'id', 'js-link-box-' + wikiInfo.lang );\n\t\tanchor.setAttribute( 'data-slogan', wikiInfo.slogan || 'The Free Encyclopedia' );\n\t\teleEntries.textContent = wikiInfo.entries || '';\n\t\tnode.setAttribute( 'lang', wikiInfo.lang );\n\n\t\tif ( !localizeVariant ) {\n\t\t\t// Some language names are placed within HTML tags.\n\t\t\t// Strip the tags for the title attribute.\n\t\t\tvar langNameStripped = wikiInfo.name.replace( /<\\/?[^>]+(>|$)/g, '' );\n\n\t\t\tanchor.setAttribute( 'href', '//' + wikiInfo.url );\n\t\t\tanchor.setAttribute( 'title', langNameStripped + ' — ' + wikiInfo.siteName + ' — ' + ( wikiInfo.slogan || '' ) );\n\t\t\t// TODO: We may want to set `innerHTML = wikiInfo.name` instead as the rendered HTML did.\n\t\t\teleCaption.textContent = langNameStripped;\n\t\t\telePages.textContent = wikiInfo.numPages + '+ ';\n\t\t\telePages.appendChild( eleEntries );\n\t\t} else {\n\t\t\t// FIXME: wikiInfo.name for the main code (e.g. zh) and variants (e.g. zh-hans) are not the same thing...\n\t\t\tanchor.setAttribute( 'title', eleCaption.textContent + ' — ' + wikiInfo.name + ' — ' + ( wikiInfo.slogan || '' ) );\n\t\t}\n\t}\n\n\t/**\n\t * Renames the top link classes to appear correctly around the globe image.\n\t * this should happen after the top links nodes have been reorganized.\n\t */\n\tfunction reorganizeTopLinkClasses() {\n\t\tvar topLink,\n\t\t\ttopLinkLang,\n\t\t\ttopLinkClass,\n\t\t\tcorrectClassName,\n\t\t\ttopLinksCorrectLangs = true,\n\t\t\ti;\n\n\t\ttopLinks = document.querySelectorAll( '.central-featured-lang' );\n\n\t\tfor ( i = 0; i < topLinks.length && topLinksCorrectLangs === true; i++ ) {\n\t\t\t/**\n\t\t\t * Get the main code, we want the lang attribute varied to zh-hans and zh-hant\n\t\t\t * for Chinese users, because the font style for them are different.\n\t\t\t */\n\t\t\ttopLinkLang = topLinks[ i ].getAttribute( 'lang' ).split( '-' )[ 0 ];\n\t\t\ttopLinksCorrectLangs = topLinkLangs.indexOf( topLinkLang ) >= 0;\n\t\t}\n\n\t\tfor ( i = 0; i < topLinks.length; i++ ) {\n\t\t\tif ( topLinksCorrectLangs ) {\n\t\t\t\ttopLink = topLinks[ i ];\n\t\t\t\ttopLinkClass = topLink.className;\n\t\t\t\tcorrectClassName = 'central-featured-lang lang' + ( i + 1 );\n\n\t\t\t\tif ( topLinkClass !== correctClassName ) {\n\t\t\t\t\ttopLink.className = correctClassName;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves top-ten item info. via ajax.\n\t * On every successful request, we update the top-link DOM, create the localized slogan, and\n\t * reorganize the top-link classes. Each of these methods check to see if the expected\n\t * (i.e. final) data exists before executing. This accomodates both synchronous and\n\t * asynchronous execution.\n\t *\n\t * After a successful request, the data is appended to a localStorage variable to prevent\n\t * subsequest ajax requests.\n\t *\n\t * @param {HTMLElement} node A DOM node that will be modified with new info upon ajax success.\n\t * @param {string} lang Language code for which to get new wiki info.\n\t * @param {boolean} localizeVariant Whether we are only localizing to variant.\n\t */\n\tfunction getAjaxTranslation( node, lang, localizeVariant ) {\n\n\t\tvar i18nReq = new XMLHttpRequest(),\n\t\t\twikiInfo;\n\n\t\ti18nReq.open( 'GET', encodeURI( 'portal/' + portalSearchDomain + '/assets/l10n/' + lang + '-' + translationsHash + '.json' ), true );\n\n\t\ti18nReq.onload = function () {\n\n\t\t\tif ( i18nReq.status !== 200 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twikiInfo = safelyParseJSON( this.responseText );\n\n\t\t\tif ( wikiInfo ) {\n\t\t\t\tupdateTopLinkDOM( node, wikiInfo, localizeVariant );\n\t\t\t\treorganizeTopLinkClasses();\n\t\t\t\tstoredTranslations = safelyParseJSON( mw.storage.get( 'storedTranslations' ) ) || {};\n\t\t\t\tstoredTranslations[ lang ] = wikiInfo;\n\t\t\t\tmw.storage.set( 'storedTranslations', JSON.stringify( storedTranslations ) );\n\t\t\t}\n\t\t};\n\n\t\ti18nReq.send();\n\t}\n\n\t/**\n\t * Determines whether to ajax in new language info or use it from localStorage.\n\t *\n\t * @param {HTMLElement} node The DOM node that will be modified with new info.\n\t * @param {string} lang The language code with which to modify the node.\n\t * @param {boolean} localizeVariant Whether we are only localizing to variant.\n\t */\n\tfunction localizeTopLink( node, lang, localizeVariant ) {\n\t\tvar translations = storedTranslations;\n\n\t\tlocalizeVariant = localizeVariant || false;\n\n\t\tif ( translations[ lang ] ) {\n\t\t\tupdateTopLinkDOM( node, translations[ lang ], localizeVariant );\n\t\t} else {\n\t\t\tgetAjaxTranslation( node, lang, localizeVariant );\n\t\t}\n\t}\n\n\t/**\n\t * Looks for a top-link DOM node that can be re-purposed with new content.\n\t * Returns the first DOM node that does not have a lang attribute that is\n\t * one of topLinkLangs.\n\t *\n\t * @return {HTMLElement} Node that can be reused with new content.\n\t */\n\tfunction findReusableTopLink() {\n\t\tvar reusableTopLink = null,\n\t\t\ttopLinkLang,\n\t\t\ti;\n\n\t\tfor ( i = topLinkLangs.length - 1; i >= 0 && reusableTopLink === null; i-- ) {\n\t\t\ttopLinkLang = topLinks[ i ].getAttribute( 'lang' );\n\t\t\tif ( topLinkLangs.indexOf( topLinkLang ) < 0 ) {\n\t\t\t\treusableTopLink = topLinks[ i ];\n\t\t\t}\n\t\t}\n\t\treturn reusableTopLink;\n\t}\n\n\t/**\n\t * Reorganizes the DOM order of top links based on the {@link #topLinkLangs} array.\n\t * If a preferred language in `topLinkLangs` does not exist in\n\t * the top ten, then the last node in the top ten is manipulated\n\t * to contain the new language.\n\t */\n\tfunction organizeTopLinks() {\n\t\tvar i,\n\t\t\ttopLinkLang,\n\t\t\ttopLinkNode,\n\t\t\ttopLinkNodeIndex,\n\t\t\trepurposedTopLink;\n\n\t\tfor ( i = 0; i < topLinkLangs.length; i++ ) {\n\n\t\t\ttopLinks = document.querySelectorAll( '.central-featured-lang' );\n\t\t\ttopLinkLang = topLinkLangs[ i ];\n\t\t\ttopLinkNode = document.querySelector( '.central-featured-lang[lang=' + topLinkLang + ']' );\n\n\t\t\tif ( topLinkNode ) {\n\t\t\t\ttopLinkNodeIndex = Array.prototype.indexOf.call( topLinks, topLinkNode );\n\t\t\t\tif ( topLinkNodeIndex !== i ) {\n\t\t\t\t\ttopLinksContainer.insertBefore( topLinkNode, topLinks[ i ] );\n\t\t\t\t}\n\t\t\t\t// Apply localization in variant when needed.\n\t\t\t\tif ( preferredLanguages[ 0 ] === 'zh' && topLinkNode.firstElementChild.classList.contains( 'localize-variant' ) ) {\n\t\t\t\t\tlocalizeTopLink( topLinkNode, primaryLang, true );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trepurposedTopLink = findReusableTopLink();\n\t\t\t\tlocalizeTopLink( repurposedTopLink, topLinkLang );\n\t\t\t\ttopLinksContainer.insertBefore( repurposedTopLink, topLinks[ i ] );\n\t\t\t}\n\t\t\t( topLinkNode || repurposedTopLink ).setAttribute( 'dir', rtlLangs.indexOf( topLinkLang ) >= 0 ? 'rtl' : 'ltr' );\n\t\t}\n\t}\n\n\t// Skip if it took too long\n\tif ( wmL10nVisible.ready ) {\n\t\treturn;\n\t}\n\tmergeNewTopLinkLangs();\n\torganizeTopLinks();\n\treorganizeTopLinkClasses();\n\n}( mw, wmTest ) );\n","usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/typeahead-init.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/underscore.partial.js","messages":[],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Unexpected 'var' declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable.","line":31,"column":5,"nodeType":"VariableDeclarator","messageId":"globalNonLexicalBinding","endLine":31,"endColumn":16,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-use-before-define","severity":2,"message":"'_' was used before it was defined.","line":31,"column":9,"nodeType":"Identifier","messageId":"usedBeforeDefined","endLine":31,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":33,"column":29,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":33,"endColumn":30,"fix":{"range":[1306,1306],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 2.","line":34,"column":1,"nodeType":"Keyword","messageId":"wrongIndentation","endLine":34,"endColumn":3,"fix":{"range":[1311,1313],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"unicorn/prefer-date-now","severity":2,"message":"Prefer `Date.now()` over `Date#getTime()`.","line":34,"column":21,"nodeType":"Identifier","messageId":"prefer-date-now-over-methods","endLine":34,"endColumn":28,"fix":{"range":[1320,1340],"text":"Date.now()"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 0 tabs but found 1.","line":35,"column":1,"nodeType":"Punctuator","messageId":"wrongIndentation","endLine":35,"endColumn":2,"fix":{"range":[1342,1343],"text":""},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":37,"column":22,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":37,"endColumn":23,"fix":{"range":[1369,1369],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":37,"column":22,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":37,"endColumn":23,"fix":{"range":[1368,1368],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":37,"column":42,"nodeType":"Program","messageId":"missingClosingSpace","endLine":37,"endColumn":43,"fix":{"range":[1388,1388],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":41,"column":5,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":41,"endColumn":6,"fix":{"range":[1465,1465],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":41,"column":14,"nodeType":"Program","messageId":"missingClosingSpace","endLine":41,"endColumn":15,"fix":{"range":[1473,1473],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":41,"column":16,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":41,"endColumn":29,"fix":{"range":[1475,1488],"text":"{options = {};}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":42,"column":22,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":42,"endColumn":23,"fix":{"range":[1510,1510],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":45,"column":22,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":45,"endColumn":23,"fix":{"range":[1609,1609],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":45,"column":36,"nodeType":"Program","messageId":"missingClosingSpace","endLine":45,"endColumn":37,"fix":{"range":[1622,1622],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":46,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":46,"endColumn":7,"fix":{"range":[1631,1631],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":46,"column":15,"nodeType":"Program","messageId":"missingClosingSpace","endLine":46,"endColumn":16,"fix":{"range":[1639,1639],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":46,"column":17,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":46,"endColumn":39,"fix":{"range":[1641,1663],"text":"{context = args = null;}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":48,"column":17,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":48,"endColumn":18,"fix":{"range":[1684,1684],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":50,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":50,"endColumn":7,"fix":{"range":[1716,1716],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":50,"column":45,"nodeType":"Program","messageId":"missingClosingSpace","endLine":50,"endColumn":46,"fix":{"range":[1754,1754],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":50,"column":47,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":50,"endColumn":62,"fix":{"range":[1756,1771],"text":"{previous = now;}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":51,"column":26,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":51,"endColumn":27,"fix":{"range":[1798,1798],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":51,"column":41,"nodeType":"Program","messageId":"missingClosingSpace","endLine":51,"endColumn":42,"fix":{"range":[1812,1812],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":54,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":54,"endColumn":7,"fix":{"range":[1859,1859],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":54,"column":41,"nodeType":"Program","messageId":"missingClosingSpace","endLine":54,"endColumn":42,"fix":{"range":[1893,1893],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":55,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":55,"endColumn":8,"fix":{"range":[1904,1904],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":55,"column":15,"nodeType":"Program","messageId":"missingClosingSpace","endLine":55,"endColumn":16,"fix":{"range":[1911,1911],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":56,"column":17,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":56,"endColumn":18,"fix":{"range":[1932,1932],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":56,"column":25,"nodeType":"Program","messageId":"missingClosingSpace","endLine":56,"endColumn":26,"fix":{"range":[1939,1939],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":60,"column":23,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":60,"endColumn":24,"fix":{"range":[2009,2009],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":60,"column":37,"nodeType":"Program","messageId":"missingClosingSpace","endLine":60,"endColumn":38,"fix":{"range":[2022,2022],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":61,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":61,"endColumn":8,"fix":{"range":[2032,2032],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":61,"column":16,"nodeType":"Program","messageId":"missingClosingSpace","endLine":61,"endColumn":17,"fix":{"range":[2040,2040],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":61,"column":18,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":61,"endColumn":40,"fix":{"range":[2042,2064],"text":"{context = args = null;}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":62,"column":13,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":62,"endColumn":14,"fix":{"range":[2078,2078],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":62,"column":52,"nodeType":"Program","messageId":"missingClosingSpace","endLine":62,"endColumn":53,"fix":{"range":[2116,2116],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":63,"column":24,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":63,"endColumn":25,"fix":{"range":[2144,2144],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":63,"column":41,"nodeType":"Program","messageId":"missingClosingSpace","endLine":63,"endColumn":42,"fix":{"range":[2160,2160],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":69,"column":22,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":69,"endColumn":23,"fix":{"range":[2214,2214],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":69,"column":22,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":69,"endColumn":23,"fix":{"range":[2213,2213],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":69,"column":44,"nodeType":"Program","messageId":"missingClosingSpace","endLine":69,"endColumn":45,"fix":{"range":[2235,2235],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":72,"column":22,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":72,"endColumn":23,"fix":{"range":[2309,2309],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":75,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":75,"endColumn":7,"fix":{"range":[2355,2355],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":75,"column":31,"nodeType":"Program","messageId":"missingClosingSpace","endLine":75,"endColumn":32,"fix":{"range":[2379,2379],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":76,"column":24,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":76,"endColumn":25,"fix":{"range":[2407,2407],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":76,"column":43,"nodeType":"Program","messageId":"missingClosingSpace","endLine":76,"endColumn":44,"fix":{"range":[2425,2425],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":79,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":79,"endColumn":8,"fix":{"range":[2465,2465],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":79,"column":18,"nodeType":"Program","messageId":"missingClosingSpace","endLine":79,"endColumn":19,"fix":{"range":[2475,2475],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":80,"column":24,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":80,"endColumn":25,"fix":{"range":[2503,2503],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":80,"column":38,"nodeType":"Program","messageId":"missingClosingSpace","endLine":80,"endColumn":39,"fix":{"range":[2516,2516],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":81,"column":8,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":81,"endColumn":9,"fix":{"range":[2527,2527],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":81,"column":17,"nodeType":"Program","messageId":"missingClosingSpace","endLine":81,"endColumn":18,"fix":{"range":[2535,2535],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":81,"column":19,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":81,"endColumn":41,"fix":{"range":[2537,2559],"text":"{context = args = null;}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":86,"column":17,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":86,"endColumn":18,"fix":{"range":[2590,2590],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":91,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":91,"endColumn":7,"fix":{"range":[2701,2701],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":91,"column":15,"nodeType":"Program","messageId":"missingClosingSpace","endLine":91,"endColumn":16,"fix":{"range":[2709,2709],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":91,"column":17,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":91,"endColumn":51,"fix":{"range":[2711,2745],"text":"{timeout = setTimeout(later, wait);}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":91,"column":37,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":91,"endColumn":38,"fix":{"range":[2732,2732],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":91,"column":49,"nodeType":"Program","messageId":"missingClosingSpace","endLine":91,"endColumn":50,"fix":{"range":[2743,2743],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":92,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":92,"endColumn":7,"fix":{"range":[2752,2752],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":92,"column":14,"nodeType":"Program","messageId":"missingClosingSpace","endLine":92,"endColumn":15,"fix":{"range":[2759,2759],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":93,"column":23,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":93,"endColumn":24,"fix":{"range":[2786,2786],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":93,"column":37,"nodeType":"Program","messageId":"missingClosingSpace","endLine":93,"endColumn":38,"fix":{"range":[2799,2799],"text":" "},"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/wm-portal.js","messages":[],"suppressedMessages":[{"ruleId":"security/detect-unsafe-regex","severity":1,"message":"Unsafe Regular Expression","line":229,"column":39,"nodeType":"Literal","endLine":229,"endColumn":103,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/wm-test.base.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/common/assets/js/wm-typeahead.js","messages":[],"suppressedMessages":[{"ruleId":"no-prototype-builtins","severity":2,"message":"Do not access Object.prototype method 'hasOwnProperty' from target object.","line":54,"column":13,"nodeType":"CallExpression","messageId":"prototypeBuildIn","endLine":54,"endColumn":27,"suggestions":[{"messageId":"callObjectPrototype","data":{"prop":"hasOwnProperty"},"fix":{"range":[1684,1703],"text":"Object.prototype.hasOwnProperty.call(obj, "},"desc":"Call Object.prototype.hasOwnProperty explicitly."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":217,"column":18,"nodeType":"NewExpression","endLine":217,"endColumn":58,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikibooks.org/controller.js","messages":[],"suppressedMessages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":120,"column":3,"nodeType":"CallExpression","endLine":120,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikibooks.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikibooks.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikimedia.org/controller.js","messages":[],"suppressedMessages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":47,"column":3,"nodeType":"CallExpression","endLine":47,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikimedia.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikinews.org/controller.js","messages":[],"suppressedMessages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":120,"column":3,"nodeType":"CallExpression","endLine":120,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikinews.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikinews.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikipedia.org/assets/js/event-logging-lite.js","messages":[],"suppressedMessages":[{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":99,"column":13,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":99,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":102,"column":18,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":102,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '>>>'.","line":102,"column":18,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":102,"endColumn":42,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '<<'.","line":102,"column":26,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":102,"endColumn":40,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":102,"column":28,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":102,"endColumn":33,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-prototype-builtins","severity":2,"message":"Do not access Object.prototype method 'hasOwnProperty' from target object.","line":134,"column":29,"nodeType":"CallExpression","messageId":"prototypeBuildIn","endLine":134,"endColumn":43,"suggestions":[{"messageId":"callObjectPrototype","data":{"prop":"hasOwnProperty"},"fix":{"range":[3945,3978],"text":"Object.prototype.hasOwnProperty.call(schema.properties, "},"desc":"Call Object.prototype.hasOwnProperty explicitly."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-prototype-builtins","severity":2,"message":"Do not access Object.prototype method 'hasOwnProperty' from target object.","line":142,"column":15,"nodeType":"CallExpression","messageId":"prototypeBuildIn","endLine":142,"endColumn":29,"suggestions":[{"messageId":"callObjectPrototype","data":{"prop":"hasOwnProperty"},"fix":{"range":[4138,4157],"text":"Object.prototype.hasOwnProperty.call(obj, "},"desc":"Call Object.prototype.hasOwnProperty explicitly."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'client_dt' is not in camel case.","line":184,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":184,"endColumn":14,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikipedia.org/assets/js/wikipedia-org-event-logging.js","messages":[],"suppressedMessages":[{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before 'nodes'.","line":86,"column":27,"nodeType":"Identifier","messageId":"multipleSpaces","endLine":86,"endColumn":30,"fix":{"range":[1825,1828],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before 'nodes'.","line":87,"column":20,"nodeType":"Identifier","messageId":"multipleSpaces","endLine":87,"endColumn":30,"fix":{"range":[1922,1932],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before 'nodes'.","line":91,"column":28,"nodeType":"Identifier","messageId":"multipleSpaces","endLine":91,"endColumn":30,"fix":{"range":[2345,2347],"text":" "},"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikipedia.org/assets/js/wm-test.extra.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikipedia.org/controller.js","messages":[],"suppressedMessages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":122,"column":3,"nodeType":"CallExpression","endLine":122,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikipedia.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikipedia.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikiquote.org/controller.js","messages":[],"suppressedMessages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":120,"column":3,"nodeType":"CallExpression","endLine":120,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikiquote.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikiquote.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikiversity.org/controller.js","messages":[],"suppressedMessages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":120,"column":3,"nodeType":"CallExpression","endLine":120,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikiversity.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikiversity.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikivoyage.org/controller.js","messages":[],"suppressedMessages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":120,"column":3,"nodeType":"CallExpression","endLine":120,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikivoyage.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wikivoyage.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wiktionary.org/controller.js","messages":[],"suppressedMessages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":120,"column":3,"nodeType":"CallExpression","endLine":120,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-len","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wiktionary.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/src/wiktionary.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]}]

--- end ---
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-design-tokens@2.2.1',
npm WARN EBADENGINE   required: { node: '>=20', npm: '>=10.8.1' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated @types/browserslist@4.15.0: This is a stub types definition. browserslist provides its own type definitions, so you do not need this installed.
npm WARN deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated flatten@1.0.3: flatten is deprecated in favor of utility frameworks such as lodash.
npm WARN deprecated @babel/plugin-proposal-private-property-in-object@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.
npm WARN deprecated @babel/plugin-proposal-unicode-property-regex@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.
npm WARN deprecated @babel/plugin-proposal-numeric-separator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.
npm WARN deprecated @babel/plugin-proposal-optional-catch-binding@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.
npm WARN deprecated @babel/plugin-proposal-nullish-coalescing-operator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.
npm WARN deprecated @babel/plugin-proposal-private-methods@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.
npm WARN deprecated @babel/plugin-proposal-json-strings@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.
npm WARN deprecated @babel/plugin-proposal-dynamic-import@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.
npm WARN deprecated @babel/plugin-proposal-export-namespace-from@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.
npm WARN deprecated @babel/plugin-proposal-logical-assignment-operators@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.
npm WARN deprecated @babel/plugin-proposal-class-static-block@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.
npm WARN deprecated @babel/plugin-proposal-class-properties@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
npm WARN deprecated @babel/plugin-proposal-async-generator-functions@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated @babel/plugin-proposal-optional-chaining@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated @babel/plugin-proposal-object-rest-spread@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated gulp-util@3.0.8: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated phantomjs-prebuilt@2.1.16: this package is now deprecated
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated postcss-cssnext@3.1.1: 'postcss-cssnext' has been deprecated in favor of 'postcss-preset-env'. Read more at https://moox.io/blog/deprecating-cssnext/
npm WARN deprecated svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
npm WARN deprecated core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
--- stdout ---

added 1670 packages, and audited 1671 packages in 28s

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

102 vulnerabilities (1 low, 76 moderate, 23 high, 2 critical)

To address issues that do not require attention, run:
  npm audit fix

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

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
33 sources checked
  /src/repo/src/common/assets/postcss/_app-badge.css
  /src/repo/src/common/assets/postcss/_base-portal.css
  /src/repo/src/common/assets/postcss/_base.css
  /src/repo/src/common/assets/postcss/_buttons.css
  /src/repo/src/common/assets/postcss/_central-featured.css
  /src/repo/src/common/assets/postcss/_central-textlogo.css
  /src/repo/src/common/assets/postcss/_footer.css
  /src/repo/src/common/assets/postcss/_forms.css
  /src/repo/src/common/assets/postcss/_localization.css
  /src/repo/src/common/assets/postcss/_media-print.css
  /src/repo/src/common/assets/postcss/_other-languages-bookshelf.css
  /src/repo/src/common/assets/postcss/_other-languages.css
  /src/repo/src/common/assets/postcss/_other-projects.css
  /src/repo/src/common/assets/postcss/_search-language-picker.css
  /src/repo/src/common/assets/postcss/_search-suggestions.css
  /src/repo/src/common/assets/postcss/_search.css
  /src/repo/src/common/assets/postcss/_vars.css
  /src/repo/src/common/assets/postcss/_wm-portal.css
  /src/repo/src/wikibooks.org/assets/postcss/_wikibooks-custom.css
  /src/repo/src/wikibooks.org/assets/postcss/style.css
  /src/repo/src/wikimedia.org/assets/postcss/_wikimedia-custom.css
  /src/repo/src/wikimedia.org/assets/postcss/style.css
  /src/repo/src/wikinews.org/assets/postcss/_wikinews-custom.css
  /src/repo/src/wikinews.org/assets/postcss/style.css
  /src/repo/src/wikipedia.org/assets/postcss/style.css
  /src/repo/src/wikiquote.org/assets/postcss/_wikibooks-custom.css
  /src/repo/src/wikiquote.org/assets/postcss/style.css
  /src/repo/src/wikiversity.org/assets/postcss/_wikinews-custom.css
  /src/repo/src/wikiversity.org/assets/postcss/style.css
  /src/repo/src/wikivoyage.org/assets/postcss/_wikivoyage-custom.css
  /src/repo/src/wikivoyage.org/assets/postcss/style.css
  /src/repo/src/wiktionary.org/assets/postcss/_wiktionary-custom.css
  /src/repo/src/wiktionary.org/assets/postcss/style.css

0 problems found
--- stdout ---

> test
> npm -s run lint:styles && npm -s run lint:js


/src/repo/data/site-stats.js
  140:14  warning  Found readFileSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  150:8   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/data/stats.js
   50:1   warning  The type 'sort' is undefined                                               jsdoc/no-undefined-types
   50:1   warning  The type 'latin' is undefined                                              jsdoc/no-undefined-types
   88:15  warning  Found readdirSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
   91:21  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  302:1   warning  Missing JSDoc @return type                                                 jsdoc/require-returns-type
  308:1   warning  This line has a length of 130. Maximum allowed is 100                      max-len
  322:1   warning  This line has a length of 101. Maximum allowed is 100                      max-len

/src/repo/data/utils.js
  13:3  warning  Found unlink from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  37:5  warning  Found stat from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename

/src/repo/gulpfile.js/prod.js
  49:8   warning  Found existsSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  50:4   warning  Found rmdirSync from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename
  55:1   warning  This line has a length of 108. Maximum allowed is 100                     max-len
  68:7   warning  Found existsSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  70:3   warning  Found readdirSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  72:22  warning  Found unlinkSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename

/src/repo/gulpfile.js/sprites.js
  16:4  warning  Found unlink from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/src/common/assets/js/page-localized.js
  14:1  warning  Missing JSDoc @param "wmTest" type            jsdoc/require-param-type
  15:1  warning  Missing JSDoc @param "translationsHash" type  jsdoc/require-param-type
  16:1  warning  Missing JSDoc @param "mw" type                jsdoc/require-param-type
  17:1  warning  Missing JSDoc @param "rtlLangs" type          jsdoc/require-param-type

/src/repo/src/common/assets/js/topten-localized.js
   12:1  warning  Missing JSDoc @param "mw" type                         jsdoc/require-param-type
   13:1  warning  Missing JSDoc @param "wmTest" type                     jsdoc/require-param-type
  117:1  warning  This line has a length of 101. Maximum allowed is 100  max-len
  122:1  warning  This line has a length of 117. Maximum allowed is 100  max-len

✖ 26 problems (0 errors, 26 warnings)


--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@koa/cors": {
      "name": "@koa/cors",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1095223,
          "name": "@koa/cors",
          "dependency": "@koa/cors",
          "title": "Overly permissive origin policy",
          "url": "https://github.com/advisories/GHSA-qxrj-hx23-xp82",
          "severity": "high",
          "cwe": [
            "CWE-346"
          ],
          "cvss": {
            "score": 8.6,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N"
          },
          "range": "<5.0.0"
        }
      ],
      "effects": [
        "es-dev-server"
      ],
      "range": "<5.0.0",
      "nodes": [
        "node_modules/@koa/cors"
      ],
      "fixAvailable": true
    },
    "anymatch": {
      "name": "anymatch",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "micromatch"
      ],
      "effects": [
        "chokidar",
        "glob-watcher"
      ],
      "range": "1.2.0 - 2.0.0",
      "nodes": [
        "node_modules/glob-watcher/node_modules/anymatch"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "autoprefixer": {
      "name": "autoprefixer",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.0.20131222 - 8.6.5",
      "nodes": [
        "node_modules/autoprefixer"
      ],
      "fixAvailable": true
    },
    "braces": {
      "name": "braces",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098094,
          "name": "braces",
          "dependency": "braces",
          "title": "Uncontrolled resource consumption in braces",
          "url": "https://github.com/advisories/GHSA-grv7-fg5c-xmjg",
          "severity": "high",
          "cwe": [
            "CWE-400",
            "CWE-1050"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<3.0.3"
        }
      ],
      "effects": [
        "chokidar",
        "micromatch"
      ],
      "range": "<3.0.3",
      "nodes": [
        "node_modules/findup-sync/node_modules/braces",
        "node_modules/glob-watcher/node_modules/braces",
        "node_modules/matchdep/node_modules/braces"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "browserslist-useragent": {
      "name": "browserslist-useragent",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "useragent"
      ],
      "effects": [],
      "range": "<=3.1.4",
      "nodes": [
        "node_modules/browserslist-useragent"
      ],
      "fixAvailable": true
    },
    "cheerio": {
      "name": "cheerio",
      "severity": "high",
      "isDirect": false,
      "via": [
        "css-select",
        "lodash.pick"
      ],
      "effects": [
        "gulp-inline"
      ],
      "range": "0.19.0 - 1.0.0-rc.12",
      "nodes": [
        "node_modules/cheerio"
      ],
      "fixAvailable": {
        "name": "gulp-inline",
        "version": "0.1.2",
        "isSemVerMajor": true
      }
    },
    "chokidar": {
      "name": "chokidar",
      "severity": "high",
      "isDirect": false,
      "via": [
        "anymatch",
        "braces",
        "readdirp"
      ],
      "effects": [
        "glob-watcher"
      ],
      "range": "1.3.0 - 2.1.8",
      "nodes": [
        "node_modules/glob-watcher/node_modules/chokidar"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "color": {
      "name": "color",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "color-string"
      ],
      "effects": [
        "css-color-function"
      ],
      "range": "<=0.11.4",
      "nodes": [
        "node_modules/color"
      ],
      "fixAvailable": true
    },
    "color-string": {
      "name": "color-string",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1089718,
          "name": "color-string",
          "dependency": "color-string",
          "title": "Regular Expression Denial of Service (ReDOS)",
          "url": "https://github.com/advisories/GHSA-257v-vj4p-3w2h",
          "severity": "moderate",
          "cwe": [
            "CWE-770"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<1.5.5"
        }
      ],
      "effects": [
        "color"
      ],
      "range": "<1.5.5",
      "nodes": [
        "node_modules/color/node_modules/color-string"
      ],
      "fixAvailable": true
    },
    "cross-spawn": {
      "name": "cross-spawn",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1104663,
          "name": "cross-spawn",
          "dependency": "cross-spawn",
          "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn",
          "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<6.0.6"
        }
      ],
      "effects": [
        "pre-commit"
      ],
      "range": "<6.0.6",
      "nodes": [
        "node_modules/pre-commit/node_modules/cross-spawn"
      ],
      "fixAvailable": {
        "name": "pre-commit",
        "version": "1.0.10",
        "isSemVerMajor": true
      }
    },
    "css-color-function": {
      "name": "css-color-function",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "color"
      ],
      "effects": [
        "postcss-color-function"
      ],
      "range": "*",
      "nodes": [
        "node_modules/css-color-function"
      ],
      "fixAvailable": true
    },
    "css-declaration-sorter": {
      "name": "css-declaration-sorter",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=5.1.2",
      "nodes": [
        "node_modules/css-declaration-sorter"
      ],
      "fixAvailable": true
    },
    "css-select": {
      "name": "css-select",
      "severity": "high",
      "isDirect": false,
      "via": [
        "nth-check"
      ],
      "effects": [
        "cheerio",
        "svgo"
      ],
      "range": "<=3.1.0",
      "nodes": [
        "node_modules/css-select",
        "node_modules/svgo/node_modules/css-select"
      ],
      "fixAvailable": {
        "name": "gulp-inline",
        "version": "0.1.2",
        "isSemVerMajor": true
      }
    },
    "cssnano": {
      "name": "cssnano",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "cssnano-preset-default",
        "postcss"
      ],
      "effects": [],
      "range": "<=4.1.11",
      "nodes": [
        "node_modules/cssnano"
      ],
      "fixAvailable": {
        "name": "cssnano",
        "version": "7.1.0",
        "isSemVerMajor": true
      }
    },
    "cssnano-preset-default": {
      "name": "cssnano-preset-default",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "css-declaration-sorter",
        "cssnano-util-raw-cache",
        "postcss",
        "postcss-calc",
        "postcss-colormin",
        "postcss-convert-values",
        "postcss-discard-comments",
        "postcss-discard-duplicates",
        "postcss-discard-empty",
        "postcss-discard-overridden",
        "postcss-merge-longhand",
        "postcss-merge-rules",
        "postcss-minify-font-values",
        "postcss-minify-gradients",
        "postcss-minify-params",
        "postcss-minify-selectors",
        "postcss-normalize-charset",
        "postcss-normalize-display-values",
        "postcss-normalize-positions",
        "postcss-normalize-repeat-style",
        "postcss-normalize-string",
        "postcss-normalize-timing-functions",
        "postcss-normalize-unicode",
        "postcss-normalize-url",
        "postcss-normalize-whitespace",
        "postcss-ordered-values",
        "postcss-reduce-initial",
        "postcss-reduce-transforms",
        "postcss-svgo",
        "postcss-unique-selectors"
      ],
      "effects": [
        "cssnano"
      ],
      "range": "<=4.0.8",
      "nodes": [
        "node_modules/cssnano-preset-default"
      ],
      "fixAvailable": {
        "name": "cssnano",
        "version": "7.1.0",
        "isSemVerMajor": true
      }
    },
    "cssnano-util-raw-cache": {
      "name": "cssnano-util-raw-cache",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/cssnano-util-raw-cache"
      ],
      "fixAvailable": true
    },
    "es-dev-server": {
      "name": "es-dev-server",
      "severity": "high",
      "isDirect": true,
      "via": [
        "@koa/cors",
        "browserslist-useragent",
        "useragent"
      ],
      "effects": [],
      "range": ">=1.24.1",
      "nodes": [
        "node_modules/es-dev-server"
      ],
      "fixAvailable": true
    },
    "findup-sync": {
      "name": "findup-sync",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "micromatch"
      ],
      "effects": [
        "liftoff",
        "matchdep"
      ],
      "range": "0.4.0 - 3.0.0",
      "nodes": [
        "node_modules/findup-sync",
        "node_modules/matchdep/node_modules/findup-sync"
      ],
      "fixAvailable": true
    },
    "form-data": {
      "name": "form-data",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1106509,
          "name": "form-data",
          "dependency": "form-data",
          "title": "form-data uses unsafe random function in form-data for choosing boundary",
          "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4",
          "severity": "critical",
          "cwe": [
            "CWE-330"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<2.5.4"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<2.5.4",
      "nodes": [
        "node_modules/form-data"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "glob-watcher": {
      "name": "glob-watcher",
      "severity": "high",
      "isDirect": false,
      "via": [
        "anymatch",
        "chokidar"
      ],
      "effects": [
        "gulp"
      ],
      "range": "5.0.0 - 5.0.5",
      "nodes": [
        "node_modules/glob-watcher"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "gulp": {
      "name": "gulp",
      "severity": "high",
      "isDirect": true,
      "via": [
        "glob-watcher",
        "gulp-cli"
      ],
      "effects": [],
      "range": "4.0.0 - 4.0.2",
      "nodes": [
        "node_modules/gulp"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "gulp-cli": {
      "name": "gulp-cli",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "liftoff",
        "matchdep"
      ],
      "effects": [],
      "range": "1.3.0 - 2.3.0",
      "nodes": [
        "node_modules/gulp-cli"
      ],
      "fixAvailable": true
    },
    "gulp-compile-handlebars": {
      "name": "gulp-compile-handlebars",
      "severity": "high",
      "isDirect": true,
      "via": [
        "gulp-util"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/gulp-compile-handlebars"
      ],
      "fixAvailable": false
    },
    "gulp-htmlmin": {
      "name": "gulp-htmlmin",
      "severity": "high",
      "isDirect": true,
      "via": [
        "html-minifier"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/gulp-htmlmin"
      ],
      "fixAvailable": false
    },
    "gulp-inline": {
      "name": "gulp-inline",
      "severity": "high",
      "isDirect": true,
      "via": [
        "cheerio",
        "gulp-util"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/gulp-inline"
      ],
      "fixAvailable": {
        "name": "gulp-inline",
        "version": "0.1.2",
        "isSemVerMajor": true
      }
    },
    "gulp-postcss": {
      "name": "gulp-postcss",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=8.0.0",
      "nodes": [
        "node_modules/gulp-postcss"
      ],
      "fixAvailable": {
        "name": "gulp-postcss",
        "version": "10.0.0",
        "isSemVerMajor": true
      }
    },
    "gulp-svg-sprite": {
      "name": "gulp-svg-sprite",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "svg-sprite"
      ],
      "effects": [],
      "range": "1.3.0 - 1.5.0",
      "nodes": [
        "node_modules/gulp-svg-sprite"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "gulp-util": {
      "name": "gulp-util",
      "severity": "high",
      "isDirect": false,
      "via": [
        "lodash.template"
      ],
      "effects": [
        "gulp-compile-handlebars",
        "gulp-inline"
      ],
      "range": ">=1.1.0",
      "nodes": [
        "node_modules/gulp-util"
      ],
      "fixAvailable": false
    },
    "html-minifier": {
      "name": "html-minifier",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1105440,
          "name": "html-minifier",
          "dependency": "html-minifier",
          "title": "kangax html-minifier REDoS vulnerability",
          "url": "https://github.com/advisories/GHSA-pfq8-rq6v-vf5m",
          "severity": "high",
          "cwe": [
            "CWE-400",
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<=4.0.0"
        }
      ],
      "effects": [
        "gulp-htmlmin"
      ],
      "range": "*",
      "nodes": [
        "node_modules/html-minifier"
      ],
      "fixAvailable": false
    },
    "koa": {
      "name": "koa",
      "severity": "low",
      "isDirect": false,
      "via": [
        {
          "source": 1106793,
          "name": "koa",
          "dependency": "koa",
          "title": "Koa Open Redirect via Referrer Header (User-Controlled)",
          "url": "https://github.com/advisories/GHSA-jgmv-j7ww-jx2x",
          "severity": "low",
          "cwe": [
            "CWE-601"
          ],
          "cvss": {
            "score": 3.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:L/A:N"
          },
          "range": ">=2.0.0 <2.16.2"
        }
      ],
      "effects": [],
      "range": "2.0.0 - 2.16.1",
      "nodes": [
        "node_modules/koa"
      ],
      "fixAvailable": true
    },
    "liftoff": {
      "name": "liftoff",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "findup-sync"
      ],
      "effects": [
        "gulp-cli"
      ],
      "range": "2.2.3 - 3.1.0",
      "nodes": [
        "node_modules/liftoff"
      ],
      "fixAvailable": true
    },
    "lodash.pick": {
      "name": "lodash.pick",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1096303,
          "name": "lodash.pick",
          "dependency": "lodash.pick",
          "title": "Prototype Pollution in lodash",
          "url": "https://github.com/advisories/GHSA-p6mc-m468-83gw",
          "severity": "high",
          "cwe": [
            "CWE-770",
            "CWE-1321"
          ],
          "cvss": {
            "score": 7.4,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H"
          },
          "range": ">=4.0.0 <=4.4.0"
        }
      ],
      "effects": [
        "cheerio"
      ],
      "range": ">=4.0.0",
      "nodes": [
        "node_modules/lodash.pick"
      ],
      "fixAvailable": {
        "name": "gulp-inline",
        "version": "0.1.2",
        "isSemVerMajor": true
      }
    },
    "lodash.template": {
      "name": "lodash.template",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1096993,
          "name": "lodash.template",
          "dependency": "lodash.template",
          "title": "Command Injection in lodash",
          "url": "https://github.com/advisories/GHSA-35jh-r3h4-6jhm",
          "severity": "high",
          "cwe": [
            "CWE-77",
            "CWE-94"
          ],
          "cvss": {
            "score": 7.2,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": "<=4.5.0"
        }
      ],
      "effects": [
        "gulp-util",
        "postcss-initial"
      ],
      "range": "*",
      "nodes": [
        "node_modules/lodash.template",
        "node_modules/postcss-initial/node_modules/lodash.template"
      ],
      "fixAvailable": false
    },
    "matchdep": {
      "name": "matchdep",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "findup-sync",
        "micromatch"
      ],
      "effects": [
        "gulp-cli"
      ],
      "range": ">=1.0.1",
      "nodes": [
        "node_modules/matchdep"
      ],
      "fixAvailable": true
    },
    "micromatch": {
      "name": "micromatch",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1098681,
          "name": "micromatch",
          "dependency": "micromatch",
          "title": "Regular Expression Denial of Service (ReDoS) in micromatch",
          "url": "https://github.com/advisories/GHSA-952p-6rrq-rcjv",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<4.0.8"
        },
        "braces"
      ],
      "effects": [
        "anymatch",
        "findup-sync",
        "matchdep",
        "readdirp"
      ],
      "range": "<=4.0.7",
      "nodes": [
        "node_modules/findup-sync/node_modules/micromatch",
        "node_modules/glob-watcher/node_modules/micromatch",
        "node_modules/matchdep/node_modules/micromatch"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "nth-check": {
      "name": "nth-check",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1095141,
          "name": "nth-check",
          "dependency": "nth-check",
          "title": "Inefficient Regular Expression Complexity in nth-check",
          "url": "https://github.com/advisories/GHSA-rp65-9cf3-cjxr",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<2.0.1"
        }
      ],
      "effects": [
        "css-select"
      ],
      "range": "<2.0.1",
      "nodes": [
        "node_modules/nth-check"
      ],
      "fixAvailable": {
        "name": "gulp-inline",
        "version": "0.1.2",
        "isSemVerMajor": true
      }
    },
    "phantomjs-prebuilt": {
      "name": "phantomjs-prebuilt",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "request"
      ],
      "effects": [
        "svg-sprite"
      ],
      "range": "*",
      "nodes": [
        "node_modules/phantomjs-prebuilt"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "pixrem": {
      "name": "pixrem",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/pixrem"
      ],
      "fixAvailable": true
    },
    "pleeease-filters": {
      "name": "pleeease-filters",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/pleeease-filters"
      ],
      "fixAvailable": true
    },
    "postcss": {
      "name": "postcss",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1093539,
          "name": "postcss",
          "dependency": "postcss",
          "title": "Regular Expression Denial of Service in postcss",
          "url": "https://github.com/advisories/GHSA-566m-qj78-rww5",
          "severity": "moderate",
          "cwe": [
            "CWE-400"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
          },
          "range": "<7.0.36"
        },
        {
          "source": 1094544,
          "name": "postcss",
          "dependency": "postcss",
          "title": "PostCSS line return parsing error",
          "url": "https://github.com/advisories/GHSA-7fh5-64p2-3v2j",
          "severity": "moderate",
          "cwe": [
            "CWE-74",
            "CWE-144"
          ],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"
          },
          "range": "<8.4.31"
        }
      ],
      "effects": [
        "autoprefixer",
        "css-declaration-sorter",
        "cssnano",
        "cssnano-preset-default",
        "cssnano-util-raw-cache",
        "gulp-postcss",
        "pixrem",
        "pleeease-filters",
        "postcss-apply",
        "postcss-attribute-case-insensitive",
        "postcss-calc",
        "postcss-color-function",
        "postcss-color-gray",
        "postcss-color-hex-alpha",
        "postcss-color-hsl",
        "postcss-color-hwb",
        "postcss-color-rebeccapurple",
        "postcss-color-rgb",
        "postcss-color-rgba-fallback",
        "postcss-colormin",
        "postcss-convert-values",
        "postcss-cssnext",
        "postcss-custom-media",
        "postcss-custom-properties",
        "postcss-custom-selectors",
        "postcss-discard-comments",
        "postcss-discard-duplicates",
        "postcss-discard-empty",
        "postcss-discard-overridden",
        "postcss-font-family-system-ui",
        "postcss-font-variant",
        "postcss-image-set-polyfill",
        "postcss-import",
        "postcss-initial",
        "postcss-media-minmax",
        "postcss-merge-longhand",
        "postcss-merge-rules",
        "postcss-minify-font-values",
        "postcss-minify-gradients",
        "postcss-minify-params",
        "postcss-minify-selectors",
        "postcss-nesting",
        "postcss-normalize-charset",
        "postcss-normalize-display-values",
        "postcss-normalize-positions",
        "postcss-normalize-repeat-style",
        "postcss-normalize-string",
        "postcss-normalize-timing-functions",
        "postcss-normalize-unicode",
        "postcss-normalize-url",
        "postcss-normalize-whitespace",
        "postcss-ordered-values",
        "postcss-pseudo-class-any-link",
        "postcss-pseudoelements",
        "postcss-reduce-initial",
        "postcss-reduce-transforms",
        "postcss-replace-overflow-wrap",
        "postcss-reporter",
        "postcss-selector-matches",
        "postcss-selector-not",
        "postcss-svgo",
        "postcss-unique-selectors",
        "stylehacks"
      ],
      "range": "<=8.4.30",
      "nodes": [
        "node_modules/autoprefixer/node_modules/postcss",
        "node_modules/css-declaration-sorter/node_modules/postcss",
        "node_modules/cssnano-preset-default/node_modules/postcss",
        "node_modules/cssnano-util-raw-cache/node_modules/postcss",
        "node_modules/cssnano/node_modules/postcss",
        "node_modules/gulp-postcss/node_modules/postcss",
        "node_modules/pixrem/node_modules/postcss",
        "node_modules/pleeease-filters/node_modules/postcss",
        "node_modules/postcss-apply/node_modules/postcss",
        "node_modules/postcss-attribute-case-insensitive/node_modules/postcss",
        "node_modules/postcss-calc/node_modules/postcss",
        "node_modules/postcss-color-function/node_modules/postcss",
        "node_modules/postcss-color-gray/node_modules/postcss",
        "node_modules/postcss-color-hex-alpha/node_modules/postcss",
        "node_modules/postcss-color-hsl/node_modules/postcss",
        "node_modules/postcss-color-hwb/node_modules/postcss",
        "node_modules/postcss-color-rebeccapurple/node_modules/postcss",
        "node_modules/postcss-color-rgb/node_modules/postcss",
        "node_modules/postcss-color-rgba-fallback/node_modules/postcss",
        "node_modules/postcss-colormin/node_modules/postcss",
        "node_modules/postcss-convert-values/node_modules/postcss",
        "node_modules/postcss-cssnext/node_modules/postcss",
        "node_modules/postcss-cssnext/node_modules/postcss-calc/node_modules/postcss",
        "node_modules/postcss-custom-media/node_modules/postcss",
        "node_modules/postcss-custom-properties/node_modules/postcss",
        "node_modules/postcss-custom-selectors/node_modules/postcss",
        "node_modules/postcss-discard-comments/node_modules/postcss",
        "node_modules/postcss-discard-duplicates/node_modules/postcss",
        "node_modules/postcss-discard-empty/node_modules/postcss",
        "node_modules/postcss-discard-overridden/node_modules/postcss",
        "node_modules/postcss-font-family-system-ui/node_modules/postcss",
        "node_modules/postcss-font-variant/node_modules/postcss",
        "node_modules/postcss-image-set-polyfill/node_modules/postcss",
        "node_modules/postcss-import/node_modules/postcss",
        "node_modules/postcss-initial/node_modules/postcss",
        "node_modules/postcss-media-minmax/node_modules/postcss",
        "node_modules/postcss-merge-longhand/node_modules/postcss",
        "node_modules/postcss-merge-rules/node_modules/postcss",
        "node_modules/postcss-minify-font-values/node_modules/postcss",
        "node_modules/postcss-minify-gradients/node_modules/postcss",
        "node_modules/postcss-minify-params/node_modules/postcss",
        "node_modules/postcss-minify-selectors/node_modules/postcss",
        "node_modules/postcss-nesting/node_modules/postcss",
        "node_modules/postcss-normalize-charset/node_modules/postcss",
        "node_modules/postcss-normalize-display-values/node_modules/postcss",
        "node_modules/postcss-normalize-positions/node_modules/postcss",
        "node_modules/postcss-normalize-repeat-style/node_modules/postcss",
        "node_modules/postcss-normalize-string/node_modules/postcss",
        "node_modules/postcss-normalize-timing-functions/node_modules/postcss",
        "node_modules/postcss-normalize-unicode/node_modules/postcss",
        "node_modules/postcss-normalize-url/node_modules/postcss",
        "node_modules/postcss-normalize-whitespace/node_modules/postcss",
        "node_modules/postcss-ordered-values/node_modules/postcss",
        "node_modules/postcss-pseudo-class-any-link/node_modules/postcss",
        "node_modules/postcss-pseudoelements/node_modules/postcss",
        "node_modules/postcss-reduce-initial/node_modules/postcss",
        "node_modules/postcss-reduce-transforms/node_modules/postcss",
        "node_modules/postcss-replace-overflow-wrap/node_modules/postcss",
        "node_modules/postcss-reporter/node_modules/postcss",
        "node_modules/postcss-selector-matches/node_modules/postcss",
        "node_modules/postcss-selector-not/node_modules/postcss",
        "node_modules/postcss-svgo/node_modules/postcss",
        "node_modules/postcss-unique-selectors/node_modules/postcss",
        "node_modules/stylehacks/node_modules/postcss"
      ],
      "fixAvailable": {
        "name": "cssnano",
        "version": "7.1.0",
        "isSemVerMajor": true
      }
    },
    "postcss-apply": {
      "name": "postcss-apply",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=0.10.0",
      "nodes": [
        "node_modules/postcss-apply"
      ],
      "fixAvailable": false
    },
    "postcss-attribute-case-insensitive": {
      "name": "postcss-attribute-case-insensitive",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=3.0.1",
      "nodes": [
        "node_modules/postcss-attribute-case-insensitive"
      ],
      "fixAvailable": false
    },
    "postcss-calc": {
      "name": "postcss-calc",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "4.1.0 - 7.0.5",
      "nodes": [
        "node_modules/postcss-calc",
        "node_modules/postcss-cssnext/node_modules/postcss-calc"
      ],
      "fixAvailable": true
    },
    "postcss-color-function": {
      "name": "postcss-color-function",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "css-color-function",
        "postcss"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/postcss-color-function"
      ],
      "fixAvailable": true
    },
    "postcss-color-gray": {
      "name": "postcss-color-gray",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "3.0.0 - 4.1.0",
      "nodes": [
        "node_modules/postcss-color-gray"
      ],
      "fixAvailable": true
    },
    "postcss-color-hex-alpha": {
      "name": "postcss-color-hex-alpha",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.3.0 - 3.0.0",
      "nodes": [
        "node_modules/postcss-color-hex-alpha"
      ],
      "fixAvailable": true
    },
    "postcss-color-hsl": {
      "name": "postcss-color-hsl",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/postcss-color-hsl"
      ],
      "fixAvailable": true
    },
    "postcss-color-hwb": {
      "name": "postcss-color-hwb",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": ">=1.2.0",
      "nodes": [
        "node_modules/postcss-color-hwb"
      ],
      "fixAvailable": true
    },
    "postcss-color-rebeccapurple": {
      "name": "postcss-color-rebeccapurple",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.2.0 - 3.1.0",
      "nodes": [
        "node_modules/postcss-color-rebeccapurple"
      ],
      "fixAvailable": true
    },
    "postcss-color-rgb": {
      "name": "postcss-color-rgb",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "*",
      "nodes": [
        "node_modules/postcss-color-rgb"
      ],
      "fixAvailable": false
    },
    "postcss-color-rgba-fallback": {
      "name": "postcss-color-rgba-fallback",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=3.0.0",
      "nodes": [
        "node_modules/postcss-color-rgba-fallback"
      ],
      "fixAvailable": true
    },
    "postcss-colormin": {
      "name": "postcss-colormin",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.3",
      "nodes": [
        "node_modules/postcss-colormin"
      ],
      "fixAvailable": true
    },
    "postcss-convert-values": {
      "name": "postcss-convert-values",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/postcss-convert-values"
      ],
      "fixAvailable": true
    },
    "postcss-cssnext": {
      "name": "postcss-cssnext",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "autoprefixer",
        "pixrem",
        "pleeease-filters",
        "postcss",
        "postcss-apply",
        "postcss-attribute-case-insensitive",
        "postcss-calc",
        "postcss-color-function",
        "postcss-color-gray",
        "postcss-color-hex-alpha",
        "postcss-color-hsl",
        "postcss-color-hwb",
        "postcss-color-rebeccapurple",
        "postcss-color-rgb",
        "postcss-color-rgba-fallback",
        "postcss-custom-media",
        "postcss-custom-properties",
        "postcss-custom-selectors",
        "postcss-font-family-system-ui",
        "postcss-font-variant",
        "postcss-image-set-polyfill",
        "postcss-initial",
        "postcss-media-minmax",
        "postcss-nesting",
        "postcss-pseudo-class-any-link",
        "postcss-pseudoelements",
        "postcss-replace-overflow-wrap",
        "postcss-selector-matches",
        "postcss-selector-not"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/postcss-cssnext"
      ],
      "fixAvailable": false
    },
    "postcss-custom-media": {
      "name": "postcss-custom-media",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "4.0.0 - 6.0.0",
      "nodes": [
        "node_modules/postcss-custom-media"
      ],
      "fixAvailable": true
    },
    "postcss-custom-properties": {
      "name": "postcss-custom-properties",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "3.3.0 - 7.0.0",
      "nodes": [
        "node_modules/postcss-custom-properties"
      ],
      "fixAvailable": true
    },
    "postcss-custom-selectors": {
      "name": "postcss-custom-selectors",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss",
        "postcss-selector-matches"
      ],
      "effects": [],
      "range": "2.3.0 - 4.0.1",
      "nodes": [
        "node_modules/postcss-custom-selectors"
      ],
      "fixAvailable": true
    },
    "postcss-discard-comments": {
      "name": "postcss-discard-comments",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-discard-comments"
      ],
      "fixAvailable": true
    },
    "postcss-discard-duplicates": {
      "name": "postcss-discard-duplicates",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.1.0 - 4.0.2",
      "nodes": [
        "node_modules/postcss-discard-duplicates"
      ],
      "fixAvailable": true
    },
    "postcss-discard-empty": {
      "name": "postcss-discard-empty",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.1.0 - 4.0.1",
      "nodes": [
        "node_modules/postcss-discard-empty"
      ],
      "fixAvailable": true
    },
    "postcss-discard-overridden": {
      "name": "postcss-discard-overridden",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/postcss-discard-overridden"
      ],
      "fixAvailable": true
    },
    "postcss-font-family-system-ui": {
      "name": "postcss-font-family-system-ui",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=3.0.0",
      "nodes": [
        "node_modules/postcss-font-family-system-ui"
      ],
      "fixAvailable": false
    },
    "postcss-font-variant": {
      "name": "postcss-font-variant",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.2.0 - 3.0.0",
      "nodes": [
        "node_modules/postcss-font-variant"
      ],
      "fixAvailable": true
    },
    "postcss-image-set-polyfill": {
      "name": "postcss-image-set-polyfill",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=0.4.4",
      "nodes": [
        "node_modules/postcss-image-set-polyfill"
      ],
      "fixAvailable": false
    },
    "postcss-import": {
      "name": "postcss-import",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=12.0.1",
      "nodes": [
        "node_modules/postcss-import"
      ],
      "fixAvailable": {
        "name": "postcss-import",
        "version": "16.1.1",
        "isSemVerMajor": true
      }
    },
    "postcss-initial": {
      "name": "postcss-initial",
      "severity": "high",
      "isDirect": false,
      "via": [
        "lodash.template",
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=3.0.2 || 4.0.0",
      "nodes": [
        "node_modules/postcss-initial"
      ],
      "fixAvailable": false
    },
    "postcss-media-minmax": {
      "name": "postcss-media-minmax",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.2.0 - 3.0.0",
      "nodes": [
        "node_modules/postcss-media-minmax"
      ],
      "fixAvailable": true
    },
    "postcss-merge-longhand": {
      "name": "postcss-merge-longhand",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss",
        "stylehacks"
      ],
      "effects": [],
      "range": "<=4.0.11",
      "nodes": [
        "node_modules/postcss-merge-longhand"
      ],
      "fixAvailable": true
    },
    "postcss-merge-rules": {
      "name": "postcss-merge-rules",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.3",
      "nodes": [
        "node_modules/postcss-merge-rules"
      ],
      "fixAvailable": true
    },
    "postcss-minify-font-values": {
      "name": "postcss-minify-font-values",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-minify-font-values"
      ],
      "fixAvailable": true
    },
    "postcss-minify-gradients": {
      "name": "postcss-minify-gradients",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-minify-gradients"
      ],
      "fixAvailable": true
    },
    "postcss-minify-params": {
      "name": "postcss-minify-params",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-minify-params"
      ],
      "fixAvailable": true
    },
    "postcss-minify-selectors": {
      "name": "postcss-minify-selectors",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-minify-selectors"
      ],
      "fixAvailable": true
    },
    "postcss-nesting": {
      "name": "postcss-nesting",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=6.0.0",
      "nodes": [
        "node_modules/postcss-nesting"
      ],
      "fixAvailable": false
    },
    "postcss-normalize-charset": {
      "name": "postcss-normalize-charset",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/postcss-normalize-charset"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-display-values": {
      "name": "postcss-normalize-display-values",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-display-values"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-positions": {
      "name": "postcss-normalize-positions",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-positions"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-repeat-style": {
      "name": "postcss-normalize-repeat-style",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-repeat-style"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-string": {
      "name": "postcss-normalize-string",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-string"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-timing-functions": {
      "name": "postcss-normalize-timing-functions",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-timing-functions"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-unicode": {
      "name": "postcss-normalize-unicode",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/postcss-normalize-unicode"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-url": {
      "name": "postcss-normalize-url",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "1.1.0 - 4.0.1",
      "nodes": [
        "node_modules/postcss-normalize-url"
      ],
      "fixAvailable": true
    },
    "postcss-normalize-whitespace": {
      "name": "postcss-normalize-whitespace",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-normalize-whitespace"
      ],
      "fixAvailable": true
    },
    "postcss-ordered-values": {
      "name": "postcss-ordered-values",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.1.2",
      "nodes": [
        "node_modules/postcss-ordered-values"
      ],
      "fixAvailable": true
    },
    "postcss-pseudo-class-any-link": {
      "name": "postcss-pseudo-class-any-link",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=5.0.0",
      "nodes": [
        "node_modules/postcss-pseudo-class-any-link"
      ],
      "fixAvailable": true
    },
    "postcss-pseudoelements": {
      "name": "postcss-pseudoelements",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": ">=2.2.0",
      "nodes": [
        "node_modules/postcss-pseudoelements"
      ],
      "fixAvailable": true
    },
    "postcss-reduce-initial": {
      "name": "postcss-reduce-initial",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.3",
      "nodes": [
        "node_modules/postcss-reduce-initial"
      ],
      "fixAvailable": true
    },
    "postcss-reduce-transforms": {
      "name": "postcss-reduce-transforms",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.2",
      "nodes": [
        "node_modules/postcss-reduce-transforms"
      ],
      "fixAvailable": true
    },
    "postcss-replace-overflow-wrap": {
      "name": "postcss-replace-overflow-wrap",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-cssnext"
      ],
      "range": "<=2.0.0",
      "nodes": [
        "node_modules/postcss-replace-overflow-wrap"
      ],
      "fixAvailable": false
    },
    "postcss-reporter": {
      "name": "postcss-reporter",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=6.0.1",
      "nodes": [
        "node_modules/postcss-reporter"
      ],
      "fixAvailable": {
        "name": "postcss-reporter",
        "version": "7.1.0",
        "isSemVerMajor": true
      }
    },
    "postcss-selector-matches": {
      "name": "postcss-selector-matches",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=3.0.1",
      "nodes": [
        "node_modules/postcss-selector-matches"
      ],
      "fixAvailable": true
    },
    "postcss-selector-not": {
      "name": "postcss-selector-not",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=3.0.1",
      "nodes": [
        "node_modules/postcss-selector-not"
      ],
      "fixAvailable": true
    },
    "postcss-svgo": {
      "name": "postcss-svgo",
      "severity": "high",
      "isDirect": false,
      "via": [
        "postcss",
        "svgo"
      ],
      "effects": [],
      "range": "<=5.0.0-rc.2",
      "nodes": [
        "node_modules/postcss-svgo"
      ],
      "fixAvailable": true
    },
    "postcss-unique-selectors": {
      "name": "postcss-unique-selectors",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [],
      "range": "<=4.0.1",
      "nodes": [
        "node_modules/postcss-unique-selectors"
      ],
      "fixAvailable": true
    },
    "pre-commit": {
      "name": "pre-commit",
      "severity": "high",
      "isDirect": true,
      "via": [
        "cross-spawn"
      ],
      "effects": [],
      "range": ">=1.1.0",
      "nodes": [
        "node_modules/pre-commit"
      ],
      "fixAvailable": {
        "name": "pre-commit",
        "version": "1.0.10",
        "isSemVerMajor": true
      }
    },
    "readdirp": {
      "name": "readdirp",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "micromatch"
      ],
      "effects": [
        "chokidar"
      ],
      "range": "2.2.0 - 2.2.1",
      "nodes": [
        "node_modules/glob-watcher/node_modules/readdirp"
      ],
      "fixAvailable": {
        "name": "gulp",
        "version": "5.0.1",
        "isSemVerMajor": true
      }
    },
    "request": {
      "name": "request",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1096727,
          "name": "request",
          "dependency": "request",
          "title": "Server-Side Request Forgery in Request",
          "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
          "severity": "moderate",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 6.1,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
          },
          "range": "<=2.88.2"
        },
        "form-data",
        "tough-cookie"
      ],
      "effects": [
        "phantomjs-prebuilt"
      ],
      "range": "*",
      "nodes": [
        "node_modules/request"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "stylehacks": {
      "name": "stylehacks",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "postcss"
      ],
      "effects": [
        "postcss-merge-longhand"
      ],
      "range": "<=4.0.3",
      "nodes": [
        "node_modules/stylehacks"
      ],
      "fixAvailable": true
    },
    "svg-sprite": {
      "name": "svg-sprite",
      "severity": "high",
      "isDirect": false,
      "via": [
        "phantomjs-prebuilt",
        "svgo"
      ],
      "effects": [
        "gulp-svg-sprite"
      ],
      "range": "1.3.0 - 1.5.4",
      "nodes": [
        "node_modules/svg-sprite"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "svgo": {
      "name": "svgo",
      "severity": "high",
      "isDirect": false,
      "via": [
        "css-select"
      ],
      "effects": [
        "postcss-svgo",
        "svg-sprite"
      ],
      "range": "1.0.0 - 1.3.2",
      "nodes": [
        "node_modules/svgo"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "tough-cookie": {
      "name": "tough-cookie",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1097682,
          "name": "tough-cookie",
          "dependency": "tough-cookie",
          "title": "tough-cookie Prototype Pollution vulnerability",
          "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
          "severity": "moderate",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 6.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
          },
          "range": "<4.1.3"
        }
      ],
      "effects": [
        "request"
      ],
      "range": "<4.1.3",
      "nodes": [
        "node_modules/tough-cookie"
      ],
      "fixAvailable": {
        "name": "gulp-svg-sprite",
        "version": "2.0.3",
        "isSemVerMajor": true
      }
    },
    "useragent": {
      "name": "useragent",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1100298,
          "name": "useragent",
          "dependency": "useragent",
          "title": "useragent Regular Expression Denial of Service vulnerability",
          "url": "https://github.com/advisories/GHSA-mgfv-m47x-4wqp",
          "severity": "moderate",
          "cwe": [
            "CWE-1333"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
          },
          "range": "<=2.3.0"
        }
      ],
      "effects": [
        "browserslist-useragent",
        "es-dev-server"
      ],
      "range": "*",
      "nodes": [
        "node_modules/useragent"
      ],
      "fixAvailable": true
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 1,
      "moderate": 76,
      "high": 23,
      "critical": 2,
      "total": 102
    },
    "dependencies": {
      "prod": 1,
      "dev": 1675,
      "optional": 5,
      "peer": 1,
      "peerOptional": 0,
      "total": 1675
    }
  }
}

--- end ---
Attempting to npm audit fix
$ /usr/bin/npm audit fix --dry-run --only=dev --json
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-design-tokens@2.2.1',
npm WARN EBADENGINE   required: { node: '>=20', npm: '>=10.8.1' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
--- stdout ---
{
  "added": 5,
  "removed": 0,
  "changed": 1,
  "audited": 1676,
  "funding": 152,
  "audit": {
    "auditReportVersion": 2,
    "vulnerabilities": {
      "@koa/cors": {
        "name": "@koa/cors",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1095223,
            "name": "@koa/cors",
            "dependency": "@koa/cors",
            "title": "Overly permissive origin policy",
            "url": "https://github.com/advisories/GHSA-qxrj-hx23-xp82",
            "severity": "high",
            "cwe": [
              "CWE-346"
            ],
            "cvss": {
              "score": 8.6,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N"
            },
            "range": "<5.0.0"
          }
        ],
        "effects": [
          "es-dev-server"
        ],
        "range": "<5.0.0",
        "nodes": [
          "node_modules/@koa/cors"
        ],
        "fixAvailable": true
      },
      "anymatch": {
        "name": "anymatch",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "micromatch"
        ],
        "effects": [
          "chokidar",
          "glob-watcher"
        ],
        "range": "1.2.0 - 2.0.0",
        "nodes": [
          "node_modules/glob-watcher/node_modules/anymatch"
        ],
        "fixAvailable": {
          "name": "gulp",
          "version": "5.0.1",
          "isSemVerMajor": true
        }
      },
      "autoprefixer": {
        "name": "autoprefixer",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "1.0.20131222 - 8.6.5",
        "nodes": [
          "node_modules/autoprefixer"
        ],
        "fixAvailable": true
      },
      "braces": {
        "name": "braces",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1098094,
            "name": "braces",
            "dependency": "braces",
            "title": "Uncontrolled resource consumption in braces",
            "url": "https://github.com/advisories/GHSA-grv7-fg5c-xmjg",
            "severity": "high",
            "cwe": [
              "CWE-400",
              "CWE-1050"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<3.0.3"
          }
        ],
        "effects": [
          "chokidar",
          "micromatch"
        ],
        "range": "<3.0.3",
        "nodes": [
          "node_modules/findup-sync/node_modules/braces",
          "node_modules/glob-watcher/node_modules/braces",
          "node_modules/matchdep/node_modules/braces"
        ],
        "fixAvailable": {
          "name": "gulp",
          "version": "5.0.1",
          "isSemVerMajor": true
        }
      },
      "browserslist-useragent": {
        "name": "browserslist-useragent",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "useragent"
        ],
        "effects": [],
        "range": "<=3.1.4",
        "nodes": [
          "node_modules/browserslist-useragent"
        ],
        "fixAvailable": true
      },
      "cheerio": {
        "name": "cheerio",
        "severity": "high",
        "isDirect": false,
        "via": [
          "css-select",
          "lodash.pick"
        ],
        "effects": [
          "gulp-inline"
        ],
        "range": "0.19.0 - 1.0.0-rc.12",
        "nodes": [
          "node_modules/cheerio"
        ],
        "fixAvailable": {
          "name": "gulp-inline",
          "version": "0.1.2",
          "isSemVerMajor": true
        }
      },
      "chokidar": {
        "name": "chokidar",
        "severity": "high",
        "isDirect": false,
        "via": [
          "anymatch",
          "braces",
          "readdirp"
        ],
        "effects": [
          "glob-watcher"
        ],
        "range": "1.3.0 - 2.1.8",
        "nodes": [
          "node_modules/glob-watcher/node_modules/chokidar"
        ],
        "fixAvailable": {
          "name": "gulp",
          "version": "5.0.1",
          "isSemVerMajor": true
        }
      },
      "color": {
        "name": "color",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "color-string"
        ],
        "effects": [
          "css-color-function"
        ],
        "range": "<=0.11.4",
        "nodes": [
          "node_modules/color"
        ],
        "fixAvailable": true
      },
      "color-string": {
        "name": "color-string",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1089718,
            "name": "color-string",
            "dependency": "color-string",
            "title": "Regular Expression Denial of Service (ReDOS)",
            "url": "https://github.com/advisories/GHSA-257v-vj4p-3w2h",
            "severity": "moderate",
            "cwe": [
              "CWE-770"
            ],
            "cvss": {
              "score": 5.3,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
            },
            "range": "<1.5.5"
          }
        ],
        "effects": [
          "color"
        ],
        "range": "<1.5.5",
        "nodes": [
          "node_modules/color/node_modules/color-string"
        ],
        "fixAvailable": true
      },
      "cross-spawn": {
        "name": "cross-spawn",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1104663,
            "name": "cross-spawn",
            "dependency": "cross-spawn",
            "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn",
            "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275",
            "severity": "high",
            "cwe": [
              "CWE-1333"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<6.0.6"
          }
        ],
        "effects": [
          "pre-commit"
        ],
        "range": "<6.0.6",
        "nodes": [
          "node_modules/pre-commit/node_modules/cross-spawn"
        ],
        "fixAvailable": {
          "name": "pre-commit",
          "version": "1.0.10",
          "isSemVerMajor": true
        }
      },
      "css-color-function": {
        "name": "css-color-function",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "color"
        ],
        "effects": [
          "postcss-color-function"
        ],
        "range": "*",
        "nodes": [
          "node_modules/css-color-function"
        ],
        "fixAvailable": true
      },
      "css-declaration-sorter": {
        "name": "css-declaration-sorter",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=5.1.2",
        "nodes": [
          "node_modules/css-declaration-sorter"
        ],
        "fixAvailable": true
      },
      "css-select": {
        "name": "css-select",
        "severity": "high",
        "isDirect": false,
        "via": [
          "nth-check"
        ],
        "effects": [
          "cheerio",
          "svgo"
        ],
        "range": "<=3.1.0",
        "nodes": [
          "node_modules/css-select",
          "node_modules/svgo/node_modules/css-select"
        ],
        "fixAvailable": {
          "name": "gulp-inline",
          "version": "0.1.2",
          "isSemVerMajor": true
        }
      },
      "cssnano": {
        "name": "cssnano",
        "severity": "moderate",
        "isDirect": true,
        "via": [
          "cssnano-preset-default",
          "postcss"
        ],
        "effects": [],
        "range": "<=4.1.11",
        "nodes": [
          "node_modules/cssnano"
        ],
        "fixAvailable": {
          "name": "cssnano",
          "version": "7.1.0",
          "isSemVerMajor": true
        }
      },
      "cssnano-preset-default": {
        "name": "cssnano-preset-default",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "css-declaration-sorter",
          "cssnano-util-raw-cache",
          "postcss",
          "postcss-calc",
          "postcss-colormin",
          "postcss-convert-values",
          "postcss-discard-comments",
          "postcss-discard-duplicates",
          "postcss-discard-empty",
          "postcss-discard-overridden",
          "postcss-merge-longhand",
          "postcss-merge-rules",
          "postcss-minify-font-values",
          "postcss-minify-gradients",
          "postcss-minify-params",
          "postcss-minify-selectors",
          "postcss-normalize-charset",
          "postcss-normalize-display-values",
          "postcss-normalize-positions",
          "postcss-normalize-repeat-style",
          "postcss-normalize-string",
          "postcss-normalize-timing-functions",
          "postcss-normalize-unicode",
          "postcss-normalize-url",
          "postcss-normalize-whitespace",
          "postcss-ordered-values",
          "postcss-reduce-initial",
          "postcss-reduce-transforms",
          "postcss-svgo",
          "postcss-unique-selectors"
        ],
        "effects": [
          "cssnano"
        ],
        "range": "<=4.0.8",
        "nodes": [
          "node_modules/cssnano-preset-default"
        ],
        "fixAvailable": {
          "name": "cssnano",
          "version": "7.1.0",
          "isSemVerMajor": true
        }
      },
      "cssnano-util-raw-cache": {
        "name": "cssnano-util-raw-cache",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "*",
        "nodes": [
          "node_modules/cssnano-util-raw-cache"
        ],
        "fixAvailable": true
      },
      "es-dev-server": {
        "name": "es-dev-server",
        "severity": "high",
        "isDirect": true,
        "via": [
          "@koa/cors",
          "browserslist-useragent",
          "useragent"
        ],
        "effects": [],
        "range": ">=1.24.1",
        "nodes": [
          "node_modules/es-dev-server"
        ],
        "fixAvailable": true
      },
      "findup-sync": {
        "name": "findup-sync",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "micromatch"
        ],
        "effects": [
          "liftoff",
          "matchdep"
        ],
        "range": "0.4.0 - 3.0.0",
        "nodes": [
          "node_modules/findup-sync",
          "node_modules/matchdep/node_modules/findup-sync"
        ],
        "fixAvailable": true
      },
      "form-data": {
        "name": "form-data",
        "severity": "critical",
        "isDirect": false,
        "via": [
          {
            "source": 1106509,
            "name": "form-data",
            "dependency": "form-data",
            "title": "form-data uses unsafe random function in form-data for choosing boundary",
            "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4",
            "severity": "critical",
            "cwe": [
              "CWE-330"
            ],
            "cvss": {
              "score": 0,
              "vectorString": null
            },
            "range": "<2.5.4"
          }
        ],
        "effects": [
          "request"
        ],
        "range": "<2.5.4",
        "nodes": [
          "node_modules/form-data"
        ],
        "fixAvailable": {
          "name": "gulp-svg-sprite",
          "version": "2.0.3",
          "isSemVerMajor": true
        }
      },
      "glob-watcher": {
        "name": "glob-watcher",
        "severity": "high",
        "isDirect": false,
        "via": [
          "anymatch",
          "chokidar"
        ],
        "effects": [
          "gulp"
        ],
        "range": "5.0.0 - 5.0.5",
        "nodes": [
          "node_modules/glob-watcher"
        ],
        "fixAvailable": {
          "name": "gulp",
          "version": "5.0.1",
          "isSemVerMajor": true
        }
      },
      "gulp": {
        "name": "gulp",
        "severity": "high",
        "isDirect": true,
        "via": [
          "glob-watcher",
          "gulp-cli"
        ],
        "effects": [],
        "range": "4.0.0 - 4.0.2",
        "nodes": [
          "node_modules/gulp"
        ],
        "fixAvailable": {
          "name": "gulp",
          "version": "5.0.1",
          "isSemVerMajor": true
        }
      },
      "gulp-cli": {
        "name": "gulp-cli",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "liftoff",
          "matchdep"
        ],
        "effects": [],
        "range": "1.3.0 - 2.3.0",
        "nodes": [
          "node_modules/gulp-cli"
        ],
        "fixAvailable": true
      },
      "gulp-compile-handlebars": {
        "name": "gulp-compile-handlebars",
        "severity": "high",
        "isDirect": true,
        "via": [
          "gulp-util"
        ],
        "effects": [],
        "range": "*",
        "nodes": [
          "node_modules/gulp-compile-handlebars"
        ],
        "fixAvailable": false
      },
      "gulp-htmlmin": {
        "name": "gulp-htmlmin",
        "severity": "high",
        "isDirect": true,
        "via": [
          "html-minifier"
        ],
        "effects": [],
        "range": "*",
        "nodes": [
          "node_modules/gulp-htmlmin"
        ],
        "fixAvailable": false
      },
      "gulp-inline": {
        "name": "gulp-inline",
        "severity": "high",
        "isDirect": true,
        "via": [
          "cheerio",
          "gulp-util"
        ],
        "effects": [],
        "range": "*",
        "nodes": [
          "node_modules/gulp-inline"
        ],
        "fixAvailable": {
          "name": "gulp-inline",
          "version": "0.1.2",
          "isSemVerMajor": true
        }
      },
      "gulp-postcss": {
        "name": "gulp-postcss",
        "severity": "moderate",
        "isDirect": true,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=8.0.0",
        "nodes": [
          "node_modules/gulp-postcss"
        ],
        "fixAvailable": {
          "name": "gulp-postcss",
          "version": "10.0.0",
          "isSemVerMajor": true
        }
      },
      "gulp-svg-sprite": {
        "name": "gulp-svg-sprite",
        "severity": "moderate",
        "isDirect": true,
        "via": [
          "svg-sprite"
        ],
        "effects": [],
        "range": "1.3.0 - 1.5.0",
        "nodes": [
          "node_modules/gulp-svg-sprite"
        ],
        "fixAvailable": {
          "name": "gulp-svg-sprite",
          "version": "2.0.3",
          "isSemVerMajor": true
        }
      },
      "gulp-util": {
        "name": "gulp-util",
        "severity": "high",
        "isDirect": false,
        "via": [
          "lodash.template"
        ],
        "effects": [
          "gulp-compile-handlebars",
          "gulp-inline"
        ],
        "range": ">=1.1.0",
        "nodes": [
          "node_modules/gulp-util"
        ],
        "fixAvailable": false
      },
      "html-minifier": {
        "name": "html-minifier",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1105440,
            "name": "html-minifier",
            "dependency": "html-minifier",
            "title": "kangax html-minifier REDoS vulnerability",
            "url": "https://github.com/advisories/GHSA-pfq8-rq6v-vf5m",
            "severity": "high",
            "cwe": [
              "CWE-400",
              "CWE-1333"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<=4.0.0"
          }
        ],
        "effects": [
          "gulp-htmlmin"
        ],
        "range": "*",
        "nodes": [
          "node_modules/html-minifier"
        ],
        "fixAvailable": false
      },
      "koa": {
        "name": "koa",
        "severity": "low",
        "isDirect": false,
        "via": [
          {
            "source": 1106793,
            "name": "koa",
            "dependency": "koa",
            "title": "Koa Open Redirect via Referrer Header (User-Controlled)",
            "url": "https://github.com/advisories/GHSA-jgmv-j7ww-jx2x",
            "severity": "low",
            "cwe": [
              "CWE-601"
            ],
            "cvss": {
              "score": 3.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:L/A:N"
            },
            "range": ">=2.0.0 <2.16.2"
          }
        ],
        "effects": [],
        "range": "2.0.0 - 2.16.1",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      },
      "liftoff": {
        "name": "liftoff",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "findup-sync"
        ],
        "effects": [
          "gulp-cli"
        ],
        "range": "2.2.3 - 3.1.0",
        "nodes": [
          "node_modules/liftoff"
        ],
        "fixAvailable": true
      },
      "lodash.pick": {
        "name": "lodash.pick",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1096303,
            "name": "lodash.pick",
            "dependency": "lodash.pick",
            "title": "Prototype Pollution in lodash",
            "url": "https://github.com/advisories/GHSA-p6mc-m468-83gw",
            "severity": "high",
            "cwe": [
              "CWE-770",
              "CWE-1321"
            ],
            "cvss": {
              "score": 7.4,
              "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H"
            },
            "range": ">=4.0.0 <=4.4.0"
          }
        ],
        "effects": [
          "cheerio"
        ],
        "range": ">=4.0.0",
        "nodes": [
          "node_modules/lodash.pick"
        ],
        "fixAvailable": {
          "name": "gulp-inline",
          "version": "0.1.2",
          "isSemVerMajor": true
        }
      },
      "lodash.template": {
        "name": "lodash.template",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1096993,
            "name": "lodash.template",
            "dependency": "lodash.template",
            "title": "Command Injection in lodash",
            "url": "https://github.com/advisories/GHSA-35jh-r3h4-6jhm",
            "severity": "high",
            "cwe": [
              "CWE-77",
              "CWE-94"
            ],
            "cvss": {
              "score": 7.2,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
            },
            "range": "<=4.5.0"
          }
        ],
        "effects": [
          "gulp-util",
          "postcss-initial"
        ],
        "range": "*",
        "nodes": [
          "node_modules/lodash.template",
          "node_modules/postcss-initial/node_modules/lodash.template"
        ],
        "fixAvailable": false
      },
      "matchdep": {
        "name": "matchdep",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "findup-sync",
          "micromatch"
        ],
        "effects": [
          "gulp-cli"
        ],
        "range": ">=1.0.1",
        "nodes": [
          "node_modules/matchdep"
        ],
        "fixAvailable": true
      },
      "micromatch": {
        "name": "micromatch",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1098681,
            "name": "micromatch",
            "dependency": "micromatch",
            "title": "Regular Expression Denial of Service (ReDoS) in micromatch",
            "url": "https://github.com/advisories/GHSA-952p-6rrq-rcjv",
            "severity": "moderate",
            "cwe": [
              "CWE-1333"
            ],
            "cvss": {
              "score": 5.3,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
            },
            "range": "<4.0.8"
          },
          "braces"
        ],
        "effects": [
          "anymatch",
          "findup-sync",
          "matchdep",
          "readdirp"
        ],
        "range": "<=4.0.7",
        "nodes": [
          "node_modules/findup-sync/node_modules/micromatch",
          "node_modules/glob-watcher/node_modules/micromatch",
          "node_modules/matchdep/node_modules/micromatch"
        ],
        "fixAvailable": {
          "name": "gulp",
          "version": "5.0.1",
          "isSemVerMajor": true
        }
      },
      "nth-check": {
        "name": "nth-check",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1095141,
            "name": "nth-check",
            "dependency": "nth-check",
            "title": "Inefficient Regular Expression Complexity in nth-check",
            "url": "https://github.com/advisories/GHSA-rp65-9cf3-cjxr",
            "severity": "high",
            "cwe": [
              "CWE-1333"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<2.0.1"
          }
        ],
        "effects": [
          "css-select"
        ],
        "range": "<2.0.1",
        "nodes": [
          "node_modules/nth-check"
        ],
        "fixAvailable": {
          "name": "gulp-inline",
          "version": "0.1.2",
          "isSemVerMajor": true
        }
      },
      "phantomjs-prebuilt": {
        "name": "phantomjs-prebuilt",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "request"
        ],
        "effects": [
          "svg-sprite"
        ],
        "range": "*",
        "nodes": [
          "node_modules/phantomjs-prebuilt"
        ],
        "fixAvailable": {
          "name": "gulp-svg-sprite",
          "version": "2.0.3",
          "isSemVerMajor": true
        }
      },
      "pixrem": {
        "name": "pixrem",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.1",
        "nodes": [
          "node_modules/pixrem"
        ],
        "fixAvailable": true
      },
      "pleeease-filters": {
        "name": "pleeease-filters",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "*",
        "nodes": [
          "node_modules/pleeease-filters"
        ],
        "fixAvailable": true
      },
      "postcss": {
        "name": "postcss",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1093539,
            "name": "postcss",
            "dependency": "postcss",
            "title": "Regular Expression Denial of Service in postcss",
            "url": "https://github.com/advisories/GHSA-566m-qj78-rww5",
            "severity": "moderate",
            "cwe": [
              "CWE-400"
            ],
            "cvss": {
              "score": 5.3,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
            },
            "range": "<7.0.36"
          },
          {
            "source": 1094544,
            "name": "postcss",
            "dependency": "postcss",
            "title": "PostCSS line return parsing error",
            "url": "https://github.com/advisories/GHSA-7fh5-64p2-3v2j",
            "severity": "moderate",
            "cwe": [
              "CWE-74",
              "CWE-144"
            ],
            "cvss": {
              "score": 5.3,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"
            },
            "range": "<8.4.31"
          }
        ],
        "effects": [
          "autoprefixer",
          "css-declaration-sorter",
          "cssnano",
          "cssnano-preset-default",
          "cssnano-util-raw-cache",
          "gulp-postcss",
          "pixrem",
          "pleeease-filters",
          "postcss-apply",
          "postcss-attribute-case-insensitive",
          "postcss-calc",
          "postcss-color-function",
          "postcss-color-gray",
          "postcss-color-hex-alpha",
          "postcss-color-hsl",
          "postcss-color-hwb",
          "postcss-color-rebeccapurple",
          "postcss-color-rgb",
          "postcss-color-rgba-fallback",
          "postcss-colormin",
          "postcss-convert-values",
          "postcss-cssnext",
          "postcss-custom-media",
          "postcss-custom-properties",
          "postcss-custom-selectors",
          "postcss-discard-comments",
          "postcss-discard-duplicates",
          "postcss-discard-empty",
          "postcss-discard-overridden",
          "postcss-font-family-system-ui",
          "postcss-font-variant",
          "postcss-image-set-polyfill",
          "postcss-import",
          "postcss-initial",
          "postcss-media-minmax",
          "postcss-merge-longhand",
          "postcss-merge-rules",
          "postcss-minify-font-values",
          "postcss-minify-gradients",
          "postcss-minify-params",
          "postcss-minify-selectors",
          "postcss-nesting",
          "postcss-normalize-charset",
          "postcss-normalize-display-values",
          "postcss-normalize-positions",
          "postcss-normalize-repeat-style",
          "postcss-normalize-string",
          "postcss-normalize-timing-functions",
          "postcss-normalize-unicode",
          "postcss-normalize-url",
          "postcss-normalize-whitespace",
          "postcss-ordered-values",
          "postcss-pseudo-class-any-link",
          "postcss-pseudoelements",
          "postcss-reduce-initial",
          "postcss-reduce-transforms",
          "postcss-replace-overflow-wrap",
          "postcss-reporter",
          "postcss-selector-matches",
          "postcss-selector-not",
          "postcss-svgo",
          "postcss-unique-selectors",
          "stylehacks"
        ],
        "range": "<=8.4.30",
        "nodes": [
          "node_modules/autoprefixer/node_modules/postcss",
          "node_modules/css-declaration-sorter/node_modules/postcss",
          "node_modules/cssnano-preset-default/node_modules/postcss",
          "node_modules/cssnano-util-raw-cache/node_modules/postcss",
          "node_modules/cssnano/node_modules/postcss",
          "node_modules/gulp-postcss/node_modules/postcss",
          "node_modules/pixrem/node_modules/postcss",
          "node_modules/pleeease-filters/node_modules/postcss",
          "node_modules/postcss-apply/node_modules/postcss",
          "node_modules/postcss-attribute-case-insensitive/node_modules/postcss",
          "node_modules/postcss-calc/node_modules/postcss",
          "node_modules/postcss-color-function/node_modules/postcss",
          "node_modules/postcss-color-gray/node_modules/postcss",
          "node_modules/postcss-color-hex-alpha/node_modules/postcss",
          "node_modules/postcss-color-hsl/node_modules/postcss",
          "node_modules/postcss-color-hwb/node_modules/postcss",
          "node_modules/postcss-color-rebeccapurple/node_modules/postcss",
          "node_modules/postcss-color-rgb/node_modules/postcss",
          "node_modules/postcss-color-rgba-fallback/node_modules/postcss",
          "node_modules/postcss-colormin/node_modules/postcss",
          "node_modules/postcss-convert-values/node_modules/postcss",
          "node_modules/postcss-cssnext/node_modules/postcss",
          "node_modules/postcss-cssnext/node_modules/postcss-calc/node_modules/postcss",
          "node_modules/postcss-custom-media/node_modules/postcss",
          "node_modules/postcss-custom-properties/node_modules/postcss",
          "node_modules/postcss-custom-selectors/node_modules/postcss",
          "node_modules/postcss-discard-comments/node_modules/postcss",
          "node_modules/postcss-discard-duplicates/node_modules/postcss",
          "node_modules/postcss-discard-empty/node_modules/postcss",
          "node_modules/postcss-discard-overridden/node_modules/postcss",
          "node_modules/postcss-font-family-system-ui/node_modules/postcss",
          "node_modules/postcss-font-variant/node_modules/postcss",
          "node_modules/postcss-image-set-polyfill/node_modules/postcss",
          "node_modules/postcss-import/node_modules/postcss",
          "node_modules/postcss-initial/node_modules/postcss",
          "node_modules/postcss-media-minmax/node_modules/postcss",
          "node_modules/postcss-merge-longhand/node_modules/postcss",
          "node_modules/postcss-merge-rules/node_modules/postcss",
          "node_modules/postcss-minify-font-values/node_modules/postcss",
          "node_modules/postcss-minify-gradients/node_modules/postcss",
          "node_modules/postcss-minify-params/node_modules/postcss",
          "node_modules/postcss-minify-selectors/node_modules/postcss",
          "node_modules/postcss-nesting/node_modules/postcss",
          "node_modules/postcss-normalize-charset/node_modules/postcss",
          "node_modules/postcss-normalize-display-values/node_modules/postcss",
          "node_modules/postcss-normalize-positions/node_modules/postcss",
          "node_modules/postcss-normalize-repeat-style/node_modules/postcss",
          "node_modules/postcss-normalize-string/node_modules/postcss",
          "node_modules/postcss-normalize-timing-functions/node_modules/postcss",
          "node_modules/postcss-normalize-unicode/node_modules/postcss",
          "node_modules/postcss-normalize-url/node_modules/postcss",
          "node_modules/postcss-normalize-whitespace/node_modules/postcss",
          "node_modules/postcss-ordered-values/node_modules/postcss",
          "node_modules/postcss-pseudo-class-any-link/node_modules/postcss",
          "node_modules/postcss-pseudoelements/node_modules/postcss",
          "node_modules/postcss-reduce-initial/node_modules/postcss",
          "node_modules/postcss-reduce-transforms/node_modules/postcss",
          "node_modules/postcss-replace-overflow-wrap/node_modules/postcss",
          "node_modules/postcss-reporter/node_modules/postcss",
          "node_modules/postcss-selector-matches/node_modules/postcss",
          "node_modules/postcss-selector-not/node_modules/postcss",
          "node_modules/postcss-svgo/node_modules/postcss",
          "node_modules/postcss-unique-selectors/node_modules/postcss",
          "node_modules/stylehacks/node_modules/postcss"
        ],
        "fixAvailable": {
          "name": "cssnano",
          "version": "7.1.0",
          "isSemVerMajor": true
        }
      },
      "postcss-apply": {
        "name": "postcss-apply",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [
          "postcss-cssnext"
        ],
        "range": "<=0.10.0",
        "nodes": [
          "node_modules/postcss-apply"
        ],
        "fixAvailable": false
      },
      "postcss-attribute-case-insensitive": {
        "name": "postcss-attribute-case-insensitive",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [
          "postcss-cssnext"
        ],
        "range": "<=3.0.1",
        "nodes": [
          "node_modules/postcss-attribute-case-insensitive"
        ],
        "fixAvailable": false
      },
      "postcss-calc": {
        "name": "postcss-calc",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "4.1.0 - 7.0.5",
        "nodes": [
          "node_modules/postcss-calc",
          "node_modules/postcss-cssnext/node_modules/postcss-calc"
        ],
        "fixAvailable": true
      },
      "postcss-color-function": {
        "name": "postcss-color-function",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "css-color-function",
          "postcss"
        ],
        "effects": [],
        "range": "*",
        "nodes": [
          "node_modules/postcss-color-function"
        ],
        "fixAvailable": true
      },
      "postcss-color-gray": {
        "name": "postcss-color-gray",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "3.0.0 - 4.1.0",
        "nodes": [
          "node_modules/postcss-color-gray"
        ],
        "fixAvailable": true
      },
      "postcss-color-hex-alpha": {
        "name": "postcss-color-hex-alpha",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "1.3.0 - 3.0.0",
        "nodes": [
          "node_modules/postcss-color-hex-alpha"
        ],
        "fixAvailable": true
      },
      "postcss-color-hsl": {
        "name": "postcss-color-hsl",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [
          "postcss-cssnext"
        ],
        "range": "*",
        "nodes": [
          "node_modules/postcss-color-hsl"
        ],
        "fixAvailable": false
      },
      "postcss-color-hwb": {
        "name": "postcss-color-hwb",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": ">=1.2.0",
        "nodes": [
          "node_modules/postcss-color-hwb"
        ],
        "fixAvailable": true
      },
      "postcss-color-rebeccapurple": {
        "name": "postcss-color-rebeccapurple",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "1.2.0 - 3.1.0",
        "nodes": [
          "node_modules/postcss-color-rebeccapurple"
        ],
        "fixAvailable": true
      },
      "postcss-color-rgb": {
        "name": "postcss-color-rgb",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "*",
        "nodes": [
          "node_modules/postcss-color-rgb"
        ],
        "fixAvailable": true
      },
      "postcss-color-rgba-fallback": {
        "name": "postcss-color-rgba-fallback",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=3.0.0",
        "nodes": [
          "node_modules/postcss-color-rgba-fallback"
        ],
        "fixAvailable": true
      },
      "postcss-colormin": {
        "name": "postcss-colormin",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.3",
        "nodes": [
          "node_modules/postcss-colormin"
        ],
        "fixAvailable": true
      },
      "postcss-convert-values": {
        "name": "postcss-convert-values",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.1",
        "nodes": [
          "node_modules/postcss-convert-values"
        ],
        "fixAvailable": true
      },
      "postcss-cssnext": {
        "name": "postcss-cssnext",
        "severity": "moderate",
        "isDirect": true,
        "via": [
          "autoprefixer",
          "pixrem",
          "pleeease-filters",
          "postcss",
          "postcss-apply",
          "postcss-attribute-case-insensitive",
          "postcss-calc",
          "postcss-color-function",
          "postcss-color-gray",
          "postcss-color-hex-alpha",
          "postcss-color-hsl",
          "postcss-color-hwb",
          "postcss-color-rebeccapurple",
          "postcss-color-rgb",
          "postcss-color-rgba-fallback",
          "postcss-custom-media",
          "postcss-custom-properties",
          "postcss-custom-selectors",
          "postcss-font-family-system-ui",
          "postcss-font-variant",
          "postcss-image-set-polyfill",
          "postcss-initial",
          "postcss-media-minmax",
          "postcss-nesting",
          "postcss-pseudo-class-any-link",
          "postcss-pseudoelements",
          "postcss-replace-overflow-wrap",
          "postcss-selector-matches",
          "postcss-selector-not"
        ],
        "effects": [],
        "range": "*",
        "nodes": [
          "node_modules/postcss-cssnext"
        ],
        "fixAvailable": false
      },
      "postcss-custom-media": {
        "name": "postcss-custom-media",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "4.0.0 - 6.0.0",
        "nodes": [
          "node_modules/postcss-custom-media"
        ],
        "fixAvailable": true
      },
      "postcss-custom-properties": {
        "name": "postcss-custom-properties",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "3.3.0 - 7.0.0",
        "nodes": [
          "node_modules/postcss-custom-properties"
        ],
        "fixAvailable": true
      },
      "postcss-custom-selectors": {
        "name": "postcss-custom-selectors",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss",
          "postcss-selector-matches"
        ],
        "effects": [],
        "range": "2.3.0 - 4.0.1",
        "nodes": [
          "node_modules/postcss-custom-selectors"
        ],
        "fixAvailable": true
      },
      "postcss-discard-comments": {
        "name": "postcss-discard-comments",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-discard-comments"
        ],
        "fixAvailable": true
      },
      "postcss-discard-duplicates": {
        "name": "postcss-discard-duplicates",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "1.1.0 - 4.0.2",
        "nodes": [
          "node_modules/postcss-discard-duplicates"
        ],
        "fixAvailable": true
      },
      "postcss-discard-empty": {
        "name": "postcss-discard-empty",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "1.1.0 - 4.0.1",
        "nodes": [
          "node_modules/postcss-discard-empty"
        ],
        "fixAvailable": true
      },
      "postcss-discard-overridden": {
        "name": "postcss-discard-overridden",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.1",
        "nodes": [
          "node_modules/postcss-discard-overridden"
        ],
        "fixAvailable": true
      },
      "postcss-font-family-system-ui": {
        "name": "postcss-font-family-system-ui",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [
          "postcss-cssnext"
        ],
        "range": "<=3.0.0",
        "nodes": [
          "node_modules/postcss-font-family-system-ui"
        ],
        "fixAvailable": false
      },
      "postcss-font-variant": {
        "name": "postcss-font-variant",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "1.2.0 - 3.0.0",
        "nodes": [
          "node_modules/postcss-font-variant"
        ],
        "fixAvailable": true
      },
      "postcss-image-set-polyfill": {
        "name": "postcss-image-set-polyfill",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [
          "postcss-cssnext"
        ],
        "range": "<=0.4.4",
        "nodes": [
          "node_modules/postcss-image-set-polyfill"
        ],
        "fixAvailable": false
      },
      "postcss-import": {
        "name": "postcss-import",
        "severity": "moderate",
        "isDirect": true,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=12.0.1",
        "nodes": [
          "node_modules/postcss-import"
        ],
        "fixAvailable": {
          "name": "postcss-import",
          "version": "16.1.1",
          "isSemVerMajor": true
        }
      },
      "postcss-initial": {
        "name": "postcss-initial",
        "severity": "high",
        "isDirect": false,
        "via": [
          "lodash.template",
          "postcss"
        ],
        "effects": [
          "postcss-cssnext"
        ],
        "range": "<=3.0.2 || 4.0.0",
        "nodes": [
          "node_modules/postcss-initial"
        ],
        "fixAvailable": false
      },
      "postcss-media-minmax": {
        "name": "postcss-media-minmax",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "1.2.0 - 3.0.0",
        "nodes": [
          "node_modules/postcss-media-minmax"
        ],
        "fixAvailable": true
      },
      "postcss-merge-longhand": {
        "name": "postcss-merge-longhand",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss",
          "stylehacks"
        ],
        "effects": [],
        "range": "<=4.0.11",
        "nodes": [
          "node_modules/postcss-merge-longhand"
        ],
        "fixAvailable": true
      },
      "postcss-merge-rules": {
        "name": "postcss-merge-rules",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.3",
        "nodes": [
          "node_modules/postcss-merge-rules"
        ],
        "fixAvailable": true
      },
      "postcss-minify-font-values": {
        "name": "postcss-minify-font-values",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-minify-font-values"
        ],
        "fixAvailable": true
      },
      "postcss-minify-gradients": {
        "name": "postcss-minify-gradients",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-minify-gradients"
        ],
        "fixAvailable": true
      },
      "postcss-minify-params": {
        "name": "postcss-minify-params",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-minify-params"
        ],
        "fixAvailable": true
      },
      "postcss-minify-selectors": {
        "name": "postcss-minify-selectors",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-minify-selectors"
        ],
        "fixAvailable": true
      },
      "postcss-nesting": {
        "name": "postcss-nesting",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [
          "postcss-cssnext"
        ],
        "range": "<=6.0.0",
        "nodes": [
          "node_modules/postcss-nesting"
        ],
        "fixAvailable": false
      },
      "postcss-normalize-charset": {
        "name": "postcss-normalize-charset",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.1",
        "nodes": [
          "node_modules/postcss-normalize-charset"
        ],
        "fixAvailable": true
      },
      "postcss-normalize-display-values": {
        "name": "postcss-normalize-display-values",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-normalize-display-values"
        ],
        "fixAvailable": true
      },
      "postcss-normalize-positions": {
        "name": "postcss-normalize-positions",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-normalize-positions"
        ],
        "fixAvailable": true
      },
      "postcss-normalize-repeat-style": {
        "name": "postcss-normalize-repeat-style",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-normalize-repeat-style"
        ],
        "fixAvailable": true
      },
      "postcss-normalize-string": {
        "name": "postcss-normalize-string",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-normalize-string"
        ],
        "fixAvailable": true
      },
      "postcss-normalize-timing-functions": {
        "name": "postcss-normalize-timing-functions",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-normalize-timing-functions"
        ],
        "fixAvailable": true
      },
      "postcss-normalize-unicode": {
        "name": "postcss-normalize-unicode",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.1",
        "nodes": [
          "node_modules/postcss-normalize-unicode"
        ],
        "fixAvailable": true
      },
      "postcss-normalize-url": {
        "name": "postcss-normalize-url",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "1.1.0 - 4.0.1",
        "nodes": [
          "node_modules/postcss-normalize-url"
        ],
        "fixAvailable": true
      },
      "postcss-normalize-whitespace": {
        "name": "postcss-normalize-whitespace",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-normalize-whitespace"
        ],
        "fixAvailable": true
      },
      "postcss-ordered-values": {
        "name": "postcss-ordered-values",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.1.2",
        "nodes": [
          "node_modules/postcss-ordered-values"
        ],
        "fixAvailable": true
      },
      "postcss-pseudo-class-any-link": {
        "name": "postcss-pseudo-class-any-link",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=5.0.0",
        "nodes": [
          "node_modules/postcss-pseudo-class-any-link"
        ],
        "fixAvailable": true
      },
      "postcss-pseudoelements": {
        "name": "postcss-pseudoelements",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": ">=2.2.0",
        "nodes": [
          "node_modules/postcss-pseudoelements"
        ],
        "fixAvailable": true
      },
      "postcss-reduce-initial": {
        "name": "postcss-reduce-initial",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.3",
        "nodes": [
          "node_modules/postcss-reduce-initial"
        ],
        "fixAvailable": true
      },
      "postcss-reduce-transforms": {
        "name": "postcss-reduce-transforms",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.2",
        "nodes": [
          "node_modules/postcss-reduce-transforms"
        ],
        "fixAvailable": true
      },
      "postcss-replace-overflow-wrap": {
        "name": "postcss-replace-overflow-wrap",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [
          "postcss-cssnext"
        ],
        "range": "<=2.0.0",
        "nodes": [
          "node_modules/postcss-replace-overflow-wrap"
        ],
        "fixAvailable": false
      },
      "postcss-reporter": {
        "name": "postcss-reporter",
        "severity": "moderate",
        "isDirect": true,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=6.0.1",
        "nodes": [
          "node_modules/postcss-reporter"
        ],
        "fixAvailable": {
          "name": "postcss-reporter",
          "version": "7.1.0",
          "isSemVerMajor": true
        }
      },
      "postcss-selector-matches": {
        "name": "postcss-selector-matches",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=3.0.1",
        "nodes": [
          "node_modules/postcss-selector-matches"
        ],
        "fixAvailable": true
      },
      "postcss-selector-not": {
        "name": "postcss-selector-not",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=3.0.1",
        "nodes": [
          "node_modules/postcss-selector-not"
        ],
        "fixAvailable": true
      },
      "postcss-svgo": {
        "name": "postcss-svgo",
        "severity": "high",
        "isDirect": false,
        "via": [
          "postcss",
          "svgo"
        ],
        "effects": [],
        "range": "<=5.0.0-rc.2",
        "nodes": [
          "node_modules/postcss-svgo"
        ],
        "fixAvailable": true
      },
      "postcss-unique-selectors": {
        "name": "postcss-unique-selectors",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [],
        "range": "<=4.0.1",
        "nodes": [
          "node_modules/postcss-unique-selectors"
        ],
        "fixAvailable": true
      },
      "pre-commit": {
        "name": "pre-commit",
        "severity": "high",
        "isDirect": true,
        "via": [
          "cross-spawn"
        ],
        "effects": [],
        "range": ">=1.1.0",
        "nodes": [
          "node_modules/pre-commit"
        ],
        "fixAvailable": {
          "name": "pre-commit",
          "version": "1.0.10",
          "isSemVerMajor": true
        }
      },
      "readdirp": {
        "name": "readdirp",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "micromatch"
        ],
        "effects": [
          "chokidar"
        ],
        "range": "2.2.0 - 2.2.1",
        "nodes": [
          "node_modules/glob-watcher/node_modules/readdirp"
        ],
        "fixAvailable": {
          "name": "gulp",
          "version": "5.0.1",
          "isSemVerMajor": true
        }
      },
      "request": {
        "name": "request",
        "severity": "critical",
        "isDirect": false,
        "via": [
          {
            "source": 1096727,
            "name": "request",
            "dependency": "request",
            "title": "Server-Side Request Forgery in Request",
            "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
            "severity": "moderate",
            "cwe": [
              "CWE-918"
            ],
            "cvss": {
              "score": 6.1,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
            },
            "range": "<=2.88.2"
          },
          "form-data",
          "tough-cookie"
        ],
        "effects": [
          "phantomjs-prebuilt"
        ],
        "range": "*",
        "nodes": [
          "node_modules/request"
        ],
        "fixAvailable": {
          "name": "gulp-svg-sprite",
          "version": "2.0.3",
          "isSemVerMajor": true
        }
      },
      "stylehacks": {
        "name": "stylehacks",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          "postcss"
        ],
        "effects": [
          "postcss-merge-longhand"
        ],
        "range": "<=4.0.3",
        "nodes": [
          "node_modules/stylehacks"
        ],
        "fixAvailable": true
      },
      "svg-sprite": {
        "name": "svg-sprite",
        "severity": "high",
        "isDirect": false,
        "via": [
          "phantomjs-prebuilt",
          "svgo"
        ],
        "effects": [
          "gulp-svg-sprite"
        ],
        "range": "1.3.0 - 1.5.4",
        "nodes": [
          "node_modules/svg-sprite"
        ],
        "fixAvailable": {
          "name": "gulp-svg-sprite",
          "version": "2.0.3",
          "isSemVerMajor": true
        }
      },
      "svgo": {
        "name": "svgo",
        "severity": "high",
        "isDirect": false,
        "via": [
          "css-select"
        ],
        "effects": [
          "postcss-svgo",
          "svg-sprite"
        ],
        "range": "1.0.0 - 1.3.2",
        "nodes": [
          "node_modules/svgo"
        ],
        "fixAvailable": {
          "name": "gulp-svg-sprite",
          "version": "2.0.3",
          "isSemVerMajor": true
        }
      },
      "tough-cookie": {
        "name": "tough-cookie",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1097682,
            "name": "tough-cookie",
            "dependency": "tough-cookie",
            "title": "tough-cookie Prototype Pollution vulnerability",
            "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3",
            "severity": "moderate",
            "cwe": [
              "CWE-1321"
            ],
            "cvss": {
              "score": 6.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"
            },
            "range": "<4.1.3"
          }
        ],
        "effects": [
          "request"
        ],
        "range": "<4.1.3",
        "nodes": [
          "node_modules/tough-cookie"
        ],
        "fixAvailable": {
          "name": "gulp-svg-sprite",
          "version": "2.0.3",
          "isSemVerMajor": true
        }
      },
      "useragent": {
        "name": "useragent",
        "severity": "moderate",
        "isDirect": false,
        "via": [
          {
            "source": 1100298,
            "name": "useragent",
            "dependency": "useragent",
            "title": "useragent Regular Expression Denial of Service vulnerability",
            "url": "https://github.com/advisories/GHSA-mgfv-m47x-4wqp",
            "severity": "moderate",
            "cwe": [
              "CWE-1333"
            ],
            "cvss": {
              "score": 7.5,
              "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
            },
            "range": "<=2.3.0"
          }
        ],
        "effects": [
          "browserslist-useragent",
          "es-dev-server"
        ],
        "range": "*",
        "nodes": [
          "node_modules/useragent"
        ],
        "fixAvailable": true
      }
    },
    "metadata": {
      "vulnerabilities": {
        "info": 0,
        "low": 1,
        "moderate": 76,
        "high": 23,
        "critical": 2,
        "total": 102
      },
      "dependencies": {
        "prod": 1,
        "dev": 1675,
        "optional": 5,
        "peer": 1,
        "peerOptional": 0,
        "total": 1675
      }
    }
  }
}

--- end ---
{"added": 5, "removed": 0, "changed": 1, "audited": 1676, "funding": 152, "audit": {"auditReportVersion": 2, "vulnerabilities": {"@koa/cors": {"name": "@koa/cors", "severity": "high", "isDirect": false, "via": [{"source": 1095223, "name": "@koa/cors", "dependency": "@koa/cors", "title": "Overly permissive origin policy", "url": "https://github.com/advisories/GHSA-qxrj-hx23-xp82", "severity": "high", "cwe": ["CWE-346"], "cvss": {"score": 8.6, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N"}, "range": "<5.0.0"}], "effects": ["es-dev-server"], "range": "<5.0.0", "nodes": ["node_modules/@koa/cors"], "fixAvailable": true}, "anymatch": {"name": "anymatch", "severity": "moderate", "isDirect": false, "via": ["micromatch"], "effects": ["chokidar", "glob-watcher"], "range": "1.2.0 - 2.0.0", "nodes": ["node_modules/glob-watcher/node_modules/anymatch"], "fixAvailable": {"name": "gulp", "version": "5.0.1", "isSemVerMajor": true}}, "autoprefixer": {"name": "autoprefixer", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "1.0.20131222 - 8.6.5", "nodes": ["node_modules/autoprefixer"], "fixAvailable": true}, "braces": {"name": "braces", "severity": "high", "isDirect": false, "via": [{"source": 1098094, "name": "braces", "dependency": "braces", "title": "Uncontrolled resource consumption in braces", "url": "https://github.com/advisories/GHSA-grv7-fg5c-xmjg", "severity": "high", "cwe": ["CWE-400", "CWE-1050"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<3.0.3"}], "effects": ["chokidar", "micromatch"], "range": "<3.0.3", "nodes": ["node_modules/findup-sync/node_modules/braces", "node_modules/glob-watcher/node_modules/braces", "node_modules/matchdep/node_modules/braces"], "fixAvailable": {"name": "gulp", "version": "5.0.1", "isSemVerMajor": true}}, "browserslist-useragent": {"name": "browserslist-useragent", "severity": "moderate", "isDirect": false, "via": ["useragent"], "effects": [], "range": "<=3.1.4", "nodes": ["node_modules/browserslist-useragent"], "fixAvailable": true}, "cheerio": {"name": "cheerio", "severity": "high", "isDirect": false, "via": ["css-select", "lodash.pick"], "effects": ["gulp-inline"], "range": "0.19.0 - 1.0.0-rc.12", "nodes": ["node_modules/cheerio"], "fixAvailable": {"name": "gulp-inline", "version": "0.1.2", "isSemVerMajor": true}}, "chokidar": {"name": "chokidar", "severity": "high", "isDirect": false, "via": ["anymatch", "braces", "readdirp"], "effects": ["glob-watcher"], "range": "1.3.0 - 2.1.8", "nodes": ["node_modules/glob-watcher/node_modules/chokidar"], "fixAvailable": {"name": "gulp", "version": "5.0.1", "isSemVerMajor": true}}, "color": {"name": "color", "severity": "moderate", "isDirect": false, "via": ["color-string"], "effects": ["css-color-function"], "range": "<=0.11.4", "nodes": ["node_modules/color"], "fixAvailable": true}, "color-string": {"name": "color-string", "severity": "moderate", "isDirect": false, "via": [{"source": 1089718, "name": "color-string", "dependency": "color-string", "title": "Regular Expression Denial of Service (ReDOS)", "url": "https://github.com/advisories/GHSA-257v-vj4p-3w2h", "severity": "moderate", "cwe": ["CWE-770"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"}, "range": "<1.5.5"}], "effects": ["color"], "range": "<1.5.5", "nodes": ["node_modules/color/node_modules/color-string"], "fixAvailable": true}, "cross-spawn": {"name": "cross-spawn", "severity": "high", "isDirect": false, "via": [{"source": 1104663, "name": "cross-spawn", "dependency": "cross-spawn", "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn", "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275", "severity": "high", "cwe": ["CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<6.0.6"}], "effects": ["pre-commit"], "range": "<6.0.6", "nodes": ["node_modules/pre-commit/node_modules/cross-spawn"], "fixAvailable": {"name": "pre-commit", "version": "1.0.10", "isSemVerMajor": true}}, "css-color-function": {"name": "css-color-function", "severity": "moderate", "isDirect": false, "via": ["color"], "effects": ["postcss-color-function"], "range": "*", "nodes": ["node_modules/css-color-function"], "fixAvailable": true}, "css-declaration-sorter": {"name": "css-declaration-sorter", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=5.1.2", "nodes": ["node_modules/css-declaration-sorter"], "fixAvailable": true}, "css-select": {"name": "css-select", "severity": "high", "isDirect": false, "via": ["nth-check"], "effects": ["cheerio", "svgo"], "range": "<=3.1.0", "nodes": ["node_modules/css-select", "node_modules/svgo/node_modules/css-select"], "fixAvailable": {"name": "gulp-inline", "version": "0.1.2", "isSemVerMajor": true}}, "cssnano": {"name": "cssnano", "severity": "moderate", "isDirect": true, "via": ["cssnano-preset-default", "postcss"], "effects": [], "range": "<=4.1.11", "nodes": ["node_modules/cssnano"], "fixAvailable": {"name": "cssnano", "version": "7.1.0", "isSemVerMajor": true}}, "cssnano-preset-default": {"name": "cssnano-preset-default", "severity": "moderate", "isDirect": false, "via": ["css-declaration-sorter", "cssnano-util-raw-cache", "postcss", "postcss-calc", "postcss-colormin", "postcss-convert-values", "postcss-discard-comments", "postcss-discard-duplicates", "postcss-discard-empty", "postcss-discard-overridden", "postcss-merge-longhand", "postcss-merge-rules", "postcss-minify-font-values", "postcss-minify-gradients", "postcss-minify-params", "postcss-minify-selectors", "postcss-normalize-charset", "postcss-normalize-display-values", "postcss-normalize-positions", "postcss-normalize-repeat-style", "postcss-normalize-string", "postcss-normalize-timing-functions", "postcss-normalize-unicode", "postcss-normalize-url", "postcss-normalize-whitespace", "postcss-ordered-values", "postcss-reduce-initial", "postcss-reduce-transforms", "postcss-svgo", "postcss-unique-selectors"], "effects": ["cssnano"], "range": "<=4.0.8", "nodes": ["node_modules/cssnano-preset-default"], "fixAvailable": {"name": "cssnano", "version": "7.1.0", "isSemVerMajor": true}}, "cssnano-util-raw-cache": {"name": "cssnano-util-raw-cache", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "*", "nodes": ["node_modules/cssnano-util-raw-cache"], "fixAvailable": true}, "es-dev-server": {"name": "es-dev-server", "severity": "high", "isDirect": true, "via": ["@koa/cors", "browserslist-useragent", "useragent"], "effects": [], "range": ">=1.24.1", "nodes": ["node_modules/es-dev-server"], "fixAvailable": true}, "findup-sync": {"name": "findup-sync", "severity": "moderate", "isDirect": false, "via": ["micromatch"], "effects": ["liftoff", "matchdep"], "range": "0.4.0 - 3.0.0", "nodes": ["node_modules/findup-sync", "node_modules/matchdep/node_modules/findup-sync"], "fixAvailable": true}, "form-data": {"name": "form-data", "severity": "critical", "isDirect": false, "via": [{"source": 1106509, "name": "form-data", "dependency": "form-data", "title": "form-data uses unsafe random function in form-data for choosing boundary", "url": "https://github.com/advisories/GHSA-fjxv-7rqg-78g4", "severity": "critical", "cwe": ["CWE-330"], "cvss": {"score": 0, "vectorString": null}, "range": "<2.5.4"}], "effects": ["request"], "range": "<2.5.4", "nodes": ["node_modules/form-data"], "fixAvailable": {"name": "gulp-svg-sprite", "version": "2.0.3", "isSemVerMajor": true}}, "glob-watcher": {"name": "glob-watcher", "severity": "high", "isDirect": false, "via": ["anymatch", "chokidar"], "effects": ["gulp"], "range": "5.0.0 - 5.0.5", "nodes": ["node_modules/glob-watcher"], "fixAvailable": {"name": "gulp", "version": "5.0.1", "isSemVerMajor": true}}, "gulp": {"name": "gulp", "severity": "high", "isDirect": true, "via": ["glob-watcher", "gulp-cli"], "effects": [], "range": "4.0.0 - 4.0.2", "nodes": ["node_modules/gulp"], "fixAvailable": {"name": "gulp", "version": "5.0.1", "isSemVerMajor": true}}, "gulp-cli": {"name": "gulp-cli", "severity": "moderate", "isDirect": false, "via": ["liftoff", "matchdep"], "effects": [], "range": "1.3.0 - 2.3.0", "nodes": ["node_modules/gulp-cli"], "fixAvailable": true}, "gulp-compile-handlebars": {"name": "gulp-compile-handlebars", "severity": "high", "isDirect": true, "via": ["gulp-util"], "effects": [], "range": "*", "nodes": ["node_modules/gulp-compile-handlebars"], "fixAvailable": false}, "gulp-htmlmin": {"name": "gulp-htmlmin", "severity": "high", "isDirect": true, "via": ["html-minifier"], "effects": [], "range": "*", "nodes": ["node_modules/gulp-htmlmin"], "fixAvailable": false}, "gulp-inline": {"name": "gulp-inline", "severity": "high", "isDirect": true, "via": ["cheerio", "gulp-util"], "effects": [], "range": "*", "nodes": ["node_modules/gulp-inline"], "fixAvailable": {"name": "gulp-inline", "version": "0.1.2", "isSemVerMajor": true}}, "gulp-postcss": {"name": "gulp-postcss", "severity": "moderate", "isDirect": true, "via": ["postcss"], "effects": [], "range": "<=8.0.0", "nodes": ["node_modules/gulp-postcss"], "fixAvailable": {"name": "gulp-postcss", "version": "10.0.0", "isSemVerMajor": true}}, "gulp-svg-sprite": {"name": "gulp-svg-sprite", "severity": "moderate", "isDirect": true, "via": ["svg-sprite"], "effects": [], "range": "1.3.0 - 1.5.0", "nodes": ["node_modules/gulp-svg-sprite"], "fixAvailable": {"name": "gulp-svg-sprite", "version": "2.0.3", "isSemVerMajor": true}}, "gulp-util": {"name": "gulp-util", "severity": "high", "isDirect": false, "via": ["lodash.template"], "effects": ["gulp-compile-handlebars", "gulp-inline"], "range": ">=1.1.0", "nodes": ["node_modules/gulp-util"], "fixAvailable": false}, "html-minifier": {"name": "html-minifier", "severity": "high", "isDirect": false, "via": [{"source": 1105440, "name": "html-minifier", "dependency": "html-minifier", "title": "kangax html-minifier REDoS vulnerability", "url": "https://github.com/advisories/GHSA-pfq8-rq6v-vf5m", "severity": "high", "cwe": ["CWE-400", "CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<=4.0.0"}], "effects": ["gulp-htmlmin"], "range": "*", "nodes": ["node_modules/html-minifier"], "fixAvailable": false}, "koa": {"name": "koa", "severity": "low", "isDirect": false, "via": [{"source": 1106793, "name": "koa", "dependency": "koa", "title": "Koa Open Redirect via Referrer Header (User-Controlled)", "url": "https://github.com/advisories/GHSA-jgmv-j7ww-jx2x", "severity": "low", "cwe": ["CWE-601"], "cvss": {"score": 3.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:L/A:N"}, "range": ">=2.0.0 <2.16.2"}], "effects": [], "range": "2.0.0 - 2.16.1", "nodes": [""], "fixAvailable": true}, "liftoff": {"name": "liftoff", "severity": "moderate", "isDirect": false, "via": ["findup-sync"], "effects": ["gulp-cli"], "range": "2.2.3 - 3.1.0", "nodes": ["node_modules/liftoff"], "fixAvailable": true}, "lodash.pick": {"name": "lodash.pick", "severity": "high", "isDirect": false, "via": [{"source": 1096303, "name": "lodash.pick", "dependency": "lodash.pick", "title": "Prototype Pollution in lodash", "url": "https://github.com/advisories/GHSA-p6mc-m468-83gw", "severity": "high", "cwe": ["CWE-770", "CWE-1321"], "cvss": {"score": 7.4, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:H"}, "range": ">=4.0.0 <=4.4.0"}], "effects": ["cheerio"], "range": ">=4.0.0", "nodes": ["node_modules/lodash.pick"], "fixAvailable": {"name": "gulp-inline", "version": "0.1.2", "isSemVerMajor": true}}, "lodash.template": {"name": "lodash.template", "severity": "high", "isDirect": false, "via": [{"source": 1096993, "name": "lodash.template", "dependency": "lodash.template", "title": "Command Injection in lodash", "url": "https://github.com/advisories/GHSA-35jh-r3h4-6jhm", "severity": "high", "cwe": ["CWE-77", "CWE-94"], "cvss": {"score": 7.2, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"}, "range": "<=4.5.0"}], "effects": ["gulp-util", "postcss-initial"], "range": "*", "nodes": ["node_modules/lodash.template", "node_modules/postcss-initial/node_modules/lodash.template"], "fixAvailable": false}, "matchdep": {"name": "matchdep", "severity": "moderate", "isDirect": false, "via": ["findup-sync", "micromatch"], "effects": ["gulp-cli"], "range": ">=1.0.1", "nodes": ["node_modules/matchdep"], "fixAvailable": true}, "micromatch": {"name": "micromatch", "severity": "high", "isDirect": false, "via": [{"source": 1098681, "name": "micromatch", "dependency": "micromatch", "title": "Regular Expression Denial of Service (ReDoS) in micromatch", "url": "https://github.com/advisories/GHSA-952p-6rrq-rcjv", "severity": "moderate", "cwe": ["CWE-1333"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"}, "range": "<4.0.8"}, "braces"], "effects": ["anymatch", "findup-sync", "matchdep", "readdirp"], "range": "<=4.0.7", "nodes": ["node_modules/findup-sync/node_modules/micromatch", "node_modules/glob-watcher/node_modules/micromatch", "node_modules/matchdep/node_modules/micromatch"], "fixAvailable": {"name": "gulp", "version": "5.0.1", "isSemVerMajor": true}}, "nth-check": {"name": "nth-check", "severity": "high", "isDirect": false, "via": [{"source": 1095141, "name": "nth-check", "dependency": "nth-check", "title": "Inefficient Regular Expression Complexity in nth-check", "url": "https://github.com/advisories/GHSA-rp65-9cf3-cjxr", "severity": "high", "cwe": ["CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<2.0.1"}], "effects": ["css-select"], "range": "<2.0.1", "nodes": ["node_modules/nth-check"], "fixAvailable": {"name": "gulp-inline", "version": "0.1.2", "isSemVerMajor": true}}, "phantomjs-prebuilt": {"name": "phantomjs-prebuilt", "severity": "moderate", "isDirect": false, "via": ["request"], "effects": ["svg-sprite"], "range": "*", "nodes": ["node_modules/phantomjs-prebuilt"], "fixAvailable": {"name": "gulp-svg-sprite", "version": "2.0.3", "isSemVerMajor": true}}, "pixrem": {"name": "pixrem", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.1", "nodes": ["node_modules/pixrem"], "fixAvailable": true}, "pleeease-filters": {"name": "pleeease-filters", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "*", "nodes": ["node_modules/pleeease-filters"], "fixAvailable": true}, "postcss": {"name": "postcss", "severity": "moderate", "isDirect": false, "via": [{"source": 1093539, "name": "postcss", "dependency": "postcss", "title": "Regular Expression Denial of Service in postcss", "url": "https://github.com/advisories/GHSA-566m-qj78-rww5", "severity": "moderate", "cwe": ["CWE-400"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"}, "range": "<7.0.36"}, {"source": 1094544, "name": "postcss", "dependency": "postcss", "title": "PostCSS line return parsing error", "url": "https://github.com/advisories/GHSA-7fh5-64p2-3v2j", "severity": "moderate", "cwe": ["CWE-74", "CWE-144"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"}, "range": "<8.4.31"}], "effects": ["autoprefixer", "css-declaration-sorter", "cssnano", "cssnano-preset-default", "cssnano-util-raw-cache", "gulp-postcss", "pixrem", "pleeease-filters", "postcss-apply", "postcss-attribute-case-insensitive", "postcss-calc", "postcss-color-function", "postcss-color-gray", "postcss-color-hex-alpha", "postcss-color-hsl", "postcss-color-hwb", "postcss-color-rebeccapurple", "postcss-color-rgb", "postcss-color-rgba-fallback", "postcss-colormin", "postcss-convert-values", "postcss-cssnext", "postcss-custom-media", "postcss-custom-properties", "postcss-custom-selectors", "postcss-discard-comments", "postcss-discard-duplicates", "postcss-discard-empty", "postcss-discard-overridden", "postcss-font-family-system-ui", "postcss-font-variant", "postcss-image-set-polyfill", "postcss-import", "postcss-initial", "postcss-media-minmax", "postcss-merge-longhand", "postcss-merge-rules", "postcss-minify-font-values", "postcss-minify-gradients", "postcss-minify-params", "postcss-minify-selectors", "postcss-nesting", "postcss-normalize-charset", "postcss-normalize-display-values", "postcss-normalize-positions", "postcss-normalize-repeat-style", "postcss-normalize-string", "postcss-normalize-timing-functions", "postcss-normalize-unicode", "postcss-normalize-url", "postcss-normalize-whitespace", "postcss-ordered-values", "postcss-pseudo-class-any-link", "postcss-pseudoelements", "postcss-reduce-initial", "postcss-reduce-transforms", "postcss-replace-overflow-wrap", "postcss-reporter", "postcss-selector-matches", "postcss-selector-not", "postcss-svgo", "postcss-unique-selectors", "stylehacks"], "range": "<=8.4.30", "nodes": ["node_modules/autoprefixer/node_modules/postcss", "node_modules/css-declaration-sorter/node_modules/postcss", "node_modules/cssnano-preset-default/node_modules/postcss", "node_modules/cssnano-util-raw-cache/node_modules/postcss", "node_modules/cssnano/node_modules/postcss", "node_modules/gulp-postcss/node_modules/postcss", "node_modules/pixrem/node_modules/postcss", "node_modules/pleeease-filters/node_modules/postcss", "node_modules/postcss-apply/node_modules/postcss", "node_modules/postcss-attribute-case-insensitive/node_modules/postcss", "node_modules/postcss-calc/node_modules/postcss", "node_modules/postcss-color-function/node_modules/postcss", "node_modules/postcss-color-gray/node_modules/postcss", "node_modules/postcss-color-hex-alpha/node_modules/postcss", "node_modules/postcss-color-hsl/node_modules/postcss", "node_modules/postcss-color-hwb/node_modules/postcss", "node_modules/postcss-color-rebeccapurple/node_modules/postcss", "node_modules/postcss-color-rgb/node_modules/postcss", "node_modules/postcss-color-rgba-fallback/node_modules/postcss", "node_modules/postcss-colormin/node_modules/postcss", "node_modules/postcss-convert-values/node_modules/postcss", "node_modules/postcss-cssnext/node_modules/postcss", "node_modules/postcss-cssnext/node_modules/postcss-calc/node_modules/postcss", "node_modules/postcss-custom-media/node_modules/postcss", "node_modules/postcss-custom-properties/node_modules/postcss", "node_modules/postcss-custom-selectors/node_modules/postcss", "node_modules/postcss-discard-comments/node_modules/postcss", "node_modules/postcss-discard-duplicates/node_modules/postcss", "node_modules/postcss-discard-empty/node_modules/postcss", "node_modules/postcss-discard-overridden/node_modules/postcss", "node_modules/postcss-font-family-system-ui/node_modules/postcss", "node_modules/postcss-font-variant/node_modules/postcss", "node_modules/postcss-image-set-polyfill/node_modules/postcss", "node_modules/postcss-import/node_modules/postcss", "node_modules/postcss-initial/node_modules/postcss", "node_modules/postcss-media-minmax/node_modules/postcss", "node_modules/postcss-merge-longhand/node_modules/postcss", "node_modules/postcss-merge-rules/node_modules/postcss", "node_modules/postcss-minify-font-values/node_modules/postcss", "node_modules/postcss-minify-gradients/node_modules/postcss", "node_modules/postcss-minify-params/node_modules/postcss", "node_modules/postcss-minify-selectors/node_modules/postcss", "node_modules/postcss-nesting/node_modules/postcss", "node_modules/postcss-normalize-charset/node_modules/postcss", "node_modules/postcss-normalize-display-values/node_modules/postcss", "node_modules/postcss-normalize-positions/node_modules/postcss", "node_modules/postcss-normalize-repeat-style/node_modules/postcss", "node_modules/postcss-normalize-string/node_modules/postcss", "node_modules/postcss-normalize-timing-functions/node_modules/postcss", "node_modules/postcss-normalize-unicode/node_modules/postcss", "node_modules/postcss-normalize-url/node_modules/postcss", "node_modules/postcss-normalize-whitespace/node_modules/postcss", "node_modules/postcss-ordered-values/node_modules/postcss", "node_modules/postcss-pseudo-class-any-link/node_modules/postcss", "node_modules/postcss-pseudoelements/node_modules/postcss", "node_modules/postcss-reduce-initial/node_modules/postcss", "node_modules/postcss-reduce-transforms/node_modules/postcss", "node_modules/postcss-replace-overflow-wrap/node_modules/postcss", "node_modules/postcss-reporter/node_modules/postcss", "node_modules/postcss-selector-matches/node_modules/postcss", "node_modules/postcss-selector-not/node_modules/postcss", "node_modules/postcss-svgo/node_modules/postcss", "node_modules/postcss-unique-selectors/node_modules/postcss", "node_modules/stylehacks/node_modules/postcss"], "fixAvailable": {"name": "cssnano", "version": "7.1.0", "isSemVerMajor": true}}, "postcss-apply": {"name": "postcss-apply", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": ["postcss-cssnext"], "range": "<=0.10.0", "nodes": ["node_modules/postcss-apply"], "fixAvailable": false}, "postcss-attribute-case-insensitive": {"name": "postcss-attribute-case-insensitive", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": ["postcss-cssnext"], "range": "<=3.0.1", "nodes": ["node_modules/postcss-attribute-case-insensitive"], "fixAvailable": false}, "postcss-calc": {"name": "postcss-calc", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "4.1.0 - 7.0.5", "nodes": ["node_modules/postcss-calc", "node_modules/postcss-cssnext/node_modules/postcss-calc"], "fixAvailable": true}, "postcss-color-function": {"name": "postcss-color-function", "severity": "moderate", "isDirect": false, "via": ["css-color-function", "postcss"], "effects": [], "range": "*", "nodes": ["node_modules/postcss-color-function"], "fixAvailable": true}, "postcss-color-gray": {"name": "postcss-color-gray", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "3.0.0 - 4.1.0", "nodes": ["node_modules/postcss-color-gray"], "fixAvailable": true}, "postcss-color-hex-alpha": {"name": "postcss-color-hex-alpha", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "1.3.0 - 3.0.0", "nodes": ["node_modules/postcss-color-hex-alpha"], "fixAvailable": true}, "postcss-color-hsl": {"name": "postcss-color-hsl", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": ["postcss-cssnext"], "range": "*", "nodes": ["node_modules/postcss-color-hsl"], "fixAvailable": false}, "postcss-color-hwb": {"name": "postcss-color-hwb", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": ">=1.2.0", "nodes": ["node_modules/postcss-color-hwb"], "fixAvailable": true}, "postcss-color-rebeccapurple": {"name": "postcss-color-rebeccapurple", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "1.2.0 - 3.1.0", "nodes": ["node_modules/postcss-color-rebeccapurple"], "fixAvailable": true}, "postcss-color-rgb": {"name": "postcss-color-rgb", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "*", "nodes": ["node_modules/postcss-color-rgb"], "fixAvailable": true}, "postcss-color-rgba-fallback": {"name": "postcss-color-rgba-fallback", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=3.0.0", "nodes": ["node_modules/postcss-color-rgba-fallback"], "fixAvailable": true}, "postcss-colormin": {"name": "postcss-colormin", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.3", "nodes": ["node_modules/postcss-colormin"], "fixAvailable": true}, "postcss-convert-values": {"name": "postcss-convert-values", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.1", "nodes": ["node_modules/postcss-convert-values"], "fixAvailable": true}, "postcss-cssnext": {"name": "postcss-cssnext", "severity": "moderate", "isDirect": true, "via": ["autoprefixer", "pixrem", "pleeease-filters", "postcss", "postcss-apply", "postcss-attribute-case-insensitive", "postcss-calc", "postcss-color-function", "postcss-color-gray", "postcss-color-hex-alpha", "postcss-color-hsl", "postcss-color-hwb", "postcss-color-rebeccapurple", "postcss-color-rgb", "postcss-color-rgba-fallback", "postcss-custom-media", "postcss-custom-properties", "postcss-custom-selectors", "postcss-font-family-system-ui", "postcss-font-variant", "postcss-image-set-polyfill", "postcss-initial", "postcss-media-minmax", "postcss-nesting", "postcss-pseudo-class-any-link", "postcss-pseudoelements", "postcss-replace-overflow-wrap", "postcss-selector-matches", "postcss-selector-not"], "effects": [], "range": "*", "nodes": ["node_modules/postcss-cssnext"], "fixAvailable": false}, "postcss-custom-media": {"name": "postcss-custom-media", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "4.0.0 - 6.0.0", "nodes": ["node_modules/postcss-custom-media"], "fixAvailable": true}, "postcss-custom-properties": {"name": "postcss-custom-properties", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "3.3.0 - 7.0.0", "nodes": ["node_modules/postcss-custom-properties"], "fixAvailable": true}, "postcss-custom-selectors": {"name": "postcss-custom-selectors", "severity": "moderate", "isDirect": false, "via": ["postcss", "postcss-selector-matches"], "effects": [], "range": "2.3.0 - 4.0.1", "nodes": ["node_modules/postcss-custom-selectors"], "fixAvailable": true}, "postcss-discard-comments": {"name": "postcss-discard-comments", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-discard-comments"], "fixAvailable": true}, "postcss-discard-duplicates": {"name": "postcss-discard-duplicates", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "1.1.0 - 4.0.2", "nodes": ["node_modules/postcss-discard-duplicates"], "fixAvailable": true}, "postcss-discard-empty": {"name": "postcss-discard-empty", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "1.1.0 - 4.0.1", "nodes": ["node_modules/postcss-discard-empty"], "fixAvailable": true}, "postcss-discard-overridden": {"name": "postcss-discard-overridden", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.1", "nodes": ["node_modules/postcss-discard-overridden"], "fixAvailable": true}, "postcss-font-family-system-ui": {"name": "postcss-font-family-system-ui", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": ["postcss-cssnext"], "range": "<=3.0.0", "nodes": ["node_modules/postcss-font-family-system-ui"], "fixAvailable": false}, "postcss-font-variant": {"name": "postcss-font-variant", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "1.2.0 - 3.0.0", "nodes": ["node_modules/postcss-font-variant"], "fixAvailable": true}, "postcss-image-set-polyfill": {"name": "postcss-image-set-polyfill", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": ["postcss-cssnext"], "range": "<=0.4.4", "nodes": ["node_modules/postcss-image-set-polyfill"], "fixAvailable": false}, "postcss-import": {"name": "postcss-import", "severity": "moderate", "isDirect": true, "via": ["postcss"], "effects": [], "range": "<=12.0.1", "nodes": ["node_modules/postcss-import"], "fixAvailable": {"name": "postcss-import", "version": "16.1.1", "isSemVerMajor": true}}, "postcss-initial": {"name": "postcss-initial", "severity": "high", "isDirect": false, "via": ["lodash.template", "postcss"], "effects": ["postcss-cssnext"], "range": "<=3.0.2 || 4.0.0", "nodes": ["node_modules/postcss-initial"], "fixAvailable": false}, "postcss-media-minmax": {"name": "postcss-media-minmax", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "1.2.0 - 3.0.0", "nodes": ["node_modules/postcss-media-minmax"], "fixAvailable": true}, "postcss-merge-longhand": {"name": "postcss-merge-longhand", "severity": "moderate", "isDirect": false, "via": ["postcss", "stylehacks"], "effects": [], "range": "<=4.0.11", "nodes": ["node_modules/postcss-merge-longhand"], "fixAvailable": true}, "postcss-merge-rules": {"name": "postcss-merge-rules", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.3", "nodes": ["node_modules/postcss-merge-rules"], "fixAvailable": true}, "postcss-minify-font-values": {"name": "postcss-minify-font-values", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-minify-font-values"], "fixAvailable": true}, "postcss-minify-gradients": {"name": "postcss-minify-gradients", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-minify-gradients"], "fixAvailable": true}, "postcss-minify-params": {"name": "postcss-minify-params", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-minify-params"], "fixAvailable": true}, "postcss-minify-selectors": {"name": "postcss-minify-selectors", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-minify-selectors"], "fixAvailable": true}, "postcss-nesting": {"name": "postcss-nesting", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": ["postcss-cssnext"], "range": "<=6.0.0", "nodes": ["node_modules/postcss-nesting"], "fixAvailable": false}, "postcss-normalize-charset": {"name": "postcss-normalize-charset", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.1", "nodes": ["node_modules/postcss-normalize-charset"], "fixAvailable": true}, "postcss-normalize-display-values": {"name": "postcss-normalize-display-values", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-normalize-display-values"], "fixAvailable": true}, "postcss-normalize-positions": {"name": "postcss-normalize-positions", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-normalize-positions"], "fixAvailable": true}, "postcss-normalize-repeat-style": {"name": "postcss-normalize-repeat-style", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-normalize-repeat-style"], "fixAvailable": true}, "postcss-normalize-string": {"name": "postcss-normalize-string", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-normalize-string"], "fixAvailable": true}, "postcss-normalize-timing-functions": {"name": "postcss-normalize-timing-functions", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-normalize-timing-functions"], "fixAvailable": true}, "postcss-normalize-unicode": {"name": "postcss-normalize-unicode", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.1", "nodes": ["node_modules/postcss-normalize-unicode"], "fixAvailable": true}, "postcss-normalize-url": {"name": "postcss-normalize-url", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "1.1.0 - 4.0.1", "nodes": ["node_modules/postcss-normalize-url"], "fixAvailable": true}, "postcss-normalize-whitespace": {"name": "postcss-normalize-whitespace", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-normalize-whitespace"], "fixAvailable": true}, "postcss-ordered-values": {"name": "postcss-ordered-values", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.1.2", "nodes": ["node_modules/postcss-ordered-values"], "fixAvailable": true}, "postcss-pseudo-class-any-link": {"name": "postcss-pseudo-class-any-link", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=5.0.0", "nodes": ["node_modules/postcss-pseudo-class-any-link"], "fixAvailable": true}, "postcss-pseudoelements": {"name": "postcss-pseudoelements", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": ">=2.2.0", "nodes": ["node_modules/postcss-pseudoelements"], "fixAvailable": true}, "postcss-reduce-initial": {"name": "postcss-reduce-initial", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.3", "nodes": ["node_modules/postcss-reduce-initial"], "fixAvailable": true}, "postcss-reduce-transforms": {"name": "postcss-reduce-transforms", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.2", "nodes": ["node_modules/postcss-reduce-transforms"], "fixAvailable": true}, "postcss-replace-overflow-wrap": {"name": "postcss-replace-overflow-wrap", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": ["postcss-cssnext"], "range": "<=2.0.0", "nodes": ["node_modules/postcss-replace-overflow-wrap"], "fixAvailable": false}, "postcss-reporter": {"name": "postcss-reporter", "severity": "moderate", "isDirect": true, "via": ["postcss"], "effects": [], "range": "<=6.0.1", "nodes": ["node_modules/postcss-reporter"], "fixAvailable": {"name": "postcss-reporter", "version": "7.1.0", "isSemVerMajor": true}}, "postcss-selector-matches": {"name": "postcss-selector-matches", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=3.0.1", "nodes": ["node_modules/postcss-selector-matches"], "fixAvailable": true}, "postcss-selector-not": {"name": "postcss-selector-not", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=3.0.1", "nodes": ["node_modules/postcss-selector-not"], "fixAvailable": true}, "postcss-svgo": {"name": "postcss-svgo", "severity": "high", "isDirect": false, "via": ["postcss", "svgo"], "effects": [], "range": "<=5.0.0-rc.2", "nodes": ["node_modules/postcss-svgo"], "fixAvailable": true}, "postcss-unique-selectors": {"name": "postcss-unique-selectors", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": [], "range": "<=4.0.1", "nodes": ["node_modules/postcss-unique-selectors"], "fixAvailable": true}, "pre-commit": {"name": "pre-commit", "severity": "high", "isDirect": true, "via": ["cross-spawn"], "effects": [], "range": ">=1.1.0", "nodes": ["node_modules/pre-commit"], "fixAvailable": {"name": "pre-commit", "version": "1.0.10", "isSemVerMajor": true}}, "readdirp": {"name": "readdirp", "severity": "moderate", "isDirect": false, "via": ["micromatch"], "effects": ["chokidar"], "range": "2.2.0 - 2.2.1", "nodes": ["node_modules/glob-watcher/node_modules/readdirp"], "fixAvailable": {"name": "gulp", "version": "5.0.1", "isSemVerMajor": true}}, "request": {"name": "request", "severity": "critical", "isDirect": false, "via": [{"source": 1096727, "name": "request", "dependency": "request", "title": "Server-Side Request Forgery in Request", "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6", "severity": "moderate", "cwe": ["CWE-918"], "cvss": {"score": 6.1, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"}, "range": "<=2.88.2"}, "form-data", "tough-cookie"], "effects": ["phantomjs-prebuilt"], "range": "*", "nodes": ["node_modules/request"], "fixAvailable": {"name": "gulp-svg-sprite", "version": "2.0.3", "isSemVerMajor": true}}, "stylehacks": {"name": "stylehacks", "severity": "moderate", "isDirect": false, "via": ["postcss"], "effects": ["postcss-merge-longhand"], "range": "<=4.0.3", "nodes": ["node_modules/stylehacks"], "fixAvailable": true}, "svg-sprite": {"name": "svg-sprite", "severity": "high", "isDirect": false, "via": ["phantomjs-prebuilt", "svgo"], "effects": ["gulp-svg-sprite"], "range": "1.3.0 - 1.5.4", "nodes": ["node_modules/svg-sprite"], "fixAvailable": {"name": "gulp-svg-sprite", "version": "2.0.3", "isSemVerMajor": true}}, "svgo": {"name": "svgo", "severity": "high", "isDirect": false, "via": ["css-select"], "effects": ["postcss-svgo", "svg-sprite"], "range": "1.0.0 - 1.3.2", "nodes": ["node_modules/svgo"], "fixAvailable": {"name": "gulp-svg-sprite", "version": "2.0.3", "isSemVerMajor": true}}, "tough-cookie": {"name": "tough-cookie", "severity": "moderate", "isDirect": false, "via": [{"source": 1097682, "name": "tough-cookie", "dependency": "tough-cookie", "title": "tough-cookie Prototype Pollution vulnerability", "url": "https://github.com/advisories/GHSA-72xf-g2v4-qvf3", "severity": "moderate", "cwe": ["CWE-1321"], "cvss": {"score": 6.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N"}, "range": "<4.1.3"}], "effects": ["request"], "range": "<4.1.3", "nodes": ["node_modules/tough-cookie"], "fixAvailable": {"name": "gulp-svg-sprite", "version": "2.0.3", "isSemVerMajor": true}}, "useragent": {"name": "useragent", "severity": "moderate", "isDirect": false, "via": [{"source": 1100298, "name": "useragent", "dependency": "useragent", "title": "useragent Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-mgfv-m47x-4wqp", "severity": "moderate", "cwe": ["CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<=2.3.0"}], "effects": ["browserslist-useragent", "es-dev-server"], "range": "*", "nodes": ["node_modules/useragent"], "fixAvailable": true}}, "metadata": {"vulnerabilities": {"info": 0, "low": 1, "moderate": 76, "high": 23, "critical": 2, "total": 102}, "dependencies": {"prod": 1, "dev": 1675, "optional": 5, "peer": 1, "peerOptional": 0, "total": 1675}}}}
$ /usr/bin/npm audit fix --only=dev
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-design-tokens@2.2.1',
npm WARN EBADENGINE   required: { node: '>=20', npm: '>=10.8.1' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
--- stdout ---

changed 1 package, and audited 1671 packages in 9s

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

# npm audit report

@koa/cors  <5.0.0
Severity: high
Overly permissive origin policy - https://github.com/advisories/GHSA-qxrj-hx23-xp82
fix available via `npm audit fix`
node_modules/@koa/cors
  es-dev-server  >=1.24.1
  Depends on vulnerable versions of @koa/cors
  Depends on vulnerable versions of browserslist-useragent
  Depends on vulnerable versions of useragent
  node_modules/es-dev-server

braces  <3.0.3
Severity: high
Uncontrolled resource consumption in braces - https://github.com/advisories/GHSA-grv7-fg5c-xmjg
fix available via `npm audit fix --force`
Will install gulp@5.0.1, which is a breaking change
node_modules/findup-sync/node_modules/braces
node_modules/glob-watcher/node_modules/braces
node_modules/matchdep/node_modules/braces
  chokidar  1.3.0 - 2.1.8
  Depends on vulnerable versions of anymatch
  Depends on vulnerable versions of braces
  Depends on vulnerable versions of readdirp
  node_modules/glob-watcher/node_modules/chokidar
    glob-watcher  5.0.0 - 5.0.5
    Depends on vulnerable versions of anymatch
    Depends on vulnerable versions of chokidar
    node_modules/glob-watcher
      gulp  4.0.0 - 4.0.2
      Depends on vulnerable versions of glob-watcher
      Depends on vulnerable versions of gulp-cli
      node_modules/gulp
  micromatch  <=4.0.7
  Depends on vulnerable versions of braces
  node_modules/findup-sync/node_modules/micromatch
  node_modules/glob-watcher/node_modules/micromatch
  node_modules/matchdep/node_modules/micromatch
    anymatch  1.2.0 - 2.0.0
    Depends on vulnerable versions of micromatch
    node_modules/glob-watcher/node_modules/anymatch
    findup-sync  0.4.0 - 3.0.0
    Depends on vulnerable versions of micromatch
    node_modules/findup-sync
    node_modules/matchdep/node_modules/findup-sync
      liftoff  2.2.3 - 3.1.0
      Depends on vulnerable versions of findup-sync
      node_modules/liftoff
        gulp-cli  1.3.0 - 2.3.0
        Depends on vulnerable versions of liftoff
        Depends on vulnerable versions of matchdep
        node_modules/gulp-cli
      matchdep  >=1.0.1
      Depends on vulnerable versions of findup-sync
      Depends on vulnerable versions of micromatch
      node_modules/matchdep
    readdirp  2.2.0 - 2.2.1
    Depends on vulnerable versions of micromatch
    node_modules/glob-watcher/node_modules/readdirp

color-string  <1.5.5
Severity: moderate
Regular Expression Denial of Service (ReDOS) - https://github.com/advisories/GHSA-257v-vj4p-3w2h
fix available via `npm audit fix`
node_modules/color/node_modules/color-string
  color  <=0.11.4
  Depends on vulnerable versions of color-string
  node_modules/color
    css-color-function  *
    Depends on vulnerable versions of color
    node_modules/css-color-function
      postcss-color-function  *
      Depends on vulnerable versions of css-color-function
      Depends on vulnerable versions of postcss
      node_modules/postcss-color-function

cross-spawn  <6.0.6
Severity: high
Regular Expression Denial of Service (ReDoS) in cross-spawn - https://github.com/advisories/GHSA-3xgq-45jj-v275
fix available via `npm audit fix --force`
Will install pre-commit@1.0.10, which is a breaking change
node_modules/pre-commit/node_modules/cross-spawn
  pre-commit  >=1.1.0
  Depends on vulnerable versions of cross-spawn
  node_modules/pre-commit

form-data  <2.5.4
Severity: critical
form-data uses unsafe random function in form-data for choosing boundary - https://github.com/advisories/GHSA-fjxv-7rqg-78g4
fix available via `npm audit fix --force`
Will install gulp-svg-sprite@2.0.3, which is a breaking change
node_modules/form-data
  request  *
  Depends on vulnerable versions of form-data
  Depends on vulnerable versions of tough-cookie
  node_modules/request
    phantomjs-prebuilt  *
    Depends on vulnerable versions of request
    node_modules/phantomjs-prebuilt
      svg-sprite  1.3.0 - 1.5.4
      Depends on vulnerable versions of phantomjs-prebuilt
      Depends on vulnerable versions of svgo
      node_modules/svg-sprite
        gulp-svg-sprite  1.3.0 - 1.5.0
        Depends on vulnerable versions of svg-sprite
        node_modules/gulp-svg-sprite

html-minifier  *
Severity: high
kangax html-minifier REDoS vulnerability - https://github.com/advisories/GHSA-pfq8-rq6v-vf5m
No fix available
node_modules/html-minifier
  gulp-htmlmin  *
  Depends on vulnerable versions of html-minifier
  node_modules/gulp-htmlmin

lodash.pick  >=4.0.0
Severity: high
Prototype Pollution in lodash - https://github.com/advisories/GHSA-p6mc-m468-83gw
fix available via `npm audit fix --force`
Will install gulp-inline@0.1.2, which is a breaking change
node_modules/lodash.pick
  cheerio  0.19.0 - 1.0.0-rc.12
  Depends on vulnerable versions of css-select
  Depends on vulnerable versions of lodash.pick
  node_modules/cheerio
    gulp-inline  *
    Depends on vulnerable versions of cheerio
    Depends on vulnerable versions of gulp-util
    node_modules/gulp-inline

lodash.template  *
Severity: high
Command Injection in lodash - https://github.com/advisories/GHSA-35jh-r3h4-6jhm
fix available via `npm audit fix --force`
Will install gulp-inline@0.1.2, which is a breaking change
node_modules/lodash.template
node_modules/postcss-initial/node_modules/lodash.template
  gulp-util  >=1.1.0
  Depends on vulnerable versions of lodash.template
  node_modules/gulp-util
    gulp-compile-handlebars  *
    Depends on vulnerable versions of gulp-util
    node_modules/gulp-compile-handlebars
  postcss-initial  <=3.0.2 || 4.0.0
  Depends on vulnerable versions of lodash.template
  Depends on vulnerable versions of postcss
  node_modules/postcss-initial
    postcss-cssnext  *
    Depends on vulnerable versions of autoprefixer
    Depends on vulnerable versions of pixrem
    Depends on vulnerable versions of pleeease-filters
    Depends on vulnerable versions of postcss
    Depends on vulnerable versions of postcss-apply
    Depends on vulnerable versions of postcss-attribute-case-insensitive
    Depends on vulnerable versions of postcss-calc
    Depends on vulnerable versions of postcss-color-function
    Depends on vulnerable versions of postcss-color-gray
    Depends on vulnerable versions of postcss-color-hex-alpha
    Depends on vulnerable versions of postcss-color-hsl
    Depends on vulnerable versions of postcss-color-hwb
    Depends on vulnerable versions of postcss-color-rebeccapurple
    Depends on vulnerable versions of postcss-color-rgb
    Depends on vulnerable versions of postcss-color-rgba-fallback
    Depends on vulnerable versions of postcss-custom-media
    Depends on vulnerable versions of postcss-custom-properties
    Depends on vulnerable versions of postcss-custom-selectors
    Depends on vulnerable versions of postcss-font-family-system-ui
    Depends on vulnerable versions of postcss-font-variant
    Depends on vulnerable versions of postcss-image-set-polyfill
    Depends on vulnerable versions of postcss-initial
    Depends on vulnerable versions of postcss-media-minmax
    Depends on vulnerable versions of postcss-nesting
    Depends on vulnerable versions of postcss-pseudo-class-any-link
    Depends on vulnerable versions of postcss-pseudoelements
    Depends on vulnerable versions of postcss-replace-overflow-wrap
    Depends on vulnerable versions of postcss-selector-matches
    Depends on vulnerable versions of postcss-selector-not
    node_modules/postcss-cssnext


nth-check  <2.0.1
Severity: high
Inefficient Regular Expression Complexity in nth-check - https://github.com/advisories/GHSA-rp65-9cf3-cjxr
fix available via `npm audit fix --force`
Will install gulp-inline@0.1.2, which is a breaking change
node_modules/nth-check
  css-select  <=3.1.0
  Depends on vulnerable versions of nth-check
  node_modules/css-select
  node_modules/svgo/node_modules/css-select
    svgo  1.0.0 - 1.3.2
    Depends on vulnerable versions of css-select
    node_modules/svgo
      postcss-svgo  <=5.0.0-rc.2
      Depends on vulnerable versions of postcss
      Depends on vulnerable versions of svgo
      node_modules/postcss-svgo

postcss  <=8.4.30
Severity: moderate
Regular Expression Denial of Service in postcss - https://github.com/advisories/GHSA-566m-qj78-rww5
PostCSS line return parsing error - https://github.com/advisories/GHSA-7fh5-64p2-3v2j
fix available via `npm audit fix --force`
Will install cssnano@7.1.0, which is a breaking change
node_modules/autoprefixer/node_modules/postcss
node_modules/css-declaration-sorter/node_modules/postcss
node_modules/cssnano-preset-default/node_modules/postcss
node_modules/cssnano-util-raw-cache/node_modules/postcss
node_modules/cssnano/node_modules/postcss
node_modules/gulp-postcss/node_modules/postcss
node_modules/pixrem/node_modules/postcss
node_modules/pleeease-filters/node_modules/postcss
node_modules/postcss-apply/node_modules/postcss
node_modules/postcss-attribute-case-insensitive/node_modules/postcss
node_modules/postcss-calc/node_modules/postcss
node_modules/postcss-color-function/node_modules/postcss
node_modules/postcss-color-gray/node_modules/postcss
node_modules/postcss-color-hex-alpha/node_modules/postcss
node_modules/postcss-color-hsl/node_modules/postcss
node_modules/postcss-color-hwb/node_modules/postcss
node_modules/postcss-color-rebeccapurple/node_modules/postcss
node_modules/postcss-color-rgb/node_modules/postcss
node_modules/postcss-color-rgba-fallback/node_modules/postcss
node_modules/postcss-colormin/node_modules/postcss
node_modules/postcss-convert-values/node_modules/postcss
node_modules/postcss-cssnext/node_modules/postcss
node_modules/postcss-cssnext/node_modules/postcss-calc/node_modules/postcss
node_modules/postcss-custom-media/node_modules/postcss
node_modules/postcss-custom-properties/node_modules/postcss
node_modules/postcss-custom-selectors/node_modules/postcss
node_modules/postcss-discard-comments/node_modules/postcss
node_modules/postcss-discard-duplicates/node_modules/postcss
node_modules/postcss-discard-empty/node_modules/postcss
node_modules/postcss-discard-overridden/node_modules/postcss
node_modules/postcss-font-family-system-ui/node_modules/postcss
node_modules/postcss-font-variant/node_modules/postcss
node_modules/postcss-image-set-polyfill/node_modules/postcss
node_modules/postcss-import/node_modules/postcss
node_modules/postcss-initial/node_modules/postcss
node_modules/postcss-media-minmax/node_modules/postcss
node_modules/postcss-merge-longhand/node_modules/postcss
node_modules/postcss-merge-rules/node_modules/postcss
node_modules/postcss-minify-font-values/node_modules/postcss
node_modules/postcss-minify-gradients/node_modules/postcss
node_modules/postcss-minify-params/node_modules/postcss
node_modules/postcss-minify-selectors/node_modules/postcss
node_modules/postcss-nesting/node_modules/postcss
node_modules/postcss-normalize-charset/node_modules/postcss
node_modules/postcss-normalize-display-values/node_modules/postcss
node_modules/postcss-normalize-positions/node_modules/postcss
node_modules/postcss-normalize-repeat-style/node_modules/postcss
node_modules/postcss-normalize-string/node_modules/postcss
node_modules/postcss-normalize-timing-functions/node_modules/postcss
node_modules/postcss-normalize-unicode/node_modules/postcss
node_modules/postcss-normalize-url/node_modules/postcss
node_modules/postcss-normalize-whitespace/node_modules/postcss
node_modules/postcss-ordered-values/node_modules/postcss
node_modules/postcss-pseudo-class-any-link/node_modules/postcss
node_modules/postcss-pseudoelements/node_modules/postcss
node_modules/postcss-reduce-initial/node_modules/postcss
node_modules/postcss-reduce-transforms/node_modules/postcss
node_modules/postcss-replace-overflow-wrap/node_modules/postcss
node_modules/postcss-reporter/node_modules/postcss
node_modules/postcss-selector-matches/node_modules/postcss
node_modules/postcss-selector-not/node_modules/postcss
node_modules/postcss-svgo/node_modules/postcss
node_modules/postcss-unique-selectors/node_modules/postcss
node_modules/stylehacks/node_modules/postcss
  autoprefixer  1.0.20131222 - 8.6.5
  Depends on vulnerable versions of postcss
  node_modules/autoprefixer
  css-declaration-sorter  <=5.1.2
  Depends on vulnerable versions of postcss
  node_modules/css-declaration-sorter
  cssnano  <=4.1.11
  Depends on vulnerable versions of cssnano-preset-default
  Depends on vulnerable versions of postcss
  node_modules/cssnano
  cssnano-preset-default  <=4.0.8
  Depends on vulnerable versions of css-declaration-sorter
  Depends on vulnerable versions of cssnano-util-raw-cache
  Depends on vulnerable versions of postcss
  Depends on vulnerable versions of postcss-calc
  Depends on vulnerable versions of postcss-colormin
  Depends on vulnerable versions of postcss-convert-values
  Depends on vulnerable versions of postcss-discard-comments
  Depends on vulnerable versions of postcss-discard-duplicates
  Depends on vulnerable versions of postcss-discard-empty
  Depends on vulnerable versions of postcss-discard-overridden
  Depends on vulnerable versions of postcss-merge-longhand
  Depends on vulnerable versions of postcss-merge-rules
  Depends on vulnerable versions of postcss-minify-font-values
  Depends on vulnerable versions of postcss-minify-gradients
  Depends on vulnerable versions of postcss-minify-params
  Depends on vulnerable versions of postcss-minify-selectors
  Depends on vulnerable versions of postcss-normalize-charset
  Depends on vulnerable versions of postcss-normalize-display-values
  Depends on vulnerable versions of postcss-normalize-positions
  Depends on vulnerable versions of postcss-normalize-repeat-style
  Depends on vulnerable versions of postcss-normalize-string
  Depends on vulnerable versions of postcss-normalize-timing-functions
  Depends on vulnerable versions of postcss-normalize-unicode
  Depends on vulnerable versions of postcss-normalize-url
  Depends on vulnerable versions of postcss-normalize-whitespace
  Depends on vulnerable versions of postcss-ordered-values
  Depends on vulnerable versions of postcss-reduce-initial
  Depends on vulnerable versions of postcss-reduce-transforms
  Depends on vulnerable versions of postcss-svgo
  Depends on vulnerable versions of postcss-unique-selectors
  node_modules/cssnano-preset-default
  cssnano-util-raw-cache  *
  Depends on vulnerable versions of postcss
  node_modules/cssnano-util-raw-cache
  gulp-postcss  <=8.0.0
  Depends on vulnerable versions of postcss
  node_modules/gulp-postcss
  pixrem  <=4.0.1
  Depends on vulnerable versions of postcss
  node_modules/pixrem
  pleeease-filters  *
  Depends on vulnerable versions of postcss
  node_modules/pleeease-filters
  postcss-apply  <=0.10.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-apply
  postcss-attribute-case-insensitive  <=3.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-attribute-case-insensitive
  postcss-calc  4.1.0 - 7.0.5
  Depends on vulnerable versions of postcss
  node_modules/postcss-calc
  node_modules/postcss-cssnext/node_modules/postcss-calc
  postcss-color-gray  3.0.0 - 4.1.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-color-gray
  postcss-color-hex-alpha  1.3.0 - 3.0.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-color-hex-alpha
  postcss-color-hsl  *
  Depends on vulnerable versions of postcss
  node_modules/postcss-color-hsl
  postcss-color-hwb  >=1.2.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-color-hwb
  postcss-color-rebeccapurple  1.2.0 - 3.1.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-color-rebeccapurple
  postcss-color-rgb  *
  Depends on vulnerable versions of postcss
  node_modules/postcss-color-rgb
  postcss-color-rgba-fallback  <=3.0.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-color-rgba-fallback
  postcss-colormin  <=4.0.3
  Depends on vulnerable versions of postcss
  node_modules/postcss-colormin
  postcss-convert-values  <=4.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-convert-values
  postcss-custom-media  4.0.0 - 6.0.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-custom-media
  postcss-custom-properties  3.3.0 - 7.0.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-custom-properties
  postcss-custom-selectors  2.3.0 - 4.0.1
  Depends on vulnerable versions of postcss
  Depends on vulnerable versions of postcss-selector-matches
  node_modules/postcss-custom-selectors
  postcss-discard-comments  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-discard-comments
  postcss-discard-duplicates  1.1.0 - 4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-discard-duplicates
  postcss-discard-empty  1.1.0 - 4.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-discard-empty
  postcss-discard-overridden  <=4.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-discard-overridden
  postcss-font-family-system-ui  <=3.0.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-font-family-system-ui
  postcss-font-variant  1.2.0 - 3.0.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-font-variant
  postcss-image-set-polyfill  <=0.4.4
  Depends on vulnerable versions of postcss
  node_modules/postcss-image-set-polyfill
  postcss-import  <=12.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-import
  postcss-media-minmax  1.2.0 - 3.0.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-media-minmax
  postcss-merge-longhand  <=4.0.11
  Depends on vulnerable versions of postcss
  Depends on vulnerable versions of stylehacks
  node_modules/postcss-merge-longhand
  postcss-merge-rules  <=4.0.3
  Depends on vulnerable versions of postcss
  node_modules/postcss-merge-rules
  postcss-minify-font-values  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-minify-font-values
  postcss-minify-gradients  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-minify-gradients
  postcss-minify-params  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-minify-params
  postcss-minify-selectors  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-minify-selectors
  postcss-nesting  <=6.0.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-nesting
  postcss-normalize-charset  <=4.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-normalize-charset
  postcss-normalize-display-values  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-normalize-display-values
  postcss-normalize-positions  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-normalize-positions
  postcss-normalize-repeat-style  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-normalize-repeat-style
  postcss-normalize-string  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-normalize-string
  postcss-normalize-timing-functions  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-normalize-timing-functions
  postcss-normalize-unicode  <=4.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-normalize-unicode
  postcss-normalize-url  1.1.0 - 4.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-normalize-url
  postcss-normalize-whitespace  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-normalize-whitespace
  postcss-ordered-values  <=4.1.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-ordered-values
  postcss-pseudo-class-any-link  <=5.0.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-pseudo-class-any-link
  postcss-pseudoelements  >=2.2.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-pseudoelements
  postcss-reduce-initial  <=4.0.3
  Depends on vulnerable versions of postcss
  node_modules/postcss-reduce-initial
  postcss-reduce-transforms  <=4.0.2
  Depends on vulnerable versions of postcss
  node_modules/postcss-reduce-transforms
  postcss-replace-overflow-wrap  <=2.0.0
  Depends on vulnerable versions of postcss
  node_modules/postcss-replace-overflow-wrap
  postcss-reporter  <=6.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-reporter
  postcss-selector-matches  <=3.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-selector-matches
  postcss-selector-not  <=3.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-selector-not
  postcss-unique-selectors  <=4.0.1
  Depends on vulnerable versions of postcss
  node_modules/postcss-unique-selectors
  stylehacks  <=4.0.3
  Depends on vulnerable versions of postcss
  node_modules/stylehacks


tough-cookie  <4.1.3
Severity: moderate
tough-cookie Prototype Pollution vulnerability - https://github.com/advisories/GHSA-72xf-g2v4-qvf3
fix available via `npm audit fix --force`
Will install gulp-svg-sprite@2.0.3, which is a breaking change
node_modules/tough-cookie

useragent  *
Severity: moderate
useragent Regular Expression Denial of Service vulnerability - https://github.com/advisories/GHSA-mgfv-m47x-4wqp
fix available via `npm audit fix`
node_modules/useragent
  browserslist-useragent  <=3.1.4
  Depends on vulnerable versions of useragent
  node_modules/browserslist-useragent

101 vulnerabilities (76 moderate, 23 high, 2 critical)

To address issues that do not require attention, run:
  npm audit fix

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

Some issues need review, and may require choosing
a different dependency.

--- end ---
Verifying that tests still pass
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-design-tokens@2.2.1',
npm WARN EBADENGINE   required: { node: '>=20', npm: '>=10.8.1' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated @types/browserslist@4.15.0: This is a stub types definition. browserslist provides its own type definitions, so you do not need this installed.
npm WARN deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated flatten@1.0.3: flatten is deprecated in favor of utility frameworks such as lodash.
npm WARN deprecated @babel/plugin-proposal-unicode-property-regex@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.
npm WARN deprecated @babel/plugin-proposal-private-property-in-object@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.
npm WARN deprecated @babel/plugin-proposal-private-methods@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.
npm WARN deprecated @babel/plugin-proposal-logical-assignment-operators@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.
npm WARN deprecated @babel/plugin-proposal-numeric-separator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.
npm WARN deprecated @babel/plugin-proposal-nullish-coalescing-operator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.
npm WARN deprecated @babel/plugin-proposal-json-strings@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.
npm WARN deprecated @babel/plugin-proposal-class-static-block@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.
npm WARN deprecated @babel/plugin-proposal-export-namespace-from@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.
npm WARN deprecated @babel/plugin-proposal-class-properties@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
npm WARN deprecated @babel/plugin-proposal-dynamic-import@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.
npm WARN deprecated @babel/plugin-proposal-optional-catch-binding@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.
npm WARN deprecated @babel/plugin-proposal-async-generator-functions@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated @babel/plugin-proposal-optional-chaining@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated @babel/plugin-proposal-object-rest-spread@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated gulp-util@3.0.8: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated phantomjs-prebuilt@2.1.16: this package is now deprecated
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated postcss-cssnext@3.1.1: 'postcss-cssnext' has been deprecated in favor of 'postcss-preset-env'. Read more at https://moox.io/blog/deprecating-cssnext/
npm WARN deprecated svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
npm WARN deprecated core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
--- stdout ---

added 1670 packages, and audited 1671 packages in 28s

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

101 vulnerabilities (76 moderate, 23 high, 2 critical)

To address issues that do not require attention, run:
  npm audit fix

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

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
33 sources checked
  /src/repo/src/common/assets/postcss/_app-badge.css
  /src/repo/src/common/assets/postcss/_base-portal.css
  /src/repo/src/common/assets/postcss/_base.css
  /src/repo/src/common/assets/postcss/_buttons.css
  /src/repo/src/common/assets/postcss/_central-featured.css
  /src/repo/src/common/assets/postcss/_central-textlogo.css
  /src/repo/src/common/assets/postcss/_footer.css
  /src/repo/src/common/assets/postcss/_forms.css
  /src/repo/src/common/assets/postcss/_localization.css
  /src/repo/src/common/assets/postcss/_media-print.css
  /src/repo/src/common/assets/postcss/_other-languages-bookshelf.css
  /src/repo/src/common/assets/postcss/_other-languages.css
  /src/repo/src/common/assets/postcss/_other-projects.css
  /src/repo/src/common/assets/postcss/_search-language-picker.css
  /src/repo/src/common/assets/postcss/_search-suggestions.css
  /src/repo/src/common/assets/postcss/_search.css
  /src/repo/src/common/assets/postcss/_vars.css
  /src/repo/src/common/assets/postcss/_wm-portal.css
  /src/repo/src/wikimedia.org/assets/postcss/_wikimedia-custom.css
  /src/repo/src/wikimedia.org/assets/postcss/style.css
  /src/repo/src/wikinews.org/assets/postcss/_wikinews-custom.css
  /src/repo/src/wikinews.org/assets/postcss/style.css
  /src/repo/src/wikibooks.org/assets/postcss/_wikibooks-custom.css
  /src/repo/src/wikibooks.org/assets/postcss/style.css
  /src/repo/src/wikipedia.org/assets/postcss/style.css
  /src/repo/src/wikiquote.org/assets/postcss/_wikibooks-custom.css
  /src/repo/src/wikiquote.org/assets/postcss/style.css
  /src/repo/src/wikiversity.org/assets/postcss/_wikinews-custom.css
  /src/repo/src/wikiversity.org/assets/postcss/style.css
  /src/repo/src/wikivoyage.org/assets/postcss/_wikivoyage-custom.css
  /src/repo/src/wikivoyage.org/assets/postcss/style.css
  /src/repo/src/wiktionary.org/assets/postcss/_wiktionary-custom.css
  /src/repo/src/wiktionary.org/assets/postcss/style.css

0 problems found
--- stdout ---

> test
> npm -s run lint:styles && npm -s run lint:js


/src/repo/data/site-stats.js
  140:14  warning  Found readFileSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  150:8   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/data/stats.js
   50:1   warning  The type 'sort' is undefined                                               jsdoc/no-undefined-types
   50:1   warning  The type 'latin' is undefined                                              jsdoc/no-undefined-types
   88:15  warning  Found readdirSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
   91:21  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  302:1   warning  Missing JSDoc @return type                                                 jsdoc/require-returns-type
  308:1   warning  This line has a length of 130. Maximum allowed is 100                      max-len
  322:1   warning  This line has a length of 101. Maximum allowed is 100                      max-len

/src/repo/data/utils.js
  13:3  warning  Found unlink from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  37:5  warning  Found stat from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename

/src/repo/gulpfile.js/prod.js
  49:8   warning  Found existsSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  50:4   warning  Found rmdirSync from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename
  55:1   warning  This line has a length of 108. Maximum allowed is 100                     max-len
  68:7   warning  Found existsSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  70:3   warning  Found readdirSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  72:22  warning  Found unlinkSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename

/src/repo/gulpfile.js/sprites.js
  16:4  warning  Found unlink from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/src/common/assets/js/page-localized.js
  14:1  warning  Missing JSDoc @param "wmTest" type            jsdoc/require-param-type
  15:1  warning  Missing JSDoc @param "translationsHash" type  jsdoc/require-param-type
  16:1  warning  Missing JSDoc @param "mw" type                jsdoc/require-param-type
  17:1  warning  Missing JSDoc @param "rtlLangs" type          jsdoc/require-param-type

/src/repo/src/common/assets/js/topten-localized.js
   12:1  warning  Missing JSDoc @param "mw" type                         jsdoc/require-param-type
   13:1  warning  Missing JSDoc @param "wmTest" type                     jsdoc/require-param-type
  117:1  warning  This line has a length of 101. Maximum allowed is 100  max-len
  122:1  warning  This line has a length of 117. Maximum allowed is 100  max-len

✖ 26 problems (0 errors, 26 warnings)


--- end ---
{"1095223": {"source": 1095223, "name": "@koa/cors", "dependency": "@koa/cors", "title": "Overly permissive origin policy", "url": "https://github.com/advisories/GHSA-qxrj-hx23-xp82", "severity": "high", "cwe": ["CWE-346"], "cvss": {"score": 8.6, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N"}, "range": "<5.0.0"}}
{}
{"1100298": {"source": 1100298, "name": "useragent", "dependency": "useragent", "title": "useragent Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-mgfv-m47x-4wqp", "severity": "moderate", "cwe": ["CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<=2.3.0"}}
{"1089718": {"source": 1089718, "name": "color-string", "dependency": "color-string", "title": "Regular Expression Denial of Service (ReDOS)", "url": "https://github.com/advisories/GHSA-257v-vj4p-3w2h", "severity": "moderate", "cwe": ["CWE-770"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"}, "range": "<1.5.5"}}
{"1089718": {"source": 1089718, "name": "color-string", "dependency": "color-string", "title": "Regular Expression Denial of Service (ReDOS)", "url": "https://github.com/advisories/GHSA-257v-vj4p-3w2h", "severity": "moderate", "cwe": ["CWE-770"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"}, "range": "<1.5.5"}}
{"1089718": {"source": 1089718, "name": "color-string", "dependency": "color-string", "title": "Regular Expression Denial of Service (ReDOS)", "url": "https://github.com/advisories/GHSA-257v-vj4p-3w2h", "severity": "moderate", "cwe": ["CWE-770"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"}, "range": "<1.5.5"}}
{}
{}
{"1095223": {"source": 1095223, "name": "@koa/cors", "dependency": "@koa/cors", "title": "Overly permissive origin policy", "url": "https://github.com/advisories/GHSA-qxrj-hx23-xp82", "severity": "high", "cwe": ["CWE-346"], "cvss": {"score": 8.6, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N"}, "range": "<5.0.0"}, "1100298": {"source": 1100298, "name": "useragent", "dependency": "useragent", "title": "useragent Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-mgfv-m47x-4wqp", "severity": "moderate", "cwe": ["CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<=2.3.0"}}
{}
{}
{"1106793": {"source": 1106793, "name": "koa", "dependency": "koa", "title": "Koa Open Redirect via Referrer Header (User-Controlled)", "url": "https://github.com/advisories/GHSA-jgmv-j7ww-jx2x", "severity": "low", "cwe": ["CWE-601"], "cvss": {"score": 3.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:L/A:N"}, "range": ">=2.0.0 <2.16.2"}}
Upgrading n:koa from 2.16.1 -> 2.16.2
{}
{}
{}
{}
{}
{"1089718": {"source": 1089718, "name": "color-string", "dependency": "color-string", "title": "Regular Expression Denial of Service (ReDOS)", "url": "https://github.com/advisories/GHSA-257v-vj4p-3w2h", "severity": "moderate", "cwe": ["CWE-770"], "cvss": {"score": 5.3, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"}, "range": "<1.5.5"}}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{}
{"1100298": {"source": 1100298, "name": "useragent", "dependency": "useragent", "title": "useragent Regular Expression Denial of Service vulnerability", "url": "https://github.com/advisories/GHSA-mgfv-m47x-4wqp", "severity": "moderate", "cwe": ["CWE-1333"], "cvss": {"score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"}, "range": "<=2.3.0"}}
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

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

* eslint-config-wikimedia: 0.30.0 → 0.31.0
* koa: 2.16.1 → 2.16.2
  * https://github.com/advisories/GHSA-jgmv-j7ww-jx2x

$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmpf0hqhv6z
--- stderr ---
33 sources checked
  /src/repo/src/common/assets/postcss/_app-badge.css
  /src/repo/src/common/assets/postcss/_base-portal.css
  /src/repo/src/common/assets/postcss/_base.css
  /src/repo/src/common/assets/postcss/_buttons.css
  /src/repo/src/common/assets/postcss/_central-featured.css
  /src/repo/src/common/assets/postcss/_central-textlogo.css
  /src/repo/src/common/assets/postcss/_footer.css
  /src/repo/src/common/assets/postcss/_forms.css
  /src/repo/src/common/assets/postcss/_localization.css
  /src/repo/src/common/assets/postcss/_media-print.css
  /src/repo/src/common/assets/postcss/_other-languages-bookshelf.css
  /src/repo/src/common/assets/postcss/_other-languages.css
  /src/repo/src/common/assets/postcss/_other-projects.css
  /src/repo/src/common/assets/postcss/_search-language-picker.css
  /src/repo/src/common/assets/postcss/_search-suggestions.css
  /src/repo/src/common/assets/postcss/_search.css
  /src/repo/src/common/assets/postcss/_vars.css
  /src/repo/src/common/assets/postcss/_wm-portal.css
  /src/repo/src/wikibooks.org/assets/postcss/_wikibooks-custom.css
  /src/repo/src/wikibooks.org/assets/postcss/style.css
  /src/repo/src/wikimedia.org/assets/postcss/_wikimedia-custom.css
  /src/repo/src/wikimedia.org/assets/postcss/style.css
  /src/repo/src/wikinews.org/assets/postcss/_wikinews-custom.css
  /src/repo/src/wikinews.org/assets/postcss/style.css
  /src/repo/src/wikipedia.org/assets/postcss/style.css
  /src/repo/src/wikiquote.org/assets/postcss/_wikibooks-custom.css
  /src/repo/src/wikiquote.org/assets/postcss/style.css
  /src/repo/src/wikivoyage.org/assets/postcss/_wikivoyage-custom.css
  /src/repo/src/wikivoyage.org/assets/postcss/style.css
  /src/repo/src/wikiversity.org/assets/postcss/_wikinews-custom.css
  /src/repo/src/wikiversity.org/assets/postcss/style.css
  /src/repo/src/wiktionary.org/assets/postcss/_wiktionary-custom.css
  /src/repo/src/wiktionary.org/assets/postcss/style.css

0 problems found


/src/repo/data/site-stats.js
  140:14  warning  Found readFileSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  150:8   warning  Found writeFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/data/stats.js
   50:1   warning  The type 'sort' is undefined                                               jsdoc/no-undefined-types
   50:1   warning  The type 'latin' is undefined                                              jsdoc/no-undefined-types
   88:15  warning  Found readdirSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
   91:21  warning  Found readFileSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  302:1   warning  Missing JSDoc @return type                                                 jsdoc/require-returns-type
  308:1   warning  This line has a length of 130. Maximum allowed is 100                      max-len
  322:1   warning  This line has a length of 101. Maximum allowed is 100                      max-len

/src/repo/data/utils.js
  13:3  warning  Found unlink from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  37:5  warning  Found stat from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename

/src/repo/gulpfile.js/prod.js
  49:8   warning  Found existsSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  50:4   warning  Found rmdirSync from package "fs" with non literal argument at index 0    security/detect-non-literal-fs-filename
  55:1   warning  This line has a length of 108. Maximum allowed is 100                     max-len
  68:7   warning  Found existsSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename
  70:3   warning  Found readdirSync from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename
  72:22  warning  Found unlinkSync from package "fs" with non literal argument at index 0   security/detect-non-literal-fs-filename

/src/repo/gulpfile.js/sprites.js
  16:4  warning  Found unlink from package "fs" with non literal argument at index 0  security/detect-non-literal-fs-filename

/src/repo/src/common/assets/js/page-localized.js
  14:1  warning  Missing JSDoc @param "wmTest" type            jsdoc/require-param-type
  15:1  warning  Missing JSDoc @param "translationsHash" type  jsdoc/require-param-type
  16:1  warning  Missing JSDoc @param "mw" type                jsdoc/require-param-type
  17:1  warning  Missing JSDoc @param "rtlLangs" type          jsdoc/require-param-type

/src/repo/src/common/assets/js/topten-localized.js
   12:1  warning  Missing JSDoc @param "mw" type                         jsdoc/require-param-type
   13:1  warning  Missing JSDoc @param "wmTest" type                     jsdoc/require-param-type
  117:1  warning  This line has a length of 101. Maximum allowed is 100  max-len
  122:1  warning  This line has a length of 117. Maximum allowed is 100  max-len

✖ 26 problems (0 errors, 26 warnings)
--- stdout ---
[master c46cb8a] build: Updating npm dependencies
 2 files changed, 399 insertions(+), 101 deletions(-)

--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From c46cb8a90cc88ee4550d379c9b40d5ee325e70ba Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Fri, 1 Aug 2025 08:16:43 +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.30.0 → 0.31.0
* koa: 2.16.1 → 2.16.2
  * https://github.com/advisories/GHSA-jgmv-j7ww-jx2x

Change-Id: Ibcce7345f28cbbf87392bc21e585d54b60d89786
---
 package-lock.json | 498 ++++++++++++++++++++++++++++++++++++----------
 package.json      |   2 +-
 2 files changed, 399 insertions(+), 101 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index c7e6225..758469a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,7 @@
 				"browserslist-config-wikimedia": "0.7.0",
 				"cssnano": "^4.1.10",
 				"es-dev-server": "^1.54.1",
-				"eslint-config-wikimedia": "0.30.0",
+				"eslint-config-wikimedia": "0.31.0",
 				"eslint-plugin-unicorn": "40.1.0",
 				"eslint-plugin-yml": "0.13.0",
 				"glob": "^7.2.3",
@@ -1849,9 +1849,9 @@
 			}
 		},
 		"node_modules/@eslint-community/eslint-utils": {
-			"version": "4.4.1",
-			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
-			"integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
+			"version": "4.7.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+			"integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
 			"dev": true,
 			"dependencies": {
 				"eslint-visitor-keys": "^3.4.3"
@@ -2182,6 +2182,66 @@
 				"rollup": "^1.20.0||^2.0.0"
 			}
 		},
+		"node_modules/@stylistic/eslint-plugin": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-3.1.0.tgz",
+			"integrity": "sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/utils": "^8.13.0",
+				"eslint-visitor-keys": "^4.2.0",
+				"espree": "^10.3.0",
+				"estraverse": "^5.3.0",
+				"picomatch": "^4.0.2"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"peerDependencies": {
+				"eslint": ">=8.40.0"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": {
+			"version": "4.2.1",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+			"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+			"dev": true,
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/espree": {
+			"version": "10.4.0",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+			"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+			"dev": true,
+			"dependencies": {
+				"acorn": "^8.15.0",
+				"acorn-jsx": "^5.3.2",
+				"eslint-visitor-keys": "^4.2.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/picomatch": {
+			"version": "4.0.3",
+			"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+			"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+			"dev": true,
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/jonschlinkert"
+			}
+		},
 		"node_modules/@stylistic/stylelint-config": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-2.0.0.tgz",
@@ -2591,14 +2651,132 @@
 				"@types/node": "*"
 			}
 		},
+		"node_modules/@typescript-eslint/eslint-plugin": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz",
+			"integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==",
+			"dev": true,
+			"dependencies": {
+				"@eslint-community/regexpp": "^4.10.0",
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/type-utils": "8.35.1",
+				"@typescript-eslint/utils": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
+				"graphemer": "^1.4.0",
+				"ignore": "^7.0.0",
+				"natural-compare": "^1.4.0",
+				"ts-api-utils": "^2.1.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"@typescript-eslint/parser": "^8.35.1",
+				"eslint": "^8.57.0 || ^9.0.0",
+				"typescript": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+			"version": "7.0.5",
+			"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+			"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+			"dev": true,
+			"engines": {
+				"node": ">= 4"
+			}
+		},
+		"node_modules/@typescript-eslint/parser": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz",
+			"integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/typescript-estree": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
+				"debug": "^4.3.4"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^8.57.0 || ^9.0.0",
+				"typescript": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/@typescript-eslint/project-service": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz",
+			"integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/tsconfig-utils": "^8.35.1",
+				"@typescript-eslint/types": "^8.35.1",
+				"debug": "^4.3.4"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"typescript": ">=4.8.4 <5.9.0"
+			}
+		},
 		"node_modules/@typescript-eslint/scope-manager": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz",
-			"integrity": "sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz",
+			"integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@typescript-eslint/tsconfig-utils": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz",
+			"integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==",
+			"dev": true,
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"typescript": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/@typescript-eslint/type-utils": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz",
+			"integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/visitor-keys": "8.18.1"
+				"@typescript-eslint/typescript-estree": "8.35.1",
+				"@typescript-eslint/utils": "8.35.1",
+				"debug": "^4.3.4",
+				"ts-api-utils": "^2.1.0"
 			},
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2606,12 +2784,16 @@
 			"funding": {
 				"type": "opencollective",
 				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^8.57.0 || ^9.0.0",
+				"typescript": ">=4.8.4 <5.9.0"
 			}
 		},
 		"node_modules/@typescript-eslint/types": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz",
-			"integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz",
+			"integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==",
 			"dev": true,
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2622,19 +2804,21 @@
 			}
 		},
 		"node_modules/@typescript-eslint/typescript-estree": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz",
-			"integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz",
+			"integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/visitor-keys": "8.18.1",
+				"@typescript-eslint/project-service": "8.35.1",
+				"@typescript-eslint/tsconfig-utils": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
 				"debug": "^4.3.4",
 				"fast-glob": "^3.3.2",
 				"is-glob": "^4.0.3",
 				"minimatch": "^9.0.4",
 				"semver": "^7.6.0",
-				"ts-api-utils": "^1.3.0"
+				"ts-api-utils": "^2.1.0"
 			},
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2644,7 +2828,7 @@
 				"url": "https://opencollective.com/typescript-eslint"
 			},
 			"peerDependencies": {
-				"typescript": ">=4.8.4 <5.8.0"
+				"typescript": ">=4.8.4 <5.9.0"
 			}
 		},
 		"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
@@ -2672,9 +2856,9 @@
 			}
 		},
 		"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
-			"version": "7.6.3",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-			"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+			"version": "7.7.2",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+			"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
 			"dev": true,
 			"bin": {
 				"semver": "bin/semver.js"
@@ -2684,15 +2868,15 @@
 			}
 		},
 		"node_modules/@typescript-eslint/utils": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.1.tgz",
-			"integrity": "sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz",
+			"integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==",
 			"dev": true,
 			"dependencies": {
-				"@eslint-community/eslint-utils": "^4.4.0",
-				"@typescript-eslint/scope-manager": "8.18.1",
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/typescript-estree": "8.18.1"
+				"@eslint-community/eslint-utils": "^4.7.0",
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/typescript-estree": "8.35.1"
 			},
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2703,17 +2887,17 @@
 			},
 			"peerDependencies": {
 				"eslint": "^8.57.0 || ^9.0.0",
-				"typescript": ">=4.8.4 <5.8.0"
+				"typescript": ">=4.8.4 <5.9.0"
 			}
 		},
 		"node_modules/@typescript-eslint/visitor-keys": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz",
-			"integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz",
+			"integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==",
 			"dev": true,
 			"dependencies": {
-				"@typescript-eslint/types": "8.18.1",
-				"eslint-visitor-keys": "^4.2.0"
+				"@typescript-eslint/types": "8.35.1",
+				"eslint-visitor-keys": "^4.2.1"
 			},
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2724,9 +2908,9 @@
 			}
 		},
 		"node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
-			"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+			"version": "4.2.1",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+			"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
 			"dev": true,
 			"engines": {
 				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2799,9 +2983,9 @@
 			}
 		},
 		"node_modules/acorn": {
-			"version": "8.14.0",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
-			"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+			"version": "8.15.0",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+			"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
 			"dev": true,
 			"bin": {
 				"acorn": "bin/acorn"
@@ -5909,11 +6093,14 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia": {
-			"version": "0.30.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.30.0.tgz",
-			"integrity": "sha512-i8ESzSoo0x3Jur/0JhAgCVPxbV51zfdI3MN3MVQPnjiFdmo21CNKmiBBmw8JnJ3fx/d5zHDrBa+yDjxSLpnDlA==",
+			"version": "0.31.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.31.0.tgz",
+			"integrity": "sha512-Z/t/zGPdxs/ehxb0EM6THNWAzueT7GtuqzjUvmBpkxcTKzZPJEXWnnpswdj/hgv8Ce8PIeDp0zwQxR4e3c9CIw==",
 			"dev": true,
 			"dependencies": {
+				"@stylistic/eslint-plugin": "^3.1.0",
+				"@typescript-eslint/eslint-plugin": "8.35.1",
+				"@typescript-eslint/parser": "8.35.1",
 				"browserslist-config-wikimedia": "^0.7.0",
 				"eslint": "^8.57.0",
 				"eslint-plugin-compat": "^4.2.0",
@@ -5933,7 +6120,7 @@
 				"eslint-plugin-yml": "^1.14.0"
 			},
 			"engines": {
-				"node": ">=18 <23"
+				"node": ">=18 <25"
 			}
 		},
 		"node_modules/eslint-config-wikimedia/node_modules/@eslint/eslintrc": {
@@ -10352,9 +10539,9 @@
 			"license": "MIT"
 		},
 		"node_modules/koa": {
-			"version": "2.16.1",
-			"resolved": "https://registry.npmjs.org/koa/-/koa-2.16.1.tgz",
-			"integrity": "sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==",
+			"version": "2.16.2",
+			"resolved": "https://registry.npmjs.org/koa/-/koa-2.16.2.tgz",
+			"integrity": "sha512-+CCssgnrWKx9aI3OeZwroa/ckG4JICxvIFnSiOUyl2Uv+UTI+xIw0FfFrWS7cQFpoePpr9o8csss7KzsTzNL8Q==",
 			"dev": true,
 			"dependencies": {
 				"accepts": "^1.3.5",
@@ -18313,15 +18500,15 @@
 			"dev": true
 		},
 		"node_modules/ts-api-utils": {
-			"version": "1.4.3",
-			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
-			"integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+			"integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
 			"dev": true,
 			"engines": {
-				"node": ">=16"
+				"node": ">=18.12"
 			},
 			"peerDependencies": {
-				"typescript": ">=4.2.0"
+				"typescript": ">=4.8.4"
 			}
 		},
 		"node_modules/tslib": {
@@ -20807,9 +20994,9 @@
 			}
 		},
 		"@eslint-community/eslint-utils": {
-			"version": "4.4.1",
-			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
-			"integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
+			"version": "4.7.0",
+			"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+			"integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
 			"dev": true,
 			"requires": {
 				"eslint-visitor-keys": "^3.4.3"
@@ -21052,6 +21239,44 @@
 				"picomatch": "^2.2.2"
 			}
 		},
+		"@stylistic/eslint-plugin": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-3.1.0.tgz",
+			"integrity": "sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/utils": "^8.13.0",
+				"eslint-visitor-keys": "^4.2.0",
+				"espree": "^10.3.0",
+				"estraverse": "^5.3.0",
+				"picomatch": "^4.0.2"
+			},
+			"dependencies": {
+				"eslint-visitor-keys": {
+					"version": "4.2.1",
+					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+					"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+					"dev": true
+				},
+				"espree": {
+					"version": "10.4.0",
+					"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+					"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+					"dev": true,
+					"requires": {
+						"acorn": "^8.15.0",
+						"acorn-jsx": "^5.3.2",
+						"eslint-visitor-keys": "^4.2.1"
+					}
+				},
+				"picomatch": {
+					"version": "4.0.3",
+					"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+					"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+					"dev": true
+				}
+			}
+		},
 		"@stylistic/stylelint-config": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-2.0.0.tgz",
@@ -21444,36 +21669,106 @@
 				"@types/node": "*"
 			}
 		},
+		"@typescript-eslint/eslint-plugin": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz",
+			"integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==",
+			"dev": true,
+			"requires": {
+				"@eslint-community/regexpp": "^4.10.0",
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/type-utils": "8.35.1",
+				"@typescript-eslint/utils": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
+				"graphemer": "^1.4.0",
+				"ignore": "^7.0.0",
+				"natural-compare": "^1.4.0",
+				"ts-api-utils": "^2.1.0"
+			},
+			"dependencies": {
+				"ignore": {
+					"version": "7.0.5",
+					"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+					"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+					"dev": true
+				}
+			}
+		},
+		"@typescript-eslint/parser": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz",
+			"integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/typescript-estree": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
+				"debug": "^4.3.4"
+			}
+		},
+		"@typescript-eslint/project-service": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz",
+			"integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/tsconfig-utils": "^8.35.1",
+				"@typescript-eslint/types": "^8.35.1",
+				"debug": "^4.3.4"
+			}
+		},
 		"@typescript-eslint/scope-manager": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz",
-			"integrity": "sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz",
+			"integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/visitor-keys": "8.18.1"
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1"
+			}
+		},
+		"@typescript-eslint/tsconfig-utils": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz",
+			"integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==",
+			"dev": true,
+			"requires": {}
+		},
+		"@typescript-eslint/type-utils": {
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz",
+			"integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==",
+			"dev": true,
+			"requires": {
+				"@typescript-eslint/typescript-estree": "8.35.1",
+				"@typescript-eslint/utils": "8.35.1",
+				"debug": "^4.3.4",
+				"ts-api-utils": "^2.1.0"
 			}
 		},
 		"@typescript-eslint/types": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz",
-			"integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz",
+			"integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==",
 			"dev": true
 		},
 		"@typescript-eslint/typescript-estree": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz",
-			"integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz",
+			"integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/visitor-keys": "8.18.1",
+				"@typescript-eslint/project-service": "8.35.1",
+				"@typescript-eslint/tsconfig-utils": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/visitor-keys": "8.35.1",
 				"debug": "^4.3.4",
 				"fast-glob": "^3.3.2",
 				"is-glob": "^4.0.3",
 				"minimatch": "^9.0.4",
 				"semver": "^7.6.0",
-				"ts-api-utils": "^1.3.0"
+				"ts-api-utils": "^2.1.0"
 			},
 			"dependencies": {
 				"brace-expansion": {
@@ -21495,39 +21790,39 @@
 					}
 				},
 				"semver": {
-					"version": "7.6.3",
-					"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-					"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+					"version": "7.7.2",
+					"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+					"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
 					"dev": true
 				}
 			}
 		},
 		"@typescript-eslint/utils": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.1.tgz",
-			"integrity": "sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz",
+			"integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==",
 			"dev": true,
 			"requires": {
-				"@eslint-community/eslint-utils": "^4.4.0",
-				"@typescript-eslint/scope-manager": "8.18.1",
-				"@typescript-eslint/types": "8.18.1",
-				"@typescript-eslint/typescript-estree": "8.18.1"
+				"@eslint-community/eslint-utils": "^4.7.0",
+				"@typescript-eslint/scope-manager": "8.35.1",
+				"@typescript-eslint/types": "8.35.1",
+				"@typescript-eslint/typescript-estree": "8.35.1"
 			}
 		},
 		"@typescript-eslint/visitor-keys": {
-			"version": "8.18.1",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz",
-			"integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==",
+			"version": "8.35.1",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz",
+			"integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==",
 			"dev": true,
 			"requires": {
-				"@typescript-eslint/types": "8.18.1",
-				"eslint-visitor-keys": "^4.2.0"
+				"@typescript-eslint/types": "8.35.1",
+				"eslint-visitor-keys": "^4.2.1"
 			},
 			"dependencies": {
 				"eslint-visitor-keys": {
-					"version": "4.2.0",
-					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
-					"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+					"version": "4.2.1",
+					"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+					"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
 					"dev": true
 				}
 			}
@@ -21585,9 +21880,9 @@
 			}
 		},
 		"acorn": {
-			"version": "8.14.0",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
-			"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+			"version": "8.15.0",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+			"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
 			"dev": true
 		},
 		"acorn-jsx": {
@@ -24159,11 +24454,14 @@
 			}
 		},
 		"eslint-config-wikimedia": {
-			"version": "0.30.0",
-			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.30.0.tgz",
-			"integrity": "sha512-i8ESzSoo0x3Jur/0JhAgCVPxbV51zfdI3MN3MVQPnjiFdmo21CNKmiBBmw8JnJ3fx/d5zHDrBa+yDjxSLpnDlA==",
+			"version": "0.31.0",
+			"resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.31.0.tgz",
+			"integrity": "sha512-Z/t/zGPdxs/ehxb0EM6THNWAzueT7GtuqzjUvmBpkxcTKzZPJEXWnnpswdj/hgv8Ce8PIeDp0zwQxR4e3c9CIw==",
 			"dev": true,
 			"requires": {
+				"@stylistic/eslint-plugin": "^3.1.0",
+				"@typescript-eslint/eslint-plugin": "8.35.1",
+				"@typescript-eslint/parser": "8.35.1",
 				"browserslist-config-wikimedia": "^0.7.0",
 				"eslint": "^8.57.0",
 				"eslint-plugin-compat": "^4.2.0",
@@ -27489,9 +27787,9 @@
 			"dev": true
 		},
 		"koa": {
-			"version": "2.16.1",
-			"resolved": "https://registry.npmjs.org/koa/-/koa-2.16.1.tgz",
-			"integrity": "sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==",
+			"version": "2.16.2",
+			"resolved": "https://registry.npmjs.org/koa/-/koa-2.16.2.tgz",
+			"integrity": "sha512-+CCssgnrWKx9aI3OeZwroa/ckG4JICxvIFnSiOUyl2Uv+UTI+xIw0FfFrWS7cQFpoePpr9o8csss7KzsTzNL8Q==",
 			"dev": true,
 			"requires": {
 				"accepts": "^1.3.5",
@@ -33816,9 +34114,9 @@
 			"dev": true
 		},
 		"ts-api-utils": {
-			"version": "1.4.3",
-			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
-			"integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+			"integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
 			"dev": true,
 			"requires": {}
 		},
diff --git a/package.json b/package.json
index 2c78fcd..b60771b 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,7 @@
 		"browserslist-config-wikimedia": "0.7.0",
 		"cssnano": "^4.1.10",
 		"es-dev-server": "^1.54.1",
-		"eslint-config-wikimedia": "0.30.0",
+		"eslint-config-wikimedia": "0.31.0",
 		"eslint-plugin-unicorn": "40.1.0",
 		"eslint-plugin-yml": "0.13.0",
 		"glob": "^7.2.3",
-- 
2.39.5


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