From 6bdba0c2a91794b4af5057e09870dad8ce6149e1 Mon Sep 17 00:00:00 2001 From: kashifatcha Date: Tue, 19 Dec 2023 14:33:51 +0000 Subject: [PATCH 1/3] Add standardx linter to browser extension --- package-lock.json | 3177 +++++++++++++++++++++++++++++++++++++++++---- package.json | 25 +- 2 files changed, 2921 insertions(+), 281 deletions(-) diff --git a/package-lock.json b/package-lock.json index 366f485..2a9ffd9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,11 +4,208 @@ "requires": true, "packages": { "": { + "dependencies": { + "standardx": "^7.0.0" + }, "devDependencies": { "jasmine-browser-runner": "^2.3.0", "jasmine-core": "^5.1.1" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -36,6 +233,11 @@ "node": ">=14" } }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -49,6 +251,48 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -65,7 +309,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -76,23 +319,133 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/body-parser": { "version": "1.20.1", @@ -122,7 +475,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -138,23 +490,30 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -170,7 +529,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -181,14 +539,12 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/content-disposition": { "version": "0.5.4", @@ -236,7 +592,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -250,11 +605,44 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -274,6 +662,17 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -316,48 +715,654 @@ "node": ">= 0.8" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, + "node_modules/enquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, + "node_modules/enquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.18.0.tgz", + "integrity": "sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.3.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-standard": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", + "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1 || ^5.0.0" + } + }, + "node_modules/eslint-config-standard-jsx": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", + "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-react": "^7.21.5" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.24.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", + "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", + "dependencies": { + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.6.2", + "find-up": "^2.0.0", + "has": "^1.0.3", + "is-core-module": "^2.6.0", + "minimatch": "^3.0.4", + "object.values": "^1.1.4", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.11.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.1.1.tgz", + "integrity": "sha512-XgdcdyNzHfmlQyweOPTxmc7pIsS6dE4MvwhXWMQ2Dxs1XAL2GJDilUsjWen6TWik0aSI+zD/PqocZBblcm9rdA==", + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.3.tgz", + "integrity": "sha512-ZMbFvZ1WAYSZKY662MBVEWR45VaBT6KSJCiupjrNlcdakB90juaZeDCbJq19e73JZQubqFtgETohwgAt8u5P6w==", + "dependencies": { + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "estraverse": "^5.2.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.hasown": "^1.0.0", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.5" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", @@ -370,189 +1375,694 @@ "vary": "~1.1.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dependencies": { - "minimatch": "^5.0.1" + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dependencies": { - "balanced-match": "^1.0.0" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dependencies": { - "brace-expansion": "^2.0.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": "2.0.1", - "unpipe": "~1.0.0" + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.8" } }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=14" + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { - "node": ">= 0.6" + "node": ">=0.8.19" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.10" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "has-bigints": "^1.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "balanced-match": "^1.0.0" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { - "brace-expansion": "^2.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dependencies": { - "function-bind": "^1.1.1" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -560,72 +2070,43 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "which-typed-array": "^1.1.11" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/isarray": { @@ -637,8 +2118,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/jackspeak": { "version": "2.3.6", @@ -700,6 +2180,68 @@ "integrity": "sha512-UrzO3fL7nnxlQXlvTynNAenL+21oUQRlzqQFsA2U11ryb4+NLOCOePZ70PTojEaUKhiFugh7dG0Q+I58xlPdWg==", "dev": true }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -712,6 +2254,26 @@ "setimmediate": "^1.0.5" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -721,6 +2283,53 @@ "immediate": "~3.0.5" } }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lru-cache": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", @@ -791,7 +2400,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -799,6 +2407,14 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", @@ -811,8 +2427,12 @@ "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/negotiator": { "version": "0.6.3", @@ -823,11 +2443,119 @@ "node": ">= 0.6" } }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -848,16 +2576,84 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } }, "node_modules/parseurl": { "version": "1.3.3", @@ -868,11 +2664,18 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -881,11 +2684,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, "node_modules/path-scurry": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", @@ -908,12 +2715,167 @@ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "dependencies": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha512-fjAPuiws93rm7mPUu21RdBnkeZNrbfCFCwfAhPWY+rR3zG0ubpe5cEReHOw5fIbfmsxEV/g2kSxGTATY3Bpnwg==", + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -927,6 +2889,14 @@ "node": ">= 0.10" } }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -966,6 +2936,36 @@ "node": ">= 0.8" } }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -987,11 +2987,69 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -1006,7 +3064,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1022,6 +3079,28 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1042,6 +3121,19 @@ } ] }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1062,6 +3154,31 @@ "node": ">= 14.20.0" } }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -1107,6 +3224,33 @@ "node": ">= 0.8.0" } }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -1123,47 +3267,182 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/standard": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.4.tgz", + "integrity": "sha512-2AGI874RNClW4xUdM+bg1LRXVlYLzTNEkHmTG5mhyn45OhbgwA+6znowkOGYy+WMb5HRyELvtNy39kcdMQMcYQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "shebang-regex": "^3.0.0" + "eslint": "~7.18.0", + "eslint-config-standard": "16.0.3", + "eslint-config-standard-jsx": "10.0.0", + "eslint-plugin-import": "~2.24.2", + "eslint-plugin-node": "~11.1.0", + "eslint-plugin-promise": "~5.1.0", + "eslint-plugin-react": "~7.25.1", + "standard-engine": "^14.0.1" + }, + "bin": { + "standard": "bin/cmd.js" }, "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=10.12.0" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, + "node_modules/standard-engine": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", + "integrity": "sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "get-stdin": "^8.0.0", + "minimist": "^1.2.5", + "pkg-conf": "^3.1.0", + "xdg-basedir": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.10" } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" + "node_modules/standardx": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/standardx/-/standardx-7.0.0.tgz", + "integrity": "sha512-Uh2LIWyMD0pMFn+zoAS52dforkE8MUWP6hK48iQhiohTC5DRqBgTdXdJbhSGyjamRxCfETBdfvJ7hvtme2M3jg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "standard": "^16.0.1", + "standard-engine": "^14.0.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "standardx": "bin/cmd.js" } }, "node_modules/statuses": { @@ -1249,6 +3528,67 @@ "node": ">=8" } }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -1286,11 +3626,29 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -1298,6 +3656,94 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -1319,6 +3765,36 @@ "node": ">=0.6" } }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "engines": { + "node": ">=8" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1332,6 +3808,81 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -1341,6 +3892,14 @@ "node": ">= 0.8" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -1356,6 +3915,20 @@ "node": ">= 0.4.0" } }, + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1369,7 +3942,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -1380,6 +3952,39 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -1471,8 +4076,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { "version": "8.14.2", @@ -1494,6 +4098,19 @@ "optional": true } } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } } diff --git a/package.json b/package.json index 597ab6c..0986d84 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,33 @@ { "devDependencies": { "jasmine-browser-runner": "^2.3.0", - "jasmine-core": "^5.1.1" + "jasmine-core": "^5.1.1", + "standardx": "^7.0.0" }, "scripts": { + "lint:js": "standardx 'spec/javascripts/**/*.js' 'src/**/*.js'", + "lint:js:fix": "npm run lint:js --fix", "test": "jasmine-browser-runner runSpecs", "build": "bash build.sh" + }, + "eslintConfig": { + "env": { + "browser": true, + "jasmine": true + }, + "rules":{ + "no-var": 0, + "no-unused-vars": 0, + "no-use-before-define": 0 + } + }, + "standardx": { + "global": [ + "chrome", + "Mustache", + "fetch", + "Popup", + "pluck" + ] } } From 04886a032f13d22d17029377638eadea438505ba Mon Sep 17 00:00:00 2001 From: kashifatcha Date: Wed, 20 Dec 2023 13:56:51 +0000 Subject: [PATCH 2/3] Add files that have been fixed by linter --- spec/helpers/helpers.js | 4 +- spec/helpers/polyfills/String.startsWith.js | 6 +- spec/javascripts/ab_tests.spec.js | 98 ++++---- spec/javascripts/content_links.spec.js | 64 ++--- .../javascripts/design_mode_component.spec.js | 50 ++-- spec/javascripts/environment.spec.js | 48 ++-- .../events/ab_bucket_store.spec.js | 204 +++++++-------- spec/javascripts/external_links.spec.js | 38 +-- spec/javascripts/extract_path.spec.js | 74 +++--- spec/javascripts/highlight_component.spec.js | 232 +++++++++--------- spec/javascripts/show_meta_tags.spec.js | 48 ++-- .../design-mode-component.js | 36 +-- .../highlight-component.js | 90 +++---- .../show-meta-tags-component.js | 82 +++---- src/events/ab_bucket_store.js | 26 +- src/events/ab_test_settings.js | 61 +++-- src/events/icon.js | 12 +- src/fetch-page-data.js | 28 +-- src/popup/ab_tests.js | 17 +- src/popup/content_links.js | 44 ++-- src/popup/environment.js | 83 ++++--- src/popup/external_links.js | 61 +++-- src/popup/extract_path.js | 54 ++-- src/popup/popup.js | 215 ++++++++-------- 24 files changed, 823 insertions(+), 852 deletions(-) diff --git a/spec/helpers/helpers.js b/spec/helpers/helpers.js index 19a0561..f095ec5 100644 --- a/spec/helpers/helpers.js +++ b/spec/helpers/helpers.js @@ -1,5 +1,5 @@ -function pluck(array, key) { +function pluck (array, key) { return array.map(function (object) { - return object[key]; + return object[key] }) } diff --git a/spec/helpers/polyfills/String.startsWith.js b/spec/helpers/polyfills/String.startsWith.js index e0ef739..8fe63c3 100644 --- a/spec/helpers/polyfills/String.startsWith.js +++ b/spec/helpers/polyfills/String.startsWith.js @@ -1,5 +1,5 @@ if (!String.prototype.startsWith) { - String.prototype.startsWith = function(searchString, position){ - return this.substr(position || 0, searchString.length) === searchString; - }; + String.prototype.startsWith = function (searchString, position) { + return this.substr(position || 0, searchString.length) === searchString + } } diff --git a/spec/javascripts/ab_tests.spec.js b/spec/javascripts/ab_tests.spec.js index 012dc21..b20837c 100644 --- a/spec/javascripts/ab_tests.spec.js +++ b/spec/javascripts/ab_tests.spec.js @@ -1,73 +1,73 @@ -describe("Popup.findActiveAbTests", function () { - it("returns no A/B tests if none are active", function () { - var abTests = Popup.findActiveAbTests({}); +describe('Popup.findActiveAbTests', function () { + it('returns no A/B tests if none are active', function () { + var abTests = Popup.findActiveAbTests({}) - expect(abTests).toEqual([]); - }); + expect(abTests).toEqual([]) + }) - it("finds all A/B tests", function () { + it('finds all A/B tests', function () { var abTests = Popup.findActiveAbTests({ - "first-AB-test-name": { - currentBucket: "some-value", - allowedBuckets: ["some-value", "B"] + 'first-AB-test-name': { + currentBucket: 'some-value', + allowedBuckets: ['some-value', 'B'] }, - "second-AB-test-name": { - currentBucket: "other-value", - allowedBuckets: ["other-value", "B"] + 'second-AB-test-name': { + currentBucket: 'other-value', + allowedBuckets: ['other-value', 'B'] }, - "third-AB-test-name": { - currentBucket: "yet-another-value", - allowedBuckets: ["A", "yet-another-value"] + 'third-AB-test-name': { + currentBucket: 'yet-another-value', + allowedBuckets: ['A', 'yet-another-value'] } - }); + }) - expect(abTests.length).toEqual(3); - expect(abTests[0].testName).toEqual("first-AB-test-name"); - expect(abTests[1].testName).toEqual("second-AB-test-name"); - expect(abTests[2].testName).toEqual("third-AB-test-name"); - }); + expect(abTests.length).toEqual(3) + expect(abTests[0].testName).toEqual('first-AB-test-name') + expect(abTests[1].testName).toEqual('second-AB-test-name') + expect(abTests[2].testName).toEqual('third-AB-test-name') + }) - it("returns A and B buckets", function () { + it('returns A and B buckets', function () { var abTests = Popup.findActiveAbTests({ - "some-AB-test-name": { - currentBucket: "A", - allowedBuckets: ["A", "B"] + 'some-AB-test-name': { + currentBucket: 'A', + allowedBuckets: ['A', 'B'] } - }); + }) - expect(abTests[0].buckets.length).toEqual(2); - expect(abTests[0].buckets[0].bucketName).toEqual("A"); - expect(abTests[0].buckets[1].bucketName).toEqual("B"); + expect(abTests[0].buckets.length).toEqual(2) + expect(abTests[0].buckets[0].bucketName).toEqual('A') + expect(abTests[0].buckets[1].bucketName).toEqual('B') }) it("highlights 'A' bucket if user is in 'A' group", function () { var abTests = Popup.findActiveAbTests({ - "some-AB-test-name": { - currentBucket: "B", - allowedBuckets: ["A", "B"] + 'some-AB-test-name': { + currentBucket: 'B', + allowedBuckets: ['A', 'B'] }, - "other-AB-test-name": { - currentBucket: "A", - allowedBuckets: ["A", "B"] + 'other-AB-test-name': { + currentBucket: 'A', + allowedBuckets: ['A', 'B'] } - }); + }) - expect(abTests[0].buckets[0].class).toEqual(""); - expect(abTests[0].buckets[1].class).toEqual("ab-bucket-selected"); + expect(abTests[0].buckets[0].class).toEqual('') + expect(abTests[0].buckets[1].class).toEqual('ab-bucket-selected') - expect(abTests[1].buckets[0].class).toEqual("ab-bucket-selected"); - expect(abTests[1].buckets[1].class).toEqual(""); - }); + expect(abTests[1].buckets[0].class).toEqual('ab-bucket-selected') + expect(abTests[1].buckets[1].class).toEqual('') + }) it("doesn't highlight any buckets if variant is unknown", function () { var abTests = Popup.findActiveAbTests({ - "some-AB-test-name": { - currentBucket: "Unknown", - allowedBuckets: ["A", "B"] + 'some-AB-test-name': { + currentBucket: 'Unknown', + allowedBuckets: ['A', 'B'] } - }); + }) - expect(abTests[0].buckets[0].class).toEqual(""); - expect(abTests[0].buckets[1].class).toEqual(""); - }); -}); + expect(abTests[0].buckets[0].class).toEqual('') + expect(abTests[0].buckets[1].class).toEqual('') + }) +}) diff --git a/spec/javascripts/content_links.spec.js b/spec/javascripts/content_links.spec.js index 770744b..a8c48f3 100755 --- a/spec/javascripts/content_links.spec.js +++ b/spec/javascripts/content_links.spec.js @@ -1,12 +1,12 @@ -describe("PopupView.generateContentLinks", function () { +describe('PopupView.generateContentLinks', function () { var PROD_ENV = { protocol: 'https', serviceDomain: 'publishing.service.gov.uk', origin: 'https://www.gov.uk' } var DRAFT_PROD_ENV = { protocol: 'https', serviceDomain: 'publishing.service.gov.uk', origin: 'https://draft-origin.publishing.service.gov.uk' } - it("returns the correct URIs", function () { + it('returns the correct URIs', function () { var links = Popup.generateContentLinks( - "https://www.gov.uk/browse/disabilities?foo=bar", - "https://www.gov.uk", - "/browse/disabilities", + 'https://www.gov.uk/browse/disabilities?foo=bar', + 'https://www.gov.uk', + '/browse/disabilities', PROD_ENV ) @@ -22,16 +22,16 @@ describe("PopupView.generateContentLinks", function () { 'http://webarchive.nationalarchives.gov.uk/*/https://www.gov.uk/browse/disabilities', 'https://content-data.publishing.service.gov.uk/metrics/browse/disabilities', 'https://my2.siteimprove.com/QualityAssurance/1054012/Overview/Search?SearchIn=Url&Query=/browse/disabilities', - 'https://search.google.com/structured-data/testing-tool/u/0/#url=https://www.gov.uk/browse/disabilities', + 'https://search.google.com/structured-data/testing-tool/u/0/#url=https://www.gov.uk/browse/disabilities' ]) }) - it("returns the draft URIs for non-prod environments", function () { + it('returns the draft URIs for non-prod environments', function () { var links = Popup.generateContentLinks( - "https://www.gov.uk/browse/disabilities?foo=bar", - "https://www.gov.uk", - "/browse/disabilities", - { protocol: 'https', serviceDomain: 'staging.publishing.service.gov.uk'} + 'https://www.gov.uk/browse/disabilities?foo=bar', + 'https://www.gov.uk', + '/browse/disabilities', + { protocol: 'https', serviceDomain: 'staging.publishing.service.gov.uk' } ) var urls = pluck(links, 'url') @@ -41,11 +41,11 @@ describe("PopupView.generateContentLinks", function () { ) }) - it("does not generate URIs for publishing apps (non-www pages)", function () { + it('does not generate URIs for publishing apps (non-www pages)', function () { var links = Popup.generateContentLinks( - "https://search-admin.publishing.service.gov.uk/queries", - "https://search-admin.publishing.service.gov.uk", - "/queries", + 'https://search-admin.publishing.service.gov.uk/queries', + 'https://search-admin.publishing.service.gov.uk', + '/queries', PROD_ENV ) @@ -54,9 +54,9 @@ describe("PopupView.generateContentLinks", function () { it("only generates URLs for publishing-apps when it's the support application", function () { var links = Popup.generateContentLinks( - "https://support.publishing.service.gov.uk/anonymous_feedback?path=/browse/disabilities", - "https://support.publishing.service.gov.uk", - "/anonymous_feedback", + 'https://support.publishing.service.gov.uk/anonymous_feedback?path=/browse/disabilities', + 'https://support.publishing.service.gov.uk', + '/anonymous_feedback', PROD_ENV ) @@ -76,33 +76,33 @@ describe("PopupView.generateContentLinks", function () { ]) }) - it("generates a link for smart answers", function () { + it('generates a link for smart answers', function () { var links = Popup.generateContentLinks( - "https://www.gov.uk/smart-answer/y/question-1", - "https://www.gov.uk", - "/smart-answer/y/question-1", + 'https://www.gov.uk/smart-answer/y/question-1', + 'https://www.gov.uk', + '/smart-answer/y/question-1', PROD_ENV, - "smartanswers" + 'smartanswers' ) var urls = pluck(links, 'url') - expect(urls).toContain("https://www.gov.uk/smart-answer/y/visualise") + expect(urls).toContain('https://www.gov.uk/smart-answer/y/visualise') }) - it("generates correct link for content API on draft stack", function () { + it('generates correct link for content API on draft stack', function () { var links = Popup.generateContentLinks( - "https://draft-origin.publishing.service.gov.uk/apply-for-and-manage-a-gov-uk-domain-name", - "https://draft-origin.publishing.service.gov.uk", - "/apply-for-and-manage-a-gov-uk-domain-name", + 'https://draft-origin.publishing.service.gov.uk/apply-for-and-manage-a-gov-uk-domain-name', + 'https://draft-origin.publishing.service.gov.uk', + '/apply-for-and-manage-a-gov-uk-domain-name', DRAFT_PROD_ENV, - "collections" + 'collections' ) expect(links[1]).toEqual({ - name: "Content item (JSON)", - url: "https://draft-origin.publishing.service.gov.uk/api/content/apply-for-and-manage-a-gov-uk-domain-name", - class: "" + name: 'Content item (JSON)', + url: 'https://draft-origin.publishing.service.gov.uk/api/content/apply-for-and-manage-a-gov-uk-domain-name', + class: '' }) }) }) diff --git a/spec/javascripts/design_mode_component.spec.js b/spec/javascripts/design_mode_component.spec.js index 2e4ee1a..67cfccb 100644 --- a/spec/javascripts/design_mode_component.spec.js +++ b/spec/javascripts/design_mode_component.spec.js @@ -1,40 +1,40 @@ -"use strict"; -describe("Toggling design mode", function () { - var designModeBannerId = "govuk-chrome-toolkit-design-mode-banner"; - var designModeBannerElement; - var designModeComponent; +'use strict' +describe('Toggling design mode', function () { + var designModeBannerId = 'govuk-chrome-toolkit-design-mode-banner' + var designModeBannerElement + var designModeComponent beforeEach(function () { // Mock addListener function to call toggleDesignMode trigger when initialized window.chrome = { runtime: { onMessage: { - addListener: function(callback) { + addListener: function (callback) { callback({ trigger: 'toggleDesignMode' }) } }, - sendMessage: function(){} + sendMessage: function () {} } - }; - designModeComponent = new DesignModeComponent; + } + designModeComponent = new DesignModeComponent() designModeBannerElement = document.querySelector(`#${designModeBannerId}`) - }); + }) - it("shows design mode banner", function () { - expect(designModeBannerElement.textContent).toMatch(/You are in design mode./); - }); + it('shows design mode banner', function () { + expect(designModeBannerElement.textContent).toMatch(/You are in design mode./) + }) - it("removes the banner when toggled off", function () { - designModeComponent.toggleDesignMode(); - expect(designModeBannerElement).not.toBeVisible(); - }); + it('removes the banner when toggled off', function () { + designModeComponent.toggleDesignMode() + expect(designModeBannerElement).not.toBeVisible() + }) - it("design mode is on when toggled on", function () { - expect(window.document.designMode).toEqual("on"); - }); + it('design mode is on when toggled on', function () { + expect(window.document.designMode).toEqual('on') + }) - it("design mode is off when toggled off", function () { - designModeComponent.toggleDesignMode(); - expect(window.document.designMode).toEqual("off"); - }); -}); + it('design mode is off when toggled off', function () { + designModeComponent.toggleDesignMode() + expect(window.document.designMode).toEqual('off') + }) +}) diff --git a/spec/javascripts/environment.spec.js b/spec/javascripts/environment.spec.js index 76ed6ad..66f7bb0 100644 --- a/spec/javascripts/environment.spec.js +++ b/spec/javascripts/environment.spec.js @@ -1,43 +1,43 @@ -describe("Popup.environment", function() { - function createEnvironmentForUrl(location) { - var a = document.createElement('a'); - a.href = location; - return Popup.environment(a.href, a.host, a.origin).allEnvironments; +describe('Popup.environment', function () { + function createEnvironmentForUrl (location) { + var a = document.createElement('a') + a.href = location + return Popup.environment(a.href, a.host, a.origin).allEnvironments } - it("returns the correct environment links when the user is on production", function() { + it('returns the correct environment links when the user is on production', function () { var envs = createEnvironmentForUrl( - "https://www.gov.uk/browse/disabilities?foo=bar" + 'https://www.gov.uk/browse/disabilities?foo=bar' ) - var urls = pluck(envs, 'url'); + var urls = pluck(envs, 'url') expect(urls).toEqual([ 'https://www.gov.uk/browse/disabilities?foo=bar', 'https://www.staging.publishing.service.gov.uk/browse/disabilities?foo=bar', 'https://www.integration.publishing.service.gov.uk/browse/disabilities?foo=bar', - 'http://www.dev.gov.uk/browse/disabilities?foo=bar', + 'http://www.dev.gov.uk/browse/disabilities?foo=bar' ]) }) - it("returns the correct variants for development", function() { + it('returns the correct variants for development', function () { var envs = createEnvironmentForUrl( - "http://www.dev.gov.uk/browse/disabilities?foo=bar" + 'http://www.dev.gov.uk/browse/disabilities?foo=bar' ) - var urls = pluck(envs, 'url'); + var urls = pluck(envs, 'url') expect(urls).toEqual([ 'https://www.gov.uk/browse/disabilities?foo=bar', 'https://www.staging.publishing.service.gov.uk/browse/disabilities?foo=bar', 'https://www.integration.publishing.service.gov.uk/browse/disabilities?foo=bar', - 'http://www.dev.gov.uk/browse/disabilities?foo=bar', + 'http://www.dev.gov.uk/browse/disabilities?foo=bar' ]) }) - it("shows production, staging, integration and development on publisher-apps", function() { + it('shows production, staging, integration and development on publisher-apps', function () { var envs = createEnvironmentForUrl( - "https://signon.publishing.service.gov.uk/" + 'https://signon.publishing.service.gov.uk/' ) var environmentNames = pluck(envs, 'name') @@ -47,9 +47,9 @@ describe("Popup.environment", function() { ]) }) - it("Only shows production, staging and development on the GOVUK Account", function() { + it('Only shows production, staging and development on the GOVUK Account', function () { var envs = createEnvironmentForUrl( - "https://www.account.publishing.service.gov.uk/" + 'https://www.account.publishing.service.gov.uk/' ) var environmentNames = pluck(envs, 'name') @@ -59,18 +59,18 @@ describe("Popup.environment", function() { ]) }) - it("correctly identifies the current environment", function() { + it('correctly identifies the current environment', function () { var forProd = createEnvironmentForUrl( - "https://www.gov.uk/browse/disabilities?foo=bar" - ); + 'https://www.gov.uk/browse/disabilities?foo=bar' + ) - expect(forProd[0].class).toEqual("current") + expect(forProd[0].class).toEqual('current') }) - it("returns nothing if not on GOV.UK", function() { + it('returns nothing if not on GOV.UK', function () { var links = createEnvironmentForUrl( - "http://webarchive.nationalarchives.gov.uk/*/https://www.gov.uk/jobsearch" - ); + 'http://webarchive.nationalarchives.gov.uk/*/https://www.gov.uk/jobsearch' + ) expect(links).toEqual({ name: 'GOV.UK', url: 'https://www.gov.uk' }) }) diff --git a/spec/javascripts/events/ab_bucket_store.spec.js b/spec/javascripts/events/ab_bucket_store.spec.js index acd1c18..b87144f 100644 --- a/spec/javascripts/events/ab_bucket_store.spec.js +++ b/spec/javascripts/events/ab_bucket_store.spec.js @@ -1,139 +1,139 @@ -describe("abBucketStore", function () { - it("is initialized empty", function () { - var store = abBucketStore.createStore(); +describe('abBucketStore', function () { + it('is initialized empty', function () { + var store = abBucketStore.createStore() - expect(store.getAll()).toEqual({}); - }); + expect(store.getAll()).toEqual({}) + }) - describe("addAbTests", function () { - it("does nothing if no tests are added to an already-empty store", function () { - var store = abBucketStore.createStore(); - store.addAbTests({}, "example.com"); + describe('addAbTests', function () { + it('does nothing if no tests are added to an already-empty store', function () { + var store = abBucketStore.createStore() + store.addAbTests({}, 'example.com') - expect(store.getAll("example.com")).toEqual({}); - }); + expect(store.getAll('example.com')).toEqual({}) + }) - it("adds tests to empty store", function () { - var store = abBucketStore.createStore(); + it('adds tests to empty store', function () { + var store = abBucketStore.createStore() store.addAbTests({ - testName1: "bucket1", - testName2: "bucket2" - }, "example.com"); - - expect(store.getAll("example.com")).toEqual({ - testName1: "bucket1", - testName2: "bucket2" - }); - }); - - it("appends new tests", function () { - var store = abBucketStore.createStore(); + testName1: 'bucket1', + testName2: 'bucket2' + }, 'example.com') + + expect(store.getAll('example.com')).toEqual({ + testName1: 'bucket1', + testName2: 'bucket2' + }) + }) + + it('appends new tests', function () { + var store = abBucketStore.createStore() store.addAbTests({ - originalTest1: "originalBucket1", - originalTest2: "originalBucket2" - }, "example.com"); + originalTest1: 'originalBucket1', + originalTest2: 'originalBucket2' + }, 'example.com') store.addAbTests({ - originalTest1: "updatedBucket1", - newTest1: "newBucket1", - originalTest2: "updatedBucket2", - newTest2: "newBucket2" - }, "example.com"); - - expect(store.getAll("example.com")).toEqual({ - originalTest1: "originalBucket1", - originalTest2: "originalBucket2", - newTest1: "newBucket1", - newTest2: "newBucket2" - }); - }); - - it("stores A/B tests by domain name", function () { - var store = abBucketStore.createStore(); + originalTest1: 'updatedBucket1', + newTest1: 'newBucket1', + originalTest2: 'updatedBucket2', + newTest2: 'newBucket2' + }, 'example.com') + + expect(store.getAll('example.com')).toEqual({ + originalTest1: 'originalBucket1', + originalTest2: 'originalBucket2', + newTest1: 'newBucket1', + newTest2: 'newBucket2' + }) + }) + + it('stores A/B tests by domain name', function () { + var store = abBucketStore.createStore() store.addAbTests({ - integrationAbTest: "bucketOnInt", - }, "www-origin.integration.publishing.service.gov.uk"); + integrationAbTest: 'bucketOnInt' + }, 'www-origin.integration.publishing.service.gov.uk') store.addAbTests({ - productionAbTest: "bucketOnProd", - }, "www.gov.uk"); - - expect(store.getAll("www-origin.integration.publishing.service.gov.uk")).toEqual({ - integrationAbTest: "bucketOnInt", - }); - expect(store.getAll("www.gov.uk")).toEqual({ - productionAbTest: "bucketOnProd", - }); - }); - }); - - describe("getAll", function () { - it("returns no A/B tests if none have been stored for that domain", function () { - var store = abBucketStore.createStore(); + productionAbTest: 'bucketOnProd' + }, 'www.gov.uk') + + expect(store.getAll('www-origin.integration.publishing.service.gov.uk')).toEqual({ + integrationAbTest: 'bucketOnInt' + }) + expect(store.getAll('www.gov.uk')).toEqual({ + productionAbTest: 'bucketOnProd' + }) + }) + }) + + describe('getAll', function () { + it('returns no A/B tests if none have been stored for that domain', function () { + var store = abBucketStore.createStore() store.addAbTests({ - someAbTest: "someBucket", - }, "www.gov.uk"); + someAbTest: 'someBucket' + }, 'www.gov.uk') - expect(store.getAll("example.com")).toEqual({}); - }); - }); + expect(store.getAll('example.com')).toEqual({}) + }) + }) - describe("setBucket", function () { - it("updates value of existing bucket", function () { - var store = abBucketStore.createStore(); + describe('setBucket', function () { + it('updates value of existing bucket', function () { + var store = abBucketStore.createStore() store.addAbTests({ testName1: { - currentBucket: "originalBucket1", - allowedBuckets: ["originalBucket1", "updatedBucket"] + currentBucket: 'originalBucket1', + allowedBuckets: ['originalBucket1', 'updatedBucket'] }, testName2: { - currentBucket: "originalBucket2", - allowedBuckets: ["originalBucket1", "originalBucket2"] + currentBucket: 'originalBucket2', + allowedBuckets: ['originalBucket1', 'originalBucket2'] } - }, "example.com"); + }, 'example.com') - store.setBucket("testName1", "updatedBucket", "example.com"); + store.setBucket('testName1', 'updatedBucket', 'example.com') - expect(store.getAll("example.com")).toEqual({ + expect(store.getAll('example.com')).toEqual({ testName1: { - currentBucket: "updatedBucket", - allowedBuckets: ["originalBucket1", "updatedBucket"] + currentBucket: 'updatedBucket', + allowedBuckets: ['originalBucket1', 'updatedBucket'] }, testName2: { - currentBucket: "originalBucket2", - allowedBuckets: ["originalBucket1", "originalBucket2"] + currentBucket: 'originalBucket2', + allowedBuckets: ['originalBucket1', 'originalBucket2'] } - }); - }); + }) + }) - it("updates bucket with matching domain name", function () { - var store = abBucketStore.createStore(); + it('updates bucket with matching domain name', function () { + var store = abBucketStore.createStore() store.addAbTests({ abTestName: { - currentBucket: "originalBucket", - allowedBuckets: ["originalBucket", "updatedBucket"] + currentBucket: 'originalBucket', + allowedBuckets: ['originalBucket', 'updatedBucket'] } - }, "www-origin.integration.publishing.service.gov.uk"); + }, 'www-origin.integration.publishing.service.gov.uk') store.addAbTests({ abTestName: { - currentBucket: "originalBucket", - allowedBuckets: ["originalBucket", "updatedBucket"] + currentBucket: 'originalBucket', + allowedBuckets: ['originalBucket', 'updatedBucket'] } - }, "www.gov.uk"); + }, 'www.gov.uk') - store.setBucket("abTestName", "updatedBucket", "www.gov.uk"); + store.setBucket('abTestName', 'updatedBucket', 'www.gov.uk') - expect(store.getAll("www-origin.integration.publishing.service.gov.uk")).toEqual({ + expect(store.getAll('www-origin.integration.publishing.service.gov.uk')).toEqual({ abTestName: { - currentBucket: "originalBucket", - allowedBuckets: ["originalBucket", "updatedBucket"] + currentBucket: 'originalBucket', + allowedBuckets: ['originalBucket', 'updatedBucket'] } - }); - expect(store.getAll("www.gov.uk")).toEqual({ + }) + expect(store.getAll('www.gov.uk')).toEqual({ abTestName: { - currentBucket: "updatedBucket", - allowedBuckets: ["originalBucket", "updatedBucket"] + currentBucket: 'updatedBucket', + allowedBuckets: ['originalBucket', 'updatedBucket'] } - }); - }); - }); -}); + }) + }) + }) +}) diff --git a/spec/javascripts/external_links.spec.js b/spec/javascripts/external_links.spec.js index 64a5522..22341a3 100644 --- a/spec/javascripts/external_links.spec.js +++ b/spec/javascripts/external_links.spec.js @@ -1,7 +1,7 @@ -describe("Popup.generateExternalLinks", function () { +describe('Popup.generateExternalLinks', function () { var PROD_ENV = { protocol: 'https', serviceDomain: 'publishing.service.gov.uk' } - it("generates a link to the rendering app GitHub", function () { + it('generates a link to the rendering app GitHub', function () { var contentItem = { rendering_app: 'collections' } @@ -14,7 +14,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("generates a Github link when the rendering app does not match the repository name", function () { + it('generates a Github link when the rendering app does not match the repository name', function () { var contentItem = { rendering_app: 'smartanswers', base_path: '/my-smart-answer' @@ -28,7 +28,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("generates a link to the publishing app in the docs", function () { + it('generates a link to the publishing app in the docs', function () { var contentItem = { publishing_app: 'collections-publisher' } @@ -41,7 +41,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("generates the correct docs link when a publishing app does not match the repository name", function () { + it('generates the correct docs link when a publishing app does not match the repository name', function () { var contentItem = { publishing_app: 'smartanswers', base_path: '/my-smart-answer' @@ -55,7 +55,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("generates a link to the content schema", function () { + it('generates a link to the content schema', function () { var contentItem = { schema_name: 'topic' } @@ -68,7 +68,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("correctly links to placeholder schemas", function () { + it('correctly links to placeholder schemas', function () { var contentItem = { schema_name: 'placeholder_something_or_other' } @@ -81,7 +81,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("correctly links to document types", function () { + it('correctly links to document types', function () { var contentItem = { document_type: 'announcement' } @@ -94,7 +94,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("generates edit links for topics", function () { + it('generates edit links for topics', function () { var contentItem = { content_id: '4d8568c4-67f2-48da-a578-5ac6f35b69b4', document_type: 'topic' @@ -108,7 +108,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("generates edit links for mainstream browse pages", function () { + it('generates edit links for mainstream browse pages', function () { var contentItem = { content_id: '4d8568c4-67f2-48da-a578-5ac6f35b69b4', document_type: 'mainstream_browse_page' @@ -122,7 +122,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("generates edit links for step by steps", function () { + it('generates edit links for step by steps', function () { var contentItem = { content_id: '4d8568c4-67f2-48da-a578-5ac6f35b69b4', document_type: 'step_by_step_nav' @@ -136,7 +136,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("generates edit links for mainstream items", function () { + it('generates edit links for mainstream items', function () { var contentItem = { content_id: '4d8568c4-67f2-48da-a578-5ac6f35b69b4', publishing_app: 'publisher', @@ -151,7 +151,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("generates edit links for Whitehall items", function () { + it('generates edit links for Whitehall items', function () { var contentItem = { content_id: '4d8568c4-67f2-48da-a578-5ac6f35b69b4', publishing_app: 'whitehall' @@ -165,11 +165,11 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("generates edit links for Specalist Publisher items", function () { + it('generates edit links for Specalist Publisher items', function () { var contentItem = { publishing_app: 'specialist-publisher', content_id: '4dd888e6-e890-4498-9913-b89e4e5a0059', - document_type: 'business_finance_support_scheme', + document_type: 'business_finance_support_scheme' } var links = Popup.generateExternalLinks(contentItem, PROD_ENV) @@ -180,11 +180,11 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("generates edit links for Content Publisher items", function () { + it('generates edit links for Content Publisher items', function () { var contentItem = { publishing_app: 'content-publisher', content_id: '4d8568c4-67f2-48da-a578-5ac6f35b69b4', - locale: 'cy', + locale: 'cy' } var links = Popup.generateExternalLinks(contentItem, PROD_ENV) @@ -195,7 +195,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("includes a link to content-tagger", function () { + it('includes a link to content-tagger', function () { var contentItem = { content_id: '4d8568c4-67f2-48da-a578-5ac6f35b69b4' } @@ -208,7 +208,7 @@ describe("Popup.generateExternalLinks", function () { }) }) - it("includes an edit link to content-tagger", function () { + it('includes an edit link to content-tagger', function () { var contentItem = { content_id: '4d8568c4-67f2-48da-a578-5ac6f35b69b4', document_type: 'taxon' diff --git a/spec/javascripts/extract_path.spec.js b/spec/javascripts/extract_path.spec.js index 9162a07..47b2b68 100644 --- a/spec/javascripts/extract_path.spec.js +++ b/spec/javascripts/extract_path.spec.js @@ -1,73 +1,73 @@ -describe("Popup.extractPath", function () { - it("returns nothing for publishing applications", function () { - var path = Popup.extractPath("https://publisher.publishing.service.gov.uk/foo/bar", "/foo/bar") +describe('Popup.extractPath', function () { + it('returns nothing for publishing applications', function () { + var path = Popup.extractPath('https://publisher.publishing.service.gov.uk/foo/bar', '/foo/bar') - expect(path).toBeUndefined(); + expect(path).toBeUndefined() }) - it("returns the path for draft URLs", function () { - var path = Popup.extractPath("https://draft-origin.staging.publishing.service.gov.uk/browse/disabilities", "/browse/disabilities") + it('returns the path for draft URLs', function () { + var path = Popup.extractPath('https://draft-origin.staging.publishing.service.gov.uk/browse/disabilities', '/browse/disabilities') - expect(path).toEqual("/browse/disabilities"); + expect(path).toEqual('/browse/disabilities') }) - it("returns the path for frontend applications", function () { - var path = Popup.extractPath("https://www.gov.uk/browse/disabilities", "/browse/disabilities") + it('returns the path for frontend applications', function () { + var path = Popup.extractPath('https://www.gov.uk/browse/disabilities', '/browse/disabilities') - expect(path).toBe("/browse/disabilities") + expect(path).toBe('/browse/disabilities') }) - it("returns the path for origin frontend applications", function () { - var path = Popup.extractPath("https://www-origin.gov.uk/browse/disabilities", "/browse/disabilities") + it('returns the path for origin frontend applications', function () { + var path = Popup.extractPath('https://www-origin.gov.uk/browse/disabilities', '/browse/disabilities') - expect(path).toBe("/browse/disabilities") + expect(path).toBe('/browse/disabilities') }) - it("returns the path for content-store pages", function () { - var path = Popup.extractPath("https://www.gov.uk/api/content/browse/disabilities", "/api/content/browse/disabilities") + it('returns the path for content-store pages', function () { + var path = Popup.extractPath('https://www.gov.uk/api/content/browse/disabilities', '/api/content/browse/disabilities') - expect(path).toBe("/browse/disabilities") + expect(path).toBe('/browse/disabilities') }) - it("returns the path for URLs with double slashes", function () { - var path = Popup.extractPath("https://www.gov.uk/api/content//browse/disabilities", "/api/content//browse/disabilities") + it('returns the path for URLs with double slashes', function () { + var path = Popup.extractPath('https://www.gov.uk/api/content//browse/disabilities', '/api/content//browse/disabilities') - expect(path).toBe("/browse/disabilities") + expect(path).toBe('/browse/disabilities') }) - it("returns the path for info pages", function () { - var path = Popup.extractPath("https://www.gov.uk/info/browse/disabilities", "/info/browse/disabilities") + it('returns the path for info pages', function () { + var path = Popup.extractPath('https://www.gov.uk/info/browse/disabilities', '/info/browse/disabilities') - expect(path).toBe("/browse/disabilities") + expect(path).toBe('/browse/disabilities') }) - it("returns the path for search pages", function () { - var path = Popup.extractPath("https://www.gov.uk/api/search.json?filter_link=/browse/disabilities", "/api/search.json") + it('returns the path for search pages', function () { + var path = Popup.extractPath('https://www.gov.uk/api/search.json?filter_link=/browse/disabilities', '/api/search.json') - expect(path).toBe("/browse/disabilities") + expect(path).toBe('/browse/disabilities') }) - it("returns the path for cache-busted search pages", function () { - var path = Popup.extractPath("https://www.gov.uk/api/search.json?filter_link=/browse/disabilities&c=some_cache_buster", "/api/search.json") + it('returns the path for cache-busted search pages', function () { + var path = Popup.extractPath('https://www.gov.uk/api/search.json?filter_link=/browse/disabilities&c=some_cache_buster', '/api/search.json') - expect(path).toBe("/browse/disabilities") + expect(path).toBe('/browse/disabilities') }) - it("returns the path for national archives pages", function () { - var path = Popup.extractPath("http://webarchive.nationalarchives.gov.uk/*/https://www.gov.uk/some/page", "/*/https://www.gov.uk/some/page") + it('returns the path for national archives pages', function () { + var path = Popup.extractPath('http://webarchive.nationalarchives.gov.uk/*/https://www.gov.uk/some/page', '/*/https://www.gov.uk/some/page') - expect(path).toBe("/some/page") + expect(path).toBe('/some/page') }) - it("returns the path for the smart answers visualisation", function () { - var path = Popup.extractPath("https://www.gov.uk/maternity-paternity-calculator/y/visualise", "/maternity-paternity-calculator/y/visualise") + it('returns the path for the smart answers visualisation', function () { + var path = Popup.extractPath('https://www.gov.uk/maternity-paternity-calculator/y/visualise', '/maternity-paternity-calculator/y/visualise') - expect(path).toBe("/maternity-paternity-calculator") + expect(path).toBe('/maternity-paternity-calculator') }) - it("returns the path for the content data manager", function () { - var path = Popup.extractPath("https://content-data.publishing.service.gov.uk/metrics/browse/disabilities", "/metrics/browse/disabilities") + it('returns the path for the content data manager', function () { + var path = Popup.extractPath('https://content-data.publishing.service.gov.uk/metrics/browse/disabilities', '/metrics/browse/disabilities') - expect(path).toBe("/browse/disabilities") + expect(path).toBe('/browse/disabilities') }) }) diff --git a/spec/javascripts/highlight_component.spec.js b/spec/javascripts/highlight_component.spec.js index e41cc93..9a7640d 100644 --- a/spec/javascripts/highlight_component.spec.js +++ b/spec/javascripts/highlight_component.spec.js @@ -1,202 +1,200 @@ -'use strict'; -describe("Toggling component highlighting", function () { - - var breadcrumbsElement; - var highlightComponent; +'use strict' +describe('Toggling component highlighting', function () { + var breadcrumbsElement + var highlightComponent beforeEach(function () { - loadFixtures("gem-c-breadcrumbs.html") + loadFixtures('gem-c-breadcrumbs.html') // Mock addListener function to call toggleComponents trigger when initialized window.chrome = { runtime: { onMessage: { - addListener: function(callback) { + addListener: function (callback) { callback({ trigger: 'toggleComponents' }) } }, - sendMessage: function(){} + sendMessage: function () {} } - }; + } - highlightComponent = new HighlightComponent; + highlightComponent = new HighlightComponent() - breadcrumbsElement = document.querySelector("#jasmine-fixtures .gem-c-breadcrumbs"); - }); + breadcrumbsElement = document.querySelector('#jasmine-fixtures .gem-c-breadcrumbs') + }) - it("highlights govuk components", function () { - expect(breadcrumbsElement).toHaveClass("highlight-component"); - }); + it('highlights govuk components', function () { + expect(breadcrumbsElement).toHaveClass('highlight-component') + }) - it("exposes the component name as data attribute", function () { - expect(breadcrumbsElement.dataset.componentName).toEqual("breadcrumbs"); - }); + it('exposes the component name as data attribute', function () { + expect(breadcrumbsElement.dataset.componentName).toEqual('breadcrumbs') + }) - it("exposes the app name as data attribute", function () { - expect(breadcrumbsElement.dataset.appName).toEqual("gem-c-"); - }); + it('exposes the app name as data attribute', function () { + expect(breadcrumbsElement.dataset.appName).toEqual('gem-c-') + }) it("adds the ability to click through to the component's documentation", function () { - spyOn(window, "open").and.callThrough() - var clickEvent = spyOnEvent(breadcrumbsElement, "click"); + spyOn(window, 'open').and.callThrough() + var clickEvent = spyOnEvent(breadcrumbsElement, 'click') - breadcrumbsElement.click(); + breadcrumbsElement.click() - expect(clickEvent).toHaveBeenTriggered(); + expect(clickEvent).toHaveBeenTriggered() expect(window.open).toHaveBeenCalledWith( - "https://govuk-publishing-components.herokuapp.com/component-guide/breadcrumbs" + 'https://govuk-publishing-components.herokuapp.com/component-guide/breadcrumbs' ) - }); + }) - it("removes the highlight when toggled off", function () { - highlightComponent.toggleComponents(); + it('removes the highlight when toggled off', function () { + highlightComponent.toggleComponents() - expect(breadcrumbsElement).not.toHaveClass("highlight-component"); - }); + expect(breadcrumbsElement).not.toHaveClass('highlight-component') + }) - it("removes the click functionality when toggled off", function () { - spyOn(window, "open").and.callThrough() - highlightComponent.toggleComponents(); + it('removes the click functionality when toggled off', function () { + spyOn(window, 'open').and.callThrough() + highlightComponent.toggleComponents() - var clickEvent = spyOnEvent(breadcrumbsElement, "click"); + var clickEvent = spyOnEvent(breadcrumbsElement, 'click') - breadcrumbsElement.click(); + breadcrumbsElement.click() - expect(clickEvent).toHaveBeenTriggered(); - expect(window.open).not.toHaveBeenCalled(); - }); -}); + expect(clickEvent).toHaveBeenTriggered() + expect(window.open).not.toHaveBeenCalled() + }) +}) -describe("highlightComponent", function () { - beforeEach(function() { +describe('highlightComponent', function () { + beforeEach(function () { window.chrome = { runtime: { onMessage: { - addListener: function(callback) { } + addListener: function (callback) { } }, - sendMessage: function(){} + sendMessage: function () {} } - }; + } }) - describe("components", function () { - var html; + describe('components', function () { + var html beforeEach(function () { loadFixtures( - "app-c-back-to-top.html", - "gem-c-breadcrumbs.html", - "gem-c-button.html", - "gem-c-label.html" + 'app-c-back-to-top.html', + 'gem-c-breadcrumbs.html', + 'gem-c-button.html', + 'gem-c-label.html' ) - html = document.querySelector("#jasmine-fixtures"); - }); + html = document.querySelector('#jasmine-fixtures') + }) - it("builds an array of components", function () { - var highlightComponent = new HighlightComponent; + it('builds an array of components', function () { + var highlightComponent = new HighlightComponent() expect(highlightComponent.components).toEqual( [ { - name: "back-to-top", - prefix: "app-c-", - element: html.querySelector(".app-c-back-to-top"), + name: 'back-to-top', + prefix: 'app-c-', + element: html.querySelector('.app-c-back-to-top') }, { - name: "breadcrumbs", - prefix: "gem-c-", - element: html.querySelector(".gem-c-breadcrumbs"), + name: 'breadcrumbs', + prefix: 'gem-c-', + element: html.querySelector('.gem-c-breadcrumbs') }, { - name: "button", - prefix: "gem-c-", - element: html.querySelector(".gem-c-button"), + name: 'button', + prefix: 'gem-c-', + element: html.querySelector('.gem-c-button') }, { - name: "label", - prefix: "gem-c-", - element: html.querySelector(".gem-c-label"), + name: 'label', + prefix: 'gem-c-', + element: html.querySelector('.gem-c-label') } ] ) - }); - }); - - describe("toggleComponents", function () { - it("toggles the internal state", function () { + }) + }) - var highlightComponent = new HighlightComponent; + describe('toggleComponents', function () { + it('toggles the internal state', function () { + var highlightComponent = new HighlightComponent() - expect(highlightComponent.isComponentsHighlighted).toEqual(false); + expect(highlightComponent.isComponentsHighlighted).toEqual(false) - highlightComponent.toggleComponents(); - expect(highlightComponent.isComponentsHighlighted).toEqual(true); + highlightComponent.toggleComponents() + expect(highlightComponent.isComponentsHighlighted).toEqual(true) - highlightComponent.toggleComponents(); - expect(highlightComponent.isComponentsHighlighted).toEqual(false); - }); + highlightComponent.toggleComponents() + expect(highlightComponent.isComponentsHighlighted).toEqual(false) + }) - it("toggles the highlight-component class", function () { - loadFixtures("gem-c-button.html"); + it('toggles the highlight-component class', function () { + loadFixtures('gem-c-button.html') - var highlightComponent = new HighlightComponent; + var highlightComponent = new HighlightComponent() - var buttonElement = document.querySelector("#jasmine-fixtures .gem-c-button"); - expect(buttonElement).not.toHaveClass("highlight-component"); + var buttonElement = document.querySelector('#jasmine-fixtures .gem-c-button') + expect(buttonElement).not.toHaveClass('highlight-component') - highlightComponent.toggleComponents(); - expect(buttonElement).toHaveClass("highlight-component"); + highlightComponent.toggleComponents() + expect(buttonElement).toHaveClass('highlight-component') - highlightComponent.toggleComponents(); - expect(buttonElement).not.toHaveClass("highlight-component"); - }); - }); -}); + highlightComponent.toggleComponents() + expect(buttonElement).not.toHaveClass('highlight-component') + }) + }) +}) -describe("Helpers.documentationUrl", function () { +describe('Helpers.documentationUrl', function () { it("creates the correct URL for 'app' components with substitution", function () { - setFixtures(''); - Helpers.substitutions = { - 'collections': 'another_host' - }; + setFixtures('') + Helpers.substitutions = { + collections: 'another_host' + } expect( Helpers.documentationUrl({ - prefix: "app-c", - name: "back-to-top" + prefix: 'app-c', + name: 'back-to-top' }) ).toEqual( - "https://another_host.herokuapp.com/component-guide/back-to-top" + 'https://another_host.herokuapp.com/component-guide/back-to-top' ) - }); + }) it("creates the correct URL for 'app' components without substitution", function () { - setFixtures(''); - Helpers.substitutions = { - 'collections': 'another_host' - }; + setFixtures('') + Helpers.substitutions = { + collections: 'another_host' + } expect( Helpers.documentationUrl({ - prefix: "app-c", - name: "back-to-top" + prefix: 'app-c', + name: 'back-to-top' }) ).toEqual( - "https://rendering_app.herokuapp.com/component-guide/back-to-top" + 'https://rendering_app.herokuapp.com/component-guide/back-to-top' ) - }); + }) it("creates the correct URL for 'gem' components", function () { - setFixtures(''); - Helpers.substitutions = { - 'collections': 'another_host' - }; + setFixtures('') + Helpers.substitutions = { + collections: 'another_host' + } expect( Helpers.documentationUrl({ - prefix: "gem-c", - name: "label" + prefix: 'gem-c', + name: 'label' }) ).toEqual( - "https://govuk-publishing-components.herokuapp.com/component-guide/label" + 'https://govuk-publishing-components.herokuapp.com/component-guide/label' ) - }); -}); + }) +}) diff --git a/spec/javascripts/show_meta_tags.spec.js b/spec/javascripts/show_meta_tags.spec.js index b3a71b8..9fb635d 100644 --- a/spec/javascripts/show_meta_tags.spec.js +++ b/spec/javascripts/show_meta_tags.spec.js @@ -1,39 +1,39 @@ -'use strict'; -describe("Toggling meta tags", function () { - var showMetaTagsBannerId = "govuk-chrome-toolkit-banner"; - var showMetaTagsBannerElement; - var showMetaTagsComponent; +'use strict' +describe('Toggling meta tags', function () { + var showMetaTagsBannerId = 'govuk-chrome-toolkit-banner' + var showMetaTagsBannerElement + var showMetaTagsComponent beforeEach(function () { window.chrome = { runtime: { onMessage: { - addListener: function () {}, + addListener: function () {} }, - sendMessage: function () {}, - }, - }; + sendMessage: function () {} + } + } - loadFixtures("meta-tags.html") + loadFixtures('meta-tags.html') - showMetaTagsComponent = new ShowMetaTagsComponent; - showMetaTagsComponent.toggleMetaTags(); + showMetaTagsComponent = new ShowMetaTagsComponent() + showMetaTagsComponent.toggleMetaTags() - showMetaTagsBannerElement = document.querySelector(`#${showMetaTagsBannerId}`); - }); + showMetaTagsBannerElement = document.querySelector(`#${showMetaTagsBannerId}`) + }) - it("shows meta tags with name and content", function () { - expect(showMetaTagsBannerElement.textContent).toMatch(/foo/); - }); + it('shows meta tags with name and content', function () { + expect(showMetaTagsBannerElement.textContent).toMatch(/foo/) + }) it("doesn't show meta tags that use property instead of name", function () { // No particular reason for this, it just doesn't - expect(showMetaTagsBannerElement.textContent).not.toMatch(/og:image/); - }); + expect(showMetaTagsBannerElement.textContent).not.toMatch(/og:image/) + }) - it("removes the banner when toggled off", function () { - showMetaTagsComponent.toggleMetaTags(); + it('removes the banner when toggled off', function () { + showMetaTagsComponent.toggleMetaTags() - expect(showMetaTagsBannerElement).not.toBeVisible(); - }); -}); + expect(showMetaTagsBannerElement).not.toBeVisible() + }) +}) diff --git a/src/components/design-mode-component/design-mode-component.js b/src/components/design-mode-component/design-mode-component.js index c561855..ded8869 100644 --- a/src/components/design-mode-component/design-mode-component.js +++ b/src/components/design-mode-component/design-mode-component.js @@ -1,24 +1,24 @@ -"use strict"; +'use strict' -function DesignModeComponent() { - this.state = false; +function DesignModeComponent () { + this.state = false chrome.runtime.onMessage.addListener(function (request) { - if (request.trigger == "toggleDesignMode") { - this.toggleDesignMode(); + if (request.trigger == 'toggleDesignMode') { + this.toggleDesignMode() } - }.bind(this)); + }.bind(this)) } DesignModeComponent.prototype.toggleDesignMode = function () { - this.state = !this.state; + this.state = !this.state - window.document.designMode = this.state ? "on" : "off"; - this.toggleDesignModeBanner(); - this.sendState(); + window.document.designMode = this.state ? 'on' : 'off' + this.toggleDesignModeBanner() + this.sendState() } -DesignModeComponent.prototype.toggleDesignModeBanner = function() { - var designModeBannerId = "govuk-chrome-toolkit-design-mode-banner"; +DesignModeComponent.prototype.toggleDesignModeBanner = function () { + var designModeBannerId = 'govuk-chrome-toolkit-design-mode-banner' if (this.state) { var designModeBanner = `
@@ -27,18 +27,18 @@ DesignModeComponent.prototype.toggleDesignModeBanner = function() {
` - var designModeWrapper = document.createElement("div") + var designModeWrapper = document.createElement('div') designModeWrapper.innerHTML = designModeBanner - document.body.prepend(designModeWrapper); + document.body.prepend(designModeWrapper) } else { var designModeBannerElement = document.querySelector(`#${designModeBannerId}`) designModeBannerElement.remove() } } -DesignModeComponent.prototype.sendState = function() { +DesignModeComponent.prototype.sendState = function () { chrome.runtime.sendMessage({ - action: "designModeState", + action: 'designModeState', designModeState: this.state - }); -}; + }) +} diff --git a/src/components/highlight-component/highlight-component.js b/src/components/highlight-component/highlight-component.js index d111627..f8f012f 100644 --- a/src/components/highlight-component/highlight-component.js +++ b/src/components/highlight-component/highlight-component.js @@ -1,95 +1,95 @@ -'use strict'; +'use strict' -function HighlightComponent() { - this.isComponentsHighlighted = false; - this.components = extractComponentsFromPage(); +function HighlightComponent () { + this.isComponentsHighlighted = false + this.components = extractComponentsFromPage() - // Get an array of components on the page. - function extractComponentsFromPage() { + // Get an array of components on the page. + function extractComponentsFromPage () { var componentsOnPage = document.querySelectorAll('[class*="app-c"], [class*="gem-c"]') var componentsOnPageArray = Array.from(componentsOnPage) - return componentsOnPageArray.reduce(function(array, element) { - var componentRegex = /(app-c-|gem-c-)([^ _\n]*(?=[ \n]|$))/; + return componentsOnPageArray.reduce(function (array, element) { + var componentRegex = /(app-c-|gem-c-)([^ _\n]*(?=[ \n]|$))/ // Get the value of the components class attribute var elementClassName = null - if (typeof element.className === "string") { + if (typeof element.className === 'string') { elementClassName = element.className } - // Check if it's an app or gem component - var match = false; - + // Check if it's an app or gem component + var match = false + if (elementClassName) { - match = elementClassName.match(componentRegex); + match = elementClassName.match(componentRegex) } if (match) { array.push({ - element: element, // - prefix: match[1], // componentType - name: match[2] // componentName - }); + element: element, // + prefix: match[1], // componentType + name: match[2] // componentName + }) } return array - }, []); + }, []) } // This is looping over the components and for each component in the array it will call the setupComponent method and pass in the component to setup. - this.components.forEach(setupComponent.bind(this)); - - // This method, is going to modify the HTML for each component, it'll set the attribute data-component-name and data-app-name, - function setupComponent(component) { - component.element.setAttribute('data-component-name', component.name); - component.element.setAttribute('data-app-name', component.prefix); - - //the method will add a click event (listener), it'll then open a new window with the documentationUrl for that component. - component.element.addEventListener('click', function() { + this.components.forEach(setupComponent.bind(this)) + + // This method, is going to modify the HTML for each component, it'll set the attribute data-component-name and data-app-name, + function setupComponent (component) { + component.element.setAttribute('data-component-name', component.name) + component.element.setAttribute('data-app-name', component.prefix) + + // the method will add a click event (listener), it'll then open a new window with the documentationUrl for that component. + component.element.addEventListener('click', function () { if (this.isComponentsHighlighted) { - window.open( Helpers.documentationUrl(component) ); + window.open(Helpers.documentationUrl(component)) } - }.bind(this)); + }.bind(this)) } chrome.runtime.onMessage.addListener(function (request) { if (request.trigger == 'toggleComponents') { - this.toggleComponents(); + this.toggleComponents() } - }.bind(this)); + }.bind(this)) } HighlightComponent.prototype.toggleComponents = function () { - this.isComponentsHighlighted = !this.isComponentsHighlighted; + this.isComponentsHighlighted = !this.isComponentsHighlighted for (var i = 0; i < this.components.length; i++) { - this.components[i].element.classList.toggle('highlight-component', this.isComponentsHighlighted); + this.components[i].element.classList.toggle('highlight-component', this.isComponentsHighlighted) } - this.sendState(); + this.sendState() } -HighlightComponent.prototype.sendState = function() { +HighlightComponent.prototype.sendState = function () { chrome.runtime.sendMessage({ - action: "highlightState", + action: 'highlightState', highlightState: this.isComponentsHighlighted - }); -}; + }) +} var Helpers = { documentationUrl: function (component) { if (component.prefix.startsWith('app-c')) { - return "https://" + this.appHostname() + ".herokuapp.com/component-guide/" + component.name + return 'https://' + this.appHostname() + '.herokuapp.com/component-guide/' + component.name } else if (component.prefix.startsWith('gem-c')) { - return "https://govuk-publishing-components.herokuapp.com/component-guide/" + component.name.replace(/-/g, '_'); + return 'https://govuk-publishing-components.herokuapp.com/component-guide/' + component.name.replace(/-/g, '_') } }, substitutions: { - 'collections': 'govuk-collections' + collections: 'govuk-collections' }, - appHostname: function() { - var rendering_element = document.querySelector('meta[name="govuk:rendering-application"]'); - var rendering_app = rendering_element.getAttribute('content'); - return this.substitutions[rendering_app] || rendering_app; + appHostname: function () { + var rendering_element = document.querySelector('meta[name="govuk:rendering-application"]') + var rendering_app = rendering_element.getAttribute('content') + return this.substitutions[rendering_app] || rendering_app } } diff --git a/src/components/show-meta-tags-component/show-meta-tags-component.js b/src/components/show-meta-tags-component/show-meta-tags-component.js index d348855..003cfa3 100644 --- a/src/components/show-meta-tags-component/show-meta-tags-component.js +++ b/src/components/show-meta-tags-component/show-meta-tags-component.js @@ -1,30 +1,29 @@ -'use strict'; -function ShowMetaTagsComponent() { - this.isMetaTagsDisplayed = false; +'use strict' +function ShowMetaTagsComponent () { + this.isMetaTagsDisplayed = false chrome.runtime.onMessage.addListener(function (request) { if (request.trigger == 'toggleMetaTags') { - this.toggleMetaTags(); + this.toggleMetaTags() } - }.bind(this)); + }.bind(this)) } -ShowMetaTagsComponent.prototype.toggleMetaTags = function() { - - if(this.isMetaTagsDisplayed) { - this.hideMetaTags(); +ShowMetaTagsComponent.prototype.toggleMetaTags = function () { + if (this.isMetaTagsDisplayed) { + this.hideMetaTags() } else { - this.showMetaTags(); + this.showMetaTags() } - this.sendState(); -}; + this.sendState() +} -ShowMetaTagsComponent.prototype.showMetaTags = function() { - var titleElement = document.querySelector("title"); - var titleText = "" +ShowMetaTagsComponent.prototype.showMetaTags = function () { + var titleElement = document.querySelector('title') + var titleText = '' if (titleElement) { - titleText = titleElement.textContent; + titleText = titleElement.textContent } var titleTag = ` @@ -34,23 +33,21 @@ ShowMetaTagsComponent.prototype.showMetaTags = function() {

` - var metaTagContainer = document.createElement("div"); - metaTagContainer.setAttribute("id", "govuk-chrome-toolkit-banner") + var metaTagContainer = document.createElement('div') + metaTagContainer.setAttribute('id', 'govuk-chrome-toolkit-banner') // insert titleTag into metaTagContainer - metaTagContainer.insertAdjacentHTML("beforeend" ,titleTag); - + metaTagContainer.insertAdjacentHTML('beforeend', titleTag) - var metaTags = document.querySelectorAll("meta"); - metaTags.forEach(function(metaTag) { - - var metaTagName = metaTag.getAttribute("name"); - if(metaTagName === null) { - return; + var metaTags = document.querySelectorAll('meta') + metaTags.forEach(function (metaTag) { + var metaTagName = metaTag.getAttribute('name') + if (metaTagName === null) { + return } - - var metaTagContent = metaTag.getAttribute("content"); - if(metaTagContent === null) { - metaTagContent = ""; + + var metaTagContent = metaTag.getAttribute('content') + if (metaTagContent === null) { + metaTagContent = '' } var metaTagInfo = ` @@ -61,25 +58,24 @@ ShowMetaTagsComponent.prototype.showMetaTags = function() { ` // insert metaTagInfo into metaTagContainer - metaTagContainer.insertAdjacentHTML("beforeend", metaTagInfo); - - }); + metaTagContainer.insertAdjacentHTML('beforeend', metaTagInfo) + }) - document.body.prepend(metaTagContainer); + document.body.prepend(metaTagContainer) - this.isMetaTagsDisplayed = true; + this.isMetaTagsDisplayed = true } -ShowMetaTagsComponent.prototype.hideMetaTags = function() { - var hideMetaTagsBanner = document.querySelector(`#govuk-chrome-toolkit-banner`); - hideMetaTagsBanner.remove(); +ShowMetaTagsComponent.prototype.hideMetaTags = function () { + var hideMetaTagsBanner = document.querySelector('#govuk-chrome-toolkit-banner') + hideMetaTagsBanner.remove() - this.isMetaTagsDisplayed = false; + this.isMetaTagsDisplayed = false } -ShowMetaTagsComponent.prototype.sendState = function() { +ShowMetaTagsComponent.prototype.sendState = function () { chrome.runtime.sendMessage({ - action: "showMetaTagState", + action: 'showMetaTagState', showMetaTagsState: this.isMetaTagsDisplayed - }); -}; \ No newline at end of file + }) +} diff --git a/src/events/ab_bucket_store.js b/src/events/ab_bucket_store.js index 8076434..ff9046f 100644 --- a/src/events/ab_bucket_store.js +++ b/src/events/ab_bucket_store.js @@ -3,29 +3,29 @@ // It stores the environment-specific state of the user's A/B testing buckets in // memory, until the browser or the extension is next reloaded. var abBucketStore = (function () { - function createStore() { - var abTestBuckets = {}; + function createStore () { + var abTestBuckets = {} - function addAbTests(initialBuckets, hostname) { - abTestBuckets[hostname] = abTestBuckets[hostname] || {}; + function addAbTests (initialBuckets, hostname) { + abTestBuckets[hostname] = abTestBuckets[hostname] || {} Object.keys(initialBuckets).map(function (testName) { // Add any A/B tests that are not already defined, but do not overwrite // any that we are already tracking. if (!abTestBuckets[hostname][testName]) { - abTestBuckets[hostname][testName] = initialBuckets[testName]; + abTestBuckets[hostname][testName] = initialBuckets[testName] } - }); + }) } - function getAll(hostname) { - return abTestBuckets[hostname] || {}; + function getAll (hostname) { + return abTestBuckets[hostname] || {} } - function setBucket(testName, bucket, hostname) { - abTest = abTestBuckets[hostname][testName]; - abTest.currentBucket = bucket; - abTestBuckets[hostname][testName] = abTest; + function setBucket (testName, bucket, hostname) { + abTest = abTestBuckets[hostname][testName] + abTest.currentBucket = bucket + abTestBuckets[hostname][testName] = abTest } return { @@ -38,4 +38,4 @@ var abBucketStore = (function () { return { createStore: createStore } -}()); +}()) diff --git a/src/events/ab_test_settings.js b/src/events/ab_test_settings.js index 3350866..34cd221 100644 --- a/src/events/ab_test_settings.js +++ b/src/events/ab_test_settings.js @@ -5,23 +5,22 @@ // with the correct A/B variant. It gets the current variant from the meta tags. // - Responds to messages to change the current A/B variant. It updates the // headers it will send and set a cookie like Fastly would. -var abTestSettings = (function() { +var abTestSettings = (function () { + var abBucketStore = chrome.extension.getBackgroundPage().abBucketStore.createStore() - var abBucketStore = chrome.extension.getBackgroundPage().abBucketStore.createStore(); + function initialize (initialBuckets, url) { + var hostname = extractHostname(url) - function initialize(initialBuckets, url) { - var hostname = extractHostname(url); - - abBucketStore.addAbTests(initialBuckets, hostname); - return abBucketStore.getAll(hostname); + abBucketStore.addAbTests(initialBuckets, hostname) + return abBucketStore.getAll(hostname) } - function updateCookie(name, bucket, url, callback) { - var cookieName = "ABTest-" + name; + function updateCookie (name, bucket, url, callback) { + var cookieName = 'ABTest-' + name - chrome.cookies.get({name: cookieName, url: url}, function (cookie) { + chrome.cookies.get({ name: cookieName, url: url }, function (cookie) { if (cookie) { - cookie.value = bucket; + cookie.value = bucket var updatedCookie = { name: cookieName, @@ -29,45 +28,45 @@ var abTestSettings = (function() { url: url, path: cookie.path, expirationDate: cookie.expirationDate - }; + } - chrome.cookies.set(updatedCookie, callback); + chrome.cookies.set(updatedCookie, callback) } else { - callback(); + callback() } - }); + }) } - function setBucket(testName, bucketName, url, callback) { - abBucketStore.setBucket(testName, bucketName, extractHostname(url)); - updateCookie(testName, bucketName, url, callback); + function setBucket (testName, bucketName, url, callback) { + abBucketStore.setBucket(testName, bucketName, extractHostname(url)) + updateCookie(testName, bucketName, url, callback) } - function addAbHeaders(details) { - var abTestBuckets = abBucketStore.getAll(extractHostname(details.url)); + function addAbHeaders (details) { + var abTestBuckets = abBucketStore.getAll(extractHostname(details.url)) Object.keys(abTestBuckets).map(function (abTestName) { details.requestHeaders.push({ - name: "GOVUK-ABTest-" + abTestName, + name: 'GOVUK-ABTest-' + abTestName, value: abTestBuckets[abTestName].currentBucket - }); - }); + }) + }) - return {requestHeaders: details.requestHeaders}; + return { requestHeaders: details.requestHeaders } } - function extractHostname(url) { - return new URL(url).hostname; + function extractHostname (url) { + return new URL(url).hostname } chrome.webRequest.onBeforeSendHeaders.addListener( addAbHeaders, - {urls: ["*://*.gov.uk/*"]}, - ["requestHeaders", "blocking"] - ); + { urls: ['*://*.gov.uk/*'] }, + ['requestHeaders', 'blocking'] + ) return { initialize: initialize, setBucket: setBucket - }; -}()); + } +}()) diff --git a/src/events/icon.js b/src/events/icon.js index 84b4f8c..3c6a383 100644 --- a/src/events/icon.js +++ b/src/events/icon.js @@ -1,15 +1,15 @@ // This script runs in the background in Chrome. It will activate the small // greyed out GOV.UK logo in the Chrome menu bar whenever we're on a gov.uk page. -function showIconForGovukPages(tabId, changeInfo, tab) { +function showIconForGovukPages (tabId, changeInfo, tab) { if (tab.url.match(/www\.gov\.uk/) || tab.url.match(/dev\.gov\.uk/) || tab.url.match(/.*publishing\.service\.gov\.uk/)) { - chrome.pageAction.show(tabId); + chrome.pageAction.show(tabId) if (window.matchMedia('(prefers-color-scheme: dark)').matches) { - chrome.pageAction.setIcon({tabId: tabId, path: { '19': 'icons/crown-logo-19-active-dark-mode.png', '38': 'icons/crown-logo-38-active-dark-mode.png' }}); + chrome.pageAction.setIcon({ tabId: tabId, path: { 19: 'icons/crown-logo-19-active-dark-mode.png', 38: 'icons/crown-logo-38-active-dark-mode.png' } }) } else { - chrome.pageAction.setIcon({tabId: tabId, path: { '19': 'icons/crown-logo-19-active.png', '38': 'icons/crown-logo-38-active.png' }}); + chrome.pageAction.setIcon({ tabId: tabId, path: { 19: 'icons/crown-logo-19-active.png', 38: 'icons/crown-logo-38-active.png' } }) } } } -chrome.tabs.onCreated.addListener(showIconForGovukPages); -chrome.tabs.onUpdated.addListener(showIconForGovukPages); +chrome.tabs.onCreated.addListener(showIconForGovukPages) +chrome.tabs.onUpdated.addListener(showIconForGovukPages) diff --git a/src/fetch-page-data.js b/src/fetch-page-data.js index 59dd097..861f5ff 100644 --- a/src/fetch-page-data.js +++ b/src/fetch-page-data.js @@ -3,7 +3,7 @@ // the information needed to render it. chrome.runtime.sendMessage({ - action: "populatePopup", + action: 'populatePopup', currentLocation: window.location.href, currentHost: window.location.host, currentOrigin: window.location.origin, @@ -12,33 +12,33 @@ chrome.runtime.sendMessage({ abTestBuckets: getAbTestBuckets(), windowHeight: window.innerHeight, highlightState: window.highlightComponent.state -}); +}) -function getMetatag(name) { +function getMetatag (name) { var meta = document.getElementsByTagName('meta')[name] return meta && meta.getAttribute('content') } -function getAbTestBuckets() { - var abMetaTags = document.querySelectorAll('meta[name="govuk:ab-test"]'); +function getAbTestBuckets () { + var abMetaTags = document.querySelectorAll('meta[name="govuk:ab-test"]') - var metaTagPattern = /([\w-]+):([\w-]+)/; - var buckets = {}; + var metaTagPattern = /([\w-]+):([\w-]+)/ + var buckets = {} abMetaTags.forEach(function (metaTag) { - var testNameAndBucket = metaTagPattern.exec(metaTag.content); - var testName = testNameAndBucket[1]; - var currentBucket = testNameAndBucket[2]; + var testNameAndBucket = metaTagPattern.exec(metaTag.content) + var testName = testNameAndBucket[1] + var currentBucket = testNameAndBucket[2] var allowedBuckets = - (metaTag.dataset.allowedVariants || "A,B").split(","); + (metaTag.dataset.allowedVariants || 'A,B').split(',') buckets[testName] = { currentBucket: currentBucket, allowedBuckets: allowedBuckets } - }); + }) - return buckets; + return buckets } -undefined; +undefined diff --git a/src/popup/ab_tests.js b/src/popup/ab_tests.js index 12e6995..4dbbee8 100644 --- a/src/popup/ab_tests.js +++ b/src/popup/ab_tests.js @@ -1,19 +1,18 @@ -var Popup = Popup || {}; +var Popup = Popup || {} -Popup.findActiveAbTests = function(abTestBuckets) { +Popup.findActiveAbTests = function (abTestBuckets) { return Object.keys(abTestBuckets).map(function (abTestName) { - - var currentBucket = abTestBuckets[abTestName].currentBucket; - var allowedBuckets = abTestBuckets[abTestName].allowedBuckets; + var currentBucket = abTestBuckets[abTestName].currentBucket + var allowedBuckets = abTestBuckets[abTestName].allowedBuckets return { testName: abTestName, buckets: allowedBuckets.map(function (bucketName) { return { bucketName: bucketName, - class: currentBucket === bucketName ? "ab-bucket-selected" : "" - }; + class: currentBucket === bucketName ? 'ab-bucket-selected' : '' + } }) } - }); -}; + }) +} diff --git a/src/popup/content_links.js b/src/popup/content_links.js index d9cd4f2..0f7c342 100644 --- a/src/popup/content_links.js +++ b/src/popup/content_links.js @@ -1,42 +1,42 @@ -var Popup = Popup || {}; +var Popup = Popup || {} // Given a location, generate links to different content presentations -Popup.generateContentLinks = function(location, origin, pathname, currentEnvironment, renderingApplication) { - var path = Popup.extractPath(location, pathname, renderingApplication); +Popup.generateContentLinks = function (location, origin, pathname, currentEnvironment, renderingApplication) { + var path = Popup.extractPath(location, pathname, renderingApplication) // If no path can be found (which means we're probably in a publishing app) // Similarly if we're on GOVUK account, not many of the links are relevant if (!path || origin.match(/www.account/)) { - return []; + return [] } // This is 'https://www.gov.uk' or 'https://www-origin.integration.publishing.service.gov.uk/', etc. if (origin == 'http://webarchive.nationalarchives.gov.uk' || origin.match(/draft-origin/) || origin.match(/content-data/) || origin.match(/support/)) { - origin = "https://www.gov.uk" + origin = 'https://www.gov.uk' } var links = [] // If we're on the homepage there's not much to show. - links.push({ name: "On GOV.UK", url: origin + path }) - links.push({ name: "Content item (JSON)", url: currentEnvironment.origin + "/api/content" + path }) - links.push({ name: "Search data (JSON)", url: origin + "/api/search.json?filter_link=" + path }) - links.push({ name: "Info page", url: origin + "/info" + path }) - links.push({ name: "Draft (may not always work)", url: currentEnvironment.protocol + '://draft-origin.' + currentEnvironment.serviceDomain + path }) - links.push({ name: "User feedback", url: currentEnvironment.protocol + '://support.' + currentEnvironment.serviceDomain + '/anonymous_feedback?path=' + path }) - links.push({ name: "National Archives", url: "http://webarchive.nationalarchives.gov.uk/*/https://www.gov.uk" + path }) - links.push({ name: "View data about page on Content Data", url: currentEnvironment.protocol + '://content-data.' + currentEnvironment.serviceDomain + '/metrics' + path }) - links.push({ name: "Check for content problems in Siteimprove", url: "https://my2.siteimprove.com/QualityAssurance/1054012/Overview/Search?SearchIn=Url&Query=" + path}) - links.push({ name: "View structured data", url: "https://search.google.com/structured-data/testing-tool/u/0/#url=https://www.gov.uk" + path }) - - var currentUrl = origin + path; - - if (renderingApplication == "smartanswers") { - links.push({ name: "SmartAnswers: Visualise", url: currentUrl.replace(/\/y.*$/, "") + "/y/visualise" }) + links.push({ name: 'On GOV.UK', url: origin + path }) + links.push({ name: 'Content item (JSON)', url: currentEnvironment.origin + '/api/content' + path }) + links.push({ name: 'Search data (JSON)', url: origin + '/api/search.json?filter_link=' + path }) + links.push({ name: 'Info page', url: origin + '/info' + path }) + links.push({ name: 'Draft (may not always work)', url: currentEnvironment.protocol + '://draft-origin.' + currentEnvironment.serviceDomain + path }) + links.push({ name: 'User feedback', url: currentEnvironment.protocol + '://support.' + currentEnvironment.serviceDomain + '/anonymous_feedback?path=' + path }) + links.push({ name: 'National Archives', url: 'http://webarchive.nationalarchives.gov.uk/*/https://www.gov.uk' + path }) + links.push({ name: 'View data about page on Content Data', url: currentEnvironment.protocol + '://content-data.' + currentEnvironment.serviceDomain + '/metrics' + path }) + links.push({ name: 'Check for content problems in Siteimprove', url: 'https://my2.siteimprove.com/QualityAssurance/1054012/Overview/Search?SearchIn=Url&Query=' + path }) + links.push({ name: 'View structured data', url: 'https://search.google.com/structured-data/testing-tool/u/0/#url=https://www.gov.uk' + path }) + + var currentUrl = origin + path + + if (renderingApplication == 'smartanswers') { + links.push({ name: 'SmartAnswers: Visualise', url: currentUrl.replace(/\/y.*$/, '') + '/y/visualise' }) } return links.map(function (link) { - link.class = link.url == location ? "current" : "" - return link; + link.class = link.url == location ? 'current' : '' + return link }) } diff --git a/src/popup/environment.js b/src/popup/environment.js index 7986d11..d1d6845 100644 --- a/src/popup/environment.js +++ b/src/popup/environment.js @@ -1,95 +1,94 @@ -var Popup = Popup || {}; +var Popup = Popup || {} // Given a location, host and origin, generate URLs for all GOV.UK environments. // // Returns a hash with envs, including one with `class: "current"` to show // the current environment. -Popup.environment = function(location, host, origin) { - - function isPartOfGOVUK() { +Popup.environment = function (location, host, origin) { + function isPartOfGOVUK () { return host.match(/www.gov.uk/) || host.match(/publishing.service.gov.uk/) || - host.match(/dev.gov.uk/); + host.match(/dev.gov.uk/) } - function isGOVUKAccount() { + function isGOVUKAccount () { return host.match(/www.account/) || host.match(/login.service.dev/) } if (!isPartOfGOVUK()) { return { allEnvironments: { - name: "GOV.UK", - url: "https://www.gov.uk" + name: 'GOV.UK', + url: 'https://www.gov.uk' } } } var ENVIRONMENTS = [ { - name: "Production", - protocol: "https", - serviceDomain: "publishing.service.gov.uk", - host: "https://www.gov.uk", + name: 'Production', + protocol: 'https', + serviceDomain: 'publishing.service.gov.uk', + host: 'https://www.gov.uk', origin: origin }, { - name: "Staging", - protocol: "https", - serviceDomain: "staging.publishing.service.gov.uk", - host: "https://www.staging.publishing.service.gov.uk", + name: 'Staging', + protocol: 'https', + serviceDomain: 'staging.publishing.service.gov.uk', + host: 'https://www.staging.publishing.service.gov.uk', origin: origin }, { - name: "Integration", - protocol: "https", - serviceDomain: "integration.publishing.service.gov.uk", - host: "https://www.integration.publishing.service.gov.uk", + name: 'Integration', + protocol: 'https', + serviceDomain: 'integration.publishing.service.gov.uk', + host: 'https://www.integration.publishing.service.gov.uk', origin: origin }, { - name: "Development", - protocol: "http", - serviceDomain: "dev.gov.uk", - host: "http://www.dev.gov.uk", + name: 'Development', + protocol: 'http', + serviceDomain: 'dev.gov.uk', + host: 'http://www.dev.gov.uk', origin: origin } ] - var application = isGOVUKAccount() ? host.split('.')[1] : host.split('.')[0], - inFrontend = application.match(/www/) && !isGOVUKAccount(), - environments = ENVIRONMENTS; + var application = isGOVUKAccount() ? host.split('.')[1] : host.split('.')[0] + var inFrontend = application.match(/www/) && !isGOVUKAccount() + var environments = ENVIRONMENTS - var currentEnvironment; + var currentEnvironment var allEnvironments = environments.map(function (env) { if (inFrontend) { - var replacement = env.host; + var replacement = env.host } else if (isGOVUKAccount()) { - var replacement = env.protocol + "://www." + application + "." + env.serviceDomain; + var replacement = env.protocol + '://www.' + application + '.' + env.serviceDomain } else { - var replacement = env.protocol + "://" + application + "." + env.serviceDomain; + var replacement = env.protocol + '://' + application + '.' + env.serviceDomain } - env.url = location.replace(origin, replacement); - if (env.name === "Development" && isGOVUKAccount()) { + env.url = location.replace(origin, replacement) + if (env.name === 'Development' && isGOVUKAccount()) { // The GOV.UK Account is a special snowflake app with a special snowflake dev environment URL - env.url = "http://www.login.service.dev.gov.uk/" + env.url = 'http://www.login.service.dev.gov.uk/' } if (location == env.url) { - env.class = "current"; - currentEnvironment = env; + env.class = 'current' + currentEnvironment = env } else { - env.class = ""; + env.class = '' } - return env; - }).filter(function( env ) { + return env + }).filter(function (env) { // GOV.UK Account does not have an Integration environment – remove this option from the list of environments - if (env.name === "Integration" && isGOVUKAccount()) return; - return env; - }); + if (env.name === 'Integration' && isGOVUKAccount()) return + return env + }) return { allEnvironments: allEnvironments, diff --git a/src/popup/external_links.js b/src/popup/external_links.js index 76b12e6..cc77538 100644 --- a/src/popup/external_links.js +++ b/src/popup/external_links.js @@ -1,48 +1,47 @@ -var Popup = Popup || {}; +var Popup = Popup || {} // With the content item we can generate a bunch of external links. -Popup.generateExternalLinks = function(contentItem, env) { - +Popup.generateExternalLinks = function (contentItem, env) { // Not all publishing_apps name corresponds to the name of the // alphagov repo. - function publishingAppNameToRepo(appName) { + function publishingAppNameToRepo (appName) { var APP_NAMES_TO_REPOS = { - smartanswers: 'smart-answers', - }; + smartanswers: 'smart-answers' + } - return APP_NAMES_TO_REPOS[appName] || appName; + return APP_NAMES_TO_REPOS[appName] || appName } // Not all rendering_apps name corresponds to the name of the // alphagov repo. - function renderingAppNameToRepo(appName) { + function renderingAppNameToRepo (appName) { var APP_NAMES_TO_REPOS = { smartanswers: 'smart-answers', - 'whitehall-frontend': 'whitehall', - }; + 'whitehall-frontend': 'whitehall' + } - return APP_NAMES_TO_REPOS[appName] || appName; + return APP_NAMES_TO_REPOS[appName] || appName } var links = [] generateEditLink(contentItem, env).forEach(element => { - links.push(element); - }); + links.push(element) + }) - var schemaName = contentItem.schema_name || ""; - if (schemaName.indexOf("placeholder") !== -1) { - schemaName = "placeholder" + var schemaName = contentItem.schema_name || '' + if (schemaName.indexOf('placeholder') !== -1) { + schemaName = 'placeholder' } links.push({ name: 'Add tags in content-tagger', - url: env.protocol + '://content-tagger.' + env.serviceDomain + '/content/' + contentItem.content_id, + url: env.protocol + '://content-tagger.' + env.serviceDomain + '/content/' + contentItem.content_id }) links.push({ name: 'Look up in search-admin', - url: env.protocol + '://search-admin.' + env.serviceDomain + '/results/result?base_path=' + encodeURIComponent(contentItem.base_path), + url: env.protocol + '://search-admin.' + env.serviceDomain + '/results/result?base_path=' + encodeURIComponent(contentItem.base_path) }) links.push({ @@ -65,64 +64,64 @@ Popup.generateExternalLinks = function(contentItem, env) { url: 'https://docs.publishing.service.gov.uk/document-types/' + contentItem.document_type + '.html' }) - return links.filter(function(item) { return item != undefined }); + return links.filter(function (item) { return item != undefined }) } -function generateEditLink(contentItem, env) { +function generateEditLink (contentItem, env) { if (contentItem.document_type == 'topic') { return [{ name: 'Edit in collections-publisher', - url: env.protocol + '://collections-publisher.' + env.serviceDomain + '/specialist-sector-pages/' + contentItem.content_id, + url: env.protocol + '://collections-publisher.' + env.serviceDomain + '/specialist-sector-pages/' + contentItem.content_id }] } else if (contentItem.document_type == 'step_by_step_nav') { return [{ name: 'Look up in collections-publisher', - url: env.protocol + '://collections-publisher.' + env.serviceDomain + '/step-by-step-pages', + url: env.protocol + '://collections-publisher.' + env.serviceDomain + '/step-by-step-pages' }] } else if (contentItem.document_type == 'mainstream_browse_page') { return [{ name: 'Edit in collections-publisher', - url: env.protocol + '://collections-publisher.' + env.serviceDomain + '/mainstream-browse-pages/' + contentItem.content_id, + url: env.protocol + '://collections-publisher.' + env.serviceDomain + '/mainstream-browse-pages/' + contentItem.content_id }] } else if (contentItem.document_type == 'taxon') { return [{ name: 'Edit in content-tagger', - url: env.protocol + '://content-tagger.' + env.serviceDomain + '/taxons/' + contentItem.content_id, + url: env.protocol + '://content-tagger.' + env.serviceDomain + '/taxons/' + contentItem.content_id }] } else if (contentItem.publishing_app == 'publisher') { return [{ name: 'Look up in Mainstream Publisher', - url: env.protocol + '://publisher.' + env.serviceDomain + '/?list=published&string_filter=' + contentItem.base_path.substring(1) + '&user_filter=all', + url: env.protocol + '://publisher.' + env.serviceDomain + '/?list=published&string_filter=' + contentItem.base_path.substring(1) + '&user_filter=all' }] } else if (contentItem.publishing_app == 'content-publisher') { return [{ name: 'Edit in Content Publisher', - url: env.protocol + '://content-publisher.' + env.serviceDomain + '/documents/' + contentItem.content_id + ':' + contentItem.locale, + url: env.protocol + '://content-publisher.' + env.serviceDomain + '/documents/' + contentItem.content_id + ':' + contentItem.locale }] } else if (contentItem.publishing_app == 'whitehall') { return [{ name: 'Edit in Whitehall Publisher', - url: env.protocol + '://whitehall-admin.' + env.serviceDomain + '/government/admin/by-content-id/' + contentItem.content_id, + url: env.protocol + '://whitehall-admin.' + env.serviceDomain + '/government/admin/by-content-id/' + contentItem.content_id }] } else if (contentItem.document_type == 'manual') { return [{ name: 'Edit in Manuals Publisher', - url: env.protocol + '://manuals-publisher.' + env.serviceDomain + '/manuals/' + contentItem.content_id, + url: env.protocol + '://manuals-publisher.' + env.serviceDomain + '/manuals/' + contentItem.content_id }] } else if (contentItem.publishing_app == 'specialist-publisher') { return [{ name: 'Edit in Specialist Publisher', - url: env.protocol + '://specialist-publisher.' + env.serviceDomain + '/' + contentItem.document_type.replace(/_/g, "-") + 's/' + contentItem.content_id, + url: env.protocol + '://specialist-publisher.' + env.serviceDomain + '/' + contentItem.document_type.replace(/_/g, '-') + 's/' + contentItem.content_id }] } else if (contentItem.publishing_app == 'smartanswers') { return [ { name: 'View flow page in Github', - url: 'https://github.com/alphagov/smart-answers/tree/main/app/flows' + contentItem.base_path.replace(/-/g, "_") + "_flow.rb", + url: 'https://github.com/alphagov/smart-answers/tree/main/app/flows' + contentItem.base_path.replace(/-/g, '_') + '_flow.rb' }, { name: 'View flow details folder in Github', - url: 'https://github.com/alphagov/smart-answers/tree/main/app/flows' + contentItem.base_path.replace(/-/g, "_") + "_flow", + url: 'https://github.com/alphagov/smart-answers/tree/main/app/flows' + contentItem.base_path.replace(/-/g, '_') + '_flow' } ] } else { diff --git a/src/popup/extract_path.js b/src/popup/extract_path.js index 4f9404d..5e19d93 100644 --- a/src/popup/extract_path.js +++ b/src/popup/extract_path.js @@ -1,43 +1,35 @@ -var Popup = Popup || {}; +var Popup = Popup || {} // Extract the relevant path from a location, such as `/foo` from URLs like // `www.gov.uk/foo` and `www.gov.uk/api/content/foo`. -Popup.extractPath = function(location, pathname, renderingApplication) { - var extractedPath; +Popup.extractPath = function (location, pathname, renderingApplication) { + var extractedPath if (location.match(/api\/content/)) { - extractedPath = pathname.replace('api/content/', ''); - } - else if (location.match(/anonymous_feedback/)) { - extractedPath = extractQueryParameter(location, 'path'); - } - else if (location.match(/content-data/)) { - extractedPath = pathname.replace('metrics/', '');; - } - else if (location.match(/nationalarchives.gov.uk/)) { - extractedPath = pathname.split('https://www.gov.uk')[1]; - } - else if (location.match(/api\/search.json/)) { - extractedPath = extractQueryParameter(location, 'filter_link'); - } - else if (location.match(/info/)) { - extractedPath = pathname.replace('info/', ''); - } - else if (location.match(/api.*\.json/)) { - extractedPath = pathname.replace('api/', '').replace('.json', ''); - } - else if (location.match(/visualise/)) { - extractedPath = pathname.replace('/y/visualise', ''); - } - else if (location.match(/www/) || location.match(/draft-origin/)) { - extractedPath = pathname; + extractedPath = pathname.replace('api/content/', '') + } else if (location.match(/anonymous_feedback/)) { + extractedPath = extractQueryParameter(location, 'path') + } else if (location.match(/content-data/)) { + extractedPath = pathname.replace('metrics/', '') + } else if (location.match(/nationalarchives.gov.uk/)) { + extractedPath = pathname.split('https://www.gov.uk')[1] + } else if (location.match(/api\/search.json/)) { + extractedPath = extractQueryParameter(location, 'filter_link') + } else if (location.match(/info/)) { + extractedPath = pathname.replace('info/', '') + } else if (location.match(/api.*\.json/)) { + extractedPath = pathname.replace('api/', '').replace('.json', '') + } else if (location.match(/visualise/)) { + extractedPath = pathname.replace('/y/visualise', '') + } else if (location.match(/www/) || location.match(/draft-origin/)) { + extractedPath = pathname } if (extractedPath) { - return extractedPath.replace('//', '/'); + return extractedPath.replace('//', '/') } - function extractQueryParameter(location, parameter_name) { - return location.split(parameter_name + '=')[1].split('&')[0]; + function extractQueryParameter (location, parameter_name) { + return location.split(parameter_name + '=')[1].split('&')[0] } } diff --git a/src/popup/popup.js b/src/popup/popup.js index fc27b94..709a47f 100644 --- a/src/popup/popup.js +++ b/src/popup/popup.js @@ -1,36 +1,36 @@ // This script is executed when the popup is opened. var Popup = Popup || {}; -(function() { +(function () { // Execute a script on the main thread (which has access to the currently // loaded page). This script will call back to us. - document.addEventListener("DOMContentLoaded", () => { + document.addEventListener('DOMContentLoaded', () => { chrome.tabs.executeScript(null, { - code: "window.highlightComponent = window.highlightComponent || new HighlightComponent; undefined;" - }); + code: 'window.highlightComponent = window.highlightComponent || new HighlightComponent; undefined;' + }) chrome.tabs.executeScript(null, { - code: "window.designModeComponent = window.designModeComponent || new DesignModeComponent; undefined;" - }); + code: 'window.designModeComponent = window.designModeComponent || new DesignModeComponent; undefined;' + }) chrome.tabs.executeScript(null, { - code: "window.showMetaTagsComponent = window.showMetaTagsComponent || new ShowMetaTagsComponent; undefined;" - }); + code: 'window.showMetaTagsComponent = window.showMetaTagsComponent || new ShowMetaTagsComponent; undefined;' + }) chrome.tabs.executeScript(null, { - file: "fetch-page-data.js" - }); - }); + file: 'fetch-page-data.js' + }) + }) // This listener waits for the `populatePopup` message to be sent, from // fetch-page-data.js (called above). It will forward the location to our main // render function. chrome.runtime.onMessage.addListener(function (request, _sender) { - if (request.action == "populatePopup") { + if (request.action == 'populatePopup') { // When we're asked to populate the popup, we'll first send the current // buckets back to the main thread, which "persists" them. - var abTestSettings = chrome.extension.getBackgroundPage().abTestSettings; - var abTestBuckets = abTestSettings.initialize(request.abTestBuckets, request.currentLocation); + var abTestSettings = chrome.extension.getBackgroundPage().abTestSettings + var abTestBuckets = abTestSettings.initialize(request.abTestBuckets, request.currentLocation) renderPopup( request.currentLocation, @@ -40,165 +40,156 @@ var Popup = Popup || {}; request.renderingApplication, request.windowHeight, abTestBuckets - ); + ) } - }); + }) chrome.runtime.onMessage.addListener(function (request, _sender) { - if (request.action == "highlightState") { + if (request.action == 'highlightState') { // When we're asked to populate the popup, we'll first send the current // buckets back to the main thread, which "persists" them. - if (request.highlightState) - document.querySelector('#highlight-components').textContent = 'Stop highlighting components'; - else - document.querySelector('#highlight-components').textContent = 'Highlight Components'; + if (request.highlightState) { document.querySelector('#highlight-components').textContent = 'Stop highlighting components' } else { document.querySelector('#highlight-components').textContent = 'Highlight Components' } } - }); + }) chrome.runtime.onMessage.addListener(function (request, _sender) { - if (request.action == "showMetaTagState") { + if (request.action == 'showMetaTagState') { // When we're asked to populate the popup, we'll first send the current // buckets back to the main thread, which "persists" them. - if (request.metaTags) - document.querySelector('#highlight-meta-tags').textContent = 'Hide meta tags'; - else - document.querySelector('#highlight-meta-tags').textContent = 'Show meta tags'; + if (request.metaTags) { document.querySelector('#highlight-meta-tags').textContent = 'Hide meta tags' } else { document.querySelector('#highlight-meta-tags').textContent = 'Show meta tags' } } - }); + }) chrome.runtime.onMessage.addListener(function (request, _sender) { - if (request.action == "designModeState") { - var toggleLink = document.querySelector("#toggle-design-mode"); - if (request.designModeState) - toggleLink.textContent = "Turn off design mode"; - else - toggleLink.textContent = "Turn on design mode"; + if (request.action == 'designModeState') { + var toggleLink = document.querySelector('#toggle-design-mode') + if (request.designModeState) { toggleLink.textContent = 'Turn off design mode' } else { toggleLink.textContent = 'Turn on design mode' } } - }); + }) // Render the popup. - function renderPopup(location, host, origin, pathname, renderingApplication, windowHeight, abTestBuckets) { + function renderPopup (location, host, origin, pathname, renderingApplication, windowHeight, abTestBuckets) { // Creates a view object with the data and render a template with it. - var view = createView(location, host, origin, pathname, renderingApplication, abTestBuckets); + var view = createView(location, host, origin, pathname, renderingApplication, abTestBuckets) - var contentStore = view.contentLinks.find(function (el) { return el.name == "Content item (JSON)" }) + var contentStore = view.contentLinks.find(function (el) { return el.name == 'Content item (JSON)' }) if (windowHeight < 600) { var popupContent = document.querySelector('#content') popupContent.style.overflowY = 'scroll' - popupContent.style.height = windowHeight + "px"; + popupContent.style.height = windowHeight + 'px' } - if (contentStore) { - renderViewWithExternalLinks(contentStore.url, view, location); + if (contentStore) { + renderViewWithExternalLinks(contentStore.url, view, location) } else { - renderView(view, location); + renderView(view, location) } } - async function renderViewWithExternalLinks(contentStoreUrl, view, location) { + async function renderViewWithExternalLinks (contentStoreUrl, view, location) { try { - const response = await fetch(contentStoreUrl); - const responseJson = await response.json(); - + const response = await fetch(contentStoreUrl) + const responseJson = await response.json() + // update the external links array - view.externalLinks = Popup.generateExternalLinks(responseJson, view.currentEnvironment); - renderView(view, location); + view.externalLinks = Popup.generateExternalLinks(responseJson, view.currentEnvironment) + renderView(view, location) } catch (error) { - renderView(view, location); + renderView(view, location) } } - function renderView(view, currentUrl) { - var template = document.querySelector('#template').innerHTML; - var popupContent = document.querySelector('#content'); - popupContent.innerHTML = Mustache.render(template, view); - setupClicks(); + function renderView (view, currentUrl) { + var template = document.querySelector('#template').innerHTML + var popupContent = document.querySelector('#content') + popupContent.innerHTML = Mustache.render(template, view) + setupClicks() - setupAbToggles(currentUrl); + setupAbToggles(currentUrl) chrome.tabs.executeScript(null, { - code: "window.highlightComponent.sendState(); undefined;" - }); + code: 'window.highlightComponent.sendState(); undefined;' + }) chrome.tabs.executeScript(null, { - code: "window.showMetaTagsComponent.sendState(); undefined;" - }); + code: 'window.showMetaTagsComponent.sendState(); undefined;' + }) chrome.tabs.executeScript(null, { - code: "window.designModeComponent.sendState(); undefined;" - }); + code: 'window.designModeComponent.sendState(); undefined;' + }) } - function setupClicks() { + function setupClicks () { // Clicking on a link won't open the tab because we're in a separate window. // Open external links (to GitHub etc) in a new tab. var externalLinks = document.querySelectorAll('a.js-external') - externalLinks.forEach(function(externalLink) { - externalLink.addEventListener('click', function(e) { + externalLinks.forEach(function (externalLink) { + externalLink.addEventListener('click', function (e) { e.stopPropagation() if (userOpensPageInNewWindow(e)) { - return; + return } - var externalLinkHref = externalLink.getAttribute('href'); - chrome.tabs.create({ url: externalLinkHref }); + var externalLinkHref = externalLink.getAttribute('href') + chrome.tabs.create({ url: externalLinkHref }) }) - }); + }) // Clicking normal links should change the current tab. The popup will not // update itself automatically, we need to re-render the popup manually. var rerenderPopup = document.querySelectorAll('a.js-rerender-popup') - rerenderPopup.forEach(function(reRender){ - reRender.addEventListener('click', function(e){ + rerenderPopup.forEach(function (reRender) { + reRender.addEventListener('click', function (e) { if (userOpensPageInNewWindow(e)) { - return; + return } - e.preventDefault(); + e.preventDefault() var reRenderHref = reRender.getAttribute('href') - chrome.tabs.update({ url: reRenderHref }); + chrome.tabs.update({ url: reRenderHref }) // This will provide us with a `location` object just like `window.location`. - var location = document.createElement('a'); - location.href = reRenderHref; + var location = document.createElement('a') + location.href = reRenderHref // TODO: we're not actually re-rendering the popup correctly here, because // we don't have access to the DOM here. This is a temporary solution to // make most functionality work after the user clicks a button in the popup. - renderPopup(location, "", {}); + renderPopup(location, '', {}) }) - }); - - document.querySelector('#highlight-components').addEventListener('click', function(e) { - e.preventDefault(); - sendChromeTabMessage('toggleComponents'); - }); - - document.querySelector('#highlight-meta-tags').addEventListener('click', function(e) { - e.preventDefault(); - sendChromeTabMessage('toggleMetaTags'); - }); - - document.querySelector('#toggle-design-mode').addEventListener('click', function(e) { - e.preventDefault(); - sendChromeTabMessage('toggleDesignMode'); - }); + }) + + document.querySelector('#highlight-components').addEventListener('click', function (e) { + e.preventDefault() + sendChromeTabMessage('toggleComponents') + }) + + document.querySelector('#highlight-meta-tags').addEventListener('click', function (e) { + e.preventDefault() + sendChromeTabMessage('toggleMetaTags') + }) + + document.querySelector('#toggle-design-mode').addEventListener('click', function (e) { + e.preventDefault() + sendChromeTabMessage('toggleDesignMode') + }) } // Best guess if the user wants a new window opened. // https://stackoverflow.com/questions/20087368/how-to-detect-if-user-it-trying-to-open-a-link-in-a-new-tab - function userOpensPageInNewWindow(e) { - return e.ctrlKey || e.shiftKey || e.metaKey || (e.button && e.button == 1); + function userOpensPageInNewWindow (e) { + return e.ctrlKey || e.shiftKey || e.metaKey || (e.button && e.button == 1) } - function setupAbToggles(url) { + function setupAbToggles (url) { var abTestBuckets = document.querySelectorAll('.ab-test-bucket') - abTestBuckets.forEach(function(abTestBucket){ - abTestBucket.addEventListener('click', function(e){ - var abTestSettings = chrome.extension.getBackgroundPage().abTestSettings; + abTestBuckets.forEach(function (abTestBucket) { + abTestBucket.addEventListener('click', function (e) { + var abTestSettings = chrome.extension.getBackgroundPage().abTestSettings abTestSettings.setBucket( abTestBucket.dataset.testName, @@ -206,14 +197,13 @@ var Popup = Popup || {}; url, function () { var testBuckets = document.querySelectorAll('.ab-test-bucket') - for(var testBucket of testBuckets){ + for (var testBucket of testBuckets) { testBucket.classList.remove('ab-bucket-selected') } - abTestBucket.classList.add('ab-bucket-selected'); - chrome.tabs.reload(null, { bypassCache: true }); + abTestBucket.classList.add('ab-bucket-selected') + chrome.tabs.reload(null, { bypassCache: true }) } ) - }) }) } @@ -221,10 +211,10 @@ var Popup = Popup || {}; // This is the view object. It takes a location, host, origin, the name of the // rendering app and a list of A/B test buckets and creates an object with all // URLs and other view data to render the popup. - function createView(location, host, origin, pathname, renderingApplication, abTestBuckets) { - var environment = Popup.environment(location, host, origin); - var contentLinks = Popup.generateContentLinks(location, origin, pathname, environment.currentEnvironment, renderingApplication); - var abTests = Popup.findActiveAbTests(abTestBuckets); + function createView (location, host, origin, pathname, renderingApplication, abTestBuckets) { + var environment = Popup.environment(location, host, origin) + var contentLinks = Popup.generateContentLinks(location, origin, pathname, environment.currentEnvironment, renderingApplication) + var abTests = Popup.findActiveAbTests(abTestBuckets) return { environments: environment.allEnvironments, @@ -236,11 +226,10 @@ var Popup = Popup || {}; } } - function sendChromeTabMessage(trigger) { - chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) { - var govukTab = tabs[0]; - chrome.tabs.sendMessage(govukTab.id, { trigger: trigger }); - }); + function sendChromeTabMessage (trigger) { + chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { + var govukTab = tabs[0] + chrome.tabs.sendMessage(govukTab.id, { trigger: trigger }) + }) } - -}()); +}()) From 5f26cbd087af78966523b3d7b6de517255f320a8 Mon Sep 17 00:00:00 2001 From: kashifatcha Date: Thu, 21 Dec 2023 09:56:09 +0000 Subject: [PATCH 3/3] Clean up linting errors manually --- .../javascripts/design_mode_component.spec.js | 3 +++ .../events/ab_bucket_store.spec.js | 2 ++ spec/javascripts/highlight_component.spec.js | 3 +++ spec/javascripts/show_meta_tags.spec.js | 2 ++ .../design-mode-component.js | 3 ++- .../highlight-component.js | 8 +++---- .../show-meta-tags-component.js | 2 +- src/events/ab_bucket_store.js | 6 ++++- src/events/ab_test_settings.js | 2 +- src/fetch-page-data.js | 2 -- src/popup/content_links.js | 6 ++--- src/popup/environment.js | 8 +++---- src/popup/external_links.js | 22 +++++++++---------- src/popup/extract_path.js | 4 ++-- src/popup/popup.js | 12 +++++----- 15 files changed, 49 insertions(+), 36 deletions(-) diff --git a/spec/javascripts/design_mode_component.spec.js b/spec/javascripts/design_mode_component.spec.js index 67cfccb..4d5e1cd 100644 --- a/spec/javascripts/design_mode_component.spec.js +++ b/spec/javascripts/design_mode_component.spec.js @@ -1,4 +1,6 @@ 'use strict' +/* global DesignModeComponent */ + describe('Toggling design mode', function () { var designModeBannerId = 'govuk-chrome-toolkit-design-mode-banner' var designModeBannerElement @@ -10,6 +12,7 @@ describe('Toggling design mode', function () { runtime: { onMessage: { addListener: function (callback) { + /* eslint-disable-next-line */ callback({ trigger: 'toggleDesignMode' }) } }, diff --git a/spec/javascripts/events/ab_bucket_store.spec.js b/spec/javascripts/events/ab_bucket_store.spec.js index b87144f..52dce6d 100644 --- a/spec/javascripts/events/ab_bucket_store.spec.js +++ b/spec/javascripts/events/ab_bucket_store.spec.js @@ -1,3 +1,5 @@ +/* global abBucketStore */ + describe('abBucketStore', function () { it('is initialized empty', function () { var store = abBucketStore.createStore() diff --git a/spec/javascripts/highlight_component.spec.js b/spec/javascripts/highlight_component.spec.js index 9a7640d..487786c 100644 --- a/spec/javascripts/highlight_component.spec.js +++ b/spec/javascripts/highlight_component.spec.js @@ -1,4 +1,6 @@ 'use strict' +/* global HighlightComponent loadFixtures spyOnEvent setFixtures Helpers */ + describe('Toggling component highlighting', function () { var breadcrumbsElement var highlightComponent @@ -11,6 +13,7 @@ describe('Toggling component highlighting', function () { runtime: { onMessage: { addListener: function (callback) { + /* eslint-disable-next-line */ callback({ trigger: 'toggleComponents' }) } }, diff --git a/spec/javascripts/show_meta_tags.spec.js b/spec/javascripts/show_meta_tags.spec.js index 9fb635d..69bcdb8 100644 --- a/spec/javascripts/show_meta_tags.spec.js +++ b/spec/javascripts/show_meta_tags.spec.js @@ -1,4 +1,6 @@ 'use strict' +/* global ShowMetaTagsComponent loadFixtures */ + describe('Toggling meta tags', function () { var showMetaTagsBannerId = 'govuk-chrome-toolkit-banner' var showMetaTagsBannerElement diff --git a/src/components/design-mode-component/design-mode-component.js b/src/components/design-mode-component/design-mode-component.js index ded8869..27681b6 100644 --- a/src/components/design-mode-component/design-mode-component.js +++ b/src/components/design-mode-component/design-mode-component.js @@ -1,9 +1,10 @@ 'use strict' +/* global DesignModeComponent */ function DesignModeComponent () { this.state = false chrome.runtime.onMessage.addListener(function (request) { - if (request.trigger == 'toggleDesignMode') { + if (request.trigger === 'toggleDesignMode') { this.toggleDesignMode() } }.bind(this)) diff --git a/src/components/highlight-component/highlight-component.js b/src/components/highlight-component/highlight-component.js index f8f012f..b8810e3 100644 --- a/src/components/highlight-component/highlight-component.js +++ b/src/components/highlight-component/highlight-component.js @@ -51,7 +51,7 @@ function HighlightComponent () { } chrome.runtime.onMessage.addListener(function (request) { - if (request.trigger == 'toggleComponents') { + if (request.trigger === 'toggleComponents') { this.toggleComponents() } }.bind(this)) @@ -87,9 +87,9 @@ var Helpers = { }, appHostname: function () { - var rendering_element = document.querySelector('meta[name="govuk:rendering-application"]') - var rendering_app = rendering_element.getAttribute('content') - return this.substitutions[rendering_app] || rendering_app + var renderingElement = document.querySelector('meta[name="govuk:rendering-application"]') + var renderingApp = renderingElement.getAttribute('content') + return this.substitutions[renderingApp] || renderingApp } } diff --git a/src/components/show-meta-tags-component/show-meta-tags-component.js b/src/components/show-meta-tags-component/show-meta-tags-component.js index 003cfa3..1ff3127 100644 --- a/src/components/show-meta-tags-component/show-meta-tags-component.js +++ b/src/components/show-meta-tags-component/show-meta-tags-component.js @@ -3,7 +3,7 @@ function ShowMetaTagsComponent () { this.isMetaTagsDisplayed = false chrome.runtime.onMessage.addListener(function (request) { - if (request.trigger == 'toggleMetaTags') { + if (request.trigger === 'toggleMetaTags') { this.toggleMetaTags() } }.bind(this)) diff --git a/src/events/ab_bucket_store.js b/src/events/ab_bucket_store.js index ff9046f..e207410 100644 --- a/src/events/ab_bucket_store.js +++ b/src/events/ab_bucket_store.js @@ -2,6 +2,9 @@ // // It stores the environment-specific state of the user's A/B testing buckets in // memory, until the browser or the extension is next reloaded. +/* global abTest */ + +// eslint-disable-next-line no-unused-vars var abBucketStore = (function () { function createStore () { var abTestBuckets = {} @@ -9,7 +12,7 @@ var abBucketStore = (function () { function addAbTests (initialBuckets, hostname) { abTestBuckets[hostname] = abTestBuckets[hostname] || {} - Object.keys(initialBuckets).map(function (testName) { + Object.keys(initialBuckets).forEach(function (testName) { // Add any A/B tests that are not already defined, but do not overwrite // any that we are already tracking. if (!abTestBuckets[hostname][testName]) { @@ -23,6 +26,7 @@ var abBucketStore = (function () { } function setBucket (testName, bucket, hostname) { + /* eslint-disable-next-line */ abTest = abTestBuckets[hostname][testName] abTest.currentBucket = bucket abTestBuckets[hostname][testName] = abTest diff --git a/src/events/ab_test_settings.js b/src/events/ab_test_settings.js index 34cd221..dc172dd 100644 --- a/src/events/ab_test_settings.js +++ b/src/events/ab_test_settings.js @@ -45,7 +45,7 @@ var abTestSettings = (function () { function addAbHeaders (details) { var abTestBuckets = abBucketStore.getAll(extractHostname(details.url)) - Object.keys(abTestBuckets).map(function (abTestName) { + Object.keys(abTestBuckets).forEach(function (abTestName) { details.requestHeaders.push({ name: 'GOVUK-ABTest-' + abTestName, value: abTestBuckets[abTestName].currentBucket diff --git a/src/fetch-page-data.js b/src/fetch-page-data.js index 861f5ff..7a79298 100644 --- a/src/fetch-page-data.js +++ b/src/fetch-page-data.js @@ -40,5 +40,3 @@ function getAbTestBuckets () { return buckets } - -undefined diff --git a/src/popup/content_links.js b/src/popup/content_links.js index 0f7c342..10e2dfb 100644 --- a/src/popup/content_links.js +++ b/src/popup/content_links.js @@ -11,7 +11,7 @@ Popup.generateContentLinks = function (location, origin, pathname, currentEnviro } // This is 'https://www.gov.uk' or 'https://www-origin.integration.publishing.service.gov.uk/', etc. - if (origin == 'http://webarchive.nationalarchives.gov.uk' || origin.match(/draft-origin/) || origin.match(/content-data/) || origin.match(/support/)) { + if (origin === 'http://webarchive.nationalarchives.gov.uk' || origin.match(/draft-origin/) || origin.match(/content-data/) || origin.match(/support/)) { origin = 'https://www.gov.uk' } @@ -31,12 +31,12 @@ Popup.generateContentLinks = function (location, origin, pathname, currentEnviro var currentUrl = origin + path - if (renderingApplication == 'smartanswers') { + if (renderingApplication === 'smartanswers') { links.push({ name: 'SmartAnswers: Visualise', url: currentUrl.replace(/\/y.*$/, '') + '/y/visualise' }) } return links.map(function (link) { - link.class = link.url == location ? 'current' : '' + link.class = link.url === location ? 'current' : '' return link }) } diff --git a/src/popup/environment.js b/src/popup/environment.js index d1d6845..526ed37 100644 --- a/src/popup/environment.js +++ b/src/popup/environment.js @@ -65,9 +65,9 @@ Popup.environment = function (location, host, origin) { if (inFrontend) { var replacement = env.host } else if (isGOVUKAccount()) { - var replacement = env.protocol + '://www.' + application + '.' + env.serviceDomain + replacement = env.protocol + '://www.' + application + '.' + env.serviceDomain } else { - var replacement = env.protocol + '://' + application + '.' + env.serviceDomain + replacement = env.protocol + '://' + application + '.' + env.serviceDomain } env.url = location.replace(origin, replacement) @@ -76,7 +76,7 @@ Popup.environment = function (location, host, origin) { env.url = 'http://www.login.service.dev.gov.uk/' } - if (location == env.url) { + if (location === env.url) { env.class = 'current' currentEnvironment = env } else { @@ -86,7 +86,7 @@ Popup.environment = function (location, host, origin) { return env }).filter(function (env) { // GOV.UK Account does not have an Integration environment – remove this option from the list of environments - if (env.name === 'Integration' && isGOVUKAccount()) return + if (env.name === 'Integration' && isGOVUKAccount()) return false return env }) diff --git a/src/popup/external_links.js b/src/popup/external_links.js index cc77538..54413e2 100644 --- a/src/popup/external_links.js +++ b/src/popup/external_links.js @@ -64,56 +64,56 @@ Popup.generateExternalLinks = function (contentItem, env) { url: 'https://docs.publishing.service.gov.uk/document-types/' + contentItem.document_type + '.html' }) - return links.filter(function (item) { return item != undefined }) + return links.filter(function (item) { return item !== undefined }) } function generateEditLink (contentItem, env) { - if (contentItem.document_type == 'topic') { + if (contentItem.document_type === 'topic') { return [{ name: 'Edit in collections-publisher', url: env.protocol + '://collections-publisher.' + env.serviceDomain + '/specialist-sector-pages/' + contentItem.content_id }] - } else if (contentItem.document_type == 'step_by_step_nav') { + } else if (contentItem.document_type === 'step_by_step_nav') { return [{ name: 'Look up in collections-publisher', url: env.protocol + '://collections-publisher.' + env.serviceDomain + '/step-by-step-pages' }] - } else if (contentItem.document_type == 'mainstream_browse_page') { + } else if (contentItem.document_type === 'mainstream_browse_page') { return [{ name: 'Edit in collections-publisher', url: env.protocol + '://collections-publisher.' + env.serviceDomain + '/mainstream-browse-pages/' + contentItem.content_id }] - } else if (contentItem.document_type == 'taxon') { + } else if (contentItem.document_type === 'taxon') { return [{ name: 'Edit in content-tagger', url: env.protocol + '://content-tagger.' + env.serviceDomain + '/taxons/' + contentItem.content_id }] - } else if (contentItem.publishing_app == 'publisher') { + } else if (contentItem.publishing_app === 'publisher') { return [{ name: 'Look up in Mainstream Publisher', url: env.protocol + '://publisher.' + env.serviceDomain + '/?list=published&string_filter=' + contentItem.base_path.substring(1) + '&user_filter=all' }] - } else if (contentItem.publishing_app == 'content-publisher') { + } else if (contentItem.publishing_app === 'content-publisher') { return [{ name: 'Edit in Content Publisher', url: env.protocol + '://content-publisher.' + env.serviceDomain + '/documents/' + contentItem.content_id + ':' + contentItem.locale }] - } else if (contentItem.publishing_app == 'whitehall') { + } else if (contentItem.publishing_app === 'whitehall') { return [{ name: 'Edit in Whitehall Publisher', url: env.protocol + '://whitehall-admin.' + env.serviceDomain + '/government/admin/by-content-id/' + contentItem.content_id }] - } else if (contentItem.document_type == 'manual') { + } else if (contentItem.document_type === 'manual') { return [{ name: 'Edit in Manuals Publisher', url: env.protocol + '://manuals-publisher.' + env.serviceDomain + '/manuals/' + contentItem.content_id }] - } else if (contentItem.publishing_app == 'specialist-publisher') { + } else if (contentItem.publishing_app === 'specialist-publisher') { return [{ name: 'Edit in Specialist Publisher', url: env.protocol + '://specialist-publisher.' + env.serviceDomain + '/' + contentItem.document_type.replace(/_/g, '-') + 's/' + contentItem.content_id }] - } else if (contentItem.publishing_app == 'smartanswers') { + } else if (contentItem.publishing_app === 'smartanswers') { return [ { name: 'View flow page in Github', diff --git a/src/popup/extract_path.js b/src/popup/extract_path.js index 5e19d93..c0ae5ad 100644 --- a/src/popup/extract_path.js +++ b/src/popup/extract_path.js @@ -29,7 +29,7 @@ Popup.extractPath = function (location, pathname, renderingApplication) { return extractedPath.replace('//', '/') } - function extractQueryParameter (location, parameter_name) { - return location.split(parameter_name + '=')[1].split('&')[0] + function extractQueryParameter (location, parameterName) { + return location.split(parameterName + '=')[1].split('&')[0] } } diff --git a/src/popup/popup.js b/src/popup/popup.js index 709a47f..ef531f4 100644 --- a/src/popup/popup.js +++ b/src/popup/popup.js @@ -26,7 +26,7 @@ var Popup = Popup || {}; // fetch-page-data.js (called above). It will forward the location to our main // render function. chrome.runtime.onMessage.addListener(function (request, _sender) { - if (request.action == 'populatePopup') { + if (request.action === 'populatePopup') { // When we're asked to populate the popup, we'll first send the current // buckets back to the main thread, which "persists" them. var abTestSettings = chrome.extension.getBackgroundPage().abTestSettings @@ -45,7 +45,7 @@ var Popup = Popup || {}; }) chrome.runtime.onMessage.addListener(function (request, _sender) { - if (request.action == 'highlightState') { + if (request.action === 'highlightState') { // When we're asked to populate the popup, we'll first send the current // buckets back to the main thread, which "persists" them. if (request.highlightState) { document.querySelector('#highlight-components').textContent = 'Stop highlighting components' } else { document.querySelector('#highlight-components').textContent = 'Highlight Components' } @@ -53,7 +53,7 @@ var Popup = Popup || {}; }) chrome.runtime.onMessage.addListener(function (request, _sender) { - if (request.action == 'showMetaTagState') { + if (request.action === 'showMetaTagState') { // When we're asked to populate the popup, we'll first send the current // buckets back to the main thread, which "persists" them. if (request.metaTags) { document.querySelector('#highlight-meta-tags').textContent = 'Hide meta tags' } else { document.querySelector('#highlight-meta-tags').textContent = 'Show meta tags' } @@ -61,7 +61,7 @@ var Popup = Popup || {}; }) chrome.runtime.onMessage.addListener(function (request, _sender) { - if (request.action == 'designModeState') { + if (request.action === 'designModeState') { var toggleLink = document.querySelector('#toggle-design-mode') if (request.designModeState) { toggleLink.textContent = 'Turn off design mode' } else { toggleLink.textContent = 'Turn on design mode' } } @@ -72,7 +72,7 @@ var Popup = Popup || {}; // Creates a view object with the data and render a template with it. var view = createView(location, host, origin, pathname, renderingApplication, abTestBuckets) - var contentStore = view.contentLinks.find(function (el) { return el.name == 'Content item (JSON)' }) + var contentStore = view.contentLinks.find(function (el) { return el.name === 'Content item (JSON)' }) if (windowHeight < 600) { var popupContent = document.querySelector('#content') @@ -181,7 +181,7 @@ var Popup = Popup || {}; // Best guess if the user wants a new window opened. // https://stackoverflow.com/questions/20087368/how-to-detect-if-user-it-trying-to-open-a-link-in-a-new-tab function userOpensPageInNewWindow (e) { - return e.ctrlKey || e.shiftKey || e.metaKey || (e.button && e.button == 1) + return e.ctrlKey || e.shiftKey || e.metaKey || (e.button && e.button === 1) } function setupAbToggles (url) {