mediawiki/extensions/MediaSearch: main (log #2032573)

sourcepatches

This run took 151 seconds.

From cf4588fbd62fe53009acd1df828d4f6014281e19 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Wed, 30 Jul 2025 03:27:19 +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
* @wikimedia/codex: 2.2.0 → 2.2.1
* @wikimedia/codex-icons: 2.2.0 → 2.2.1

Change-Id: I8973fb8500d40dfe7d49adfd21ab9225397f1365
---
 package-lock.json | 722 ++++++++++++++++++++++++++++++++++++++++++++--
 package.json      |   6 +-
 2 files changed, 705 insertions(+), 23 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 958b5ae..8f19127 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,10 +12,10 @@
 				"@vue/compiler-sfc": "3.5.13",
 				"@vue/test-utils": "2.4.6",
 				"@vue/vue3-jest": "29.2.6",
-				"@wikimedia/codex": "2.2.0",
-				"@wikimedia/codex-icons": "2.2.0",
+				"@wikimedia/codex": "2.2.1",
+				"@wikimedia/codex-icons": "2.2.1",
 				"babel-core": "^6.26.3",
-				"eslint-config-wikimedia": "0.30.0",
+				"eslint-config-wikimedia": "0.31.0",
 				"eslint-plugin-jest": "27.2.1",
 				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.13.0",
@@ -2933,6 +2933,237 @@
 				"@sinonjs/commons": "^3.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/@typescript-eslint/project-service": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz",
+			"integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/tsconfig-utils": "^8.38.0",
+				"@typescript-eslint/types": "^8.38.0",
+				"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/@stylistic/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz",
+			"integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "8.38.0",
+				"@typescript-eslint/visitor-keys": "8.38.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/tsconfig-utils": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz",
+			"integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==",
+			"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/@stylistic/eslint-plugin/node_modules/@typescript-eslint/types": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz",
+			"integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==",
+			"dev": true,
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz",
+			"integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/project-service": "8.38.0",
+				"@typescript-eslint/tsconfig-utils": "8.38.0",
+				"@typescript-eslint/types": "8.38.0",
+				"@typescript-eslint/visitor-keys": "8.38.0",
+				"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": "^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": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/utils": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz",
+			"integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==",
+			"dev": true,
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.7.0",
+				"@typescript-eslint/scope-manager": "8.38.0",
+				"@typescript-eslint/types": "8.38.0",
+				"@typescript-eslint/typescript-estree": "8.38.0"
+			},
+			"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/@stylistic/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz",
+			"integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "8.38.0",
+				"eslint-visitor-keys": "^4.2.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/brace-expansion": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+			"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+			"dev": true,
+			"dependencies": {
+				"balanced-match": "^1.0.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/minimatch": {
+			"version": "9.0.5",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+			"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+			"dev": true,
+			"dependencies": {
+				"brace-expansion": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=16 || 14 >=14.17"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"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/eslint-plugin/node_modules/semver": {
+			"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"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
 		"node_modules/@stylistic/stylelint-config": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-2.0.0.tgz",
@@ -3184,6 +3415,85 @@
 			"integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
 			"dev": true
 		},
+		"node_modules/@typescript-eslint/eslint-plugin": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
+			"integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
+			"dev": true,
+			"optional": true,
+			"peer": true,
+			"dependencies": {
+				"@eslint-community/regexpp": "^4.4.0",
+				"@typescript-eslint/scope-manager": "5.62.0",
+				"@typescript-eslint/type-utils": "5.62.0",
+				"@typescript-eslint/utils": "5.62.0",
+				"debug": "^4.3.4",
+				"graphemer": "^1.4.0",
+				"ignore": "^5.2.0",
+				"natural-compare-lite": "^1.4.0",
+				"semver": "^7.3.7",
+				"tsutils": "^3.21.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"@typescript-eslint/parser": "^5.0.0",
+				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
+			"version": "7.7.2",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+			"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+			"dev": true,
+			"optional": true,
+			"peer": true,
+			"bin": {
+				"semver": "bin/semver.js"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/@typescript-eslint/parser": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
+			"integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+			"dev": true,
+			"optional": true,
+			"peer": true,
+			"dependencies": {
+				"@typescript-eslint/scope-manager": "5.62.0",
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/typescript-estree": "5.62.0",
+				"debug": "^4.3.4"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
 		"node_modules/@typescript-eslint/project-service": {
 			"version": "8.33.0",
 			"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz",
@@ -3248,6 +3558,35 @@
 				"typescript": ">=4.8.4 <5.9.0"
 			}
 		},
+		"node_modules/@typescript-eslint/type-utils": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
+			"integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
+			"dev": true,
+			"optional": true,
+			"peer": true,
+			"dependencies": {
+				"@typescript-eslint/typescript-estree": "5.62.0",
+				"@typescript-eslint/utils": "5.62.0",
+				"debug": "^4.3.4",
+				"tsutils": "^3.21.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "*"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
 		"node_modules/@typescript-eslint/types": {
 			"version": "5.62.0",
 			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
@@ -3535,13 +3874,13 @@
 			"dev": true
 		},
 		"node_modules/@wikimedia/codex": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/@wikimedia/codex/-/codex-2.2.0.tgz",
-			"integrity": "sha512-r9PEWC45ouWYviufzm7NqVFDPQExzdr8jEhCY3gJq0ZCqN0G2mn/LfucbtaAcpMWgWy5x7VLqR09hGb00Dh8bA==",
+			"version": "2.2.1",
+			"resolved": "https://registry.npmjs.org/@wikimedia/codex/-/codex-2.2.1.tgz",
+			"integrity": "sha512-EJggU6gsvUZApNyASm8x/aYnqZqeagj0NhpiQIJg4pNBx16OconVSLPoGIYiQ/KIsUz8K7Osxt6IFw1rESMS4w==",
 			"dev": true,
 			"dependencies": {
 				"@floating-ui/vue": "1.0.6",
-				"@wikimedia/codex-icons": "2.2.0"
+				"@wikimedia/codex-icons": "2.2.1"
 			},
 			"engines": {
 				"node": ">=20",
@@ -3552,9 +3891,9 @@
 			}
 		},
 		"node_modules/@wikimedia/codex-icons": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/@wikimedia/codex-icons/-/codex-icons-2.2.0.tgz",
-			"integrity": "sha512-VTDS3vZULIGN/ESVyJTl1FY5he/MtU+cEa6j+dJXEVKRP8ECrj/rBW9/BwloMm/I9jyLTHT0QWLBkHBZESN9uA==",
+			"version": "2.2.1",
+			"resolved": "https://registry.npmjs.org/@wikimedia/codex-icons/-/codex-icons-2.2.1.tgz",
+			"integrity": "sha512-PX3QqC0bfXGz2sM9hOoRYIsOKnaDuXdpe09VuT52ngQQg2xlmwrT/icx0lF8fK0Is6/rENx7mwIHbjEDRMuMwA==",
 			"dev": true,
 			"engines": {
 				"node": ">=20",
@@ -3575,9 +3914,9 @@
 			"dev": true
 		},
 		"node_modules/acorn": {
-			"version": "8.14.1",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
-			"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+			"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"
@@ -5530,11 +5869,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",
@@ -5554,7 +5896,330 @@
 				"eslint-plugin-yml": "^1.14.0"
 			},
 			"engines": {
-				"node": ">=18 <23"
+				"node": ">=18 <25"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+			"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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/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/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"
+			},
+			"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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
+			"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"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": {
+			"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/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": "^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": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
+			"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.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"
+			},
+			"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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
+			"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.35.1",
+				"eslint-visitor-keys": "^4.2.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/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/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/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/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
+			"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/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/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/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
+			"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"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
+			"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/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": "^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": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
+			"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.35.1",
+				"eslint-visitor-keys": "^4.2.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
 			}
 		},
 		"node_modules/eslint-config-wikimedia/node_modules/@typescript-eslint/scope-manager": {
@@ -5690,9 +6355,9 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia/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"
@@ -5701,6 +6366,15 @@
 				"url": "https://opencollective.com/eslint"
 			}
 		},
+		"node_modules/eslint-config-wikimedia/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/eslint-config-wikimedia/node_modules/minimatch": {
 			"version": "9.0.5",
 			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -10668,6 +11342,14 @@
 			"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
 			"dev": true
 		},
+		"node_modules/natural-compare-lite": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+			"integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+			"dev": true,
+			"optional": true,
+			"peer": true
+		},
 		"node_modules/node-int64": {
 			"version": "0.4.0",
 			"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
diff --git a/package.json b/package.json
index cdc8157..ba66d67 100644
--- a/package.json
+++ b/package.json
@@ -13,10 +13,10 @@
 		"@vue/compiler-sfc": "3.5.13",
 		"@vue/test-utils": "2.4.6",
 		"@vue/vue3-jest": "29.2.6",
-		"@wikimedia/codex": "2.2.0",
-		"@wikimedia/codex-icons": "2.2.0",
+		"@wikimedia/codex": "2.2.1",
+		"@wikimedia/codex-icons": "2.2.1",
 		"babel-core": "^6.26.3",
-		"eslint-config-wikimedia": "0.30.0",
+		"eslint-config-wikimedia": "0.31.0",
 		"eslint-plugin-jest": "27.2.1",
 		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.13.0",
-- 
2.39.5

$ date
--- stdout ---
Wed Jul 30 03:24:53 UTC 2025

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-MediaSearch.git repo --depth=1 -b master
--- stderr ---
Cloning into 'repo'...
--- stdout ---

--- end ---
$ git config user.name libraryupgrader
--- stdout ---

--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---

--- end ---
$ git submodule update --init
--- stdout ---

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

--- end ---
$ git show-ref refs/heads/master
--- stdout ---
c9e8cd092b56786923dfd6d953d50db024b5e06a refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "babel-core": {
      "name": "babel-core",
      "severity": "critical",
      "isDirect": true,
      "via": [
        "babel-helpers",
        "babel-register",
        "babel-template",
        "babel-traverse",
        "json5"
      ],
      "effects": [
        "babel-register"
      ],
      "range": "5.8.20 - 7.0.0-beta.3",
      "nodes": [
        "node_modules/babel-core"
      ],
      "fixAvailable": {
        "name": "babel-core",
        "version": "4.7.16",
        "isSemVerMajor": true
      }
    },
    "babel-helpers": {
      "name": "babel-helpers",
      "severity": "critical",
      "isDirect": false,
      "via": [
        "babel-template"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/babel-helpers"
      ],
      "fixAvailable": true
    },
    "babel-register": {
      "name": "babel-register",
      "severity": "high",
      "isDirect": false,
      "via": [
        "babel-core"
      ],
      "effects": [
        "babel-core"
      ],
      "range": "*",
      "nodes": [
        "node_modules/babel-register"
      ],
      "fixAvailable": {
        "name": "babel-core",
        "version": "4.7.16",
        "isSemVerMajor": true
      }
    },
    "babel-template": {
      "name": "babel-template",
      "severity": "critical",
      "isDirect": false,
      "via": [
        "babel-traverse"
      ],
      "effects": [
        "babel-helpers"
      ],
      "range": "*",
      "nodes": [
        "node_modules/babel-template"
      ],
      "fixAvailable": true
    },
    "babel-traverse": {
      "name": "babel-traverse",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1096879,
          "name": "babel-traverse",
          "dependency": "babel-traverse",
          "title": "Babel vulnerable to arbitrary code execution when compiling specifically crafted malicious code",
          "url": "https://github.com/advisories/GHSA-67hx-6x53-jw92",
          "severity": "critical",
          "cwe": [
            "CWE-184",
            "CWE-697"
          ],
          "cvss": {
            "score": 9.4,
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
          },
          "range": "<7.23.2"
        }
      ],
      "effects": [
        "babel-core",
        "babel-template"
      ],
      "range": "*",
      "nodes": [
        "node_modules/babel-traverse"
      ],
      "fixAvailable": {
        "name": "babel-core",
        "version": "4.7.16",
        "isSemVerMajor": true
      }
    },
    "json5": {
      "name": "json5",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1096543,
          "name": "json5",
          "dependency": "json5",
          "title": "Prototype Pollution in JSON5 via Parse Method",
          "url": "https://github.com/advisories/GHSA-9c47-m6qq-7p4h",
          "severity": "high",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 7.1,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:H"
          },
          "range": "<1.0.2"
        }
      ],
      "effects": [
        "babel-core"
      ],
      "range": "<1.0.2",
      "nodes": [
        "node_modules/babel-core/node_modules/json5"
      ],
      "fixAvailable": {
        "name": "babel-core",
        "version": "4.7.16",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 2,
      "critical": 4,
      "total": 6
    },
    "dependencies": {
      "prod": 1,
      "dev": 1082,
      "optional": 3,
      "peer": 1,
      "peerOptional": 0,
      "total": 1082
    }
  }
}

--- end ---
$ /usr/bin/composer install
--- stderr ---
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 38 installs, 0 updates, 0 removals
  - Locking composer/pcre (3.3.2)
  - Locking composer/semver (3.4.3)
  - Locking composer/spdx-licenses (1.5.9)
  - Locking composer/xdebug-handler (3.0.5)
  - Locking dealerdirect/phpcodesniffer-composer-installer (v1.1.2)
  - Locking doctrine/deprecations (1.1.5)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking mediawiki/mediawiki-codesniffer (v47.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.16.0)
  - Locking mediawiki/minus-x (1.1.3)
  - Locking mediawiki/phan-taint-check-plugin (6.2.1)
  - Locking microsoft/tolerant-php-parser (v0.1.2)
  - Locking netresearch/jsonmapper (v4.5.0)
  - Locking phan/phan (5.5.0)
  - Locking php-parallel-lint/php-console-color (v1.0.1)
  - Locking php-parallel-lint/php-console-highlighter (v1.0.0)
  - Locking php-parallel-lint/php-parallel-lint (v1.4.0)
  - Locking phpcsstandards/phpcsextra (1.2.1)
  - Locking phpcsstandards/phpcsutils (1.0.12)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.6.2)
  - Locking phpdocumentor/type-resolver (1.10.0)
  - Locking phpstan/phpdoc-parser (2.2.0)
  - Locking psr/container (2.0.2)
  - Locking psr/log (3.0.2)
  - Locking sabre/event (5.1.7)
  - Locking squizlabs/php_codesniffer (3.12.2)
  - Locking symfony/console (v7.3.1)
  - Locking symfony/deprecation-contracts (v3.6.0)
  - Locking symfony/polyfill-ctype (v1.32.0)
  - Locking symfony/polyfill-intl-grapheme (v1.32.0)
  - Locking symfony/polyfill-intl-normalizer (v1.32.0)
  - Locking symfony/polyfill-mbstring (v1.32.0)
  - Locking symfony/polyfill-php80 (v1.32.0)
  - Locking symfony/service-contracts (v3.6.0)
  - Locking symfony/string (v7.3.0)
  - Locking tysonandre/var_representation_polyfill (0.1.3)
  - Locking webmozart/assert (1.11.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 38 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing squizlabs/php_codesniffer (3.12.2): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.1.2): Extracting archive
  - Installing composer/pcre (3.3.2): Extracting archive
  - Installing symfony/polyfill-php80 (v1.32.0): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.0.12): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.2.1): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.32.0): Extracting archive
  - Installing composer/spdx-licenses (1.5.9): Extracting archive
  - Installing composer/semver (3.4.3): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v47.0.0): Extracting archive
  - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.32.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.32.0): Extracting archive
  - Installing symfony/polyfill-ctype (v1.32.0): Extracting archive
  - Installing symfony/string (v7.3.0): Extracting archive
  - Installing symfony/deprecation-contracts (v3.6.0): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.6.0): Extracting archive
  - Installing symfony/console (v7.3.1): Extracting archive
  - Installing sabre/event (5.1.7): Extracting archive
  - Installing netresearch/jsonmapper (v4.5.0): Extracting archive
  - Installing microsoft/tolerant-php-parser (v0.1.2): Extracting archive
  - Installing webmozart/assert (1.11.0): Extracting archive
  - Installing phpstan/phpdoc-parser (2.2.0): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing doctrine/deprecations (1.1.5): Extracting archive
  - Installing phpdocumentor/type-resolver (1.10.0): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.6.2): Extracting archive
  - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive
  - Installing psr/log (3.0.2): Extracting archive
  - Installing composer/xdebug-handler (3.0.5): Extracting archive
  - Installing phan/phan (5.5.0): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (6.2.1): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.16.0): Extracting archive
  - Installing mediawiki/minus-x (1.1.3): Extracting archive
  - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive
  - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive
  - Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive
  0/36 [>---------------------------]   0%
 21/36 [================>-----------]  58%
 35/36 [===========================>]  97%
 36/36 [============================] 100%
1 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
17 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils

--- end ---
Upgrading n:eslint-config-wikimedia from 0.30.0 -> 0.31.0
Upgrading n:@wikimedia/codex from 2.2.0 -> 2.2.1
Upgrading n:@wikimedia/codex-icons from 2.2.0 -> 2.2.1
$ /usr/bin/npm install
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.2.1',
npm WARN EBADENGINE   required: { npm: '>=10.8.1', node: '>=20' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.2.1',
npm WARN EBADENGINE   required: { npm: '>=10.8.1', node: '>=20' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated osenv@0.1.5: This package is no longer supported.
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
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 1117 packages, and audited 1118 packages in 16s

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

6 vulnerabilities (2 high, 4 critical)

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

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

Run `npm audit` for details.

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

--- end ---
$ /usr/bin/npm install grunt-eslint@24.3.0 --save-exact
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@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 EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@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 ---

up to date, audited 1118 packages in 2s

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

6 vulnerabilities (2 high, 4 critical)

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

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

Run `npm audit` for details.

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

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

/src/repo/resources/components/SearchFilters.vue
  275:1  warning  The type 'filter-change' is undefined                                              jsdoc/no-undefined-types
  359:3  warning  JSDoc @return declaration present but return expression not available in function  jsdoc/require-returns-check

/src/repo/resources/components/base/AutocompleteSearchInput.vue
  259:1  warning  The type 'input' is undefined   jsdoc/no-undefined-types
  291:1  warning  The type 'enter' is undefined   jsdoc/no-undefined-types
  310:1  warning  The type 'submit' is undefined  jsdoc/no-undefined-types

/src/repo/resources/components/base/Dialog.vue
  193:1  warning  The type 'progress' is undefined  jsdoc/no-undefined-types
  201:1  warning  The type 'key' is undefined       jsdoc/no-undefined-types

/src/repo/resources/components/base/Select.vue
  263:1  warning  The type 'select' is undefined  jsdoc/no-undefined-types
  299:1  warning  The type 'submit' is undefined  jsdoc/no-undefined-types

/src/repo/resources/components/base/SelectMenu.vue
  107:1  warning  The type 'select' is undefined  jsdoc/no-undefined-types

/src/repo/resources/mixins/autocompleteLookupHandler.js
  148:1  warning  This line has a length of 120. Maximum allowed is 110  max-len
  202:1  warning  This line has a length of 151. Maximum allowed is 110  max-len

/src/repo/resources/mixins/searchResult.js
  99:1  warning  The type 'show-details' is undefined  jsdoc/no-undefined-types

/src/repo/resources/store/actions.js
  225:9  warning  Prefer .then to .done                                  no-jquery/no-done-fail
  226:1  warning  This line has a length of 118. Maximum allowed is 110  max-len
  318:2  warning  Prefer .then to .done                                  no-jquery/no-done-fail

✖ 16 problems (0 errors, 16 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":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"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":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"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/Gruntfile.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-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/composer.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"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/extension.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"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/i18n/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"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/i18n/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"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-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"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":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"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/resources/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/App.vue","messages":[],"suppressedMessages":[{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_query' is not in camel case.","line":203,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":203,"endColumn":17,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_media_type' is not in camel case.","line":204,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":204,"endColumn":22,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_query' is not in camel case.","line":259,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":259,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_media_type' is not in camel case.","line":260,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":260,"endColumn":23,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_result_count' is not in camel case.","line":261,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":261,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_query' is not in camel case.","line":272,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":272,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_media_type' is not in camel case.","line":273,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":273,"endColumn":23,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_result_count' is not in camel case.","line":274,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":274,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_query' is not in camel case.","line":310,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":310,"endColumn":18,"suppressions":[{"kind":"directive","justification":""},{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_media_type' is not in camel case.","line":311,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":311,"endColumn":23,"suppressions":[{"kind":"directive","justification":""},{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_result_count' is not in camel case.","line":312,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":312,"endColumn":25,"suppressions":[{"kind":"directive","justification":""},{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_query' is not in camel case.","line":364,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":364,"endColumn":17,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_media_type' is not in camel case.","line":365,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":365,"endColumn":22,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_result_count' is not in camel case.","line":366,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":366,"endColumn":24,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":387,"column":22,"nodeType":"CallExpression","endLine":387,"endColumn":38,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/DidYouMean.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/EmptyState.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/EndOfResults.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/NamespaceFilterDialog.vue","messages":[],"suppressedMessages":[{"ruleId":"vue/no-computed-properties-in-data","severity":2,"message":"The computed property cannot be used in `data()` because it is before initialization.","line":110,"column":19,"nodeType":"MemberExpression","messageId":"cannotBeUsed","endLine":110,"endColumn":36,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"vue/no-computed-properties-in-data","severity":2,"message":"The computed property cannot be used in `data()` because it is before initialization.","line":112,"column":20,"nodeType":"MemberExpression","messageId":"cannotBeUsed","endLine":112,"endColumn":38,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"vue/no-unused-properties","severity":2,"message":"'select' of method found, but never used.","line":207,"column":3,"nodeType":"Identifier","messageId":"unused","endLine":207,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"vue/no-unused-properties","severity":2,"message":"'reset' of method found, but never used.","line":224,"column":3,"nodeType":"Identifier","messageId":"unused","endLine":224,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/NoResults.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/QuickView.vue","messages":[],"suppressedMessages":[{"ruleId":"security/detect-unsafe-regex","severity":1,"message":"Unsafe Regular Expression","line":531,"column":17,"nodeType":"Literal","endLine":531,"endColumn":56,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"vue/no-unused-properties","severity":2,"message":"'focus' of method found, but never used.","line":649,"column":3,"nodeType":"Identifier","messageId":"unused","endLine":649,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_result_page_title' is not in camel case.","line":719,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":719,"endColumn":29,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_media_type' is not in camel case.","line":728,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":728,"endColumn":22,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/SearchError.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/SearchFilters.vue","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'filter-change' is undefined.","line":275,"column":1,"nodeType":"Block","endLine":275,"endColumn":1},{"ruleId":"jsdoc/require-returns-check","severity":1,"message":"JSDoc @return declaration present but return expression not available in function.","line":359,"column":3,"nodeType":"Block","endLine":362,"endColumn":6}],"suppressedMessages":[{"ruleId":"vue/no-unused-properties","severity":2,"message":"'observerOptions' of data found, but never used.","line":113,"column":4,"nodeType":"Identifier","messageId":"unused","endLine":113,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"vue/no-unused-properties","severity":2,"message":"'observerElement' of data found, but never used.","line":117,"column":4,"nodeType":"Identifier","messageId":"unused","endLine":117,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_media_type' is not in camel case.","line":295,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":295,"endColumn":23,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_filter_type' is not in camel case.","line":296,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":296,"endColumn":24,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_filter_value' is not in camel case.","line":297,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":297,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'prior_search_filter_type' is not in camel case.","line":298,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":298,"endColumn":30,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'prior_search_filter_value' is not in camel case.","line":299,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":299,"endColumn":31,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_media_type' is not in camel case.","line":315,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":315,"endColumn":23,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_filter_type' is not in camel case.","line":316,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":316,"endColumn":24,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_filter_value' is not in camel case.","line":317,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":317,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'prior_search_filter_type' is not in camel case.","line":318,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":318,"endColumn":30,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'prior_search_filter_value' is not in camel case.","line":319,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":319,"endColumn":31,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<template>\n\t<div class=\"sdms-search-filters-wrapper\" :class=\"rootClasses\">\n\t\t<div\n\t\t\tref=\"filters\"\n\t\t\tclass=\"sdms-search-filters\"\n\t\t\trole=\"group\"\n\t\t\t:aria-label=\"filtersLabel\"\n\t\t\t:aria-describedby=\"searchCountId\"\n\t\t\ttabindex=\"0\"\n\t\t>\n\t\t\t<div v-for=\"( filter, index ) in searchFilters\" :key=\"'filter-' + index\">\n\t\t\t\t<!-- Namespace filter requires special treatment; see below. -->\n\t\t\t\t<!-- Sort filter has slightly different behavior from other\n\t\t\t\tnon-namespace filters because one of the two options\n\t\t\t\t(relevance or recency) must always be selected. For other\n\t\t\t\tfilters, a generic label must be shown whenever their value\n\t\t\t\tis un-set. See T285349 for more context. -->\n\t\t\t\t<sd-select\n\t\t\t\t\tv-if=\"filter.type !== 'namespace'\"\n\t\t\t\t\t:ref=\"filter.type\"\n\t\t\t\t\t:class=\"getFilterClasses( filter.type )\"\n\t\t\t\t\t:name=\"filter.type\"\n\t\t\t\t\t:items=\"filter.items\"\n\t\t\t\t\t:label=\"getFilterDefaultLabel( filter.type )\"\n\t\t\t\t\t:initial-selected-item-index=\"filter.type === 'sort' ? 0 : -1\"\n\t\t\t\t\t:prefix=\"getFilterPrefix( filter.type )\"\n\t\t\t\t\t@select=\"onSelect( $event, filter.type )\"\n\t\t\t\t>\n\t\t\t\t</sd-select>\n\n\t\t\t\t<!-- Namespace filter is represented as a button that\n\t\t\t\tlaunches a modal -->\n\t\t\t\t<cdx-button\n\t\t\t\t\tv-else\n\t\t\t\t\t:key=\"'filter-namespace-' + index\"\n\t\t\t\t\tclass=\"sdms-search-filters__namespace\"\n\t\t\t\t\t:class=\"namespaceFilterClasses\"\n\t\t\t\t\tweight=\"quiet\"\n\t\t\t\t\t@click=\"namespaceFilterDialogActive = true\"\n\t\t\t\t>\n\t\t\t\t\t{{ namespaceFilterLabel }}\n\t\t\t\t</cdx-button>\n\t\t\t</div>\n\n\t\t\t<div class=\"sdms-search-results-count\">\n\t\t\t\t<span v-if=\"showResultsCount\" :id=\"searchCountId\">\n\t\t\t\t\t{{ resultsCount }}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<namespace-filter-dialog\n\t\t\tv-if=\"namespaceFilter\"\n\t\t\tref=\"namespace\"\n\t\t\t:items=\"namespaceFilter.items\"\n\t\t\t:namespaces=\"namespaceFilter.data.namespaceGroups.all_incl_file\"\n\t\t\t:namespace-groups=\"namespaceFilter.data.namespaceGroups\"\n\t\t\t:active=\"namespaceFilterDialogActive\"\n\t\t\t:initial-value=\"namespaceFilterValue\"\n\t\t\t@submit=\"onSelect( $event, 'namespace' )\"\n\t\t\t@close=\"namespaceFilterDialogActive = false\"\n\t\t>\n\t\t</namespace-filter-dialog>\n\t</div>\n</template>\n\n<script>\n/**\n * @file SearchFilters.vue\n *\n * Container for the search filters for a tab. Displays the filters and handles\n * change in filter value. When a filter value changes, the Vuex state is\n * updated with the new filter value, and a new-search event is emitted so the\n * parent App component can dispatch the search action.\n */\nconst mapState = require( 'vuex' ).mapState,\n\tmapMutations = require( 'vuex' ).mapMutations,\n\tSdSelect = require( './base/Select.vue' ),\n\tNamespaceFilterDialog = require( './NamespaceFilterDialog.vue' ),\n\tSearchFilter = require( '../models/SearchFilter.js' ),\n\tsearchOptions = require( './../data/searchOptions.json' ),\n\tobserver = require( './base/mixins/observer.js' );\n\nconst { CdxButton } = require( '@wikimedia/codex' );\n\n// @vue/component\nmodule.exports = exports = {\n\tname: 'SearchFilters',\n\n\tcomponents: {\n\t\t'sd-select': SdSelect,\n\t\tCdxButton,\n\t\t'namespace-filter-dialog': NamespaceFilterDialog\n\t},\n\n\tmixins: [ observer ],\n\n\tprops: {\n\t\tmediaType: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t}\n\t},\n\n\temits: [\n\t\t'filter-change'\n\t],\n\n\tdata: function () {\n\t\treturn {\n\t\t\tnamespaceFilterDialogActive: false,\n\t\t\t// eslint-disable-next-line vue/no-unused-properties\n\t\t\tobserverOptions: {\n\t\t\t\tthreshold: 1\n\t\t\t},\n\t\t\t// eslint-disable-next-line vue/no-unused-properties\n\t\t\tobserverElement: '.sdms-search-results-count'\n\t\t};\n\t},\n\n\tcomputed: Object.assign( {}, mapState( [\n\t\t'totalHits',\n\t\t'filterValues'\n\t] ), {\n\t\t/**\n\t\t * Due to this component being used multiple times,\n\t\t * we need to ensure the ID is unique\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsearchCountId: function () {\n\t\t\treturn this.mediaType + '-count';\n\t\t},\n\n\t\t/**\n\t\t * @return {string}\n\t\t */\n\t\tfiltersLabel: function () {\n\t\t\treturn this.mediaType + ' filters';\n\t\t},\n\n\t\t/**\n\t\t * @return {Object}\n\t\t */\n\t\trootClasses: function () {\n\t\t\treturn {};\n\t\t},\n\n\t\t/**\n\t\t * @return {Object}\n\t\t */\n\t\tnamespaceFilterClasses: function () {\n\t\t\tconst selected = ( 'namespace' in this.filterValues[ this.mediaType ] );\n\t\t\treturn {\n\t\t\t\t'sdms-search-filters__namespace--selected': selected\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * @return {Array} SearchFilter objects for this media type.\n\t\t */\n\t\tsearchFilters: function () {\n\t\t\tconst optionsForType = searchOptions[ this.mediaType ],\n\t\t\t\tfilters = [];\n\n\t\t\tObject.keys( optionsForType ).forEach( ( filterName ) => {\n\t\t\t\tconst filterData = optionsForType[ filterName ],\n\t\t\t\t\tfilter = new SearchFilter(\n\t\t\t\t\t\tfilterName,\n\t\t\t\t\t\tfilterData.items,\n\t\t\t\t\t\tfilterData.data\n\t\t\t\t\t);\n\t\t\t\tfilters.push( filter );\n\t\t\t} );\n\t\t\treturn filters;\n\t\t},\n\n\t\t/**\n\t\t * Key names (not values) of all active filters for the given tab;\n\t\t * Having a shorthand computed property for this makes it easier to\n\t\t * watch for changes.\n\t\t *\n\t\t * @return {Array} Empty array or [ \"imageres\", \"filemime\" ], etc\n\t\t */\n\t\tcurrentActiveFilters: function () {\n\t\t\treturn Object.keys( this.filterValues[ this.mediaType ] );\n\t\t},\n\n\t\t/**\n\t\t * Number of results should only display if results exist.\n\t\t *\n\t\t * @return {boolean} Whether to display the results count\n\t\t */\n\t\tshowResultsCount: function () {\n\t\t\treturn this.totalHits[ this.mediaType ] > 0;\n\t\t},\n\n\t\t/**\n\t\t * String representing the number of search results.\n\t\t *\n\t\t * @return {Object} Message object\n\t\t */\n\t\tresultsCount: function () {\n\t\t\treturn this.$i18n(\n\t\t\t\t'mediasearch-results-count',\n\t\t\t\tmw.language.convertNumber( this.totalHits[ this.mediaType ] )\n\t\t\t).text();\n\t\t},\n\n\t\t/**\n\t\t * Get a human-readable label for the namespace filter button.\n\t\t *\n\t\t * @return {Object}\n\t\t */\n\t\tnamespaceFilterLabel: function () {\n\t\t\tconst namespaceGroups = this.namespaceFilter.data.namespaceGroups;\n\t\t\tlet filterValue = 'all';\n\n\t\t\t// If there is a namespace filter value...\n\t\t\tif ( 'namespace' in this.filterValues[ this.mediaType ] ) {\n\t\t\t\t// If the filter value is one of the namespace groups, use that.\n\t\t\t\t// Otherwise, it's a string of custom namespaces, so use the\n\t\t\t\t// 'custom' label.\n\t\t\t\tfilterValue = namespaceGroups[ this.filterValues[ this.mediaType ].namespace ] ?\n\t\t\t\t\tthis.filterValues[ this.mediaType ].namespace : 'custom';\n\t\t\t}\n\n\t\t\tconst messageKey = 'mediasearch-filter-namespace-' + filterValue;\n\n\t\t\t// Return the label message, which takes the filter value as a\n\t\t\t// param and will return something like \"Namespace: Discussion\".\n\t\t\t// The following messages are used here:\n\t\t\t// * mediasearch-filter-namespace-all\n\t\t\t// * mediasearch-filter-namespace-discussion\n\t\t\t// * mediasearch-filter-namespace-help\n\t\t\t// * mediasearch-filter-namespace-custom\n\t\t\treturn this.$i18n(\n\t\t\t\t'mediasearch-filter-namespace-label',\n\t\t\t\tthis.$i18n( messageKey )\n\t\t\t).text();\n\t\t},\n\n\t\t/**\n\t\t * Current value of the namespace filter (defaults to 'all').\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnamespaceFilterValue: function () {\n\t\t\treturn 'namespace' in this.filterValues[ this.mediaType ] ?\n\t\t\t\tthis.filterValues[ this.mediaType ].namespace : 'all';\n\t\t},\n\n\t\t/**\n\t\t * Get the namespace search filter, if it exists.\n\t\t *\n\t\t * @return {Object|undefined}\n\t\t */\n\t\tnamespaceFilter: function () {\n\t\t\t// Array.prototype.find is polyfilled so we can use this\n\t\t\t// ES6 array method here\n\n\t\t\treturn this.searchFilters.find( ( filter ) => filter.type === 'namespace' );\n\t\t}\n\t} ),\n\n\tmethods: Object.assign( {}, mapMutations( [\n\t\t'addFilterValue',\n\t\t'removeFilterValue'\n\t] ), {\n\t\t/**\n\t\t * Handle filter change.\n\t\t *\n\t\t * @param {string|Object} value The new filter value; namespace filter values are objects\n\t\t * @param {string} filterType\n\t\t * @fires filter-change\n\t\t */\n\t\tonSelect: function ( value, filterType ) {\n\t\t\tconst oldValue = this.filterValues[ this.mediaType ][ filterType ] || '',\n\t\t\t\tcurrentFilter = this.searchFilters.find( ( filter ) => filter.type === filterType );\n\n\t\t\t// for logging purposes, we only want a simple string value\n\t\t\tfunction normalizedValue( v ) {\n\t\t\t\treturn v.value ? v.value : v;\n\t\t\t}\n\n\t\t\tif ( value ) {\n\t\t\t\tthis.addFilterValue( {\n\t\t\t\t\tmediaType: this.mediaType,\n\t\t\t\t\tfilterType: filterType,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t\t/* eslint-disable camelcase */\n\t\t\t\tthis.$log( {\n\t\t\t\t\taction: 'filter_change',\n\t\t\t\t\tsearch_media_type: this.mediaType,\n\t\t\t\t\tsearch_filter_type: filterType,\n\t\t\t\t\tsearch_filter_value: normalizedValue( value ),\n\t\t\t\t\tprior_search_filter_type: filterType,\n\t\t\t\t\tprior_search_filter_value: normalizedValue( oldValue )\n\t\t\t\t} );\n\t\t\t\t/* eslint-enable camelcase */\n\t\t\t} else {\n\t\t\t\tthis.removeFilterValue( {\n\t\t\t\t\tmediaType: this.mediaType,\n\t\t\t\t\tfilterType: filterType\n\t\t\t\t} );\n\n\t\t\t\t// Un-set the filter so that the initial label is displayed\n\t\t\t\t// when an \"empty value\" option is selected\n\t\t\t\tthis.getRef( currentFilter ).reset();\n\n\t\t\t\t/* eslint-disable camelcase */\n\t\t\t\tthis.$log( {\n\t\t\t\t\taction: 'filter_change',\n\t\t\t\t\tsearch_media_type: this.mediaType,\n\t\t\t\t\tsearch_filter_type: filterType,\n\t\t\t\t\tsearch_filter_value: '',\n\t\t\t\t\tprior_search_filter_type: filterType,\n\t\t\t\t\tprior_search_filter_value: normalizedValue( oldValue )\n\t\t\t\t} );\n\t\t\t\t/* eslint-enable camelcase */\n\t\t\t}\n\n\t\t\t// Tell the App component to do a new search and update the URL\n\t\t\t// params\n\t\t\tthis.$emit( 'filter-change', {\n\t\t\t\tmediaType: this.mediaType,\n\t\t\t\tfilterType: filterType,\n\t\t\t\tvalue: value\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * We need a class for select lists where a non-default item is selected.\n\t\t *\n\t\t * @param {string} filterType\n\t\t * @return {Object}\n\t\t */\n\t\tgetFilterClasses: function ( filterType ) {\n\t\t\treturn {\n\t\t\t\t'sdms-search-filter--selected': this.currentActiveFilters.includes( filterType )\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Add select list prefixes per filter type.\n\t\t *\n\t\t * @param {string} filterType\n\t\t * @return {mw.Message} message object\n\t\t */\n\t\tgetFilterPrefix: function ( filterType ) {\n\t\t\tif ( filterType === 'sort' ) {\n\t\t\t\treturn this.$i18n( 'mediasearch-filter-sort-label' ).text();\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\n\t\t/**\n\t\t * @param {string} filterType\n\t\t * @return {mw.Message} message object\n\t\t */\n\t\tgetFilterDefaultLabel: function ( filterType ) {\n\t\t\tswitch ( filterType ) {\n\t\t\t\tcase 'filemime':\n\t\t\t\t\treturn this.$i18n( 'mediasearch-filter-file-type' ).text();\n\t\t\t\tcase 'fileres':\n\t\t\t\t\treturn this.$i18n( 'mediasearch-filter-size' ).text();\n\t\t\t\tcase 'assessment':\n\t\t\t\t\treturn this.$i18n( 'mediasearch-filter-assessment' ).text();\n\t\t\t\tcase 'haslicense':\n\t\t\t\t\treturn this.$i18n( 'mediasearch-filter-license' ).text();\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get the ref for a filter.\n\t\t *\n\t\t * Because the namespace filter is handled outside the v-for loop that\n\t\t * creates the other filter elements, we need to access its ref a little\n\t\t * differently.\n\t\t *\n\t\t * @param {Object} filter A search filter object\n\t\t * @return {Object}\n\t\t */\n\t\tgetRef: function ( filter ) {\n\t\t\treturn filter.type === 'namespace' ?\n\t\t\t\tthis.$refs[ filter.type ] :\n\t\t\t\t// VUE 3 MIGRATION: these refs are arrays in Vue 2 but not in Vue 3\n\t\t\t\tthis.$refs[ filter.type ][ 0 ] || this.$refs[ filter.type ];\n\t\t},\n\n\t\tresetAllFilters: function () {\n\t\t\tthis.searchFilters.forEach( ( filter ) => {\n\t\t\t\tthis.getRef( filter ).reset();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Set each filter component's state to match the appropriate\n\t\t * value in Vuex\n\t\t */\n\t\tsynchronizeFilters: function () {\n\t\t\tthis.searchFilters.forEach( ( filter ) => {\n\t\t\t\tconst currentValue = this.filterValues[ this.mediaType ][ filter.type ],\n\t\t\t\t\tref = this.getRef( filter );\n\n\t\t\t\tif ( currentValue ) {\n\t\t\t\t\t// Attempt to set each filter to the specified value in\n\t\t\t\t\t// Vuex.  If the value doesn't exist, remove the value from\n\t\t\t\t\t// the Vuex store and emit a filter-change event so that the\n\t\t\t\t\t// page and URL get updated.\n\t\t\t\t\ttry {\n\t\t\t\t\t\tref.select( currentValue );\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\tthis.removeFilterValue( {\n\t\t\t\t\t\t\tmediaType: this.mediaType,\n\t\t\t\t\t\t\tfilterType: filter.type\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tthis.$emit( 'filter-change', {\n\t\t\t\t\t\t\tmediaType: this.mediaType,\n\t\t\t\t\t\t\tfilterType: filter.type\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tref.reset();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} ),\n\n\twatch: {\n\t\t/**\n\t\t * Programmatically set or reset filters if Vuex state changes for\n\t\t * reasons other than the user setting filters manually (clicking the\n\t\t * clear button, URL filter params, popstate, etc)\n\t\t */\n\t\tcurrentActiveFilters: {\n\t\t\thandler: function () {\n\t\t\t\tthis.synchronizeFilters();\n\t\t\t},\n\t\t\tdeep: true\n\t\t}\n\t},\n\n\t/**\n\t * If filters have already been set at the time of page initialization\n\t * via URL params, update the relevant Select child component with\n\t * the appropriate value\n\t */\n\tmounted: function () {\n\t\tthis.synchronizeFilters();\n\t}\n};\n</script>\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/SearchResults.vue","messages":[],"suppressedMessages":[{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_media_type' is not in camel case.","line":348,"column":7,"nodeType":"Identifier","messageId":"notCamelCase","endLine":348,"endColumn":24,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_result_page_title' is not in camel case.","line":349,"column":7,"nodeType":"Identifier","messageId":"notCamelCase","endLine":349,"endColumn":31,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_result_position' is not in camel case.","line":350,"column":7,"nodeType":"Identifier","messageId":"notCamelCase","endLine":350,"endColumn":29,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'search_result_has_quickview' is not in camel case.","line":351,"column":7,"nodeType":"Identifier","messageId":"notCamelCase","endLine":351,"endColumn":34,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'title' is defined but never used.","line":548,"column":29,"nodeType":"Identifier","messageId":"unusedVar","endLine":548,"endColumn":34,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'index' is defined but never used.","line":548,"column":36,"nodeType":"Identifier","messageId":"unusedVar","endLine":548,"endColumn":41,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/SearchWarnings.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/Spinner.vue","messages":[],"suppressedMessages":[{"ruleId":"vue/multi-word-component-names","severity":2,"message":"Component name \"Spinner\" should always be multi-word.","line":11,"column":8,"nodeType":"Literal","messageId":"unexpected","endLine":11,"endColumn":17,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/UserNotice.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/base/AutocompleteSearchInput.vue","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'input' is undefined.","line":259,"column":1,"nodeType":"Block","endLine":259,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'enter' is undefined.","line":291,"column":1,"nodeType":"Block","endLine":291,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'submit' is undefined.","line":310,"column":1,"nodeType":"Block","endLine":310,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<template>\n\t<div class=\"sd-input\" :class=\"rootClasses\">\n\t\t<div class=\"sd-input__wrapper\">\n\t\t\t<label\n\t\t\t\t:id=\"labelElementId\"\n\t\t\t\t:for=\"inputElementId\"\n\t\t\t\tclass=\"sd-input__label\"\n\t\t\t>\n\t\t\t\t{{ label }}\n\t\t\t</label>\n\n\t\t\t<cdx-text-input\n\t\t\t\t:id=\"inputElementId\"\n\t\t\t\tref=\"input\"\n\t\t\t\tv-model=\"value\"\n\t\t\t\tclass=\"sd-input__input\"\n\t\t\t\ttype=\"text\"\n\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t:aria-owns=\"lookupResultsElementId\"\n\t\t\t\t:aria-expanded=\"isExpanded\"\n\t\t\t\t:aria-activedescendant=\"activeLookupItemId || null\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:start-icon=\"cdxIconSearch\"\n\t\t\t\t:clearable=\"true\"\n\t\t\t\t@input=\"onInput\"\n\t\t\t\t@focus=\"onFocus\"\n\t\t\t\t@blur=\"onBlur\"\n\t\t\t\t@keydown.enter=\"onSubmit\"\n\t\t\t\t@keydown.up=\"onArrowUp\"\n\t\t\t\t@keydown.down=\"onArrowDown\"\n\t\t\t\t@clear=\"onClear\"\n\t\t\t>\n\t\t\t</cdx-text-input>\n\n\t\t\t<sd-select-menu\n\t\t\t\tv-if=\"hasLookupResults && showLookupResults\"\n\t\t\t\t:items=\"lookupResults\"\n\t\t\t\t:active-item-index=\"activeLookupItemIndex\"\n\t\t\t\t:listbox-id=\"lookupResultsElementId\"\n\t\t\t\t:labelled-by=\"labelElementId\"\n\t\t\t\t@select=\"onLookupItemSelect\"\n\t\t\t\t@active-item-change=\"onActiveItemChange\"\n\t\t\t>\n\t\t\t</sd-select-menu>\n\t\t</div>\n\n\t\t<cdx-button\n\t\t\tv-if=\"hasButton\"\n\t\t\tclass=\"sd-input__button\"\n\t\t\tweight=\"primary\"\n\t\t\taction=\"progressive\"\n\t\t\t@click=\"onSubmit\"\n\t\t>\n\t\t\t{{ $i18n( 'searchbutton' ).text() }}\n\t\t</cdx-button>\n\t</div>\n</template>\n\n<script>\nconst { CdxButton, CdxTextInput } = require( '@wikimedia/codex' );\nconst SdSelectMenu = require( './SelectMenu.vue' );\nconst { cdxIconSearch } = require( '../icons.json' );\n\n/**\n * @file AutocompleteSearchInput\n *\n * Search input that emits user-provided input to the parent, then receives and\n * displays autocomplete results. This component is fairly specific to the Media\n * Search use case: we know we'll be fetching autocomplete results, we'll always\n * have a search icon and clear indicator button, etc. This could be made more\n * general for wider usage.\n */\n// @vue/component\nmodule.exports = exports = {\n\tname: 'SdAutocompleteSearchInput',\n\n\tcomponents: {\n\t\tCdxButton,\n\t\tCdxTextInput,\n\t\t'sd-select-menu': SdSelectMenu\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Name must be provided to ensure unique aria attributes. This probably\n\t\t * isn't the best way to do it in WVUI but serves our purposes here.\n\t\t */\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\n\t\t/**\n\t\t * Required label for input. Currently, label will always be visually\n\t\t * hidden, but this could be toggled via a prop in a future iteration.\n\t\t */\n\t\tlabel: {\n\t\t\ttype: [ String, Object ],\n\t\t\trequired: true\n\t\t},\n\n\t\tinitialValue: {\n\t\t\ttype: [ String, Number ],\n\t\t\tdefault: ''\n\t\t},\n\n\t\tplaceholder: {\n\t\t\ttype: [ String, Object ],\n\t\t\tdefault: null\n\t\t},\n\n\t\tbuttonLabel: {\n\t\t\ttype: [ String, Object ],\n\t\t\tdefault: null\n\t\t},\n\n\t\tlookupResults: {\n\t\t\ttype: Array,\n\t\t\tdefault: function () {\n\t\t\t\treturn [ ];\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This is an optional way to conditonally disable the animation shown\n\t\t * in the input while lookup results are fetched.\n\t\t *\n\t\t * For example, in the parent component, you can check to see if your\n\t\t * lookup URI exists. If not, you can pass true for this prop.\n\t\t */\n\t\tlookupDisabled: {\n\t\t\ttype: Boolean\n\t\t},\n\t\t/**\n\t\t * This property is going to be used to set focus on the input field\n\t\t */\n\t\tinitialized: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true\n\t\t}\n\t},\n\n\temits: [\n\t\t'input',\n\t\t'focus',\n\t\t'blur',\n\t\t'submit',\n\t\t'clear',\n\t\t'clear-lookup-results'\n\t],\n\n\tdata: function () {\n\t\treturn {\n\t\t\tvalue: this.initialValue,\n\t\t\tpending: false,\n\t\t\tshowLookupResults: false,\n\t\t\tactiveLookupItemIndex: -1,\n\t\t\tcdxIconSearch\n\t\t};\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * @return {Object}\n\t\t */\n\t\trootClasses: function () {\n\t\t\treturn {\n\t\t\t\t'sd-input--button': this.hasButton,\n\t\t\t\t'sd-input--pending': this.pending\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\thasButton: function () {\n\t\t\treturn !!this.buttonLabel;\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\thasLookupResults: function () {\n\t\t\treturn this.lookupResults.length > 0;\n\t\t},\n\n\t\t/**\n\t\t * ID of the visually-hidden label.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tlabelElementId: function () {\n\t\t\treturn this.name + '__label';\n\t\t},\n\n\t\t/**\n\t\t * ID of the input.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tinputElementId: function () {\n\t\t\treturn this.name + '__input';\n\t\t},\n\n\t\t/**\n\t\t * ID of the lookup results container.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tlookupResultsElementId: function () {\n\t\t\treturn this.name + '__lookup-results';\n\t\t},\n\n\t\t/**\n\t\t * The actual string of the active lookup result item.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tactiveLookupItem: function () {\n\t\t\tif (\n\t\t\t\tthis.lookupResults.length < 1 ||\n\t\t\t\t!this.showLookupResults ||\n\t\t\t\tthis.activeLookupItemIndex < 0\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn this.lookupResults[ this.activeLookupItemIndex ];\n\t\t},\n\n\t\t/**\n\t\t * The ID of the element of the active lookup result item.\n\t\t *\n\t\t * @return {string|boolean}\n\t\t */\n\t\tactiveLookupItemId: function () {\n\t\t\treturn this.activeLookupItemIndex > -1 ?\n\t\t\t\tthis.lookupResultsElementId + '-item-' + this.activeLookupItemIndex :\n\t\t\t\tfalse;\n\t\t},\n\n\t\t/**\n\t\t * For the aria-expanded attribute of the input, we need to use strings\n\t\t * instead of booleans so that aria-expanded will be set to \"false\" when\n\t\t * appropriate rather than the attribute being omitted, which is what\n\t\t * would happen if we used a boolean false.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tisExpanded: function () {\n\t\t\treturn this.hasLookupResults && this.showLookupResults ? 'true' : 'false';\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Emit input and enable pending state.\n\t\t *\n\t\t * @fires input\n\t\t */\n\t\tonInput: function () {\n\t\t\tthis.pending = !this.lookupDisabled;\n\t\t\tthis.$emit( 'input', this.value );\n\t\t},\n\n\t\t/**\n\t\t * If there are existing lookup results, show them on focus.\n\t\t *\n\t\t * @param {Event} event\n\t\t * @fires focus\n\t\t */\n\t\tonFocus: function ( event ) {\n\t\t\tthis.toggleLookupResults( this.lookupResults.length > 0 );\n\t\t\tthis.$emit( 'focus', event );\n\t\t},\n\n\t\t/**\n\t\t * Hide, but don't delete, lookup results.\n\t\t *\n\t\t * @param {Event} event\n\t\t * @fires blur\n\t\t */\n\t\tonBlur: function ( event ) {\n\t\t\tthis.$emit( 'blur', event );\n\t\t\tthis.toggleLookupResults( false );\n\t\t},\n\n\t\t/**\n\t\t * Handle enter keypress or button click.\n\t\t *\n\t\t * @fires enter\n\t\t */\n\t\tonSubmit: function () {\n\t\t\t// If the user is highlighting an autocomplete result, emit that\n\t\t\t// result. Otherwise, emit the value of the text input.\n\t\t\tif ( this.hasLookupResults && this.activeLookupItemIndex >= 0 ) {\n\t\t\t\t// We also want to update the input text.\n\t\t\t\tthis.value = this.activeLookupItem;\n\t\t\t}\n\n\t\t\tthis.$emit( 'submit', this.value );\n\t\t\tthis.clearLookupResults();\n\t\t\tthis.$refs.input.blur();\n\t\t},\n\n\t\t/**\n\t\t * Handle lookup item click.\n\t\t *\n\t\t * @param {number} index\n\t\t * @fires submit\n\t\t */\n\t\tonLookupItemSelect: function ( index ) {\n\t\t\tthis.value = this.lookupResults[ index ];\n\t\t\tthis.$emit( 'submit', this.value );\n\t\t\tthis.clearLookupResults();\n\t\t},\n\n\t\t/**\n\t\t * Move to the next lookup result. If we're at the end, go back to the\n\t\t * first item.\n\t\t */\n\t\tonArrowDown: function () {\n\t\t\tconst index = this.activeLookupItemIndex;\n\t\t\tif ( this.hasLookupResults ) {\n\t\t\t\tthis.activeLookupItemIndex =\n\t\t\t\t\tthis.lookupResults.length > index + 1 ? index + 1 : 0;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Move to the previous lookup result. If we're at the beginning, go to\n\t\t * the last item.\n\t\t */\n\t\tonArrowUp: function () {\n\t\t\tconst index = this.activeLookupItemIndex;\n\t\t\tif ( this.hasLookupResults && index > -1 ) {\n\t\t\t\tthis.activeLookupItemIndex =\n\t\t\t\t\tindex === 0 ? this.lookupResults.length - 1 : index - 1;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Change the active item index based on mouseover or mouseleave.\n\t\t *\n\t\t * @param {number} index\n\t\t */\n\t\tonActiveItemChange: function ( index ) {\n\t\t\tthis.activeLookupItemIndex = index;\n\t\t},\n\n\t\t/**\n\t\t * Handle clear icon click.\n\t\t */\n\t\tonClear: function () {\n\t\t\tthis.$emit( 'clear' );\n\t\t\tthis.value = '';\n\t\t\tthis.clearLookupResults();\n\t\t},\n\n\t\t/**\n\t\t * Helper function to reset lookup results to an empty array.\n\t\t */\n\t\tclearLookupResults: function () {\n\t\t\tthis.$emit( 'clear-lookup-results' );\n\t\t},\n\n\t\t/**\n\t\t * Show or hide lookup results.\n\t\t *\n\t\t * @param {boolean} show\n\t\t */\n\t\ttoggleLookupResults: function ( show ) {\n\t\t\tthis.showLookupResults = show;\n\t\t}\n\t},\n\n\twatch: {\n\t\t/**\n\t\t * When new lookup results are received, remove pending state and reset\n\t\t * the active item index.\n\t\t */\n\t\tlookupResults: {\n\t\t\thandler: function () {\n\t\t\t\tthis.pending = false;\n\t\t\t\tthis.activeLookupItemIndex = -1;\n\t\t\t\tthis.toggleLookupResults( this.lookupResults.length > 0 );\n\t\t\t},\n\t\t\tdeep: true\n\t\t},\n\n\t\t/**\n\t\t * If the search term (passed down here as the \"initial value\" prop)\n\t\t * changes for a reason besides the user typing into the input here\n\t\t * (say, due to navigating forward/backward through history), make\n\t\t * sure to update the value here to reflect the new term\n\t\t *\n\t\t * @param {string} newValue\n\t\t */\n\t\tinitialValue: function ( newValue ) {\n\t\t\tthis.value = newValue;\n\t\t},\n\n\t\t/**\n\t\t * Clear lookup results if the user manually delets all characters\n\t\t *\n\t\t * @param {string} newValue\n\t\t */\n\t\tvalue: function ( newValue ) {\n\t\t\tif ( newValue === '' ) {\n\t\t\t\tthis.clearLookupResults();\n\t\t\t}\n\t\t},\n\n\t\tinitialized: function ( isInitalized ) {\n\t\t\tif ( isInitalized && !this.initialValue.trim() ) {\n\t\t\t\tthis.$refs.input.focus();\n\t\t\t}\n\t\t}\n\t}\n};\n</script>\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/base/CopyTextLayout.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/base/Dialog.vue","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'progress' is undefined.","line":193,"column":1,"nodeType":"Block","endLine":193,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'key' is undefined.","line":201,"column":1,"nodeType":"Block","endLine":201,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<template>\n\t<div class=\"sd-dialog-wrapper\">\n\t\t<transition name=\"sd-scale\" appear>\n\t\t\t<div\n\t\t\t\tv-if=\"active\"\n\t\t\t\tclass=\"sd-dialog\"\n\t\t\t\t:class=\"rootClasses\"\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-fullscreen=\"true\"\n\t\t\t\t@keyup=\"onKeyup\"\n\t\t\t>\n\t\t\t\t<div class=\"sd-dialog__overlay\" @click=\"close\"></div>\n\t\t\t\t<div ref=\"landing\" tabindex=\"0\"></div>\n\t\t\t\t<div class=\"sd-dialog__shell\">\n\t\t\t\t\t<div v-if=\"!headless\" class=\"sd-dialog__header\">\n\t\t\t\t\t\t<div v-if=\"title\" class=\"sd-dialog__header-title\">\n\t\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<cdx-button\n\t\t\t\t\t\t\t:aria-label=\"$i18n( 'mediasearch-dialog-close-button-label' )\"\n\t\t\t\t\t\t\tclass=\"sd-dialog__header-action--safe\"\n\t\t\t\t\t\t\tweight=\"quiet\"\n\t\t\t\t\t\t\t@click=\"close\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<cdx-icon :icon=\"closeIcon\"></cdx-icon>\n\t\t\t\t\t\t</cdx-button>\n\n\t\t\t\t\t\t<cdx-button\n\t\t\t\t\t\t\tv-if=\"isMobileSkin && progressiveAction\"\n\t\t\t\t\t\t\tclass=\"sd-dialog__header-action--progressive\"\n\t\t\t\t\t\t\tweight=\"primary\"\n\t\t\t\t\t\t\taction=\"progressive\"\n\t\t\t\t\t\t\t:disabled=\"progressiveActionDisabled\"\n\t\t\t\t\t\t\t@click=\"progress\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ progressiveAction }}\n\t\t\t\t\t\t</cdx-button>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"sd-dialog__body\"\n\t\t\t\t\t\t:class=\"bodyClasses\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"sd-dialog__body__content\">\n\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"sd-dialog__footer\">\n\t\t\t\t\t\t<cdx-button\n\t\t\t\t\t\t\tv-if=\"!isMobileSkin && progressiveAction\"\n\t\t\t\t\t\t\tclass=\"sd-dialog__footer-action--progressive\"\n\t\t\t\t\t\t\tweight=\"primary\"\n\t\t\t\t\t\t\taction=\"progressive\"\n\t\t\t\t\t\t\t:disabled=\"progressiveActionDisabled\"\n\t\t\t\t\t\t\t@click=\"progress\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ progressiveAction }}\n\t\t\t\t\t\t</cdx-button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n</template>\n\n<script>\nconst { CdxButton, CdxIcon } = require( '@wikimedia/codex' );\nconst { cdxIconClose } = require( '../icons.json' );\n\n/**\n * Dialog component.\n *\n * This component will append its element to the end of the <body> on mount.\n * When the active prop is true, the dialog will display, with CSS transitions\n * during open and close. See prop documentation for more details.\n *\n * Known shortcomings:\n * - We have not yet handled the use of components that have overlays inside\n *   this dialog, so you may find that things like select list menus get cut off\n *   due to CSS overflow rules.\n * - Whether the dialog is fullscreen is determined based on the skin (it will\n *   be fullscreen if the skin is Minerva Neue), you can't control this via a\n *   prop\n * - Dialog min-height should be set via CSS to something natural-looking. In\n *   the future, we should handle this within the dialog component to size the\n *   height according to the body content height and the viewport size.\n * - The dialog can display a progressive action, but handling a destructive\n *   action has not yet been implemented.\n */\n// @vue/component\nmodule.exports = exports = {\n\tname: 'SdDialog',\n\n\tcomponents: {\n\t\tCdxButton,\n\t\tCdxIcon\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Whether the dialog is visible.\n\t\t */\n\t\tactive: {\n\t\t\ttype: Boolean\n\t\t},\n\n\t\t/**\n\t\t * Title to appear in the dialog header.\n\t\t */\n\t\ttitle: {\n\t\t\t// String or mw.msg object.\n\t\t\ttype: [ String, Object ],\n\t\t\tdefault: null\n\t\t},\n\n\t\t/**\n\t\t * Label for the progressive action.\n\t\t */\n\t\tprogressiveAction: {\n\t\t\t// String or mw.msg object.\n\t\t\ttype: [ String, Object ],\n\t\t\tdefault: ''\n\t\t},\n\n\t\t/**\n\t\t * Whether to disable the progresive action button\n\t\t */\n\t\tprogressiveActionDisabled: {\n\t\t\ttype: Boolean\n\t\t},\n\n\t\t/**\n\t\t * Set to true to remove the header (and, therefore, the built-in close\n\t\t * button).\n\t\t */\n\t\theadless: {\n\t\t\ttype: Boolean\n\t\t}\n\t},\n\n\temits: [\n\t\t'close',\n\t\t'progress',\n\t\t'key'\n\t],\n\n\tdata: function () {\n\t\treturn {\n\t\t\tcloseIcon: cdxIconClose,\n\t\t\tfullscreen: mw.config.get( 'skin' ) === 'minerva'\n\t\t};\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * @return {Object}\n\t\t */\n\t\trootClasses: function () {\n\t\t\treturn {\n\t\t\t\t'sd-dialog--fullscreen': this.fullscreen\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * @return {Object}\n\t\t */\n\t\tbodyClasses: function () {\n\t\t\treturn {\n\t\t\t\t'sd-dialog__body--headless': this.headless\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\tisMobileSkin: function () {\n\t\t\treturn mw.config.get( 'skin' ) === 'minerva';\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @fires close\n\t\t */\n\t\tclose: function () {\n\t\t\tthis.$emit( 'close' );\n\t\t},\n\n\t\t/**\n\t\t * @fires progress\n\t\t */\n\t\tprogress: function () {\n\t\t\tthis.$emit( 'progress' );\n\t\t},\n\n\t\t/**\n\t\t * @param {KeyboardEvent} e\n\t\t * @fires close|key\n\t\t */\n\t\tonKeyup: function ( e ) {\n\t\t\tif ( e.code === 'Escape' || e.code === '27' ) {\n\t\t\t\tthis.$emit( 'close' );\n\t\t\t} else {\n\t\t\t\tthis.$emit( 'key', e.code );\n\t\t\t}\n\t\t}\n\t},\n\n\twatch: {\n\t\tactive: function ( newVal ) {\n\t\t\tif ( newVal === true ) {\n\t\t\t\t// Add a class to the body so we can hide overflow, preventing\n\t\t\t\t// confusing scrolling behavior.\n\t\t\t\tdocument.body.classList.add( 'sd-body--open-dialog' );\n\n\t\t\t\t// Move focus to the dialog element.\n\t\t\t\tthis.$nextTick( function () {\n\t\t\t\t\tthis.$refs.landing.focus();\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tdocument.body.classList.remove( 'sd-body--open-dialog' );\n\t\t\t}\n\t\t}\n\t},\n\n\tmounted: function () {\n\t\t// Add this component to the end of the body element.\n\t\tdocument.body.appendChild( this.$el );\n\t},\n\n\tbeforeUnmount: function () {\n\t\t// Remove lingering body class and the element itself.\n\t\tdocument.body.classList.remove( 'sd-body--open-dialog' );\n\t\tdocument.body.removeChild( this.$el );\n\t}\n};\n</script>\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/base/Image.vue","messages":[],"suppressedMessages":[{"ruleId":"vue/no-unused-properties","severity":2,"message":"'observerOptions' of data found, but never used.","line":45,"column":4,"nodeType":"Identifier","messageId":"unused","endLine":45,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/base/Observer.vue","messages":[],"suppressedMessages":[{"ruleId":"vue/require-default-prop","severity":1,"message":"Prop 'options' requires default value to be set.","line":31,"column":3,"nodeType":"Property","messageId":"missingDefault","endLine":31,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"vue/no-unused-properties","severity":2,"message":"'observerOptions' of data found, but never used.","line":36,"column":4,"nodeType":"Identifier","messageId":"unused","endLine":36,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/base/Player.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/base/Select.vue","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'select' is undefined.","line":263,"column":1,"nodeType":"Block","endLine":263,"endColumn":1},{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'submit' is undefined.","line":299,"column":1,"nodeType":"Block","endLine":299,"endColumn":1}],"suppressedMessages":[{"ruleId":"vue/no-unused-properties","severity":2,"message":"'select' of method found, but never used.","line":371,"column":3,"nodeType":"Identifier","messageId":"unused","endLine":371,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"vue/no-unused-properties","severity":2,"message":"'reset' of method found, but never used.","line":387,"column":3,"nodeType":"Identifier","messageId":"unused","endLine":387,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<template>\n\t<div class=\"sd-select\" :class=\"rootClasses\">\n\t\t<label :id=\"listboxId\" class=\"sd-select__sr-only\">{{ selectLabel }}</label>\n\t\t<button\n\t\t\tref=\"sdSelectButton\"\n\t\t\tclass=\"sd-select__content\"\n\t\t\ttabindex=\"0\"\n\t\t\taria-autocomplete=\"list\"\n\t\t\taria-haspopup=\"listbox\"\n\t\t\t:aria-owns=\"listboxId\"\n\t\t\t:aria-labelledby=\"listboxId + ' ' + textboxId\"\n\t\t\t:aria-expanded=\"isExpanded\"\n\t\t\t:aria-activedescendant=\"activeItemId || null\"\n\t\t\t:aria-disabled=\"disabled || null\"\n\t\t\t@click=\"onClick\"\n\t\t\t@blur=\"onBlur\"\n\t\t\t@mousedown=\"isMouseDown = true\"\n\t\t\t@mouseup=\"isMouseDown = false\"\n\t\t\t@keydown.enter.prevent\n\t\t\t@keyup.enter=\"onEnter\"\n\t\t\t@keydown.up.prevent=\"onArrowUp\"\n\t\t\t@keydown.down.prevent=\"onArrowDown\"\n\t\t>\n\t\t\t<span\n\t\t\t\t:id=\"textboxId\"\n\t\t\t\tclass=\"sd-select__current-selection\"\n\t\t\t\trole=\"textbox\"\n\t\t\t\taria-readonly=\"true\"\n\t\t\t>\n\t\t\t\t<template v-if=\"isListItemSelected\">\n\t\t\t\t\t{{ prefix }}\n\t\t\t\t</template>\n\t\t\t\t{{ currentSelection }}\n\t\t\t</span>\n\t\t\t<cdx-icon\n\t\t\t\tclass=\"sd-select__handle\"\n\t\t\t\t:icon=\"cdxIconExpand\"\n\t\t\t\tsize=\"x-small\"\n\t\t\t>\n\t\t\t</cdx-icon>\n\t\t</button>\n\t\t<sd-select-menu\n\t\t\tv-if=\"showMenu\"\n\t\t\t:items=\"items\"\n\t\t\t:active-item-index=\"activeItemIndex\"\n\t\t\t:selected-item-index=\"selectedItemIndex\"\n\t\t\t:listbox-id=\"listboxId\"\n\t\t\t@select=\"onSelect\"\n\t\t\t@active-item-change=\"onActiveItemChange\"\n\t\t>\n\t\t</sd-select-menu>\n\t</div>\n</template>\n\n<script>\nconst SelectMenu = require( './SelectMenu.vue' );\nconst { CdxIcon } = require( '@wikimedia/codex' );\nconst { cdxIconExpand } = require( '../icons.json' );\n\n/**\n * @file Select\n *\n * Select component with SelectMenu dropdown.\n *\n * This component takes a set of items as a prop and passes those items to the\n * SelectMenu component for display. This component controls when the menu is\n * shown, shows the selected item if there is one, and emits the selected item\n * value to the parent.\n */\n// @vue/component\nmodule.exports = exports = {\n\tname: 'SdSelect',\n\n\tcomponents: {\n\t\tCdxIcon,\n\t\t'sd-select-menu': SelectMenu\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Name must be provided to ensure unique aria attributes. Should be a\n\t\t * valid as a CSS id.\n\t\t */\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\n\t\t/**\n\t\t * Displayed when no item is selected. If omitted, the first item will\n\t\t * be selected and displayed initially (or the selected item is one is\n\t\t * provided as a prop). MW Message objects are allowed.\n\t\t */\n\t\tlabel: {\n\t\t\ttype: [ String, Object ],\n\t\t\tdefault: null\n\t\t},\n\n\t\t/** Items should be an array of objects with \"label\" and \"value\" properties */\n\t\titems: {\n\t\t\ttype: [ Array ],\n\t\t\trequired: true\n\t\t},\n\n\t\t/**\n\t\t * If an item should be selected on component mount, the selected item\n\t\t * index can be included via this prop.\n\t\t */\n\t\tinitialSelectedItemIndex: {\n\t\t\ttype: Number,\n\t\t\tdefault: -1\n\t\t},\n\n\t\tdisabled: {\n\t\t\ttype: Boolean\n\t\t},\n\n\t\t/**\n\t\t * Prefix will be shown before the selected value, e.g. \"Sort by:\"\n\t\t * MW Message objects are allowed.\n\t\t */\n\t\tprefix: {\n\t\t\ttype: [ String, Object ],\n\t\t\tdefault: ''\n\t\t}\n\t},\n\n\temits: [\n\t\t'select'\n\t],\n\n\tdata: function () {\n\t\treturn {\n\t\t\tshowMenu: false,\n\t\t\tisMouseDown: false,\n\t\t\tactiveItemIndex: this.initialSelectedItemIndex,\n\t\t\tselectedItemIndex: this.initialSelectedItemIndex,\n\t\t\tcdxIconExpand\n\t\t};\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\tisListItemSelected: function () {\n\t\t\treturn this.selectedItemIndex > -1;\n\t\t},\n\n\t\t/**\n\t\t * This helps to figure out what text to show as label for accessibility\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tselectLabel: function () {\n\t\t\t// We show the label, if an item is selected,\n\t\t\t// because it would be label will removed from the button\n\t\t\tif ( this.isListItemSelected ) {\n\t\t\t\treturn this.label;\n\t\t\t} else if ( !this.label ) {\n\t\t\t\t// We show the prefix as the label,\n\t\t\t\t// if no label is passed and no item is selected\n\t\t\t\treturn this.prefix;\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\n\t\t/**\n\t\t * @return {string} The user-visible label for the current selection\n\t\t */\n\t\tcurrentSelection: function () {\n\t\t\tif ( this.selectedItemIndex === -1 ) {\n\t\t\t\treturn this.label;\n\t\t\t} else {\n\t\t\t\treturn this.items[ this.selectedItemIndex ].label;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @return {Object}\n\t\t */\n\t\trootClasses: function () {\n\t\t\treturn {\n\t\t\t\t'sd-select--open': this.showMenu,\n\t\t\t\t'sd-select--disabled': this.disabled,\n\t\t\t\t// This class can be used by other components (e.g. Tabs) to\n\t\t\t\t// style component differently depending on whether or not a\n\t\t\t\t// value has been selected.\n\t\t\t\t'sd-select--value-selected': this.selectedItemIndex > -1\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * For the aria-expanded attribute of the input, we need to use strings\n\t\t * instead of booleans so that aria-expanded will be set to \"false\" when\n\t\t * appropriate rather than the attribute being omitted, which is what\n\t\t * would happen if we used a boolean false.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tisExpanded: function () {\n\t\t\treturn this.showMenu ? 'true' : 'false';\n\t\t},\n\n\t\t/**\n\t\t * @return {string}\n\t\t */\n\t\ttextboxId: function () {\n\t\t\treturn this.name + '__textbox';\n\t\t},\n\n\t\t/**\n\t\t * @return {string}\n\t\t */\n\t\tlistboxId: function () {\n\t\t\treturn this.name + '__listbox';\n\t\t},\n\n\t\t/**\n\t\t * The ID of the element of the active menu item.\n\t\t *\n\t\t * @return {string|boolean}\n\t\t */\n\t\tactiveItemId: function () {\n\t\t\treturn this.activeItemIndex > -1 ?\n\t\t\t\tthis.listboxId + '-item-' + this.activeItemIndex :\n\t\t\t\tfalse;\n\t\t},\n\n\t\t/**\n\t\t * @return {number} Number of items\n\t\t */\n\t\titemsLength: function () {\n\t\t\treturn this.items.length;\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Toggle menu state on click.\n\t\t */\n\t\tonClick: function () {\n\t\t\tthis.toggleMenu( !this.showMenu );\n\t\t\tthis.restoreActiveItemIndex();\n\t\t\tif ( this.showMenu ) {\n\t\t\t\tthis.$refs.sdSelectButton.focus();\n\t\t\t}\n\t\t},\n\n\t\tonBlur: function () {\n\t\t\t/**\n\t\t\t * Check if the blur event isn't triggered by a click on the menu, because it breaks on Safari\n\t\t\t */\n\t\t\tif ( !this.isMouseDown ) {\n\t\t\t\tthis.toggleMenu( false );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Handle enter keypress.\n\t\t *\n\t\t * @fires select\n\t\t * @return {void}\n\t\t */\n\t\tonEnter: function () {\n\t\t\t// If the menu is hidden, show it.\n\t\t\tif ( !this.showMenu ) {\n\t\t\t\tthis.toggleMenu( true );\n\t\t\t\tthis.restoreActiveItemIndex();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the menu is showing but there's no active item, close the menu.\n\t\t\tif ( this.activeItemIndex < 0 ) {\n\t\t\t\tthis.toggleMenu( false );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise:\n\t\t\t// - Show the selected item in the content box\n\t\t\t// - Store the selected item index so it can be styled as such if\n\t\t\t//   the menu is reopened\n\t\t\t// - Emit the selected item to the parent\n\t\t\t// - Hide the menu\n\t\t\tconst value = this.items[ this.activeItemIndex ].value;\n\t\t\tthis.selectedItemIndex = this.activeItemIndex;\n\t\t\tthis.$emit( 'select', value );\n\t\t\tthis.toggleMenu( false );\n\t\t},\n\n\t\t/**\n\t\t * Handle item click.\n\t\t *\n\t\t * @param {number} index\n\t\t * @param {Object} item\n\t\t * @param {string} item.label Selected item's human-readable label\n\t\t * @param {string} item.value Selected item's value\n\t\t * @fires submit\n\t\t */\n\t\tonSelect: function ( index, item ) {\n\t\t\tthis.activeItemIndex = index;\n\t\t\tthis.selectedItemIndex = index;\n\t\t\tthis.$emit( 'select', item.value );\n\t\t\tthis.toggleMenu( false );\n\t\t},\n\n\t\t/**\n\t\t * Move to the next item.\n\t\t * If we're at the end go back to the first item.\n\t\t * if activeItem is -1 go to second item (this is because we pre-select the first item )\n\t\t */\n\t\tonArrowDown: function () {\n\t\t\tconst index = this.activeItemIndex,\n\t\t\t\tisNotLastItem = this.itemsLength > index + 1,\n\t\t\t\tisUnselectedMenu = index === -1;\n\n\t\t\tif ( isUnselectedMenu ) {\n\t\t\t\tthis.activeItemIndex = 1;\n\t\t\t} else if ( isNotLastItem ) {\n\t\t\t\tthis.activeItemIndex = index + 1;\n\t\t\t} else {\n\t\t\t\tthis.activeItemIndex = 0;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Move to the previous item. If we're at the beginning, go to\n\t\t * the last item.\n\t\t */\n\t\tonArrowUp: function () {\n\t\t\tconst index = this.activeItemIndex;\n\t\t\t// Do nothing if there is no active item yet.\n\t\t\tif ( index > -1 ) {\n\t\t\t\tthis.activeItemIndex = index === 0 ? this.itemsLength - 1 : index - 1;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Change the active item index based on mouseover or mouseleave.\n\t\t *\n\t\t * @param {number} index\n\t\t */\n\t\tonActiveItemChange: function ( index ) {\n\t\t\tthis.activeItemIndex = index;\n\t\t},\n\n\t\t/**\n\t\t * Set menu visibility.\n\t\t *\n\t\t * @param {boolean} show\n\t\t * @return {void}\n\t\t */\n\t\ttoggleMenu: function ( show ) {\n\t\t\tif ( this.disabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.showMenu = show;\n\t\t},\n\n\t\t/**\n\t\t * Programmatically set the selection if it has been changed by means\n\t\t * other than direct user interaction. Changes made in this way should\n\t\t * never emit \"select\" events.\n\t\t *\n\t\t * @param {string} selection value of the item to be selected\n\t\t * @throws error if specified value does not exist\n\t\t */\n\t\t// eslint-disable-next-line vue/no-unused-properties\n\t\tselect: function ( selection ) {\n\t\t\tconst selectionIndex = this.items.findIndex( ( item ) => item.value === selection );\n\n\t\t\tif ( selectionIndex && selectionIndex >= 0 ) {\n\t\t\t\tthis.selectedItemIndex = selectionIndex;\n\t\t\t\tthis.activeItemIndex = selectionIndex;\n\t\t\t} else {\n\t\t\t\tthrow new Error( 'specified value does not exist' );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the component to initial values for selection index and\n\t\t * user-visible label\n\t\t */\n\t\t// eslint-disable-next-line vue/no-unused-properties\n\t\treset: function () {\n\t\t\tthis.selectedItemIndex = this.initialSelectedItemIndex;\n\t\t\tthis.activeItemIndex = this.initialSelectedItemIndex;\n\t\t},\n\n\t\t/**\n\t\t * Restore the ActiveItemIndex to be equal to the selectedItemIndex\n\t\t * This is usually needed to make sure that when the dropdowns is open\n\t\t * it activate the selected Item\n\t\t */\n\t\trestoreActiveItemIndex: function () {\n\t\t\tthis.activeItemIndex = this.selectedItemIndex;\n\t\t}\n\t}\n};\n</script>\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/base/SelectMenu.vue","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'select' is undefined.","line":107,"column":1,"nodeType":"Block","endLine":107,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<template>\n\t<div class=\"sd-select-menu\">\n\t\t<ul\n\t\t\t:id=\"listboxId\"\n\t\t\tclass=\"sd-select-menu__list\"\n\t\t\trole=\"listbox\"\n\t\t\t:aria-labelledby=\"labelledBy\"\n\t\t>\n\t\t\t<li\n\t\t\t\tv-for=\"( item, index ) in formattedItems\"\n\t\t\t\t:id=\"listboxId + '-item-' + index\"\n\t\t\t\t:key=\"listboxId + '-item-' + index\"\n\t\t\t\tclass=\"sd-select-menu__list-item\"\n\t\t\t\t:class=\"getItemClasses( index )\"\n\t\t\t\trole=\"option\"\n\t\t\t\t:aria-selected=\"isActiveItem( index ) || null\"\n\t\t\t\t@mousedown=\"onMousedown( index, item )\"\n\t\t\t\t@mouseover=\"$emit( 'active-item-change', index )\"\n\t\t\t\t@mouseleave=\"$emit( 'active-item-change', -1 )\"\n\t\t\t>\n\t\t\t\t{{ item.label }}\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</template>\n\n<script>\n/**\n * @file SelectMenu\n *\n * List of items that informs the parent component when an item is clicked.\n * Receives the index of the active item from parent so a visual indication can\n * be applied via CSS here.\n *\n * On hover, active item index is emitted to the parent. On mouse leave, the\n * index is reset to -1 (i.e. no active item).\n */\n// @vue/component\nmodule.exports = exports = {\n\tname: 'SelectMenu',\n\n\tprops: {\n\t\t/**\n\t\t * Items can come in 3 formats:\n\t\t * 1. An array of strings\n\t\t *    Example: [ 'Apple', 'Banana', 'Orange' ]\n\t\t * 2. An array of objects with label and value keys\n\t\t *    Example: [ {label: 'Apple', value: 'a'}, {label: 'Banana', value: 'b'} ]\n\t\t * 3. An object of simple key:string pairs\n\t\t *    Example: {a: 'Apple', b: 'Banana', c: 'Carrot'}\n\t\t */\n\t\titems: {\n\t\t\ttype: [ Array, Object ],\n\t\t\tdefault: function () {\n\t\t\t\treturn [ ];\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Index of the item the user is (figuratively) focused on.\n\t\t */\n\t\tactiveItemIndex: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0\n\t\t},\n\n\t\t/**\n\t\t * Index of the currently selected item. This prop will only exist for\n\t\t * parent components like a select list, since the item list persists.\n\t\t */\n\t\tselectedItemIndex: {\n\t\t\ttype: Number,\n\t\t\tdefault: -1\n\t\t},\n\n\t\tlistboxId: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\n\t\tlabelledBy: {\n\t\t\ttype: String,\n\t\t\tdefault: null\n\t\t}\n\t},\n\n\temits: [\n\t\t'active-item-change',\n\t\t'select'\n\t],\n\n\tcomputed: {\n\t\t/**\n\t\t * @return {Array} Array of objects with label and value keys\n\t\t */\n\t\tformattedItems: function () {\n\t\t\treturn this.getFormattedItems( this.items );\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Handle mousedown.\n\t\t *\n\t\t * @param {number} index\n\t\t * @param {Object} item\n\t\t * @fires select\n\t\t */\n\t\tonMousedown: function ( index, item ) {\n\t\t\t// If this is the selected item, do nothing.\n\t\t\tif ( index === this.selectedItemIndex ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$emit( 'select', index, item );\n\t\t},\n\n\t\t/**\n\t\t * Determine if a list item should have the active class.\n\t\t *\n\t\t * @param {number} index\n\t\t * @return {boolean}\n\t\t */\n\t\tisActiveItem: function ( index ) {\n\t\t\t// If activeItemIndex is unset (-1), we select the first item of the list.\n\t\t\tconst activeItem = this.activeItemIndex === -1 ? 0 : this.activeItemIndex;\n\t\t\treturn index === activeItem;\n\t\t},\n\n\t\t/**\n\t\t * Determine if a list item should have the selected class.\n\t\t *\n\t\t * @param {number} index\n\t\t * @return {boolean}\n\t\t */\n\t\tisSelectedItem: function ( index ) {\n\t\t\t// If selectedItem is unset (-1), we select the first item of the list.\n\t\t\tconst itemToSelect = this.selectedItemIndex === -1 ? 0 : this.selectedItemIndex;\n\t\t\treturn index === itemToSelect;\n\t\t},\n\n\t\tgetItemClasses: function ( index ) {\n\t\t\treturn {\n\t\t\t\t'sd-select-menu__list-item--active': this.isActiveItem( index ),\n\t\t\t\t'sd-select-menu__list-item--selected': this.isSelectedItem( index )\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Format items prop.\n\t\t *\n\t\t * Items can be provided in a variety of formats. We need to process\n\t\t * them into a single format to be used in the template.\n\t\t *\n\t\t * @param {Array|Object} items\n\t\t * @return {Array} Array of objects with label and value keys\n\t\t */\n\t\tgetFormattedItems: function ( items ) {\n\t\t\tlet keys;\n\n\t\t\t// Handle array of strings.\n\t\t\tif (\n\t\t\t\tArray.isArray( items ) &&\n\t\t\t\titems.length &&\n\t\t\t\ttypeof items[ 0 ] === 'string'\n\t\t\t) {\n\t\t\t\treturn items.map( ( item ) => ( {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t} ) );\n\t\t\t}\n\n\t\t\t// Handle array of objects.\n\t\t\tif (\n\t\t\t\tArray.isArray( items ) &&\n\t\t\t\titems.length &&\n\t\t\t\ttypeof items[ 0 ] === 'object'\n\t\t\t) {\n\t\t\t\treturn items.map( ( item ) => {\n\t\t\t\t\tif ( 'label' in item && 'value' in item ) {\n\t\t\t\t\t\treturn item;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Handle object.\n\t\t\tif ( typeof items === 'object' ) {\n\t\t\t\tkeys = Object.keys( items );\n\t\t\t\treturn keys.map( ( key ) => ( {\n\t\t\t\t\tlabel: items[ key ],\n\t\t\t\t\tvalue: key\n\t\t\t\t} ) );\n\t\t\t}\n\n\t\t\tthrow new Error( 'Passed value format is not supported' );\n\t\t}\n\t}\n};\n</script>\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/base/mixins/observer.js","messages":[],"suppressedMessages":[{"ruleId":"compat/compat","severity":2,"message":"IntersectionObserver is not supported in Safari 11.1","line":71,"column":19,"nodeType":"NewExpression","endLine":74,"endColumn":4,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/results/AudioResult.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/results/ImageResult.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/results/OtherResult.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/results/PageResult.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/components/results/VideoResult.vue","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"vue/component-tags-order","replacedBy":["block-order"]},{"ruleId":"vue/no-invalid-model-keys","replacedBy":["valid-model-definition"]},{"ruleId":"vue/v-on-function-call","replacedBy":["v-on-handler-style"]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/constants.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/ensureArray.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/getLocationAgnosticMwApi.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/init.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":9,"column":1,"nodeType":"CallExpression","endLine":9,"endColumn":24,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/mixins/autocompleteLookupHandler.js","messages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 120. Maximum allowed is 110.","line":148,"column":1,"nodeType":"Program","messageId":"max","endLine":148,"endColumn":106},{"ruleId":"max-len","severity":1,"message":"This line has a length of 151. Maximum allowed is 110.","line":202,"column":1,"nodeType":"Program","messageId":"max","endLine":202,"endColumn":140}],"suppressedMessages":[{"ruleId":"prefer-regex-literals","severity":2,"message":"Use a regular expression literal instead of the 'RegExp' constructor.","line":63,"column":33,"nodeType":"NewExpression","messageId":"unexpectedRegExp","endLine":63,"endColumn":82,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"es-x/no-regexp-unicode-property-escapes","severity":2,"message":"ES2018 RegExp Unicode property escape sequences are forbidden.","line":63,"column":33,"nodeType":"NewExpression","messageId":"forbidden","endLine":63,"endColumn":82,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"prefer-regex-literals","severity":2,"message":"Use a regular expression literal instead of the 'RegExp' constructor.","line":106,"column":21,"nodeType":"NewExpression","messageId":"unexpectedRegExp","endLine":106,"endColumn":70,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"es-x/no-regexp-unicode-property-escapes","severity":2,"message":"ES2018 RegExp Unicode property escape sequences are forbidden.","line":106,"column":21,"nodeType":"NewExpression","messageId":"forbidden","endLine":106,"endColumn":70,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"const getLocationAgnosticMwApi = require( '../getLocationAgnosticMwApi.js' );\nconst apiUri = mw.config.get( 'sdmsExternalEntitySearchBaseUri' );\n\n/**\n * @file searchAutocomplete.js\n *\n * Mixin containing logic for search input autocomplete lookups. This component:\n * - Takes in current search input\n * - Makes wbsearchentities calls to get raw potential autocomplete results\n * - Filters out duplicate results\n * - Filters out results that don't include the final word being typed\n * - Trims the list of results to a predetermined limit\n * - Returns an array of these filtered and trimmed results\n */\nmodule.exports = exports = {\n\n\tdata: function () {\n\t\treturn {\n\t\t\tdebounceTimeoutId: null,\n\t\t\tlookupPromises: null,\n\t\t\tlookupResults: [],\n\t\t\tlookupResultsLimit: 7,\n\t\t\tlookupDisabled: !apiUri\n\t\t};\n\t},\n\n\tmethods: {\n\t\tclearLookupResults: function () {\n\t\t\tthis.lookupResults = [];\n\t\t},\n\n\t\t/**\n\t\t * Get lookup results for current text input.\n\t\t *\n\t\t * @param {string} input\n\t\t */\n\t\tgetDebouncedLookupResults: function ( input ) {\n\t\t\tclearTimeout( this.debounceTimeoutId );\n\t\t\tthis.debounceTimeoutId = setTimeout(\n\t\t\t\tthis.getLookupResults.bind( this, input ),\n\t\t\t\t250\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Get lookup results for current text input.\n\t\t *\n\t\t * @param {string} input\n\t\t */\n\t\tgetLookupResults: function ( input ) {\n\t\t\tconst trimmedInput = input.trim();\n\n\t\t\t// If this is an empty string or just whitespace, bail early.\n\t\t\tif ( trimmedInput.length === 0 ) {\n\t\t\t\tthis.lookupResults = [];\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet words, inputRegex;\n\t\t\ttry {\n\t\t\t\t// below could be a regex literal, but eslint fails to parse the `u` flag...\n\t\t\t\t// eslint-disable-next-line prefer-regex-literals, es-x/no-regexp-unicode-property-escapes\n\t\t\t\twords = trimmedInput.match( new RegExp( '[\\\\p{L}\\\\p{M}\\\\p{N}\\\\p{S}]+', 'gu' ) ) || [];\n\n\t\t\t\tinputRegex = new RegExp( '^' + new Array( words.length + 1 ).join( '[\\\\p{L}\\\\p{M}\\\\p{N}\\\\p{S}]+.*?' ), 'iu' );\n\t\t\t} catch ( e ) {\n\t\t\t\t// if browser doesn't support unicode regexes, fall back to simple\n\t\t\t\t// space/punctuation-based word detection\n\t\t\t\twords = trimmedInput.match( /[^\\s\\-.:;,\"]+/g ) || [];\n\n\t\t\t\tinputRegex = new RegExp( '^' + new Array( words.length + 1 ).join( '[^\\\\s\\\\-]+[\\\\s\\\\-.:;,\"]*' ), 'i' );\n\t\t\t}\n\n\t\t\tif ( words.length === 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.doLookupRequest( trimmedInput )\n\t\t\t\t.then( ( results ) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.lookupResults = this.getFilteredLookupResults( results, inputRegex );\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// If there is an error in attempting to match & process\n\t\t\t\t\t\t// autocomplete results, swallow it (don't spam the logs)\n\t\t\t\t\t\t// and reset lookup results to an empty array,\n\t\t\t\t\t\t// dismissing the pending state in the input element.\n\t\t\t\t\t\t// strings wrapped in quotes will trigger this behavior,\n\t\t\t\t\t\t// for example.\n\t\t\t\t\t\tthis.clearLookupResults();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Get unfiltered lookup results for text input.\n\t\t *\n\t\t * @param {string} input\n\t\t * @return {Array}\n\t\t */\n\t\tdoLookupRequest: function ( input ) {\n\t\t\tconst promises = [];\n\t\t\tlet lastWordRegex, lastWord;\n\n\t\t\ttry {\n\t\t\t\t// eslint-disable-next-line prefer-regex-literals, es-x/no-regexp-unicode-property-escapes\n\t\t\t\tlastWordRegex = new RegExp( '[\\\\p{L}\\\\p{M}\\\\p{N}\\\\p{S}]+$', 'u' );\n\t\t\t\tlastWord = input.match( lastWordRegex );\n\t\t\t} catch ( e ) {\n\t\t\t\tlastWordRegex = /[^\\s\\-.:;,]+$/;\n\t\t\t\tlastWord = input.match( lastWordRegex );\n\t\t\t}\n\n\t\t\t// Abort in-flight lookup promises to ensure the results provided\n\t\t\t// are for the most recent search input.\n\t\t\tif ( this.lookupPromises ) {\n\t\t\t\tthis.lookupPromises.abort();\n\t\t\t}\n\n\t\t\t// First, get results for the entire search input.\n\t\t\tconst inputPromise = this.getLookupRequestForTerm( input );\n\t\t\tpromises.push(\n\t\t\t\tinputPromise.then( ( response ) => response.search.map(\n\t\t\t\t\t// Get search term that matched (could be label or alias or...)\n\t\t\t\t\t( result ) => result.match.text\n\t\t\t\t) ).promise( { abort: inputPromise.abort } )\n\t\t\t);\n\n\t\t\t// Next, if there's more than 1 word, get results for just the last\n\t\t\t// word. Results for the entire search term will still be preferred\n\t\t\t// but this can help return more relevant results for some queries,\n\t\t\t// e.g. when the second word is more specific or meaningful than the\n\t\t\t// first.\n\t\t\tif ( lastWord && lastWord[ 0 ] && input !== lastWord[ 0 ] ) {\n\t\t\t\tconst lastWordPromise = this.getLookupRequestForTerm( lastWord[ 0 ] );\n\t\t\t\tpromises.push(\n\t\t\t\t\tlastWordPromise.then( ( response ) => response.search.map(\n\t\t\t\t\t\t// Add search term to rest of the input.\n\t\t\t\t\t\t( result ) => input.replace( lastWordRegex, result.match.text )\n\t\t\t\t\t) ).promise( { abort: lastWordPromise.abort } )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Combine the promises and add an abort function so we can cancel\n\t\t\t// this if the search input is updated (i.e. continued typing).\n\t\t\tthis.lookupPromises = $.when.apply( $, promises )\n\t\t\t\t.then( function () {\n\t\t\t\t\t// Combine the results of multiple API calls.\n\t\t\t\t\treturn [].slice.call( arguments ).reduce( ( combined, results ) => combined.concat( results ), [] );\n\t\t\t\t} ).promise( { abort: function () {\n\t\t\t\t\tpromises.forEach( ( promise ) => {\n\t\t\t\t\t\tpromise.abort();\n\t\t\t\t\t} );\n\t\t\t\t} } );\n\n\t\t\treturn this.lookupPromises;\n\t\t},\n\n\t\t/**\n\t\t * Set up a wbsearchentities API call for an input string.\n\t\t *\n\t\t * @param {string} term\n\t\t * @return {jQuery.promise}\n\t\t */\n\t\tgetLookupRequestForTerm: function ( term ) {\n\t\t\tconst api = getLocationAgnosticMwApi( apiUri, { anonymous: true } );\n\n\t\t\tif ( this.lookupDisabled ) {\n\t\t\t\treturn $.Deferred().resolve( { search: [] } ).promise( { abort: function () {} } );\n\t\t\t}\n\n\t\t\treturn api.get( {\n\t\t\t\taction: 'wbsearchentities',\n\t\t\t\tsearch: term,\n\t\t\t\tformat: 'json',\n\t\t\t\tlanguage: mw.config.get( 'wgUserLanguage' ),\n\t\t\t\tuselang: mw.config.get( 'wgUserLanguage' ),\n\t\t\t\ttype: 'item',\n\t\t\t\t// request more than our limit, so we can omit duplicates\n\t\t\t\tlimit: 50\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Filter results.\n\t\t *\n\t\t * @param {Array} lookupResults All lookup results\n\t\t * @param {string} inputRegex Regex for isolating last word\n\t\t * @return {Array}\n\t\t */\n\t\tgetFilteredLookupResults: function ( lookupResults, inputRegex ) {\n\t\t\treturn lookupResults\n\t\t\t\t.map( ( result ) => {\n\t\t\t\t\t// Only suggest completion for the word currently being typed.\n\t\t\t\t\tconst match = result.match( inputRegex );\n\t\t\t\t\treturn match.length > 0 ? match[ 0 ] : '';\n\t\t\t\t} )\n\t\t\t\t// Filter for unique values.\n\t\t\t\t// Could do a simple `indexOf` to see if a value already exists\n\t\t\t\t// but that'd be case-sensitive, and since case doesn't matter\n\t\t\t\t// for search terms, we shouldn't be showing the same term in\n\t\t\t\t// different capitalization if it's going to give the same results.\n\t\t\t\t.filter( ( value, i, array ) => !array.slice( 0, i ).some( ( previousValue ) => previousValue.toLowerCase() === value.toLowerCase() ) )\n\t\t\t\t// Return a limited number of results to show the user.\n\t\t\t\t.slice( 0, this.lookupResultsLimit );\n\t\t}\n\t}\n};\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/mixins/restoreHistoryHandler.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/mixins/searchResult.js","messages":[{"ruleId":"jsdoc/no-undefined-types","severity":1,"message":"The type 'show-details' is undefined.","line":99,"column":1,"nodeType":"Block","endLine":99,"endColumn":1}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @file searchResult.js\n *\n * Re-usable mixin for search result components. Individual Result components\n * that implement this mixin can decide for themselves how all this information\n * should be disiplayed.\n *\n * This mixin is deliberately \"dumb\" (contains no local state) so that search\n * result components which include it can be written as stateless functional\n * components if necessary.\n */\nmodule.exports = {\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\n\t\tcanonicalurl: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\n\t\timageinfo: {\n\t\t\ttype: Array,\n\t\t\trequired: false,\n\t\t\tdefault: function () {\n\t\t\t\treturn [ {} ];\n\t\t\t}\n\t\t},\n\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\trequired: true\n\t\t},\n\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: false\n\t\t},\n\n\t\tentityterms: {\n\t\t\ttype: Object,\n\t\t\trequired: false\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * @return {string|undefined}\n\t\t */\n\t\tthumbnail: function () {\n\t\t\tconst commonWidths = mw.config.get( 'sdmsThumbLimits' );\n\n\t\t\t// Do nothing if we have no imageinfo or thumbnail data.\n\t\t\tif ( !this.imageinfo || !( 'thumburl' in this.imageinfo[ 0 ] ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// find the closest (larger) width that is more common, it is (much) more\n\t\t\t// likely to have a thumbnail cached\n\t\t\tconst oldWidth = this.imageinfo[ 0 ].thumbwidth;\n\t\t\tlet newWidth = oldWidth;\n\t\t\tfor ( let i = 0; i < commonWidths.length; i++ ) {\n\t\t\t\tif ( commonWidths[ i ] >= oldWidth ) {\n\t\t\t\t\tnewWidth = commonWidths[ i ];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.imageinfo[ 0 ].thumburl.replace(\n\t\t\t\t'/' + oldWidth + 'px-',\n\t\t\t\t'/' + newWidth + 'px-'\n\t\t\t);\n\t\t},\n\n\t\tlabel: function () {\n\t\t\tif ( this.entityterms && this.entityterms.label ) {\n\t\t\t\treturn this.entityterms.label[ 0 ];\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Use mw.Title to get a normalized title without File, Category, etc. prepending\n\t\t *\n\t\t * @return {string|null}\n\t\t */\n\t\tdisplayName: function () {\n\t\t\tconst title = mw.Title.newFromText( this.title );\n\t\t\treturn title ? title.getMainText() : null;\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {Event} e\n\t\t * @fires show-details\n\t\t */\n\t\tshowDetails: function ( e ) {\n\t\t\t// Allow cmd + click/Windows + click to open file page in new tab.\n\t\t\tif ( e.metaKey === true ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\n\t\t\t// Stop the original event (most likely a \"click\") from\n\t\t\t// propagating in case other scripts (user scripts, etc)\n\t\t\t// are listening. See https://phabricator.wikimedia.org/T260203\n\t\t\t// for an example.\n\t\t\te.stopPropagation();\n\t\t\tthis.$emit( 'show-details', this.title );\n\t\t},\n\n\t\t/**\n\t\t * Programatically focus the result's link element (must be given a\n\t\t * \"ref\" in the component template)\n\t\t */\n\t\tfocus: function () {\n\t\t\tthis.$refs.link.focus();\n\t\t},\n\n\t\t/**\n\t\t * Format a file size into something readable.\n\t\t *\n\t\t * Adapted from Special:Upload code in MediaWiki core. This isn't a\n\t\t * perfect solution—for example, it will use a dot as the decimal\n\t\t * separator, which isn't how it's done in every language—but it gets\n\t\t * us most of the way there without reimplementing the lengthy and\n\t\t * complex Language::formatNum method.\n\t\t *\n\t\t * @param {number} size\n\t\t * @return {string} Size to the hundreths place plus units\n\t\t */\n\t\tformatSize: function ( size ) {\n\t\t\tconst sizeMsgs = [\n\t\t\t\t'size-bytes',\n\t\t\t\t'size-kilobytes',\n\t\t\t\t'size-megabytes',\n\t\t\t\t'size-gigabytes'\n\t\t\t];\n\n\t\t\twhile ( size >= 1024 && sizeMsgs.length > 1 ) {\n\t\t\t\tsize /= 1024;\n\t\t\t\tsizeMsgs.shift();\n\t\t\t}\n\n\t\t\tlet decimalPlace = 1;\n\t\t\t// To match what the Language::formatSize method is doing, we'll\n\t\t\t// only show decimal places for MB and larger.\n\t\t\tif ( sizeMsgs.length <= 2 ) {\n\t\t\t\tdecimalPlace = 100;\n\t\t\t}\n\n\t\t\t// Ensure that the rounded numerical digits fed to the size messages\n\t\t\t// are provided in the appropriate language; Bangle and Farsi must\n\t\t\t// not use Arabic numbers for example. https://phabricator.wikimedia.org/T274614\n\t\t\tconst sizeDigitsInLanguage = mw.language.convertNumber(\n\t\t\t\tMath.round( size * decimalPlace ) / decimalPlace\n\t\t\t);\n\n\t\t\t// The following messages are used here:\n\t\t\t// * size-bytes\n\t\t\t// * size-kilobytes\n\t\t\t// * size-megabytes\n\t\t\t// * size-gigabytes\n\t\t\treturn mw.msg( sizeMsgs[ 0 ], sizeDigitsInLanguage );\n\t\t},\n\n\t\t/**\n\t\t * Format a number per-language (e.g. adding separators).\n\t\t *\n\t\t * @param {number} number\n\t\t * @return {string}\n\t\t */\n\t\tformatNumber: function ( number ) {\n\t\t\treturn number.toLocaleString( mw.config.get( 'wgUserLanguage' ) );\n\t\t}\n\t}\n};\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/mixins/searchResultTimeBased.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/models/SearchFilter.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/plugins/eventLogger.js","messages":[],"suppressedMessages":[{"ruleId":"camelcase","severity":2,"message":"Identifier 'web_pageview_id' is not in camel case.","line":18,"column":11,"nodeType":"Identifier","messageId":"notCamelCase","endLine":18,"endColumn":26,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'language_code' is not in camel case.","line":19,"column":11,"nodeType":"Identifier","messageId":"notCamelCase","endLine":19,"endColumn":24,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'ui_mw_skin' is not in camel case.","line":20,"column":11,"nodeType":"Identifier","messageId":"notCamelCase","endLine":20,"endColumn":21,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/store/actions.js","messages":[{"ruleId":"no-jquery/no-done-fail","severity":1,"message":"Prefer .then to .done","line":225,"column":9,"nodeType":"CallExpression","endLine":281,"endColumn":5},{"ruleId":"max-len","severity":1,"message":"This line has a length of 118. Maximum allowed is 110.","line":226,"column":1,"nodeType":"Program","messageId":"max","endLine":226,"endColumn":113},{"ruleId":"no-jquery/no-done-fail","severity":1,"message":"Prefer .then to .done","line":318,"column":2,"nodeType":"CallExpression","endLine":327,"endColumn":5}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"const getLocationAgnosticMwApi = require( '../getLocationAgnosticMwApi.js' );\nconst externalSearchUri = mw.config.get( 'sdmsExternalSearchUri' );\nconst LIMIT = 40;\nconst searchOptions = require( '../data/searchOptions.json' );\nlet activeSearchRequest = null;\n\n/**\n * Generate additional (non-term) search keywords for filters.\n *\n * @param {string} mediaType\n * @param {Object} filterValues Filter values for this media type\n * @return {string}\n */\nconst getMediaFilters = function ( mediaType, filterValues ) {\n\tlet raw;\n\n\t// Start with a filter based on media type(s).\n\tswitch ( mediaType ) {\n\t\tcase 'image':\n\t\t\traw = 'filetype:bitmap|drawing';\n\t\t\tbreak;\n\n\t\tcase 'other':\n\t\t\traw = 'filetype:multimedia|office|archive|3d';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\traw = 'filetype:' + mediaType;\n\t\t\tbreak;\n\t}\n\n\tfunction addFilter( filter ) {\n\t\tconst value = filter in filterValues ? filterValues[ filter ] : null;\n\t\tif ( value && filter !== 'assessment' ) {\n\t\t\treturn ' ' + filter + ':' + value;\n\t\t}\n\n\t\treturn '';\n\t}\n\n\t// We need to filter out media result with 0 width and height\n\tif ( mediaType !== 'audio' ) {\n\t\traw += ' -fileres:0';\n\t}\n\n\traw += addFilter( 'filemime' );\n\traw += addFilter( 'fileres' );\n\traw += addFilter( 'assessment' );\n\traw += addFilter( 'haslicense' );\n\n\treturn raw;\n};\n\n/**\n * @param {string} suggestion suggested search term pre-pended with active search keywords\n * @param {string|undefined} filters ex: filetype:bitmap|drawing filemime:png\n * @param {string|undefined} assessment ex: haswbstatement:P6731=Q63348049\n * @return {string} string containing *only* the suggested new query, no keywords\n */\nconst extractSuggestedTerm = function ( suggestion, filters, assessment ) {\n\tlet filteredSuggestion = suggestion;\n\n\tif ( filters ) {\n\t\tfilteredSuggestion = filteredSuggestion.slice( filters.length ).trim();\n\t}\n\n\tif ( assessment ) {\n\t\tfilteredSuggestion = filteredSuggestion.replace( assessment, '' ).trim();\n\t}\n\n\treturn filteredSuggestion;\n};\n\n/**\n * Perform a search via API request. Should return a promise.\n * There are a few different ways that searches should behave.\n * This search will use the current term and type\n *\n * - If a totally new search term has been provided, blow away existing\n *   results for all tabs but only fetch new results for whatever tab is\n *   currently active\n * - If the user switches to a tab where results have not yet been loaded\n *   but the search term is still good, fetch results for the active tab\n *   and add them, but leave other results alone\n * - Certain actions like scrolling will load more results within a given\n *   queue if they are available. In this case the term and the media-type\n *   will not change, but the \"continue\" state will, and new results will\n *   be added to the current tab only\n *\n * @param {Object} context\n * @param {boolean} forceSearch\n * @return {jQuery.Deferred}\n */\nconst searchCurrentTermAndType = function ( context ) {\n\n\t// Don't make API requests if the search term is empty or is in error\n\tif ( context.getters.currentSearchTerm === '' ) {\n\t\treturn $.Deferred().resolve().promise( { abort: function () {} } );\n\t}\n\n\t// common request params for all requests\n\tconst params = {\n\t\t\tformat: 'json',\n\t\t\tuselang: mw.config.get( 'wgUserLanguage' ),\n\t\t\taction: 'query',\n\t\t\tgenerator: 'search',\n\t\t\tgsrsearch: context.getters.currentSearchTerm,\n\t\t\tgsrlimit: LIMIT,\n\t\t\tgsroffset: context.state.continue[ context.getters.currentType ] || 0,\n\t\t\tgsrinfo: 'totalhits|suggestion',\n\t\t\tgsrprop: 'size|wordcount|timestamp|snippet',\n\t\t\tprop: context.getters.currentType === 'page' ? 'info|categoryinfo' : 'info|imageinfo|entityterms',\n\t\t\tinprop: 'url'\n\t\t},\n\t\tnamespaceGroups = mw.config.get( 'sdmsNamespaceGroups' ),\n\t\tfilterValues = context.state.filterValues[ context.getters.currentType ] || {};\n\n\tlet filters, statement;\n\n\t// If a search request is already in-flight, abort it\n\tif ( activeSearchRequest && activeSearchRequest.abort ) {\n\t\tactiveSearchRequest.abort();\n\t}\n\n\tif ( context.state.continue[ context.getters.currentType ] === null ) {\n\t\t// prevent API requests when they're already known not to have results\n\t\t// (because there was no continuation offset)\n\t\tactiveSearchRequest = $.Deferred().resolve().promise( { abort: function () {} } );\n\t\treturn activeSearchRequest;\n\t}\n\n\tif ( context.getters.currentType === 'page' ) {\n\t\t// Page/category-specific params.\n\t\tconst namespaceFilter = filterValues.namespace;\n\n\t\t// Default to all namespaces.\n\t\tlet namespaces = Object.keys( namespaceGroups.all ).join( '|' );\n\n\t\tif ( namespaceFilter ) {\n\t\t\t// If the namespace filter value is one of the pre-defined\n\t\t\t// namespace groups, get the list of values from the namespace\n\t\t\t// group data. Otherwise, we're getting a custom list of\n\t\t\t// namespaces - use that.\n\t\t\tnamespaces = namespaceFilter in namespaceGroups ?\n\t\t\t\tObject.keys( namespaceGroups[ namespaceFilter ] ).join( '|' ) :\n\t\t\t\tnamespaceFilter;\n\t\t}\n\t\tparams.gsrnamespace = namespaces;\n\t} else {\n\t\t// Params used in all non-page/category searches.\n\t\t// 1. Special handling for assessment filter\n\t\tif ( filterValues.assessment ) {\n\t\t\tconst assessmentValue = filterValues.assessment;\n\t\t\tconst assessmentStatements = searchOptions[ context.getters.currentType ]\n\t\t\t\t.assessment.data.statementData;\n\n\t\t\tconst assessment = assessmentStatements.find( ( i ) => i.value === assessmentValue );\n\n\t\t\tif ( assessment ) {\n\t\t\t\tstatement = assessment.statement;\n\t\t\t\tparams.gsrsearch = statement + ' ' + params.gsrsearch;\n\t\t\t}\n\t\t}\n\t\t// 2. Handle remaining filters\n\t\tfilters = getMediaFilters( context.getters.currentType, filterValues );\n\t\tif ( filters ) {\n\t\t\tparams.gsrsearch = filters + ' ' + params.gsrsearch;\n\t\t}\n\t\tlet urlWidth;\n\t\tswitch ( context.getters.currentType ) {\n\t\t\tcase 'video':\n\t\t\t\turlWidth = 200;\n\t\t\t\tbreak;\n\n\t\t\tcase 'other':\n\t\t\t\t// generating thumbnails from many of these file types is very\n\t\t\t\t// expensive and slow, enough so that we're better off using a\n\t\t\t\t// larger (takes longer to transfer) pre-generated (but readily\n\t\t\t\t// available) size\n\t\t\t\turlWidth = Math.min.apply( Math, mw.config.get( 'sdmsThumbRenderMap' ) );\n\t\t\t\tbreak;\n\t\t}\n\n\t\tparams.gsrnamespace = 6; // NS_FILE\n\t\tparams.iiprop = 'url|size|mime';\n\t\tparams.iiurlheight = context.getters.currentType === 'image' ? 180 : undefined;\n\t\tparams.iiurlwidth = urlWidth;\n\t\tparams.wbetterms = 'label';\n\t}\n\n\t// if there are query params prefixed with mediasearch_, then also\n\t// pass them on to the API search request - this allows requesting\n\t// a specific search profile and carry it forward in JS navigation\n\tObject.keys( context.state.uriQuery )\n\t\t.filter( ( param ) => param.match( /^mediasearch_/ ) )\n\t\t.forEach( ( param ) => {\n\t\t\tparams[ param ] = context.state.uriQuery[ param ];\n\t\t} );\n\n\t// Add sort filter.\n\tif ( 'sort' in filterValues &&\n\t\tfilterValues.sort === 'recency' ) {\n\t\tparams.gsrsort = 'create_timestamp_desc';\n\t}\n\n\t// Reset current error state\n\tcontext.commit( 'setHasError', false );\n\n\t// Set the pending state for the given queue\n\tcontext.commit( 'setPending', {\n\t\ttype: context.getters.currentType,\n\t\tpending: true\n\t} );\n\n\tconst request = getLocationAgnosticMwApi( externalSearchUri, { anonymous: true } ).get( params );\n\n\trequest.promise( {\n\t\tabort: function () {\n\t\t\trequest.abort();\n\t\t}\n\t} );\n\n\tactiveSearchRequest = request;\n\n\treturn request.then( ( response ) => {\n\t\tconst existingTitles = context.state.results[ context.getters.currentType ].map( ( result ) => result.title );\n\n\t\tif ( response.query && response.query.pages ) {\n\t\t\tconst results = response.query.pages;\n\t\t\tconst titles = Object.keys( results );\n\n\t\t\t// Sort the results within each batch prior to committing them\n\t\t\t// to the store. Also, ensure that there is no duplication of\n\t\t\t// results between batches (see https://phabricator.wikimedia.org/T272923);\n\t\t\t// if a new result's title already exists in the set of\n\t\t\t// previously-loaded results, filter it out.\n\t\t\tconst sortedResults = titles\n\t\t\t\t.map( ( id ) => results[ id ] )\n\t\t\t\t.filter( ( result ) => !existingTitles.includes( result.title ) )\n\t\t\t\t.sort( ( a, b ) => a.index - b.index );\n\n\t\t\tsortedResults.forEach( ( result ) => {\n\t\t\t\tcontext.commit( 'addResult', { type: context.getters.currentType, item: result } );\n\t\t\t} );\n\n\t\t\tif ( response.query.searchinfo && response.query.searchinfo.totalhits ) {\n\t\t\t\tcontext.commit( 'setTotalHits', {\n\t\t\t\t\tmediaType: context.getters.currentType,\n\t\t\t\t\ttotalHits: response.query.searchinfo.totalhits\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tif ( response.query && response.query.searchinfo && response.query.searchinfo.suggestion ) {\n\t\t\tcontext.commit( 'setDidYouMean',\n\t\t\t\textractSuggestedTerm( response.query.searchinfo.suggestion, filters, statement )\n\t\t\t);\n\t\t}\n\n\t\tif ( response.warnings && response.warnings.search && response.warnings.search[ '*' ] ) {\n\t\t\tcontext.commit( 'setSearchWarnings', response.warnings.search[ '*' ] );\n\t\t}\n\n\t\t// Set whether or not the query can be continued\n\t\tif ( response.continue && response.continue.gsroffset ) {\n\t\t\t// Store the \"continue\" property of the request so we can pick up where we left off\n\t\t\tcontext.commit( 'setContinue', {\n\t\t\t\ttype: context.getters.currentType,\n\t\t\t\tcontinue: response.continue.gsroffset\n\t\t\t} );\n\t\t} else {\n\t\t\tcontext.commit( 'setContinue', {\n\t\t\t\ttype: context.getters.currentType,\n\t\t\t\tcontinue: null\n\t\t\t} );\n\t\t}\n\t} ).done( () => {\n\t\t// Set pending back to false when request is complete\n\t\tactiveSearchRequest = null;\n\t\tcontext.commit( 'setPending', { type: context.getters.currentType, pending: false } );\n\t} ).catch( ( errorCode, details ) => {\n\t\t// Set pending to false and clear the stashed request\n\t\tlet pendingType;\n\t\tactiveSearchRequest = null;\n\n\t\tObject.keys( context.state.pending ).forEach( ( type ) => {\n\t\t\tif ( context.state.pending[ type ] === true && context.getters.currentType !== type ) {\n\t\t\t\tpendingType = type;\n\t\t\t}\n\t\t} );\n\n\t\tif ( pendingType ) {\n\t\t\tcontext.commit( 'setPending', { type: pendingType, pending: false } );\n\t\t}\n\n\t\t// No other error handling is required if the request has been\n\t\t// aborted by the client\n\t\tif ( details && details.textStatus === 'abort' ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// In the case of a real failure, throw the error back to the App\n\t\t// component to display a suitable message to the user\n\t\tcontext.commit( 'setHasError', true );\n\t\tthrow details;\n\t} );\n};\n\n// We record timing here in the store, instead of in App.vue like other use\n// cases, so we can ensure we are only timing full search requests that make it\n// to the backend. Sadly this still times some things that end up\n// short-circuiting and skipping the backend, but refactoring the 200 line\n// function above is left as an excercise for the future.\nconst timedPromise = function ( metricName, fn, ...args ) {\n\tconst start = performance.now();\n\tconst promise = fn.apply( this, args );\n\n\tpromise.done( () => {\n\t\tconst took = performance.now() - start;\n\t\t// half-hearted attempt to skip requests that didn't query the backend, we know\n\t\t// that anything that touches the mw api and gets a non-cached response takes\n\t\t// at least 10ms. Optimistically the short-circuit attempts above should happen\n\t\t// in a single tick.\n\t\tif ( took >= 10 ) {\n\t\t\tmw.track( 'timing.MediaSearch' + metricName, took );\n\t\t}\n\t} );\n\n\treturn promise;\n};\n\nmodule.exports = {\n\n\t/**\n\t * Force a new search overriding any current pending request and\n\t * resetting current autoloadcounter for the searched term\n\t *\n\t * @param {Object} context\n\t * @return {jQuery.Deferred}\n\t */\n\tperformNewSearch: function ( context ) {\n\t\treturn timedPromise( 'NewSearch', searchCurrentTermAndType, context );\n\t},\n\t/**\n\t * Continue to search the current term and type. This will just trigger a search\n\t * if there are more values available and if the autoloadcounter is not 0.\n\t *\n\t * @param {Object} context\n\t * @param {boolean} resetCounter\n\t * @return {jQuery.Deferred}\n\t */\n\tsearchMore: function ( context, resetCounter ) {\n\n\t\tif ( resetCounter ) {\n\t\t\tcontext.commit( 'resetAutoLoadForMediaType', context.getters.currentType );\n\t\t}\n\n\t\tif (\n\t\t\t!context.getters.checkForMore[ context.getters.currentType ] ||\n\t\t\tcontext.state.autoloadCounter[ context.getters.currentType ] === 0 ||\n\t\t\tcontext.state.hasError ) {\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t}\n\n\t\tif ( !context.state.pending[ context.getters.currentType ] ) {\n\t\t\t// If more results are available, and if another request is not\n\t\t\t// already pending, then launch a search request\n\t\t\treturn timedPromise( 'SearchMore', searchCurrentTermAndType, context )\n\t\t\t\t.then( function ( decreaseAutoload ) {\n\t\t\t\t\tif ( !decreaseAutoload ) {\n\t\t\t\t\t\tthis.commit( 'decreaseAutoloadCounterForMediaType', this.getters.currentType );\n\t\t\t\t\t}\n\t\t\t\t}.bind( this, resetCounter ) );\n\n\t\t} else {\n\t\t\t// If more results are available but another request is\n\t\t\t// currently in-flight, attempt to make the request again\n\t\t\t// after some time has passed\n\t\t\tconst deferred = $.Deferred();\n\t\t\twindow.setTimeout(\n\t\t\t\t() => {\n\t\t\t\t\tcontext.dispatch( 'searchMore' )\n\t\t\t\t\t\t.then( deferred.resolve, deferred.reject );\n\t\t\t\t},\n\t\t\t\t2000\n\t\t\t);\n\t\t\treturn deferred.promise();\n\t\t}\n\t},\n\n\t/**\n\t * Fetch expanded details for a given search result by title\n\t *\n\t * @param {Object} context\n\t * @param {Object} options\n\t * @param {string} options.mediaType\n\t * @param {string} options.title\n\t * @return {jQuery.Deferred}\n\t */\n\tfetchDetails: function ( context, options ) {\n\t\tconst userLanguage = mw.config.get( 'wgUserLanguage' ),\n\t\t\tparams = {\n\t\t\t\tformat: 'json',\n\t\t\t\tuselang: userLanguage,\n\t\t\t\taction: 'query',\n\t\t\t\tinprop: 'url',\n\t\t\t\ttitles: options.title,\n\t\t\t\tiiextmetadatalanguage: userLanguage\n\t\t\t};\n\n\t\t// Set special params for audio/video files\n\t\tif ( options.mediaType === 'video' || options.mediaType === 'audio' ) {\n\t\t\tparams.prop = 'info|videoinfo|entityterms';\n\t\t\tparams.viprop = 'url|size|mime|extmetadata|derivatives';\n\t\t\tparams.viurlwidth = 640;\n\t\t} else {\n\t\t\tparams.prop = 'info|imageinfo|entityterms';\n\t\t\tparams.iiprop = 'url|size|mime|extmetadata';\n\t\t\tparams.iiurlheight = options.mediaType === 'image' ? 180 : undefined;\n\t\t}\n\n\t\treturn getLocationAgnosticMwApi( externalSearchUri, { anonymous: true } ).get( params );\n\t},\n\n\t/**\n\t * Handle search term clear.\n\t *\n\t * @param {Object} context\n\t */\n\tclear: function ( context ) {\n\t\tif ( activeSearchRequest ) {\n\t\t\tactiveSearchRequest.abort();\n\t\t\tactiveSearchRequest = null;\n\t\t}\n\n\t\tcontext.commit( 'clearFilterQueryParams' );\n\t\tcontext.commit( 'clearTerm' );\n\t\tcontext.commit( 'resetFilters' );\n\t\tcontext.commit( 'resetResults' );\n\t\tcontext.commit( 'clearDidYouMean' );\n\t\tcontext.commit( 'clearSearchWarnings' );\n\t\tcontext.dispatch( 'pushQueryToHistoryState' );\n\t},\n\n\t/**\n\t * @param {Object} context\n\t */\n\tready: function ( context ) {\n\t\tcontext.commit( 'setInitialized' );\n\t},\n\n\t/**\n\t * Update \"Switch to Special:Search\" link target\n\t *\n\t * @param {Object} context\n\t */\n\tupdateSpecialSearch: function ( context ) {\n\t\tconst specialSearch = document.getElementById( 'mediasearch-switch-special-search' );\n\t\tif ( !specialSearch ) {\n\t\t\treturn;\n\t\t}\n\t\tconst url = new URL( specialSearch.href );\n\t\turl.searchParams.set( 'search', context.state.uriQuery.search );\n\t\tspecialSearch.href = url.toString();\n\t},\n\t/**\n\t * Push the current value of url.query to the browser's session history stack\n\t *\n\t * @param {Object} context\n\t */\n\tpushQueryToHistoryState: function ( context ) {\n\t\t// update URL query object with the one currently available within the store\n\t\t// In Vue 3, context.state.uriQuery is a Proxy, and passing it to replaceState()\n\t\t// causes an error saying it can't be cloned. Work around this by cloning the uriQuery\n\t\t// object ourselves, using JSON.parse( JSON.stringify() ) to convert the Proxy to Object.\n\t\tconst query = JSON.parse( JSON.stringify( context.state.uriQuery ) );\n\t\tconst queryString = '?' + new URLSearchParams( query ).toString();\n\t\twindow.history.pushState( query, null, queryString );\n\t\tcontext.dispatch( 'updateSpecialSearch' );\n\t},\n\t/**\n\t * Replace the current value of url.query to the browser's session history stack\n\t *\n\t * @param {Object} context\n\t */\n\treplaceQueryToHistoryState: function ( context ) {\n\t\t// update URL query object with the one currently available within the store\n\t\t// In Vue 3, context.state.uriQuery is a Proxy, and passing it to replaceState()\n\t\t// causes an error saying it can't be cloned. Work around this by cloning the uriQuery\n\t\t// object ourselves, using JSON.parse( JSON.stringify() ) to convert the Proxy to Object.\n\t\tconst query = JSON.parse( JSON.stringify( context.state.uriQuery ) );\n\t\tconst queryString = '?' + new URLSearchParams( query ).toString();\n\t\twindow.history.replaceState( query, null, queryString );\n\t\tcontext.dispatch( 'updateSpecialSearch' );\n\t},\n\t/**\n\t * Update the current Type value and reset all filters\n\t *\n\t * @param {Object} context\n\t * @param {string} currentType\n\t */\n\tupdateCurrentType: function ( context, currentType ) {\n\t\tif ( context.getters.currentType === currentType ) {\n\t\t\treturn;\n\t\t}\n\t\tcontext.commit( 'clearFilterQueryParams' );\n\t\tcontext.commit( 'setCurrentType', currentType );\n\t\tcontext.commit( 'updateFilterQueryParams', context.state.filterValues[ currentType ] );\n\t},\n\t/**\n\t * Clean query paramethers and update the history state\n\t *\n\t * @param {Object} context\n\t */\n\tclearQueryParams: function ( context ) {\n\t\tcontext.commit( 'clearTerm' );\n\t\tcontext.commit( 'clearFilterQueryParams' );\n\t\tcontext.dispatch( 'pushQueryToHistoryState' );\n\t},\n\t/**\n\t * Align mw active type with query parameter one. This is to make sure we\n\t * align the UI with the value received from the PHP side\n\t *\n\t * @param {Object} context\n\t */\n\tsyncActiveTypeAndQueryType: function ( context ) {\n\t\tconst activeType = mw.config.get( 'sdmsInitialSearchResults' ).activeType;\n\n\t\tif ( context.state.uriQuery.type !== activeType ) {\n\t\t\tcontext.commit( 'setCurrentType', activeType );\n\t\t}\n\t}\n};\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/store/getters.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/store/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/store/mutations.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/store/state.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"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":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/DidYouMean.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/EmptyState.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/EndOfResults.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/NamespaceFilterDialog.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/NoResults.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/QuickView.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/SearchFilters.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/SearchResults.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/SearchWarnings.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/Spinner.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/UserNotice.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/app.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/base/autocompleteSearchInput.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/base/copyTextLayout.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/base/dialog.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/base/image.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/base/player.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/base/select.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/base/selectMenu.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/results/ImageResult.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/results/audioResult.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/results/otherResult.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/results/pageResult.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/components/results/videoResult.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/ignore/ensureArray.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/mixins/autocompleteLookupHandler.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/mixins/observer.test.js","messages":[],"suppressedMessages":[{"ruleId":"compat/compat","severity":2,"message":"IntersectionObserver is not supported in Safari 11.1","line":27,"column":12,"nodeType":"MemberExpression","endLine":27,"endColumn":39,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/mixins/restoreHistoryHandler.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/mocks/EventListener.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/mocks/ExecCommand.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/mocks/IntersectionObserver.js","messages":[],"suppressedMessages":[{"ruleId":"compat/compat","severity":2,"message":"IntersectionObserver is not supported in Safari 11.1","line":10,"column":1,"nodeType":"MemberExpression","endLine":10,"endColumn":28,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/mocks/Performance.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/mocks/history.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/store/actions.test.js","messages":[],"suppressedMessages":[{"ruleId":"camelcase","severity":2,"message":"Identifier 'mediasearch_1' is not in camel case.","line":184,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":184,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'mediasearch_1' is not in camel case.","line":191,"column":6,"nodeType":"Identifier","messageId":"notCamelCase","endLine":191,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/store/getters.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/store/mutations.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]},{"filePath":"/src/repo/tests/jest/store/store.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]}]}]

--- end ---
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@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 EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@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 osenv@0.1.5: This package is no longer supported.
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
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 1117 packages, and audited 1118 packages in 12s

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

6 vulnerabilities (2 high, 4 critical)

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

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

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS tests/jest/store/mutations.test.js
PASS tests/jest/store/actions.test.js
  ● Console

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

PASS tests/jest/components/QuickView.test.js
  ● Console

    console.warn
      [Vue warn]: Property "rootClasses" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      592 | 			}
      593 | 		},
    > 594 |
          | ^
      595 | 		mimeType: function () {
      596 | 			return this.imageinfo[ 0 ].mime;
      597 | 		},

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.rootClasses (resources/components/QuickView.vue:594:64)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "isImage" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      600 | 			if ( this.isVideo || this.isAudio ) {
      601 | 				return {
    > 602 | 					autoplay: false,
          | 					                ^
      603 | 					controls: true,
      604 | 					fluid: true,
      605 | 					poster: this.videoinfo[ 0 ].thumburl,

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.isImage (resources/components/QuickView.vue:602:64)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "isVideo" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      616 | 		 * Emit a close event. If the user triggered this from the keyboard instead
      617 | 		 * of by clicking, add an additional parameter so that the parent knows to
    > 618 | 		 * restore focus to the originating search result.
          | 		                                                  ^
      619 | 		 *
      620 | 		 * @param {Event} event
      621 | 		 * @fires close

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.isVideo (resources/components/QuickView.vue:618:88)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "isAudio" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      616 | 		 * Emit a close event. If the user triggered this from the keyboard instead
      617 | 		 * of by clicking, add an additional parameter so that the parent knows to
    > 618 | 		 * restore focus to the originating search result.
          | 		                                                  ^
      619 | 		 *
      620 | 		 * @param {Event} event
      621 | 		 * @fires close

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.isAudio (resources/components/QuickView.vue:618:104)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "displayName" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      654 |
      655 | 		/**
    > 656 | 		 * Set the height of the div wrapping the thumbnail image to the display
          | 		                                                                        ^
      657 | 		 * height of that image to avoid a layout jump when the image loads.
      658 | 		 */
      659 | 		getThumbnailWrapperStyle: function () {

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.displayName (resources/components/QuickView.vue:656:503)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "description" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      658 | 		 */
      659 | 		getThumbnailWrapperStyle: function () {
    > 660 | 			if ( !this.imageinfo ) {
          | 			                        ^
      661 | 				return;
      662 | 			}
      663 |

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.description (resources/components/QuickView.vue:660:139)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "artist" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      660 | 			if ( !this.imageinfo ) {
      661 | 				return;
    > 662 | 			}
          | 			 ^
      663 |
      664 | 			const imgWidth = this.imageinfo[ 0 ].width;
      665 | 			const imgHeight = this.imageinfo[ 0 ].height;

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.artist (resources/components/QuickView.vue:662:94)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "licenseText" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      664 | 			const imgWidth = this.imageinfo[ 0 ].width;
      665 | 			const imgHeight = this.imageinfo[ 0 ].height;
    > 666 | 			const elWidth = this.$refs.header.offsetWidth;
          | 			                                              ^
      667 | 			let height;
      668 | 			if ( imgWidth >= imgHeight ) {
      669 | 				// For landscape-oriented images, calculate the height

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.licenseText (resources/components/QuickView.vue:666:234)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "displayName" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      678 | 				// A portrait-oriented image could be limited by several
      679 | 				// constraints: the natural image height (e.g. an original file
    > 680 | 				// that's only 200px tall), the CSS-enforced max-height of the
          | 				                                                              ^
      681 | 				// image (60vh), or the max-width of the container.
      682 | 				height = Math.min(
      683 | 					imgHeight,

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.displayName (resources/components/QuickView.vue:680:197)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "displayNameWithoutExtension" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      684 | 					window.innerHeight * 0.6,
      685 | 					( imgHeight * elWidth ) / imgWidth
    > 686 | 				);
          | 				  ^
      687 | 			}
      688 |
      689 | 			// For very short images, we need to add some vertical padding so

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.displayNameWithoutExtension (resources/components/QuickView.vue:686:106)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "creationDate" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      691 | 			// positioned controls.
      692 | 			if ( height < 100 ) {
    > 693 | 				height += 30;
          | 				             ^
      694 | 				// We'll use this to add a class to the image to add 15px of
      695 | 				// top and bottom padding.
      696 | 				this.isExtraSmall = true;

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.creationDate (resources/components/QuickView.vue:693:240)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "resolution" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      695 | 				// top and bottom padding.
      696 | 				this.isExtraSmall = true;
    > 697 | 			}
          | 			 ^
      698 |
      699 | 			this.thumbnailWrapperStyle = {
      700 | 				height: height + 'px',

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.resolution (resources/components/QuickView.vue:697:94)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "mimeType" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      697 | 			}
      698 |
    > 699 | 			this.thumbnailWrapperStyle = {
          | 			                              ^
      700 | 				height: height + 'px',
      701 | 				width: '100%'
      702 | 			};

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.mimeType (resources/components/QuickView.vue:699:265)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

PASS tests/jest/mixins/autocompleteLookupHandler.test.js
PASS tests/jest/components/SearchResults.test.js
PASS tests/jest/components/base/autocompleteSearchInput.test.js
  ● Console

    console.warn
      [Vue warn]: Invalid prop: type check failed for prop "modelValue". Expected String | Number, got Object  
        at <CdxTextInput id="tab__input" ref="input" modelValue= { value: 'active' }  ... > 
        at <SdAutocompleteSearchInput name="tab" label="actions" lookupResults= [ { value: 'active' } ]  ... > 
        at <VTUROOT>

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4363:7)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at updateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4144:5)
      at updateComponentPreRender (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5404:5)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5326:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at updateComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5201:18)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5136:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at patchBlockChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5008:7)
      at patchElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4926:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4785:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5349:9)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at ReactiveEffect.runIfDirty (node_modules/@vue/reactivity/dist/reactivity.cjs.js:267:12)
      at callWithErrorHandling (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:200:33)
      at flushJobs (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:405:9)

PASS tests/jest/mixins/restoreHistoryHandler.test.js
PASS tests/jest/components/NamespaceFilterDialog.test.js
  ● Console

    console.warn
      [Vue warn]: CdxRadio: Inputs must have an associated label. Provide one of the following:
       - A label via the appropriate slot
       - An `aria-label` attribute set to the label text
       - An `aria-labelledby` attribute set to the ID of the label element 
        at <CdxRadio key="test" modelValue=undefined onUpdate:modelValue=fn  ... > 
        at <Transition name="sd-scale" appear="" > 
        at <SdDialog class="sdms-namespace-dialog" active=true title="mediasearch-filter-namespace-dialog-title"  ... > 
        at <NamespaceFilterDialog active=true items= [ { value: 'test' } ] namespaces= {}  ... > 
        at <VTUROOT>

      20 | 	describe( 'when items are set', () => {
      21 | 		it( 'render a cdx-radio', () => {
    > 22 | 			const wrapper = mount( Component, {
         | 			                ^
      23 | 				props: {
      24 | 					active: true,
      25 | 					items: [ { value: 'test' } ],

      at Object.warn$1 [as warn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Je (node_modules/@wikimedia/codex/dist/codex.cjs:9:3185)
      at et (node_modules/@wikimedia/codex/dist/codex.cjs:9:16492)
      at setup (node_modules/@wikimedia/codex/dist/codex.cjs:9:117502)
      at callWithErrorHandling (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:200:19)
      at setupStatefulComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7848:25)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7809:36)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at processFragment (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5068:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4628:9)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at processFragment (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5068:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4628:9)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at Object.<anonymous> (tests/jest/components/NamespaceFilterDialog.test.js:22:20)

PASS tests/jest/components/base/select.test.js
PASS tests/jest/components/app.test.js (5.129 s)
  ● Console

    console.error
      [vuex] unknown mutation type: clearSearchWarnings

      189 | 	] ), {
      190 | 		/**
    > 191 | 		 * Keep UI state, URL, and history in sync as the user changes tabs
          | 		         ^
      192 | 		 * Filter and sort preferences are tab-specific, so they need to be
      193 | 		 * re-created every time the current tab changes.
      194 | 		 *

      at Store.commit (node_modules/vuex/dist/vuex.cjs.js:978:15)
      at Store.boundCommit [as commit] (node_modules/vuex/dist/vuex.cjs.js:919:19)
      at Proxy.mappedMutation (node_modules/vuex/dist/vuex.cjs.js:1214:18)
      at Proxy.clearSearchWarnings (resources/components/App.vue:191:12)
      at Object.<anonymous> (tests/jest/components/app.test.js:353:15)

    console.error
      [vuex] unknown mutation type: clearSearchWarnings

      189 | 	] ), {
      190 | 		/**
    > 191 | 		 * Keep UI state, URL, and history in sync as the user changes tabs
          | 		         ^
      192 | 		 * Filter and sort preferences are tab-specific, so they need to be
      193 | 		 * re-created every time the current tab changes.
      194 | 		 *

      at Store.commit (node_modules/vuex/dist/vuex.cjs.js:978:15)
      at Store.boundCommit [as commit] (node_modules/vuex/dist/vuex.cjs.js:919:19)
      at Proxy.mappedMutation (node_modules/vuex/dist/vuex.cjs.js:1214:18)
      at Proxy.clearSearchWarnings (resources/components/App.vue:191:12)
      at Object.<anonymous> (tests/jest/components/app.test.js:353:15)

    console.error
      [vuex] unknown mutation type: clearSearchWarnings

      189 | 	] ), {
      190 | 		/**
    > 191 | 		 * Keep UI state, URL, and history in sync as the user changes tabs
          | 		         ^
      192 | 		 * Filter and sort preferences are tab-specific, so they need to be
      193 | 		 * re-created every time the current tab changes.
      194 | 		 *

      at Store.commit (node_modules/vuex/dist/vuex.cjs.js:978:15)
      at Store.boundCommit [as commit] (node_modules/vuex/dist/vuex.cjs.js:919:19)
      at Proxy.mappedMutation (node_modules/vuex/dist/vuex.cjs.js:1214:18)
      at Proxy.clearSearchWarnings (resources/components/App.vue:191:12)
      at Object.<anonymous> (tests/jest/components/app.test.js:353:15)

    console.error
      [vuex] unknown mutation type: clearSearchWarnings

      189 | 	] ), {
      190 | 		/**
    > 191 | 		 * Keep UI state, URL, and history in sync as the user changes tabs
          | 		         ^
      192 | 		 * Filter and sort preferences are tab-specific, so they need to be
      193 | 		 * re-created every time the current tab changes.
      194 | 		 *

      at Store.commit (node_modules/vuex/dist/vuex.cjs.js:978:15)
      at Store.boundCommit [as commit] (node_modules/vuex/dist/vuex.cjs.js:919:19)
      at Proxy.mappedMutation (node_modules/vuex/dist/vuex.cjs.js:1214:18)
      at Proxy.clearSearchWarnings (resources/components/App.vue:191:12)
      at Object.<anonymous> (tests/jest/components/app.test.js:353:15)

PASS tests/jest/store/store.test.js
PASS tests/jest/components/SearchFilters.test.js
PASS tests/jest/components/results/ImageResult.test.js
PASS tests/jest/components/results/pageResult.test.js
PASS tests/jest/components/results/otherResult.test.js
PASS tests/jest/mixins/observer.test.js
PASS tests/jest/components/results/videoResult.test.js
PASS tests/jest/components/base/dialog.test.js
PASS tests/jest/components/base/selectMenu.test.js
PASS tests/jest/components/results/audioResult.test.js
PASS tests/jest/store/getters.test.js
PASS tests/jest/components/UserNotice.test.js
  ● Console

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      13 | 	describe( 'renders ', () => {
      14 | 		it( 'the parent component', () => {
    > 15 | 			const wrapper = shallowMount( Component );
         | 			                ^
      16 | 			const element = wrapper.find( '.sdms-user-notice__message' );
      17 | 			expect( element.exists() ).toBe( true );
      18 | 		} );

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:15:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      13 | 	describe( 'renders ', () => {
      14 | 		it( 'the parent component', () => {
    > 15 | 			const wrapper = shallowMount( Component );
         | 			                ^
      16 | 			const element = wrapper.find( '.sdms-user-notice__message' );
      17 | 			expect( element.exists() ).toBe( true );
      18 | 		} );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:15:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      19 |
      20 | 		it( 'a button component', () => {
    > 21 | 			const wrapper = mount( Component );
         | 			                ^
      22 | 			const innerComponent = wrapper.findComponent( CdxButton );
      23 | 			expect( innerComponent.exists() ).toBe( true );
      24 | 		} );

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:21:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      19 |
      20 | 		it( 'a button component', () => {
    > 21 | 			const wrapper = mount( Component );
         | 			                ^
      22 | 			const innerComponent = wrapper.findComponent( CdxButton );
      23 | 			expect( innerComponent.exists() ).toBe( true );
      24 | 		} );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:21:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      25 |
      26 | 		it( 'a message component', () => {
    > 27 | 			const wrapper = shallowMount( Component );
         | 			                ^
      28 | 			const innerComponent = wrapper.findComponent( CdxMessage );
      29 | 			expect( innerComponent.exists() ).toBe( true );
      30 | 		} );

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:27:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      25 |
      26 | 		it( 'a message component', () => {
    > 27 | 			const wrapper = shallowMount( Component );
         | 			                ^
      28 | 			const innerComponent = wrapper.findComponent( CdxMessage );
      29 | 			expect( innerComponent.exists() ).toBe( true );
      30 | 		} );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:27:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      58 |
      59 | 		it( 'when notice dismissed', ( done ) => {
    > 60 | 			const wrapper = shallowMount( Component );
         | 			                ^
      61 | 			wrapper.setData( { dismissed: true } );
      62 | 			wrapper.vm.$nextTick( () => {
      63 | 				const element = wrapper.find( '.sdms-user-notice__message' );

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:60:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      58 |
      59 | 		it( 'when notice dismissed', ( done ) => {
    > 60 | 			const wrapper = shallowMount( Component );
         | 			                ^
      61 | 			wrapper.setData( { dismissed: true } );
      62 | 			wrapper.vm.$nextTick( () => {
      63 | 				const element = wrapper.find( '.sdms-user-notice__message' );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:60:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      70 | 	describe( 'on dismiss button click', () => {
      71 | 		it( 'sends saveOption to the api', () => {
    > 72 | 			const wrapper = shallowMount( Component );
         | 			                ^
      73 | 			wrapper.vm.dismiss();
      74 | 			expect( global.mw.Api.prototype.saveOption ).toHaveBeenCalled();
      75 | 			expect( global.mw.Api.prototype.saveOption )

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:72:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      70 | 	describe( 'on dismiss button click', () => {
      71 | 		it( 'sends saveOption to the api', () => {
    > 72 | 			const wrapper = shallowMount( Component );
         | 			                ^
      73 | 			wrapper.vm.dismiss();
      74 | 			expect( global.mw.Api.prototype.saveOption ).toHaveBeenCalled();
      75 | 			expect( global.mw.Api.prototype.saveOption )

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:72:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      78 |
      79 | 		it( 'saves options to user object', () => {
    > 80 | 			const wrapper = shallowMount( Component );
         | 			                ^
      81 | 			wrapper.vm.dismiss();
      82 | 			expect( global.mw.user.options.set ).toHaveBeenCalled();
      83 | 			expect( global.mw.user.options.set )

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:80:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      78 |
      79 | 		it( 'saves options to user object', () => {
    > 80 | 			const wrapper = shallowMount( Component );
         | 			                ^
      81 | 			wrapper.vm.dismiss();
      82 | 			expect( global.mw.user.options.set ).toHaveBeenCalled();
      83 | 			expect( global.mw.user.options.set )

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:80:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      86 |
      87 | 		it( 'changes dismissed data', () => {
    > 88 | 			const wrapper = shallowMount( Component );
         | 			                ^
      89 | 			wrapper.vm.dismiss();
      90 | 			expect( wrapper.vm.dismissed ).toBeTruthy();
      91 | 		} );

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:88:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      86 |
      87 | 		it( 'changes dismissed data', () => {
    > 88 | 			const wrapper = shallowMount( Component );
         | 			                ^
      89 | 			wrapper.vm.dismiss();
      90 | 			expect( wrapper.vm.dismissed ).toBeTruthy();
      91 | 		} );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:88:20)

PASS tests/jest/components/base/copyTextLayout.test.js
PASS tests/jest/components/base/player.test.js
PASS tests/jest/components/base/image.test.js
PASS tests/jest/components/DidYouMean.test.js
PASS tests/jest/components/SearchWarnings.test.js
PASS tests/jest/components/EmptyState.test.js
PASS tests/jest/components/NoResults.test.js
PASS tests/jest/components/EndOfResults.test.js
PASS tests/jest/components/Spinner.test.js

Test Suites: 31 passed, 31 total
Tests:       6 todo, 463 passed, 469 total
Snapshots:   0 total
Time:        11.608 s
Ran all test suites.
--- stdout ---

> media-search@0.1.0 test
> grunt test && npm run test:unit

Running "eslint:all" (eslint) task

/src/repo/resources/components/SearchFilters.vue
  275:1  warning  The type 'filter-change' is undefined                                              jsdoc/no-undefined-types
  359:3  warning  JSDoc @return declaration present but return expression not available in function  jsdoc/require-returns-check

/src/repo/resources/components/base/AutocompleteSearchInput.vue
  259:1  warning  The type 'input' is undefined   jsdoc/no-undefined-types
  291:1  warning  The type 'enter' is undefined   jsdoc/no-undefined-types
  310:1  warning  The type 'submit' is undefined  jsdoc/no-undefined-types

/src/repo/resources/components/base/Dialog.vue
  193:1  warning  The type 'progress' is undefined  jsdoc/no-undefined-types
  201:1  warning  The type 'key' is undefined       jsdoc/no-undefined-types

/src/repo/resources/components/base/Select.vue
  263:1  warning  The type 'select' is undefined  jsdoc/no-undefined-types
  299:1  warning  The type 'submit' is undefined  jsdoc/no-undefined-types

/src/repo/resources/components/base/SelectMenu.vue
  107:1  warning  The type 'select' is undefined  jsdoc/no-undefined-types

/src/repo/resources/mixins/autocompleteLookupHandler.js
  148:1  warning  This line has a length of 120. Maximum allowed is 110  max-len
  202:1  warning  This line has a length of 151. Maximum allowed is 110  max-len

/src/repo/resources/mixins/searchResult.js
  99:1  warning  The type 'show-details' is undefined  jsdoc/no-undefined-types

/src/repo/resources/store/actions.js
  225:9  warning  Prefer .then to .done                                  no-jquery/no-done-fail
  226:1  warning  This line has a length of 118. Maximum allowed is 110  max-len
  318:2  warning  Prefer .then to .done                                  no-jquery/no-done-fail

✖ 16 problems (0 errors, 16 warnings)


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

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

Done.

> media-search@0.1.0 test:unit
> jest

----------------------------------|---------|----------|---------|---------|-------------------------------------------------------
File                              | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                                     
----------------------------------|---------|----------|---------|---------|-------------------------------------------------------
All files                         |   89.04 |    78.36 |   86.01 |   89.06 |                                                       
 resources                        |   55.55 |    33.33 |      60 |   58.82 |                                                       
  constants.js                    |     100 |      100 |     100 |     100 |                                                       
  ensureArray.js                  |       0 |        0 |       0 |       0 | 12-20                                                 
  getLocationAgnosticMwApi.js     |   81.81 |       50 |     100 |   81.81 | 11,32                                                 
 resources/components             |   88.55 |    79.04 |   82.38 |   88.48 |                                                       
  App.vue                         |      80 |    54.54 |   82.75 |    79.8 | 119-124,199,205,267-276,299-311,328-332               
  DidYouMean.vue                  |     100 |      100 |     100 |     100 |                                                       
  EmptyState.vue                  |     100 |      100 |     100 |     100 |                                                       
  EndOfResults.vue                |     100 |      100 |     100 |     100 |                                                       
  NamespaceFilterDialog.vue       |   95.12 |      100 |   89.47 |   95.12 | 204,219                                               
  NoResults.vue                   |     100 |      100 |     100 |     100 |                                                       
  QuickView.vue                   |   90.69 |    86.45 |      82 |   90.69 | 322-346,412-413,422,467,596-616,637,649,706           
  SearchError.vue                 |   83.33 |        0 |       0 |   83.33 | 12,33                                                 
  SearchFilters.vue               |    93.1 |    82.05 |   85.29 |   92.94 | 115,131,379-388,408-411                               
  SearchResults.vue               |   80.74 |    71.57 |   73.17 |   80.59 | 280-295,343-359,450-525                               
  SearchWarnings.vue              |     100 |      100 |     100 |     100 |                                                       
  Spinner.vue                     |     100 |      100 |     100 |     100 |                                                       
  UserNotice.vue                  |     100 |      100 |     100 |     100 |                                                       
 resources/components/base        |   88.63 |    80.57 |   83.62 |   88.48 |                                                       
  AutocompleteSearchInput.vue     |   81.25 |    68.29 |   79.31 |   81.25 | 142-145,207,282-297,310-311,342-374                   
  CopyTextLayout.vue              |     100 |      100 |     100 |     100 |                                                       
  Dialog.vue                      |   97.56 |    92.85 |   94.44 |   97.56 | 205                                                   
  Image.vue                       |     100 |     87.5 |     100 |     100 | 62                                                    
  Observer.vue                    |      80 |      100 |       0 |      80 | 28,45                                                 
  Player.vue                      |     100 |       50 |   88.88 |     100 | 43                                                    
  Select.vue                      |   79.51 |    75.75 |   77.41 |   79.26 | 99,235-254,273,350-358                                
  SelectMenu.vue                  |   91.89 |    96.15 |   86.66 |   91.42 | 144,177-180                                           
 resources/components/base/mixins |     100 |      100 |     100 |     100 |                                                       
  observer.js                     |     100 |      100 |     100 |     100 |                                                       
 resources/components/results     |   95.48 |    67.14 |     100 |   95.48 |                                                       
  AudioResult.vue                 |     100 |    66.66 |     100 |     100 | 64,74                                                 
  ImageResult.vue                 |   95.65 |       75 |     100 |   95.65 | 76                                                    
  OtherResult.vue                 |   94.11 |       60 |     100 |   94.11 | 29,41                                                 
  PageResult.vue                  |    90.9 |       70 |     100 |    90.9 | 53,101,105                                            
  VideoResult.vue                 |     100 |       70 |     100 |     100 | 76-79                                                 
 resources/mixins                 |   94.07 |    78.08 |   94.73 |   93.93 |                                                       
  autocompleteLookupHandler.js    |     100 |    78.94 |      95 |     100 | 69,115-133,195                                        
  restoreHistoryHandler.js        |   94.44 |     87.5 |     100 |   94.44 | 60-61                                                 
  searchResult.js                 |   88.23 |    72.22 |    87.5 |   87.87 | 57,79,104,122                                         
  searchResultTimeBased.js        |   81.81 |    66.66 |     100 |   81.81 | 17,34                                                 
 resources/models                 |     100 |      100 |     100 |     100 |                                                       
  SearchFilter.js                 |     100 |      100 |     100 |     100 |                                                       
 resources/plugins                |       0 |      100 |       0 |       0 |                                                       
  eventLogger.js                  |       0 |      100 |       0 |       0 | 6-22                                                  
 resources/store                  |   89.89 |    79.16 |   92.59 |   90.14 |                                                       
  actions.js                      |   88.39 |     82.4 |   82.35 |   88.82 | 68,98,122,144,160-161,219,299,379-387,432-433,458-464 
  getters.js                      |     100 |      100 |     100 |     100 |                                                       
  index.js                        |       0 |      100 |     100 |       0 | 1-10                                                  
  mutations.js                    |     100 |      100 |     100 |     100 |                                                       
  state.js                        |    92.3 |    63.63 |     100 |   91.66 | 11                                                    
----------------------------------|---------|----------|---------|---------|-------------------------------------------------------

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "babel-core": {
      "name": "babel-core",
      "severity": "critical",
      "isDirect": true,
      "via": [
        "babel-helpers",
        "babel-register",
        "babel-template",
        "babel-traverse",
        "json5"
      ],
      "effects": [
        "babel-register"
      ],
      "range": "5.8.20 - 7.0.0-beta.3",
      "nodes": [
        "node_modules/babel-core"
      ],
      "fixAvailable": {
        "name": "babel-core",
        "version": "4.7.16",
        "isSemVerMajor": true
      }
    },
    "babel-helpers": {
      "name": "babel-helpers",
      "severity": "critical",
      "isDirect": false,
      "via": [
        "babel-template"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/babel-helpers"
      ],
      "fixAvailable": true
    },
    "babel-register": {
      "name": "babel-register",
      "severity": "high",
      "isDirect": false,
      "via": [
        "babel-core"
      ],
      "effects": [
        "babel-core"
      ],
      "range": "*",
      "nodes": [
        "node_modules/babel-register"
      ],
      "fixAvailable": {
        "name": "babel-core",
        "version": "4.7.16",
        "isSemVerMajor": true
      }
    },
    "babel-template": {
      "name": "babel-template",
      "severity": "critical",
      "isDirect": false,
      "via": [
        "babel-traverse"
      ],
      "effects": [
        "babel-helpers"
      ],
      "range": "*",
      "nodes": [
        "node_modules/babel-template"
      ],
      "fixAvailable": true
    },
    "babel-traverse": {
      "name": "babel-traverse",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1096879,
          "name": "babel-traverse",
          "dependency": "babel-traverse",
          "title": "Babel vulnerable to arbitrary code execution when compiling specifically crafted malicious code",
          "url": "https://github.com/advisories/GHSA-67hx-6x53-jw92",
          "severity": "critical",
          "cwe": [
            "CWE-184",
            "CWE-697"
          ],
          "cvss": {
            "score": 9.4,
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
          },
          "range": "<7.23.2"
        }
      ],
      "effects": [
        "babel-core",
        "babel-template"
      ],
      "range": "*",
      "nodes": [
        "node_modules/babel-traverse"
      ],
      "fixAvailable": {
        "name": "babel-core",
        "version": "4.7.16",
        "isSemVerMajor": true
      }
    },
    "json5": {
      "name": "json5",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1096543,
          "name": "json5",
          "dependency": "json5",
          "title": "Prototype Pollution in JSON5 via Parse Method",
          "url": "https://github.com/advisories/GHSA-9c47-m6qq-7p4h",
          "severity": "high",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 7.1,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:H"
          },
          "range": "<1.0.2"
        }
      ],
      "effects": [
        "babel-core"
      ],
      "range": "<1.0.2",
      "nodes": [
        "node_modules/babel-core/node_modules/json5"
      ],
      "fixAvailable": {
        "name": "babel-core",
        "version": "4.7.16",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 2,
      "critical": 4,
      "total": 6
    },
    "dependencies": {
      "prod": 1,
      "dev": 1118,
      "optional": 8,
      "peer": 6,
      "peerOptional": 0,
      "total": 1118
    }
  }
}

--- end ---
Attempting to npm audit fix
$ /usr/bin/npm audit fix --dry-run --only=dev --json
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.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 EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@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": 1,
  "removed": 0,
  "changed": 0,
  "audited": 1119,
  "funding": 162,
  "audit": {
    "auditReportVersion": 2,
    "vulnerabilities": {
      "babel-core": {
        "name": "babel-core",
        "severity": "critical",
        "isDirect": true,
        "via": [
          "babel-helpers",
          "babel-register",
          "babel-template",
          "babel-traverse",
          "json5"
        ],
        "effects": [
          "babel-register"
        ],
        "range": "5.8.20 - 7.0.0-beta.3",
        "nodes": [
          "node_modules/babel-core"
        ],
        "fixAvailable": {
          "name": "babel-core",
          "version": "4.7.16",
          "isSemVerMajor": true
        }
      },
      "babel-helpers": {
        "name": "babel-helpers",
        "severity": "critical",
        "isDirect": false,
        "via": [
          "babel-template"
        ],
        "effects": [],
        "range": "*",
        "nodes": [
          "node_modules/babel-helpers"
        ],
        "fixAvailable": true
      },
      "babel-register": {
        "name": "babel-register",
        "severity": "high",
        "isDirect": false,
        "via": [
          "babel-core"
        ],
        "effects": [
          "babel-core"
        ],
        "range": "*",
        "nodes": [
          "node_modules/babel-register"
        ],
        "fixAvailable": {
          "name": "babel-core",
          "version": "4.7.16",
          "isSemVerMajor": true
        }
      },
      "babel-template": {
        "name": "babel-template",
        "severity": "critical",
        "isDirect": false,
        "via": [
          "babel-traverse"
        ],
        "effects": [
          "babel-helpers"
        ],
        "range": "*",
        "nodes": [
          "node_modules/babel-template"
        ],
        "fixAvailable": true
      },
      "babel-traverse": {
        "name": "babel-traverse",
        "severity": "critical",
        "isDirect": false,
        "via": [
          {
            "source": 1096879,
            "name": "babel-traverse",
            "dependency": "babel-traverse",
            "title": "Babel vulnerable to arbitrary code execution when compiling specifically crafted malicious code",
            "url": "https://github.com/advisories/GHSA-67hx-6x53-jw92",
            "severity": "critical",
            "cwe": [
              "CWE-184",
              "CWE-697"
            ],
            "cvss": {
              "score": 9.4,
              "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
            },
            "range": "<7.23.2"
          }
        ],
        "effects": [
          "babel-core",
          "babel-template"
        ],
        "range": "*",
        "nodes": [
          "node_modules/babel-traverse"
        ],
        "fixAvailable": {
          "name": "babel-core",
          "version": "4.7.16",
          "isSemVerMajor": true
        }
      },
      "json5": {
        "name": "json5",
        "severity": "high",
        "isDirect": false,
        "via": [
          {
            "source": 1096543,
            "name": "json5",
            "dependency": "json5",
            "title": "Prototype Pollution in JSON5 via Parse Method",
            "url": "https://github.com/advisories/GHSA-9c47-m6qq-7p4h",
            "severity": "high",
            "cwe": [
              "CWE-1321"
            ],
            "cvss": {
              "score": 7.1,
              "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:H"
            },
            "range": "<1.0.2"
          }
        ],
        "effects": [
          "babel-core"
        ],
        "range": "<1.0.2",
        "nodes": [
          "node_modules/babel-core/node_modules/json5"
        ],
        "fixAvailable": {
          "name": "babel-core",
          "version": "4.7.16",
          "isSemVerMajor": true
        }
      }
    },
    "metadata": {
      "vulnerabilities": {
        "info": 0,
        "low": 0,
        "moderate": 0,
        "high": 2,
        "critical": 4,
        "total": 6
      },
      "dependencies": {
        "prod": 1,
        "dev": 1118,
        "optional": 8,
        "peer": 6,
        "peerOptional": 0,
        "total": 1118
      }
    }
  }
}

--- end ---
{"added": 1, "removed": 0, "changed": 0, "audited": 1119, "funding": 162, "audit": {"auditReportVersion": 2, "vulnerabilities": {"babel-core": {"name": "babel-core", "severity": "critical", "isDirect": true, "via": ["babel-helpers", "babel-register", "babel-template", "babel-traverse", "json5"], "effects": ["babel-register"], "range": "5.8.20 - 7.0.0-beta.3", "nodes": ["node_modules/babel-core"], "fixAvailable": {"name": "babel-core", "version": "4.7.16", "isSemVerMajor": true}}, "babel-helpers": {"name": "babel-helpers", "severity": "critical", "isDirect": false, "via": ["babel-template"], "effects": [], "range": "*", "nodes": ["node_modules/babel-helpers"], "fixAvailable": true}, "babel-register": {"name": "babel-register", "severity": "high", "isDirect": false, "via": ["babel-core"], "effects": ["babel-core"], "range": "*", "nodes": ["node_modules/babel-register"], "fixAvailable": {"name": "babel-core", "version": "4.7.16", "isSemVerMajor": true}}, "babel-template": {"name": "babel-template", "severity": "critical", "isDirect": false, "via": ["babel-traverse"], "effects": ["babel-helpers"], "range": "*", "nodes": ["node_modules/babel-template"], "fixAvailable": true}, "babel-traverse": {"name": "babel-traverse", "severity": "critical", "isDirect": false, "via": [{"source": 1096879, "name": "babel-traverse", "dependency": "babel-traverse", "title": "Babel vulnerable to arbitrary code execution when compiling specifically crafted malicious code", "url": "https://github.com/advisories/GHSA-67hx-6x53-jw92", "severity": "critical", "cwe": ["CWE-184", "CWE-697"], "cvss": {"score": 9.4, "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"}, "range": "<7.23.2"}], "effects": ["babel-core", "babel-template"], "range": "*", "nodes": ["node_modules/babel-traverse"], "fixAvailable": {"name": "babel-core", "version": "4.7.16", "isSemVerMajor": true}}, "json5": {"name": "json5", "severity": "high", "isDirect": false, "via": [{"source": 1096543, "name": "json5", "dependency": "json5", "title": "Prototype Pollution in JSON5 via Parse Method", "url": "https://github.com/advisories/GHSA-9c47-m6qq-7p4h", "severity": "high", "cwe": ["CWE-1321"], "cvss": {"score": 7.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:H"}, "range": "<1.0.2"}], "effects": ["babel-core"], "range": "<1.0.2", "nodes": ["node_modules/babel-core/node_modules/json5"], "fixAvailable": {"name": "babel-core", "version": "4.7.16", "isSemVerMajor": true}}}, "metadata": {"vulnerabilities": {"info": 0, "low": 0, "moderate": 0, "high": 2, "critical": 4, "total": 6}, "dependencies": {"prod": 1, "dev": 1118, "optional": 8, "peer": 6, "peerOptional": 0, "total": 1118}}}}
$ /usr/bin/npm audit fix --only=dev
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.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 EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@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 ---

up to date, audited 1118 packages in 3s

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

# npm audit report

babel-traverse  *
Severity: critical
Babel vulnerable to arbitrary code execution when compiling specifically crafted malicious code - https://github.com/advisories/GHSA-67hx-6x53-jw92
fix available via `npm audit fix --force`
Will install babel-core@4.7.16, which is a breaking change
node_modules/babel-traverse
  babel-core  5.8.20 - 7.0.0-beta.3
  Depends on vulnerable versions of babel-helpers
  Depends on vulnerable versions of babel-register
  Depends on vulnerable versions of babel-template
  Depends on vulnerable versions of babel-traverse
  Depends on vulnerable versions of json5
  node_modules/babel-core
    babel-register  *
    Depends on vulnerable versions of babel-core
    node_modules/babel-register
  babel-template  *
  Depends on vulnerable versions of babel-traverse
  node_modules/babel-template
    babel-helpers  *
    Depends on vulnerable versions of babel-template
    node_modules/babel-helpers

json5  <1.0.2
Severity: high
Prototype Pollution in JSON5 via Parse Method - https://github.com/advisories/GHSA-9c47-m6qq-7p4h
fix available via `npm audit fix --force`
Will install babel-core@4.7.16, which is a breaking change
node_modules/babel-core/node_modules/json5

6 vulnerabilities (2 high, 4 critical)

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

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

--- end ---
Verifying that tests still pass
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.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 EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@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 osenv@0.1.5: This package is no longer supported.
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.1.7: Glob versions prior to v9 are no longer supported
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
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 1117 packages, and audited 1118 packages in 16s

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

6 vulnerabilities (2 high, 4 critical)

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

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

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS tests/jest/components/SearchResults.test.js
PASS tests/jest/components/app.test.js
  ● Console

    console.error
      [vuex] unknown mutation type: clearSearchWarnings

      189 | 	] ), {
      190 | 		/**
    > 191 | 		 * Keep UI state, URL, and history in sync as the user changes tabs
          | 		         ^
      192 | 		 * Filter and sort preferences are tab-specific, so they need to be
      193 | 		 * re-created every time the current tab changes.
      194 | 		 *

      at Store.commit (node_modules/vuex/dist/vuex.cjs.js:978:15)
      at Store.boundCommit [as commit] (node_modules/vuex/dist/vuex.cjs.js:919:19)
      at Proxy.mappedMutation (node_modules/vuex/dist/vuex.cjs.js:1214:18)
      at Proxy.clearSearchWarnings (resources/components/App.vue:191:12)
      at Object.<anonymous> (tests/jest/components/app.test.js:353:15)

    console.error
      [vuex] unknown mutation type: clearSearchWarnings

      189 | 	] ), {
      190 | 		/**
    > 191 | 		 * Keep UI state, URL, and history in sync as the user changes tabs
          | 		         ^
      192 | 		 * Filter and sort preferences are tab-specific, so they need to be
      193 | 		 * re-created every time the current tab changes.
      194 | 		 *

      at Store.commit (node_modules/vuex/dist/vuex.cjs.js:978:15)
      at Store.boundCommit [as commit] (node_modules/vuex/dist/vuex.cjs.js:919:19)
      at Proxy.mappedMutation (node_modules/vuex/dist/vuex.cjs.js:1214:18)
      at Proxy.clearSearchWarnings (resources/components/App.vue:191:12)
      at Object.<anonymous> (tests/jest/components/app.test.js:353:15)

    console.error
      [vuex] unknown mutation type: clearSearchWarnings

      189 | 	] ), {
      190 | 		/**
    > 191 | 		 * Keep UI state, URL, and history in sync as the user changes tabs
          | 		         ^
      192 | 		 * Filter and sort preferences are tab-specific, so they need to be
      193 | 		 * re-created every time the current tab changes.
      194 | 		 *

      at Store.commit (node_modules/vuex/dist/vuex.cjs.js:978:15)
      at Store.boundCommit [as commit] (node_modules/vuex/dist/vuex.cjs.js:919:19)
      at Proxy.mappedMutation (node_modules/vuex/dist/vuex.cjs.js:1214:18)
      at Proxy.clearSearchWarnings (resources/components/App.vue:191:12)
      at Object.<anonymous> (tests/jest/components/app.test.js:353:15)

    console.error
      [vuex] unknown mutation type: clearSearchWarnings

      189 | 	] ), {
      190 | 		/**
    > 191 | 		 * Keep UI state, URL, and history in sync as the user changes tabs
          | 		         ^
      192 | 		 * Filter and sort preferences are tab-specific, so they need to be
      193 | 		 * re-created every time the current tab changes.
      194 | 		 *

      at Store.commit (node_modules/vuex/dist/vuex.cjs.js:978:15)
      at Store.boundCommit [as commit] (node_modules/vuex/dist/vuex.cjs.js:919:19)
      at Proxy.mappedMutation (node_modules/vuex/dist/vuex.cjs.js:1214:18)
      at Proxy.clearSearchWarnings (resources/components/App.vue:191:12)
      at Object.<anonymous> (tests/jest/components/app.test.js:353:15)

PASS tests/jest/components/QuickView.test.js
  ● Console

    console.warn
      [Vue warn]: Property "rootClasses" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      592 | 			}
      593 | 		},
    > 594 |
          | ^
      595 | 		mimeType: function () {
      596 | 			return this.imageinfo[ 0 ].mime;
      597 | 		},

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.rootClasses (resources/components/QuickView.vue:594:64)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "isImage" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      600 | 			if ( this.isVideo || this.isAudio ) {
      601 | 				return {
    > 602 | 					autoplay: false,
          | 					                ^
      603 | 					controls: true,
      604 | 					fluid: true,
      605 | 					poster: this.videoinfo[ 0 ].thumburl,

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.isImage (resources/components/QuickView.vue:602:64)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "isVideo" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      616 | 		 * Emit a close event. If the user triggered this from the keyboard instead
      617 | 		 * of by clicking, add an additional parameter so that the parent knows to
    > 618 | 		 * restore focus to the originating search result.
          | 		                                                  ^
      619 | 		 *
      620 | 		 * @param {Event} event
      621 | 		 * @fires close

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.isVideo (resources/components/QuickView.vue:618:88)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "isAudio" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      616 | 		 * Emit a close event. If the user triggered this from the keyboard instead
      617 | 		 * of by clicking, add an additional parameter so that the parent knows to
    > 618 | 		 * restore focus to the originating search result.
          | 		                                                  ^
      619 | 		 *
      620 | 		 * @param {Event} event
      621 | 		 * @fires close

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.isAudio (resources/components/QuickView.vue:618:104)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "displayName" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      654 |
      655 | 		/**
    > 656 | 		 * Set the height of the div wrapping the thumbnail image to the display
          | 		                                                                        ^
      657 | 		 * height of that image to avoid a layout jump when the image loads.
      658 | 		 */
      659 | 		getThumbnailWrapperStyle: function () {

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.displayName (resources/components/QuickView.vue:656:503)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "description" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      658 | 		 */
      659 | 		getThumbnailWrapperStyle: function () {
    > 660 | 			if ( !this.imageinfo ) {
          | 			                        ^
      661 | 				return;
      662 | 			}
      663 |

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.description (resources/components/QuickView.vue:660:139)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "artist" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      660 | 			if ( !this.imageinfo ) {
      661 | 				return;
    > 662 | 			}
          | 			 ^
      663 |
      664 | 			const imgWidth = this.imageinfo[ 0 ].width;
      665 | 			const imgHeight = this.imageinfo[ 0 ].height;

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.artist (resources/components/QuickView.vue:662:94)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "licenseText" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      664 | 			const imgWidth = this.imageinfo[ 0 ].width;
      665 | 			const imgHeight = this.imageinfo[ 0 ].height;
    > 666 | 			const elWidth = this.$refs.header.offsetWidth;
          | 			                                              ^
      667 | 			let height;
      668 | 			if ( imgWidth >= imgHeight ) {
      669 | 				// For landscape-oriented images, calculate the height

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.licenseText (resources/components/QuickView.vue:666:234)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "displayName" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      678 | 				// A portrait-oriented image could be limited by several
      679 | 				// constraints: the natural image height (e.g. an original file
    > 680 | 				// that's only 200px tall), the CSS-enforced max-height of the
          | 				                                                              ^
      681 | 				// image (60vh), or the max-width of the container.
      682 | 				height = Math.min(
      683 | 					imgHeight,

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.displayName (resources/components/QuickView.vue:680:197)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "displayNameWithoutExtension" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      684 | 					window.innerHeight * 0.6,
      685 | 					( imgHeight * elWidth ) / imgWidth
    > 686 | 				);
          | 				  ^
      687 | 			}
      688 |
      689 | 			// For very short images, we need to add some vertical padding so

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.displayNameWithoutExtension (resources/components/QuickView.vue:686:106)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "creationDate" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      691 | 			// positioned controls.
      692 | 			if ( height < 100 ) {
    > 693 | 				height += 30;
          | 				             ^
      694 | 				// We'll use this to add a class to the image to add 15px of
      695 | 				// top and bottom padding.
      696 | 				this.isExtraSmall = true;

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.creationDate (resources/components/QuickView.vue:693:240)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "resolution" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      695 | 				// top and bottom padding.
      696 | 				this.isExtraSmall = true;
    > 697 | 			}
          | 			 ^
      698 |
      699 | 			this.thumbnailWrapperStyle = {
      700 | 				height: height + 'px',

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.resolution (resources/components/QuickView.vue:697:94)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

    console.warn
      [Vue warn]: Property "mimeType" was accessed during render but is not defined on instance. 
        at <QuickView title="File:Tired 20-year-old cat.jpg" canonicalurl="https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg" imageinfo= [
        {
          size: 3017217,
          width: 2484,
          height: 1870,
          thumburl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/239px-Tired_20-year-old_cat.jpg',
          thumbwidth: 239,
          thumbheight: 180,
          responsiveUrls: {
            '2': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/478px-Tired_20-year-old_cat.jpg',
            '1.5': 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Tired_20-year-old_cat.jpg/359px-Tired_20-year-old_cat.jpg'
          },
          url: 'https://upload.wikimedia.org/wikipedia/commons/3/32/Tired_20-year-old_cat.jpg',
          descriptionurl: 'https://commons.wikimedia.org/wiki/File:Tired_20-year-old_cat.jpg',
          descriptionshorturl: 'https://commons.wikimedia.org/w/index.php?curid=9809267',
          extmetadata: {
            DateTime: [Object],
            ObjectName: [Object],
            CommonsMetadataExtension: [Object],
            Categories: [Object],
            Assessments: [Object],
            ImageDescription: [Object],
            DateTimeOriginal: [Object],
            Credit: [Object],
            Artist: [Object],
            Permission: [Object],
            LicenseShortName: [Object],
            UsageTerms: [Object],
            AttributionRequired: [Object],
            Attribution: [Object],
            LicenseUrl: [Object],
            Copyrighted: [Object],
            Restrictions: [Object],
            License: [Object]
          },
          mime: 'image/jpeg'
        }
      ]  ... > 
        at <VTUROOT>

      697 | 			}
      698 |
    > 699 | 			this.thumbnailWrapperStyle = {
          | 			                              ^
      700 | 				height: height + 'px',
      701 | 				width: '100%'
      702 | 			};

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Object.get (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3117:9)
      at Proxy.mimeType (resources/components/QuickView.vue:699:265)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:6445:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5262:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/QuickView.test.js:224:20)

PASS tests/jest/store/actions.test.js
  ● Console

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.warn
      jQuery.Deferred exception: mw.track is not a function TypeError: mw.track is not a function
          at track (/src/repo/resources/store/actions.js:325:7)
          at fire (/src/repo/node_modules/jquery/dist/jquery.js:3223:31)
          at fireWith (/src/repo/node_modules/jquery/dist/jquery.js:3353:7)
          at mightThrow (/src/repo/node_modules/jquery/dist/jquery.js:3548:46)
          at process (/src/repo/node_modules/jquery/dist/jquery.js:3557:12)
          at Timeout.task [as _onTimeout] (/src/repo/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
          at listOnTimeout (node:internal/timers:569:17)
          at processTimers (node:internal/timers:512:7) undefined

      at Function.jQuery.Deferred.exceptionHook (node_modules/jquery/dist/jquery.js:3783:18)
      at process (node_modules/jquery/dist/jquery.js:3561:29)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

PASS tests/jest/store/mutations.test.js
PASS tests/jest/components/SearchFilters.test.js
PASS tests/jest/components/EmptyState.test.js
PASS tests/jest/components/base/select.test.js
PASS tests/jest/components/NamespaceFilterDialog.test.js
  ● Console

    console.warn
      [Vue warn]: CdxRadio: Inputs must have an associated label. Provide one of the following:
       - A label via the appropriate slot
       - An `aria-label` attribute set to the label text
       - An `aria-labelledby` attribute set to the ID of the label element 
        at <CdxRadio key="test" modelValue=undefined onUpdate:modelValue=fn  ... > 
        at <Transition name="sd-scale" appear="" > 
        at <SdDialog class="sdms-namespace-dialog" active=true title="mediasearch-filter-namespace-dialog-title"  ... > 
        at <NamespaceFilterDialog active=true items= [ { value: 'test' } ] namespaces= {}  ... > 
        at <VTUROOT>

      20 | 	describe( 'when items are set', () => {
      21 | 		it( 'render a cdx-radio', () => {
    > 22 | 			const wrapper = mount( Component, {
         | 			                ^
      23 | 				props: {
      24 | 					active: true,
      25 | 					items: [ { value: 'test' } ],

      at Object.warn$1 [as warn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at Je (node_modules/@wikimedia/codex/dist/codex.cjs:9:3185)
      at et (node_modules/@wikimedia/codex/dist/codex.cjs:9:16492)
      at setup (node_modules/@wikimedia/codex/dist/codex.cjs:9:117502)
      at callWithErrorHandling (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:200:19)
      at setupStatefulComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7848:25)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7809:36)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at processFragment (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5068:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4628:9)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at processFragment (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5068:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4628:9)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at Object.<anonymous> (tests/jest/components/NamespaceFilterDialog.test.js:22:20)

PASS tests/jest/mixins/autocompleteLookupHandler.test.js
PASS tests/jest/components/base/autocompleteSearchInput.test.js
  ● Console

    console.warn
      [Vue warn]: Invalid prop: type check failed for prop "modelValue". Expected String | Number, got Object  
        at <CdxTextInput id="tab__input" ref="input" modelValue= { value: 'active' }  ... > 
        at <SdAutocompleteSearchInput name="tab" label="actions" lookupResults= [ { value: 'active' } ]  ... > 
        at <VTUROOT>

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4363:7)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at updateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4144:5)
      at updateComponentPreRender (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5404:5)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5326:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at updateComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5201:18)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5136:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at patchBlockChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5008:7)
      at patchElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4926:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4785:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5349:9)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at ReactiveEffect.runIfDirty (node_modules/@vue/reactivity/dist/reactivity.cjs.js:267:12)
      at callWithErrorHandling (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:200:33)
      at flushJobs (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:405:9)

PASS tests/jest/mixins/restoreHistoryHandler.test.js
PASS tests/jest/components/results/pageResult.test.js
PASS tests/jest/components/base/dialog.test.js
PASS tests/jest/components/base/selectMenu.test.js
PASS tests/jest/components/base/copyTextLayout.test.js
PASS tests/jest/components/results/otherResult.test.js
PASS tests/jest/components/NoResults.test.js
PASS tests/jest/components/results/videoResult.test.js
PASS tests/jest/components/UserNotice.test.js
  ● Console

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      13 | 	describe( 'renders ', () => {
      14 | 		it( 'the parent component', () => {
    > 15 | 			const wrapper = shallowMount( Component );
         | 			                ^
      16 | 			const element = wrapper.find( '.sdms-user-notice__message' );
      17 | 			expect( element.exists() ).toBe( true );
      18 | 		} );

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:15:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      13 | 	describe( 'renders ', () => {
      14 | 		it( 'the parent component', () => {
    > 15 | 			const wrapper = shallowMount( Component );
         | 			                ^
      16 | 			const element = wrapper.find( '.sdms-user-notice__message' );
      17 | 			expect( element.exists() ).toBe( true );
      18 | 		} );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:15:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      19 |
      20 | 		it( 'a button component', () => {
    > 21 | 			const wrapper = mount( Component );
         | 			                ^
      22 | 			const innerComponent = wrapper.findComponent( CdxButton );
      23 | 			expect( innerComponent.exists() ).toBe( true );
      24 | 		} );

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:21:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      19 |
      20 | 		it( 'a button component', () => {
    > 21 | 			const wrapper = mount( Component );
         | 			                ^
      22 | 			const innerComponent = wrapper.findComponent( CdxButton );
      23 | 			expect( innerComponent.exists() ).toBe( true );
      24 | 		} );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:21:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      25 |
      26 | 		it( 'a message component', () => {
    > 27 | 			const wrapper = shallowMount( Component );
         | 			                ^
      28 | 			const innerComponent = wrapper.findComponent( CdxMessage );
      29 | 			expect( innerComponent.exists() ).toBe( true );
      30 | 		} );

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:27:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      25 |
      26 | 		it( 'a message component', () => {
    > 27 | 			const wrapper = shallowMount( Component );
         | 			                ^
      28 | 			const innerComponent = wrapper.findComponent( CdxMessage );
      29 | 			expect( innerComponent.exists() ).toBe( true );
      30 | 		} );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:27:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      58 |
      59 | 		it( 'when notice dismissed', ( done ) => {
    > 60 | 			const wrapper = shallowMount( Component );
         | 			                ^
      61 | 			wrapper.setData( { dismissed: true } );
      62 | 			wrapper.vm.$nextTick( () => {
      63 | 				const element = wrapper.find( '.sdms-user-notice__message' );

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:60:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      58 |
      59 | 		it( 'when notice dismissed', ( done ) => {
    > 60 | 			const wrapper = shallowMount( Component );
         | 			                ^
      61 | 			wrapper.setData( { dismissed: true } );
      62 | 			wrapper.vm.$nextTick( () => {
      63 | 				const element = wrapper.find( '.sdms-user-notice__message' );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:60:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      70 | 	describe( 'on dismiss button click', () => {
      71 | 		it( 'sends saveOption to the api', () => {
    > 72 | 			const wrapper = shallowMount( Component );
         | 			                ^
      73 | 			wrapper.vm.dismiss();
      74 | 			expect( global.mw.Api.prototype.saveOption ).toHaveBeenCalled();
      75 | 			expect( global.mw.Api.prototype.saveOption )

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:72:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      70 | 	describe( 'on dismiss button click', () => {
      71 | 		it( 'sends saveOption to the api', () => {
    > 72 | 			const wrapper = shallowMount( Component );
         | 			                ^
      73 | 			wrapper.vm.dismiss();
      74 | 			expect( global.mw.Api.prototype.saveOption ).toHaveBeenCalled();
      75 | 			expect( global.mw.Api.prototype.saveOption )

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:72:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      78 |
      79 | 		it( 'saves options to user object', () => {
    > 80 | 			const wrapper = shallowMount( Component );
         | 			                ^
      81 | 			wrapper.vm.dismiss();
      82 | 			expect( global.mw.user.options.set ).toHaveBeenCalled();
      83 | 			expect( global.mw.user.options.set )

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:80:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      78 |
      79 | 		it( 'saves options to user object', () => {
    > 80 | 			const wrapper = shallowMount( Component );
         | 			                ^
      81 | 			wrapper.vm.dismiss();
      82 | 			expect( global.mw.user.options.set ).toHaveBeenCalled();
      83 | 			expect( global.mw.user.options.set )

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:80:20)

    console.warn
      [CdxMessage]: The boolean `allowUserDismiss` prop is required to show the dismiss button.
      
      Refer to https://doc.wikimedia.org/codex/latest/components/demos/message.html#props.

      86 |
      87 | 		it( 'changes dismissed data', () => {
    > 88 | 			const wrapper = shallowMount( Component );
         | 			                ^
      89 | 			wrapper.vm.dismiss();
      90 | 			expect( wrapper.vm.dismissed ).toBeTruthy();
      91 | 		} );

      at validator (node_modules/@wikimedia/codex/dist/codex.cjs:9:89194)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4367:21)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:88:20)

    console.warn
      [Vue warn]: Invalid prop: custom validator check failed for prop "dismissButtonLabel". 
        at <CdxMessage dismiss-button-label="mediasearch-user-notice-dismiss" class="sdms-user-notice__message" onUserDismissed=fn<bound dismiss> > 
        at <Transition key=0 name="sdms-fade-out" > 
        at <UserNotice ref="VTU_COMPONENT" > 
        at <VTUROOT>

      86 |
      87 | 		it( 'changes dismissed data', () => {
    > 88 | 			const wrapper = shallowMount( Component );
         | 			                ^
      89 | 			wrapper.vm.dismiss();
      90 | 			expect( wrapper.vm.dismissed ).toBeTruthy();
      91 | 		} );

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:53:13)
      at validateProp (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4368:5)
      at validateProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4335:5)
      at initProps (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4036:5)
      at setupComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:7807:3)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5159:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at mountChildren (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4886:7)
      at mountElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4809:7)
      at processElement (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4774:7)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4642:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5269:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:229:19)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5397:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5172:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5125:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4654:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5922:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3922:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1703:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at Object.<anonymous> (tests/jest/components/UserNotice.test.js:88:20)

PASS tests/jest/store/store.test.js
PASS tests/jest/components/DidYouMean.test.js
PASS tests/jest/mixins/observer.test.js
PASS tests/jest/components/results/audioResult.test.js
PASS tests/jest/components/results/ImageResult.test.js
PASS tests/jest/components/base/player.test.js
PASS tests/jest/store/getters.test.js
PASS tests/jest/components/base/image.test.js
PASS tests/jest/components/Spinner.test.js
PASS tests/jest/components/SearchWarnings.test.js
PASS tests/jest/components/EndOfResults.test.js

Test Suites: 31 passed, 31 total
Tests:       6 todo, 463 passed, 469 total
Snapshots:   0 total
Time:        9.165 s
Ran all test suites.
--- stdout ---

> media-search@0.1.0 test
> grunt test && npm run test:unit

Running "eslint:all" (eslint) task

/src/repo/resources/components/SearchFilters.vue
  275:1  warning  The type 'filter-change' is undefined                                              jsdoc/no-undefined-types
  359:3  warning  JSDoc @return declaration present but return expression not available in function  jsdoc/require-returns-check

/src/repo/resources/components/base/AutocompleteSearchInput.vue
  259:1  warning  The type 'input' is undefined   jsdoc/no-undefined-types
  291:1  warning  The type 'enter' is undefined   jsdoc/no-undefined-types
  310:1  warning  The type 'submit' is undefined  jsdoc/no-undefined-types

/src/repo/resources/components/base/Dialog.vue
  193:1  warning  The type 'progress' is undefined  jsdoc/no-undefined-types
  201:1  warning  The type 'key' is undefined       jsdoc/no-undefined-types

/src/repo/resources/components/base/Select.vue
  263:1  warning  The type 'select' is undefined  jsdoc/no-undefined-types
  299:1  warning  The type 'submit' is undefined  jsdoc/no-undefined-types

/src/repo/resources/components/base/SelectMenu.vue
  107:1  warning  The type 'select' is undefined  jsdoc/no-undefined-types

/src/repo/resources/mixins/autocompleteLookupHandler.js
  148:1  warning  This line has a length of 120. Maximum allowed is 110  max-len
  202:1  warning  This line has a length of 151. Maximum allowed is 110  max-len

/src/repo/resources/mixins/searchResult.js
  99:1  warning  The type 'show-details' is undefined  jsdoc/no-undefined-types

/src/repo/resources/store/actions.js
  225:9  warning  Prefer .then to .done                                  no-jquery/no-done-fail
  226:1  warning  This line has a length of 118. Maximum allowed is 110  max-len
  318:2  warning  Prefer .then to .done                                  no-jquery/no-done-fail

✖ 16 problems (0 errors, 16 warnings)


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

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

Done.

> media-search@0.1.0 test:unit
> jest

----------------------------------|---------|----------|---------|---------|-------------------------------------------------------
File                              | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                                     
----------------------------------|---------|----------|---------|---------|-------------------------------------------------------
All files                         |   89.04 |    78.48 |   86.01 |   89.06 |                                                       
 resources                        |   55.55 |    33.33 |      60 |   58.82 |                                                       
  constants.js                    |     100 |      100 |     100 |     100 |                                                       
  ensureArray.js                  |       0 |        0 |       0 |       0 | 12-20                                                 
  getLocationAgnosticMwApi.js     |   81.81 |       50 |     100 |   81.81 | 11,32                                                 
 resources/components             |   88.55 |    79.04 |   82.38 |   88.48 |                                                       
  App.vue                         |      80 |    54.54 |   82.75 |    79.8 | 119-124,199,205,267-276,299-311,328-332               
  DidYouMean.vue                  |     100 |      100 |     100 |     100 |                                                       
  EmptyState.vue                  |     100 |      100 |     100 |     100 |                                                       
  EndOfResults.vue                |     100 |      100 |     100 |     100 |                                                       
  NamespaceFilterDialog.vue       |   95.12 |      100 |   89.47 |   95.12 | 204,219                                               
  NoResults.vue                   |     100 |      100 |     100 |     100 |                                                       
  QuickView.vue                   |   90.69 |    86.45 |      82 |   90.69 | 322-346,412-413,422,467,596-616,637,649,706           
  SearchError.vue                 |   83.33 |        0 |       0 |   83.33 | 12,33                                                 
  SearchFilters.vue               |    93.1 |    82.05 |   85.29 |   92.94 | 115,131,379-388,408-411                               
  SearchResults.vue               |   80.74 |    71.57 |   73.17 |   80.59 | 280-295,343-359,450-525                               
  SearchWarnings.vue              |     100 |      100 |     100 |     100 |                                                       
  Spinner.vue                     |     100 |      100 |     100 |     100 |                                                       
  UserNotice.vue                  |     100 |      100 |     100 |     100 |                                                       
 resources/components/base        |   88.63 |    80.57 |   83.62 |   88.48 |                                                       
  AutocompleteSearchInput.vue     |   81.25 |    68.29 |   79.31 |   81.25 | 142-145,207,282-297,310-311,342-374                   
  CopyTextLayout.vue              |     100 |      100 |     100 |     100 |                                                       
  Dialog.vue                      |   97.56 |    92.85 |   94.44 |   97.56 | 205                                                   
  Image.vue                       |     100 |     87.5 |     100 |     100 | 62                                                    
  Observer.vue                    |      80 |      100 |       0 |      80 | 28,45                                                 
  Player.vue                      |     100 |       50 |   88.88 |     100 | 43                                                    
  Select.vue                      |   79.51 |    75.75 |   77.41 |   79.26 | 99,235-254,273,350-358                                
  SelectMenu.vue                  |   91.89 |    96.15 |   86.66 |   91.42 | 144,177-180                                           
 resources/components/base/mixins |     100 |      100 |     100 |     100 |                                                       
  observer.js                     |     100 |      100 |     100 |     100 |                                                       
 resources/components/results     |   95.48 |    67.14 |     100 |   95.48 |                                                       
  AudioResult.vue                 |     100 |    66.66 |     100 |     100 | 64,74                                                 
  ImageResult.vue                 |   95.65 |       75 |     100 |   95.65 | 76                                                    
  OtherResult.vue                 |   94.11 |       60 |     100 |   94.11 | 29,41                                                 
  PageResult.vue                  |    90.9 |       70 |     100 |    90.9 | 53,101,105                                            
  VideoResult.vue                 |     100 |       70 |     100 |     100 | 76-79                                                 
 resources/mixins                 |   94.07 |    79.45 |   94.73 |   93.93 |                                                       
  autocompleteLookupHandler.js    |     100 |    78.94 |      95 |     100 | 69,115-133,195                                        
  restoreHistoryHandler.js        |   94.44 |     87.5 |     100 |   94.44 | 60-61                                                 
  searchResult.js                 |   88.23 |    72.22 |    87.5 |   87.87 | 57,79,104,122                                         
  searchResultTimeBased.js        |   81.81 |       75 |     100 |   81.81 | 17,34                                                 
 resources/models                 |     100 |      100 |     100 |     100 |                                                       
  SearchFilter.js                 |     100 |      100 |     100 |     100 |                                                       
 resources/plugins                |       0 |      100 |       0 |       0 |                                                       
  eventLogger.js                  |       0 |      100 |       0 |       0 | 6-22                                                  
 resources/store                  |   89.89 |    79.16 |   92.59 |   90.14 |                                                       
  actions.js                      |   88.39 |     82.4 |   82.35 |   88.82 | 68,98,122,144,160-161,219,299,379-387,432-433,458-464 
  getters.js                      |     100 |      100 |     100 |     100 |                                                       
  index.js                        |       0 |      100 |     100 |       0 | 1-10                                                  
  mutations.js                    |     100 |      100 |     100 |     100 |                                                       
  state.js                        |    92.3 |    63.63 |     100 |   91.66 | 11                                                    
----------------------------------|---------|----------|---------|---------|-------------------------------------------------------

--- end ---
{}
{}
$ 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
* @wikimedia/codex: 2.2.0 → 2.2.1
* @wikimedia/codex-icons: 2.2.0 → 2.2.1

$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmp1ockem4c
--- stdout ---
[master cf4588f] build: Updating npm dependencies
 2 files changed, 705 insertions(+), 23 deletions(-)

--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From cf4588fbd62fe53009acd1df828d4f6014281e19 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Wed, 30 Jul 2025 03:27:19 +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
* @wikimedia/codex: 2.2.0 → 2.2.1
* @wikimedia/codex-icons: 2.2.0 → 2.2.1

Change-Id: I8973fb8500d40dfe7d49adfd21ab9225397f1365
---
 package-lock.json | 722 ++++++++++++++++++++++++++++++++++++++++++++--
 package.json      |   6 +-
 2 files changed, 705 insertions(+), 23 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 958b5ae..8f19127 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,10 +12,10 @@
 				"@vue/compiler-sfc": "3.5.13",
 				"@vue/test-utils": "2.4.6",
 				"@vue/vue3-jest": "29.2.6",
-				"@wikimedia/codex": "2.2.0",
-				"@wikimedia/codex-icons": "2.2.0",
+				"@wikimedia/codex": "2.2.1",
+				"@wikimedia/codex-icons": "2.2.1",
 				"babel-core": "^6.26.3",
-				"eslint-config-wikimedia": "0.30.0",
+				"eslint-config-wikimedia": "0.31.0",
 				"eslint-plugin-jest": "27.2.1",
 				"grunt": "1.6.1",
 				"grunt-banana-checker": "0.13.0",
@@ -2933,6 +2933,237 @@
 				"@sinonjs/commons": "^3.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/@typescript-eslint/project-service": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz",
+			"integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/tsconfig-utils": "^8.38.0",
+				"@typescript-eslint/types": "^8.38.0",
+				"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/@stylistic/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz",
+			"integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "8.38.0",
+				"@typescript-eslint/visitor-keys": "8.38.0"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/tsconfig-utils": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz",
+			"integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==",
+			"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/@stylistic/eslint-plugin/node_modules/@typescript-eslint/types": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz",
+			"integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==",
+			"dev": true,
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz",
+			"integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/project-service": "8.38.0",
+				"@typescript-eslint/tsconfig-utils": "8.38.0",
+				"@typescript-eslint/types": "8.38.0",
+				"@typescript-eslint/visitor-keys": "8.38.0",
+				"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": "^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": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/utils": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz",
+			"integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==",
+			"dev": true,
+			"dependencies": {
+				"@eslint-community/eslint-utils": "^4.7.0",
+				"@typescript-eslint/scope-manager": "8.38.0",
+				"@typescript-eslint/types": "8.38.0",
+				"@typescript-eslint/typescript-estree": "8.38.0"
+			},
+			"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/@stylistic/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
+			"version": "8.38.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz",
+			"integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/types": "8.38.0",
+				"eslint-visitor-keys": "^4.2.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/@stylistic/eslint-plugin/node_modules/brace-expansion": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+			"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+			"dev": true,
+			"dependencies": {
+				"balanced-match": "^1.0.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/minimatch": {
+			"version": "9.0.5",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+			"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+			"dev": true,
+			"dependencies": {
+				"brace-expansion": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=16 || 14 >=14.17"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"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/eslint-plugin/node_modules/semver": {
+			"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"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
 		"node_modules/@stylistic/stylelint-config": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-2.0.0.tgz",
@@ -3184,6 +3415,85 @@
 			"integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
 			"dev": true
 		},
+		"node_modules/@typescript-eslint/eslint-plugin": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
+			"integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
+			"dev": true,
+			"optional": true,
+			"peer": true,
+			"dependencies": {
+				"@eslint-community/regexpp": "^4.4.0",
+				"@typescript-eslint/scope-manager": "5.62.0",
+				"@typescript-eslint/type-utils": "5.62.0",
+				"@typescript-eslint/utils": "5.62.0",
+				"debug": "^4.3.4",
+				"graphemer": "^1.4.0",
+				"ignore": "^5.2.0",
+				"natural-compare-lite": "^1.4.0",
+				"semver": "^7.3.7",
+				"tsutils": "^3.21.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"@typescript-eslint/parser": "^5.0.0",
+				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
+			"version": "7.7.2",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+			"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+			"dev": true,
+			"optional": true,
+			"peer": true,
+			"bin": {
+				"semver": "bin/semver.js"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/@typescript-eslint/parser": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
+			"integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+			"dev": true,
+			"optional": true,
+			"peer": true,
+			"dependencies": {
+				"@typescript-eslint/scope-manager": "5.62.0",
+				"@typescript-eslint/types": "5.62.0",
+				"@typescript-eslint/typescript-estree": "5.62.0",
+				"debug": "^4.3.4"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
 		"node_modules/@typescript-eslint/project-service": {
 			"version": "8.33.0",
 			"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz",
@@ -3248,6 +3558,35 @@
 				"typescript": ">=4.8.4 <5.9.0"
 			}
 		},
+		"node_modules/@typescript-eslint/type-utils": {
+			"version": "5.62.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
+			"integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
+			"dev": true,
+			"optional": true,
+			"peer": true,
+			"dependencies": {
+				"@typescript-eslint/typescript-estree": "5.62.0",
+				"@typescript-eslint/utils": "5.62.0",
+				"debug": "^4.3.4",
+				"tsutils": "^3.21.0"
+			},
+			"engines": {
+				"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "*"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
 		"node_modules/@typescript-eslint/types": {
 			"version": "5.62.0",
 			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
@@ -3535,13 +3874,13 @@
 			"dev": true
 		},
 		"node_modules/@wikimedia/codex": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/@wikimedia/codex/-/codex-2.2.0.tgz",
-			"integrity": "sha512-r9PEWC45ouWYviufzm7NqVFDPQExzdr8jEhCY3gJq0ZCqN0G2mn/LfucbtaAcpMWgWy5x7VLqR09hGb00Dh8bA==",
+			"version": "2.2.1",
+			"resolved": "https://registry.npmjs.org/@wikimedia/codex/-/codex-2.2.1.tgz",
+			"integrity": "sha512-EJggU6gsvUZApNyASm8x/aYnqZqeagj0NhpiQIJg4pNBx16OconVSLPoGIYiQ/KIsUz8K7Osxt6IFw1rESMS4w==",
 			"dev": true,
 			"dependencies": {
 				"@floating-ui/vue": "1.0.6",
-				"@wikimedia/codex-icons": "2.2.0"
+				"@wikimedia/codex-icons": "2.2.1"
 			},
 			"engines": {
 				"node": ">=20",
@@ -3552,9 +3891,9 @@
 			}
 		},
 		"node_modules/@wikimedia/codex-icons": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/@wikimedia/codex-icons/-/codex-icons-2.2.0.tgz",
-			"integrity": "sha512-VTDS3vZULIGN/ESVyJTl1FY5he/MtU+cEa6j+dJXEVKRP8ECrj/rBW9/BwloMm/I9jyLTHT0QWLBkHBZESN9uA==",
+			"version": "2.2.1",
+			"resolved": "https://registry.npmjs.org/@wikimedia/codex-icons/-/codex-icons-2.2.1.tgz",
+			"integrity": "sha512-PX3QqC0bfXGz2sM9hOoRYIsOKnaDuXdpe09VuT52ngQQg2xlmwrT/icx0lF8fK0Is6/rENx7mwIHbjEDRMuMwA==",
 			"dev": true,
 			"engines": {
 				"node": ">=20",
@@ -3575,9 +3914,9 @@
 			"dev": true
 		},
 		"node_modules/acorn": {
-			"version": "8.14.1",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
-			"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+			"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"
@@ -5530,11 +5869,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",
@@ -5554,7 +5896,330 @@
 				"eslint-plugin-yml": "^1.14.0"
 			},
 			"engines": {
-				"node": ">=18 <23"
+				"node": ">=18 <25"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+			"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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/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/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"
+			},
+			"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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
+			"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"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": {
+			"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/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": "^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": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
+			"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.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"
+			},
+			"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/eslint-config-wikimedia/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
+			"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.35.1",
+				"eslint-visitor-keys": "^4.2.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/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/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/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/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
+			"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/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/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/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
+			"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"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
+			"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/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": "^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": ">=4.8.4 <5.9.0"
+			}
+		},
+		"node_modules/eslint-config-wikimedia/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
+			"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.35.1",
+				"eslint-visitor-keys": "^4.2.1"
+			},
+			"engines": {
+				"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
 			}
 		},
 		"node_modules/eslint-config-wikimedia/node_modules/@typescript-eslint/scope-manager": {
@@ -5690,9 +6355,9 @@
 			}
 		},
 		"node_modules/eslint-config-wikimedia/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"
@@ -5701,6 +6366,15 @@
 				"url": "https://opencollective.com/eslint"
 			}
 		},
+		"node_modules/eslint-config-wikimedia/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/eslint-config-wikimedia/node_modules/minimatch": {
 			"version": "9.0.5",
 			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -10668,6 +11342,14 @@
 			"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
 			"dev": true
 		},
+		"node_modules/natural-compare-lite": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
+			"integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
+			"dev": true,
+			"optional": true,
+			"peer": true
+		},
 		"node_modules/node-int64": {
 			"version": "0.4.0",
 			"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
diff --git a/package.json b/package.json
index cdc8157..ba66d67 100644
--- a/package.json
+++ b/package.json
@@ -13,10 +13,10 @@
 		"@vue/compiler-sfc": "3.5.13",
 		"@vue/test-utils": "2.4.6",
 		"@vue/vue3-jest": "29.2.6",
-		"@wikimedia/codex": "2.2.0",
-		"@wikimedia/codex-icons": "2.2.0",
+		"@wikimedia/codex": "2.2.1",
+		"@wikimedia/codex-icons": "2.2.1",
 		"babel-core": "^6.26.3",
-		"eslint-config-wikimedia": "0.30.0",
+		"eslint-config-wikimedia": "0.31.0",
 		"eslint-plugin-jest": "27.2.1",
 		"grunt": "1.6.1",
 		"grunt-banana-checker": "0.13.0",
-- 
2.39.5


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