diff --git a/composer.json b/composer.json index 2807546ec..605b0a583 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "require-dev": { "mediawiki/mediawiki-codesniffer": "41.0.0", - "mediawiki/mediawiki-phan-config": "0.12.1", + "mediawiki/mediawiki-phan-config": "0.14.0", "mediawiki/minus-x": "1.1.1", "php-parallel-lint/php-console-highlighter": "1.0.0", "php-parallel-lint/php-parallel-lint": "1.3.2" diff --git a/package-lock.json b/package-lock.json index 1b833c4c1..e4a4237fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,9 +6,9 @@ "": { "name": "MultimediaViewer", "devDependencies": { - "eslint-config-wikimedia": "0.25.1", + "eslint-config-wikimedia": "0.26.0", "grunt": "1.6.1", - "grunt-banana-checker": "0.11.0", + "grunt-banana-checker": "0.11.1", "grunt-eslint": "24.3.0", "grunt-stylelint": "0.19.0", "jsdoc": "3.6.10", @@ -36,9 +36,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "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==", "dev": true, "engines": { "node": ">=6.9.0" @@ -228,17 +228,17 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.23.6", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz", - "integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==", + "version": "0.37.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz", + "integrity": "sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==", "dev": true, "dependencies": { "comment-parser": "1.3.1", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.5" + "esquery": "^1.5.0", + "jsdoc-type-pratt-parser": "~4.0.0" }, "engines": { - "node": "^12 || ^14 || ^16 || ^17" + "node": "^14 || ^16 || ^17 || ^18 || ^19 || ^20" } }, "node_modules/@eslint-community/eslint-utils": { @@ -398,6 +398,12 @@ "node": ">=10.13.0" } }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, "node_modules/@types/linkify-it": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", @@ -438,6 +444,134 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", + "dev": true + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/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==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -511,6 +645,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -679,6 +822,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -779,9 +931,9 @@ } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -1402,28 +1554,92 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-compat-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", + "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, "node_modules/eslint-config-wikimedia": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.25.1.tgz", - "integrity": "sha512-1ppDlbwSSPuMLAIzvTXSDWNOEq3VnRu82jbc1jaG0aCjE3PpBVOEKUh0bbCk/mFVWEocUNeYIYeL9BHADq9ReA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.26.0.tgz", + "integrity": "sha512-TAXTySls9k3oWs754rIjlcd9PBLvYeMvjqjiuU8u4gweu0UDgBJGslf+zcvVNXEooAtyLZdENjrzDDjG8ssS7Q==", "dev": true, "dependencies": { - "browserslist-config-wikimedia": "^0.5.0", - "eslint": "^8.31.0", - "eslint-plugin-compat": "^4.1.4", - "eslint-plugin-es-x": "^5.2.1", - "eslint-plugin-jsdoc": "39.2.2", + "browserslist-config-wikimedia": "^0.5.1", + "eslint": "^8.53.0", + "eslint-plugin-compat": "^4.2.0", + "eslint-plugin-es-x": "^7.3.0", + "eslint-plugin-jest": "^27.6.0", + "eslint-plugin-jsdoc": "^42.0.0", "eslint-plugin-json-es": "^1.5.7", "eslint-plugin-mediawiki": "^0.5.0", - "eslint-plugin-mocha": "^9.0.0", + "eslint-plugin-mocha": "^10.2.0", + "eslint-plugin-n": "^16.0.1", "eslint-plugin-no-jquery": "^2.7.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-qunit": "^7.3.0", + "eslint-plugin-qunit": "^7.3.4", "eslint-plugin-security": "^1.7.1", - "eslint-plugin-unicorn": "^42.0.0", - "eslint-plugin-vue": "^8.7.1", + "eslint-plugin-unicorn": "^47.0.0", + "eslint-plugin-vue": "^9.18.1", "eslint-plugin-wdio": "^7.19.4", - "eslint-plugin-yml": "^0.14.0" + "eslint-plugin-yml": "^1.10.0" + } + }, + "node_modules/eslint-config-wikimedia/node_modules/browserslist-config-wikimedia": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.1.tgz", + "integrity": "sha512-jf532fUf/gaxiKdHgGCQUT552P5up3RpG+CzLixOQBJ5FwDmYQSRLYHCFUA9s3KMOHh4P3xVp+NUaGNxvtoT9g==", + "dev": true + }, + "node_modules/eslint-config-wikimedia/node_modules/eslint-plugin-vue": { + "version": "9.21.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.21.1.tgz", + "integrity": "sha512-XVtI7z39yOVBFJyi8Ljbn7kY9yHzznKXL02qQYn+ta63Iy4A9JFBw6o4OSB9hyD2++tVT+su9kQqetUyCCwhjw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.13", + "semver": "^7.5.4", + "vue-eslint-parser": "^9.4.2", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-config-wikimedia/node_modules/vue-eslint-parser": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz", + "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, "node_modules/eslint-plugin-compat": { @@ -1448,40 +1664,67 @@ } }, "node_modules/eslint-plugin-es-x": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-5.4.0.tgz", - "integrity": "sha512-6Mniw760Nhd6brnDy+rz857LD+icZe5wXmsvXSuJ84svM0Q53ulJxpMhTJmpqHaLzYh7fuGAJ8V62ohbmqF+jA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", + "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", "dev": true, "dependencies": { - "eslint-utils": "^2.0.0 || ^3.0.0", - "regexpp": "^3.0.0" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0", + "eslint-compat-utils": "^0.1.2" }, "engines": { - "node": ">=8.10.0" + "node": "^14.18.0 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/ota-meshi" }, "peerDependencies": { - "eslint": ">=4.19.1" + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "27.6.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.3.tgz", + "integrity": "sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^5.10.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } } }, "node_modules/eslint-plugin-jsdoc": { - "version": "39.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz", - "integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==", + "version": "42.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-42.0.0.tgz", + "integrity": "sha512-qXYr45G8atPKowZbIOdmABukMzu9IMjAlj6j5Fe0iuUItznWSXUDiBj57ejXcbt8bkPrg83333nuz+cqGKFgcQ==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.23.1", + "@es-joy/jsdoccomment": "~0.37.0", + "are-docs-informative": "^0.0.2", "comment-parser": "1.3.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", - "esquery": "^1.4.0", - "semver": "^7.3.7", + "esquery": "^1.5.0", + "semver": "^7.3.8", "spdx-expression-parse": "^3.0.1" }, "engines": { - "node": "^14 || ^16 || ^17" + "node": "^14 || ^16 || ^17 || ^18 || ^19" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" @@ -1514,46 +1757,47 @@ } }, "node_modules/eslint-plugin-mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz", - "integrity": "sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.2.0.tgz", + "integrity": "sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ==", "dev": true, "dependencies": { "eslint-utils": "^3.0.0", - "ramda": "^0.27.1" + "rambda": "^7.4.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "peerDependencies": { "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-mocha/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/eslint-plugin-n": { + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", + "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^13.24.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=16.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-plugin-mocha/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==", - "dev": true, - "engines": { - "node": ">=10" + "eslint": ">=7.0.0" } }, "node_modules/eslint-plugin-no-jquery": { @@ -1565,54 +1809,6 @@ "eslint": ">=2.3.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==", - "dev": true, - "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/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==", - "dev": true, - "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-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==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-qunit": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.3.4.tgz", @@ -1626,33 +1822,6 @@ "node": "12.x || 14.x || >=16.0.0" } }, - "node_modules/eslint-plugin-qunit/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-plugin-qunit/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==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-security": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz", @@ -1663,61 +1832,36 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "42.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz", - "integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==", + "version": "47.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-47.0.0.tgz", + "integrity": "sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "ci-info": "^3.3.0", + "@babel/helper-validator-identifier": "^7.19.1", + "@eslint-community/eslint-utils": "^4.4.0", + "ci-info": "^3.8.0", "clean-regexp": "^1.0.0", - "eslint-utils": "^3.0.0", - "esquery": "^1.4.0", + "esquery": "^1.5.0", "indent-string": "^4.0.0", - "is-builtin-module": "^3.1.0", + "is-builtin-module": "^3.2.1", + "jsesc": "^3.0.2", "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", "regexp-tree": "^0.1.24", + "regjsparser": "^0.10.0", "safe-regex": "^2.1.1", - "semver": "^7.3.5", + "semver": "^7.3.8", "strip-indent": "^3.0.0" }, "engines": { - "node": ">=12" + "node": ">=16" }, "funding": { "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=8.8.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-plugin-unicorn/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==", - "dev": true, - "engines": { - "node": ">=10" + "eslint": ">=8.38.0" } }, "node_modules/eslint-plugin-vue": { @@ -1740,33 +1884,6 @@ "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/eslint-plugin-vue/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-plugin-vue/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==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-wdio": { "version": "7.19.4", "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.19.4.tgz", @@ -1777,18 +1894,19 @@ } }, "node_modules/eslint-plugin-yml": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.14.0.tgz", - "integrity": "sha512-+0+bBV/07txENbxfrHF9olGoLCHez64vmnOmjWOoLwmXOwfdaSRleBSPIi4nWQs7WwX8lm/fSLadOjbVEcsXQQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.12.2.tgz", + "integrity": "sha512-hvS9p08FhPT7i/ynwl7/Wt7ke7Rf4P2D6fT8lZlL43peZDTsHtH2A0SIFQ7Kt7+mJ6if6P+FX3iJhMkdnxQwpg==", "dev": true, "dependencies": { "debug": "^4.3.2", + "eslint-compat-utils": "^0.4.0", "lodash": "^4.17.21", "natural-compare": "^1.4.0", - "yaml-eslint-parser": "^0.5.0" + "yaml-eslint-parser": "^1.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14.17.0 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/ota-meshi" @@ -1797,6 +1915,21 @@ "eslint": ">=6.0.0" } }, + "node_modules/eslint-plugin-yml/node_modules/eslint-compat-utils": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.4.1.tgz", + "integrity": "sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg==", + "dev": true, + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -1814,27 +1947,30 @@ } }, "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==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">=6" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, "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==", + "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==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" } }, "node_modules/eslint-visitor-keys": { @@ -2164,10 +2300,13 @@ "dev": true }, "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 + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/get-caller-file": { "version": "2.0.5", @@ -2178,6 +2317,18 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/getobject": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", @@ -2332,9 +2483,9 @@ } }, "node_modules/grunt-banana-checker": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.0.tgz", - "integrity": "sha512-qXtcxu7y9GFEIx6ELm5jSf+JqvCafdco+t/YsrUhUDNe9AgCnP7X0R+PxT0qZaDftKVrDrR2gPOYqpaAye5bDw==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.1.tgz", + "integrity": "sha512-CF0h/TXaX9sbF2yIz+fUfJc4Zvms7XGYQ7ZYMD5+vv0LMZzSFf7JSHXDaBEs72nQWw4r4ap5fOW3baAliW+0bQ==", "dev": true, "bin": { "banana-checker": "src/cli.js" @@ -2485,18 +2636,6 @@ "node": ">=6" } }, - "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, - "dependencies": { - "function-bind": "^1.1.1" - }, - "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", @@ -2506,6 +2645,18 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -2697,12 +2848,12 @@ } }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2889,9 +3040,9 @@ } }, "node_modules/jsdoc-type-pratt-parser": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", - "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", + "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", "dev": true, "engines": { "node": ">=12.0.0" @@ -2923,6 +3074,18 @@ "node": ">=8" } }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -3483,9 +3646,9 @@ } }, "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "dependencies": { "boolbase": "^1.0.0" @@ -3928,10 +4091,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ramda": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", - "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==", + "node_modules/rambda": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", + "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", "dev": true }, "node_modules/read-pkg": { @@ -4139,16 +4302,25 @@ "regexp-tree": "bin/regexp-tree" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/regjsparser": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", + "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "jsesc": "~0.5.0" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" } }, "node_modules/require-directory": { @@ -4188,12 +4360,12 @@ } }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4268,6 +4440,15 @@ "node": ">=4" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -5008,6 +5189,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5032,6 +5234,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -5224,6 +5440,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", @@ -5255,26 +5480,29 @@ "dev": true }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/yaml-eslint-parser": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz", - "integrity": "sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", + "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", "dev": true, "dependencies": { "eslint-visitor-keys": "^3.0.0", "lodash": "^4.17.21", - "yaml": "^1.10.2" + "yaml": "^2.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" } }, "node_modules/yargs": { @@ -5334,9 +5562,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "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==", "dev": true }, "@babel/highlight": { @@ -5418,7 +5646,8 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz", "integrity": "sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==", - "dev": true + "dev": true, + "requires": {} }, "@csstools/css-tokenizer": { "version": "2.2.3", @@ -5430,23 +5659,25 @@ "version": "2.1.7", "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.7.tgz", "integrity": "sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ==", - "dev": true + "dev": true, + "requires": {} }, "@csstools/selector-specificity": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz", "integrity": "sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==", - "dev": true + "dev": true, + "requires": {} }, "@es-joy/jsdoccomment": { - "version": "0.23.6", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz", - "integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==", + "version": "0.37.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz", + "integrity": "sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==", "dev": true, "requires": { "comment-parser": "1.3.1", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.5" + "esquery": "^1.5.0", + "jsdoc-type-pratt-parser": "~4.0.0" } }, "@eslint-community/eslint-utils": { @@ -5565,6 +5796,12 @@ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, "@types/linkify-it": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", @@ -5605,6 +5842,87 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, + "@types/semver": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", + "dev": true + }, + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + } + }, + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + }, "@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -5627,7 +5945,8 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "ajv": { "version": "6.12.6", @@ -5656,6 +5975,12 @@ "color-convert": "^2.0.1" } }, + "are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -5777,6 +6102,15 @@ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -5835,9 +6169,9 @@ } }, "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true }, "clean-regexp": { @@ -6329,28 +6663,74 @@ } } }, + "eslint-compat-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", + "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "dev": true, + "requires": {} + }, "eslint-config-wikimedia": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.25.1.tgz", - "integrity": "sha512-1ppDlbwSSPuMLAIzvTXSDWNOEq3VnRu82jbc1jaG0aCjE3PpBVOEKUh0bbCk/mFVWEocUNeYIYeL9BHADq9ReA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.26.0.tgz", + "integrity": "sha512-TAXTySls9k3oWs754rIjlcd9PBLvYeMvjqjiuU8u4gweu0UDgBJGslf+zcvVNXEooAtyLZdENjrzDDjG8ssS7Q==", "dev": true, "requires": { - "browserslist-config-wikimedia": "^0.5.0", - "eslint": "^8.31.0", - "eslint-plugin-compat": "^4.1.4", - "eslint-plugin-es-x": "^5.2.1", - "eslint-plugin-jsdoc": "39.2.2", + "browserslist-config-wikimedia": "^0.5.1", + "eslint": "^8.53.0", + "eslint-plugin-compat": "^4.2.0", + "eslint-plugin-es-x": "^7.3.0", + "eslint-plugin-jest": "^27.6.0", + "eslint-plugin-jsdoc": "^42.0.0", "eslint-plugin-json-es": "^1.5.7", "eslint-plugin-mediawiki": "^0.5.0", - "eslint-plugin-mocha": "^9.0.0", + "eslint-plugin-mocha": "^10.2.0", + "eslint-plugin-n": "^16.0.1", "eslint-plugin-no-jquery": "^2.7.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-qunit": "^7.3.0", + "eslint-plugin-qunit": "^7.3.4", "eslint-plugin-security": "^1.7.1", - "eslint-plugin-unicorn": "^42.0.0", - "eslint-plugin-vue": "^8.7.1", + "eslint-plugin-unicorn": "^47.0.0", + "eslint-plugin-vue": "^9.18.1", "eslint-plugin-wdio": "^7.19.4", - "eslint-plugin-yml": "^0.14.0" + "eslint-plugin-yml": "^1.10.0" + }, + "dependencies": { + "browserslist-config-wikimedia": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.1.tgz", + "integrity": "sha512-jf532fUf/gaxiKdHgGCQUT552P5up3RpG+CzLixOQBJ5FwDmYQSRLYHCFUA9s3KMOHh4P3xVp+NUaGNxvtoT9g==", + "dev": true + }, + "eslint-plugin-vue": { + "version": "9.21.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.21.1.tgz", + "integrity": "sha512-XVtI7z39yOVBFJyi8Ljbn7kY9yHzznKXL02qQYn+ta63Iy4A9JFBw6o4OSB9hyD2++tVT+su9kQqetUyCCwhjw==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.13", + "semver": "^7.5.4", + "vue-eslint-parser": "^9.4.2", + "xml-name-validator": "^4.0.0" + } + }, + "vue-eslint-parser": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz", + "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + } + } } }, "eslint-plugin-compat": { @@ -6369,27 +6749,38 @@ } }, "eslint-plugin-es-x": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-5.4.0.tgz", - "integrity": "sha512-6Mniw760Nhd6brnDy+rz857LD+icZe5wXmsvXSuJ84svM0Q53ulJxpMhTJmpqHaLzYh7fuGAJ8V62ohbmqF+jA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", + "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", "dev": true, "requires": { - "eslint-utils": "^2.0.0 || ^3.0.0", - "regexpp": "^3.0.0" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0", + "eslint-compat-utils": "^0.1.2" + } + }, + "eslint-plugin-jest": { + "version": "27.6.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.3.tgz", + "integrity": "sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "^5.10.0" } }, "eslint-plugin-jsdoc": { - "version": "39.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz", - "integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==", + "version": "42.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-42.0.0.tgz", + "integrity": "sha512-qXYr45G8atPKowZbIOdmABukMzu9IMjAlj6j5Fe0iuUItznWSXUDiBj57ejXcbt8bkPrg83333nuz+cqGKFgcQ==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "~0.23.1", + "@es-joy/jsdoccomment": "~0.37.0", + "are-docs-informative": "^0.0.2", "comment-parser": "1.3.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", - "esquery": "^1.4.0", - "semver": "^7.3.7", + "esquery": "^1.5.0", + "semver": "^7.3.8", "spdx-expression-parse": "^3.0.1" } }, @@ -6414,69 +6805,40 @@ } }, "eslint-plugin-mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz", - "integrity": "sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.2.0.tgz", + "integrity": "sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ==", "dev": true, "requires": { "eslint-utils": "^3.0.0", - "ramda": "^0.27.1" - }, - "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "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==", - "dev": true - } + "rambda": "^7.4.0" + } + }, + "eslint-plugin-n": { + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", + "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^13.24.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" } }, "eslint-plugin-no-jquery": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz", "integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==", - "dev": true - }, - "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==", "dev": true, - "requires": { - "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" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } + "requires": {} }, "eslint-plugin-qunit": { "version": "7.3.4", @@ -6486,23 +6848,6 @@ "requires": { "eslint-utils": "^3.0.0", "requireindex": "^1.2.0" - }, - "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "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==", - "dev": true - } } }, "eslint-plugin-security": { @@ -6515,42 +6860,27 @@ } }, "eslint-plugin-unicorn": { - "version": "42.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz", - "integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==", + "version": "47.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-47.0.0.tgz", + "integrity": "sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "ci-info": "^3.3.0", + "@babel/helper-validator-identifier": "^7.19.1", + "@eslint-community/eslint-utils": "^4.4.0", + "ci-info": "^3.8.0", "clean-regexp": "^1.0.0", - "eslint-utils": "^3.0.0", - "esquery": "^1.4.0", + "esquery": "^1.5.0", "indent-string": "^4.0.0", - "is-builtin-module": "^3.1.0", + "is-builtin-module": "^3.2.1", + "jsesc": "^3.0.2", "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", "regexp-tree": "^0.1.24", + "regjsparser": "^0.10.0", "safe-regex": "^2.1.1", - "semver": "^7.3.5", + "semver": "^7.3.8", "strip-indent": "^3.0.0" - }, - "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "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==", - "dev": true - } } }, "eslint-plugin-vue": { @@ -6565,23 +6895,6 @@ "postcss-selector-parser": "^6.0.9", "semver": "^7.3.5", "vue-eslint-parser": "^8.0.1" - }, - "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "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==", - "dev": true - } } }, "eslint-plugin-wdio": { @@ -6591,15 +6904,27 @@ "dev": true }, "eslint-plugin-yml": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.14.0.tgz", - "integrity": "sha512-+0+bBV/07txENbxfrHF9olGoLCHez64vmnOmjWOoLwmXOwfdaSRleBSPIi4nWQs7WwX8lm/fSLadOjbVEcsXQQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.12.2.tgz", + "integrity": "sha512-hvS9p08FhPT7i/ynwl7/Wt7ke7Rf4P2D6fT8lZlL43peZDTsHtH2A0SIFQ7Kt7+mJ6if6P+FX3iJhMkdnxQwpg==", "dev": true, "requires": { "debug": "^4.3.2", + "eslint-compat-utils": "^0.4.0", "lodash": "^4.17.21", "natural-compare": "^1.4.0", - "yaml-eslint-parser": "^0.5.0" + "yaml-eslint-parser": "^1.2.1" + }, + "dependencies": { + "eslint-compat-utils": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.4.1.tgz", + "integrity": "sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg==", + "dev": true, + "requires": { + "semver": "^7.5.4" + } + } } }, "eslint-scope": { @@ -6613,18 +6938,18 @@ } }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" }, "dependencies": { "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==", + "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==", "dev": true } } @@ -6853,9 +7178,9 @@ "dev": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, "get-caller-file": { @@ -6864,6 +7189,15 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "requires": { + "resolve-pkg-maps": "^1.0.0" + } + }, "getobject": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", @@ -6992,9 +7326,9 @@ } }, "grunt-banana-checker": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.0.tgz", - "integrity": "sha512-qXtcxu7y9GFEIx6ELm5jSf+JqvCafdco+t/YsrUhUDNe9AgCnP7X0R+PxT0qZaDftKVrDrR2gPOYqpaAye5bDw==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.1.tgz", + "integrity": "sha512-CF0h/TXaX9sbF2yIz+fUfJc4Zvms7XGYQ7ZYMD5+vv0LMZzSFf7JSHXDaBEs72nQWw4r4ap5fOW3baAliW+0bQ==", "dev": true }, "grunt-cli": { @@ -7090,21 +7424,21 @@ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "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 }, + "hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -7244,12 +7578,12 @@ } }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-extglob": { @@ -7399,9 +7733,9 @@ } }, "jsdoc-type-pratt-parser": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", - "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", + "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", "dev": true }, "jsdoc-wmf-theme": { @@ -7423,6 +7757,12 @@ } } }, + "jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true + }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -7664,7 +8004,8 @@ "version": "8.6.7", "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "dev": true + "dev": true, + "requires": {} }, "marked": { "version": "4.3.0", @@ -7862,9 +8203,9 @@ "dev": true }, "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "requires": { "boolbase": "^1.0.0" @@ -8106,7 +8447,8 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-6.0.0.tgz", "integrity": "sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==", - "dev": true + "dev": true, + "requires": {} }, "postcss-media-query-parser": { "version": "0.2.3", @@ -8124,7 +8466,8 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true + "dev": true, + "requires": {} }, "postcss-selector-parser": { "version": "6.0.15", @@ -8166,10 +8509,10 @@ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, - "ramda": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", - "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==", + "rambda": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", + "integrity": "sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==", "dev": true }, "read-pkg": { @@ -8326,11 +8669,22 @@ "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", "dev": true }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "regjsparser": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", + "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } }, "require-directory": { "version": "2.1.1", @@ -8360,12 +8714,12 @@ } }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -8421,6 +8775,12 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -8644,7 +9004,8 @@ "dev": true }, "stylelint": { - "version": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", "dev": true, "peer": true, @@ -8728,7 +9089,8 @@ "version": "13.0.0", "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", - "dev": true + "dev": true, + "requires": {} }, "stylelint-config-wikimedia": { "version": "0.16.1", @@ -8988,6 +9350,21 @@ "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -9003,6 +9380,13 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "peer": true + }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -9140,6 +9524,12 @@ "signal-exit": "^4.0.1" } }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, "xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", @@ -9165,20 +9555,20 @@ "dev": true }, "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true }, "yaml-eslint-parser": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.5.0.tgz", - "integrity": "sha512-nJeyLA3YHAzhBTZbRAbu3W6xrSCucyxExmA+ZDtEdUFpGllxAZpto2Zxo2IG0r0eiuEiBM4e+wiAdxTziTq94g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", + "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", "dev": true, "requires": { "eslint-visitor-keys": "^3.0.0", "lodash": "^4.17.21", - "yaml": "^1.10.2" + "yaml": "^2.0.0" } }, "yargs": { diff --git a/package.json b/package.json index 774263651..88aed4c6b 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,9 @@ "doc": "jsdoc -c jsdoc.json" }, "devDependencies": { - "eslint-config-wikimedia": "0.25.1", + "eslint-config-wikimedia": "0.26.0", "grunt": "1.6.1", - "grunt-banana-checker": "0.11.0", + "grunt-banana-checker": "0.11.1", "grunt-eslint": "24.3.0", "grunt-stylelint": "0.19.0", "jsdoc": "3.6.10", diff --git a/resources/.eslintrc.json b/resources/.eslintrc.json index c0d1a800e..412af7991 100644 --- a/resources/.eslintrc.json +++ b/resources/.eslintrc.json @@ -9,7 +9,8 @@ "no-var": "error", "max-len": "off", "no-jquery/no-class-state": "off", - "no-jquery/no-support": "off" + "no-jquery/no-support": "off", + "es-x/no-resizable-and-growable-arraybuffers": "warn" }, "settings": { "jsdoc": { diff --git a/resources/mmv.bootstrap/mmv.Config.js b/resources/mmv.bootstrap/mmv.Config.js index c79b102a5..b078501cc 100644 --- a/resources/mmv.bootstrap/mmv.Config.js +++ b/resources/mmv.bootstrap/mmv.Config.js @@ -84,7 +84,7 @@ } if ( value === null ) { - mw.log( `Failed to fetch item ${key} from localStorage` ); + mw.log( `Failed to fetch item ${ key } from localStorage` ); } return fallback !== undefined ? fallback : null; diff --git a/resources/mmv.bootstrap/mmv.HtmlUtils.js b/resources/mmv.bootstrap/mmv.HtmlUtils.js index a34de9eb9..55e9d4c54 100644 --- a/resources/mmv.bootstrap/mmv.HtmlUtils.js +++ b/resources/mmv.bootstrap/mmv.HtmlUtils.js @@ -91,7 +91,9 @@ // document, possibly a different site, that would probably have unexpected results. $jq .find( '[style]' ) - .filter( function () { return this.style.display === 'none'; } ) + .filter( function () { + return this.style.display === 'none'; + } ) .remove(); // TemplateStyles can generate inline style tags diff --git a/resources/mmv.bootstrap/mmv.bootstrap.js b/resources/mmv.bootstrap/mmv.bootstrap.js index 770751dfd..43f9bbdf1 100644 --- a/resources/mmv.bootstrap/mmv.bootstrap.js +++ b/resources/mmv.bootstrap/mmv.bootstrap.js @@ -138,7 +138,7 @@ const HtmlUtils = require( './mmv.HtmlUtils.js' ); } catch ( e ) { message = e.message; if ( e.stack ) { - message += `\n${e.stack}`; + message += `\n${ e.stack }`; } deferred.reject( message ); return; @@ -164,7 +164,7 @@ const HtmlUtils = require( './mmv.HtmlUtils.js' ); mw.log.warn( message2 ); this.cleanupOverlay(); this.viewerIsBroken = true; - mw.notify( `Error loading MediaViewer: ${message2}` ); + mw.notify( `Error loading MediaViewer: ${ message2 }` ); return $.Deferred().reject( message2 ); } ); @@ -698,6 +698,7 @@ const HtmlUtils = require( './mmv.HtmlUtils.js' ); } ); } } + whenThumbsReady() { return this.thumbsReadyDeferred.promise(); } diff --git a/resources/mmv.head/base.js b/resources/mmv.head/base.js index 382c01f3e..36ac6bf96 100644 --- a/resources/mmv.head/base.js +++ b/resources/mmv.head/base.js @@ -43,6 +43,6 @@ * @return {string} the location hash * @member mw.mmv */ - getMediaHash: ( imageFileTitle ) => `#/media/${encodeURI( imageFileTitle )}` + getMediaHash: ( imageFileTitle ) => `#/media/${ encodeURI( imageFileTitle ) }` }; }() ); diff --git a/resources/mmv.ui.download.pane/mmv.ui.download.pane.js b/resources/mmv.ui.download.pane/mmv.ui.download.pane.js index ef224a698..186fb75af 100644 --- a/resources/mmv.ui.download.pane/mmv.ui.download.pane.js +++ b/resources/mmv.ui.download.pane/mmv.ui.download.pane.js @@ -133,6 +133,7 @@ const { EmbedFileFormatter, Utils } = require( 'mmv.ui.ondemandshareddependencie .text( mw.message( 'multimediaviewer-download-preview-link-title' ).text() ) .appendTo( $container ); } + createAttributionButton( $container ) { const attributionInput = new mw.widgets.CopyTextLayout( { align: 'top', @@ -278,7 +279,7 @@ const { EmbedFileFormatter, Utils } = require( 'mmv.ui.ondemandshareddependencie * @param {string} url */ setDownloadUrl( url ) { - this.$downloadButton.attr( 'href', `${url}?download` ); + this.$downloadButton.attr( 'href', `${ url }?download` ); this.$previewLink.attr( 'href', url ); // Re-enable download @@ -300,15 +301,15 @@ const { EmbedFileFormatter, Utils } = require( 'mmv.ui.ondemandshareddependencie // * multimediaviewer-download-medium-button-name // * multimediaviewer-download-large-button-name // * multimediaviewer-download-xl-button-name - const sizeClassMessage = mw.message( `multimediaviewer-download-${sizeClass}-button-name` ).text(); + const sizeClassMessage = mw.message( `multimediaviewer-download-${ sizeClass }-button-name` ).text(); const dimensionMessage = mw.message( 'multimediaviewer-embed-dimensions', width, height ).text(); const sizeMessage = mw.message( 'multimediaviewer-embed-dimensions-with-file-format', dimensionMessage, extension ).text(); // Update button label and size strings to reflect new selected size this.$downloadButton.html( - `${sizeClassMessage}` + - `${sizeMessage}` + `${ sizeClassMessage }` + + `${ sizeMessage }` ); } diff --git a/resources/mmv.ui.ondemandshareddependencies/mmv.EmbedFileFormatter.js b/resources/mmv.ui.ondemandshareddependencies/mmv.EmbedFileFormatter.js index f18151981..a4ccf2714 100644 --- a/resources/mmv.ui.ondemandshareddependencies/mmv.EmbedFileFormatter.js +++ b/resources/mmv.ui.ondemandshareddependencies/mmv.EmbedFileFormatter.js @@ -55,11 +55,11 @@ const { HtmlUtils } = require( 'mmv.bootstrap' ); * @return {string} */ getThumbnailWikitext( title, width, caption, alt ) { - const widthSection = width ? `|${width}px` : ''; - const captionSection = caption ? `|${caption}` : ''; - const altSection = alt ? `|alt=${alt}` : ''; + const widthSection = width ? `|${ width }px` : ''; + const captionSection = caption ? `|${ caption }` : ''; + const altSection = alt ? `|alt=${ alt }` : ''; - return `[[File:${title.getMainText()}${widthSection}|thumb${captionSection}${altSection}]]`; + return `[[File:${ title.getMainText() }${ widthSection }|thumb${ captionSection }${ altSection }]]`; } /** diff --git a/resources/mmv.ui.ondemandshareddependencies/mmv.ui.utils.js b/resources/mmv.ui.ondemandshareddependencies/mmv.ui.utils.js index d17b1f95a..e68a6cd02 100644 --- a/resources/mmv.ui.ondemandshareddependencies/mmv.ui.utils.js +++ b/resources/mmv.ui.ondemandshareddependencies/mmv.ui.utils.js @@ -204,7 +204,7 @@ const { HtmlUtils } = require( 'mmv.bootstrap' ); // * multimediaviewer-large-embed-dimensions // * multimediaviewer-medium-embed-dimensions // * multimediaviewer-small-embed-dimensions - `multimediaviewer-${sizeLabel}-embed-dimensions`, + `multimediaviewer-${ sizeLabel }-embed-dimensions`, dimensions ).text(); } diff --git a/resources/mmv.ui.reuse.shareembed/mmv.ui.reuse.embed.js b/resources/mmv.ui.reuse.shareembed/mmv.ui.reuse.embed.js index 004e81b13..a95ee21e7 100644 --- a/resources/mmv.ui.reuse.shareembed/mmv.ui.reuse.embed.js +++ b/resources/mmv.ui.reuse.shareembed/mmv.ui.reuse.embed.js @@ -124,7 +124,7 @@ const Tab = require( './mmv.ui.reuse.tab.js' ); // * mw-editfont-monospace // * mw-editfont-sans-serif // * mw-editfont-serif - classes: [ `mw-editfont-${mw.user.options.get( 'editfont' )}` ], + classes: [ `mw-editfont-${ mw.user.options.get( 'editfont' ) }` ], placeholder: mw.message( 'multimediaviewer-reuse-loading-placeholder' ).text(), autosize: true, maxRows: 5 diff --git a/resources/mmv.ui.reuse.shareembed/mmv.ui.reuse.share.js b/resources/mmv.ui.reuse.shareembed/mmv.ui.reuse.share.js index 23b66f686..b6bbaefd0 100644 --- a/resources/mmv.ui.reuse.shareembed/mmv.ui.reuse.share.js +++ b/resources/mmv.ui.reuse.shareembed/mmv.ui.reuse.share.js @@ -31,6 +31,7 @@ const Tab = require( './mmv.ui.reuse.tab.js' ); super( $container ); this.init(); } + init() { this.$pane.addClass( 'mw-mmv-share-pane' ) .appendTo( this.$container ); diff --git a/resources/mmv/logging/mmv.logging.ViewLogger.js b/resources/mmv/logging/mmv.logging.ViewLogger.js index ab590565f..1ac169d42 100644 --- a/resources/mmv/logging/mmv.logging.ViewLogger.js +++ b/resources/mmv/logging/mmv.logging.ViewLogger.js @@ -149,6 +149,7 @@ .on( 'focus.mmv-view-logger', () => this.startViewDuration() ) .on( 'blur.mmv-view-logger', () => this.stopViewDuration() ); } + /* * Stops listening to events */ diff --git a/resources/mmv/mmv.js b/resources/mmv/mmv.js index bb14220ad..6fb50b02c 100644 --- a/resources/mmv/mmv.js +++ b/resources/mmv/mmv.js @@ -316,7 +316,7 @@ const ThumbnailWidthCalculator = require( './mmv.ThumbnailWidthCalculator.js' ); $initialImage.hide() .removeAttr( 'style' ) .removeClass() - .addClass( `mw-mmv-placeholder-image ${image.filePageTitle.getExtension().toLowerCase()}` ); + .addClass( `mw-mmv-placeholder-image ${ image.filePageTitle.getExtension().toLowerCase() }` ); this.ui.canvas.set( image, $initialImage ); @@ -346,7 +346,7 @@ const ThumbnailWidthCalculator = require( './mmv.ThumbnailWidthCalculator.js' ); } // eslint-disable-next-line mediawiki/class-doc - imageElement.className = `mw-mmv-final-image ${image.filePageTitle.getExtension().toLowerCase()}`; + imageElement.className = `mw-mmv-final-image ${ image.filePageTitle.getExtension().toLowerCase() }`; imageElement.alt = image.alt; $.when( metadataPromise, pluginsPromise ).then( ( metadata ) => { @@ -524,7 +524,7 @@ const ThumbnailWidthCalculator = require( './mmv.ThumbnailWidthCalculator.js' ); */ setupProgressBar( image, imagePromise, imageWidth ) { const progressBar = this.ui.panel.progressBar; - const key = `${image.filePageTitle.getPrefixedDb()}|${imageWidth}`; + const key = `${ image.filePageTitle.getPrefixedDb() }|${ imageWidth }`; if ( !this.progressCache[ key ] ) { // Animate progress bar to 5 to give a sense that something is happening, and make sure @@ -902,7 +902,7 @@ const ThumbnailWidthCalculator = require( './mmv.ThumbnailWidthCalculator.js' ); */ createDocumentTitle( imageTitle ) { if ( imageTitle ) { - return `${imageTitle.getNameText()} - ${this.documentTitle}`; + return `${ imageTitle.getNameText() } - ${ this.documentTitle }`; } else { return this.documentTitle; } diff --git a/resources/mmv/mmv.lightboxinterface.js b/resources/mmv/mmv.lightboxinterface.js index 8bb694a49..402e58740 100644 --- a/resources/mmv/mmv.lightboxinterface.js +++ b/resources/mmv/mmv.lightboxinterface.js @@ -156,7 +156,7 @@ const UiElement = require( './ui/mmv.ui.js' ); // Make sure that the metadata is going to be at the bottom when it appears // 83 is the height of the top metadata area. Which can't be measured by // reading the DOM at this point of the execution, unfortunately - this.$postDiv.css( 'top', `${$( window ).height() - 83}px` ); + this.$postDiv.css( 'top', `${ $( window ).height() - 83 }px` ); // Re-appending the same content can have nasty side-effects // Such as the browser leaving fullscreen mode if the fullscreened element is part of it @@ -468,7 +468,7 @@ const UiElement = require( './ui/mmv.ui.js' ); * @param {boolean} showNextButton Whether the next button should be revealed or not */ updateControls( showPrevButton, showNextButton ) { - const prevNextTop = `${( this.$imageWrapper.height() / 2 ) - 60}px`; + const prevNextTop = `${ ( this.$imageWrapper.height() / 2 ) - 60 }px`; if ( this.isFullscreen ) { this.$postDiv.css( 'top', '' ); diff --git a/resources/mmv/model/mmv.model.Image.js b/resources/mmv/model/mmv.model.Image.js index 39a3642c3..b36cb8e58 100644 --- a/resources/mmv/model/mmv.model.Image.js +++ b/resources/mmv/model/mmv.model.Image.js @@ -162,6 +162,7 @@ const License = require( './mmv.model.License.js' ); */ this.thumbUrls = {}; } + /** * Constructs a new Image object out of an object containing * @@ -200,7 +201,7 @@ const License = require( './mmv.model.License.js' ); // Anonymise the timestamp to avoid making the file identifiable // We only need to know the day - anonymizedUploadDateTime = `${anonymizedUploadDateTime.slice( 0, anonymizedUploadDateTime.length - 6 )}000000`; + anonymizedUploadDateTime = `${ anonymizedUploadDateTime.slice( 0, anonymizedUploadDateTime.length - 6 ) }000000`; name = this.parseExtmeta( extmeta.ObjectName, 'plaintext' ); @@ -260,6 +261,7 @@ const License = require( './mmv.model.License.js' ); return imageData; } + /** * Constructs a new License object out of an object containing * imageinfo data from an API response. @@ -284,6 +286,7 @@ const License = require( './mmv.model.License.js' ); return license; } + /** * Reads and parses a value from the imageinfo API extmetadata field. * @@ -333,6 +336,7 @@ const License = require( './mmv.model.License.js' ); throw new Error( 'Image.parseExtmeta: unknown type' ); } } + /** * Add a thumb URL * @@ -342,6 +346,7 @@ const License = require( './mmv.model.License.js' ); addThumbUrl( width, url ) { this.thumbUrls[ width ] = url; } + /** * Get a thumb URL if we have it. * @@ -351,6 +356,7 @@ const License = require( './mmv.model.License.js' ); getThumbUrl( width ) { return this.thumbUrls[ width ]; } + /** * Check whether the image has geolocation data. * diff --git a/resources/mmv/model/mmv.model.IwTitle.js b/resources/mmv/model/mmv.model.IwTitle.js index 2347cd502..4da370235 100644 --- a/resources/mmv/model/mmv.model.IwTitle.js +++ b/resources/mmv/model/mmv.model.IwTitle.js @@ -41,15 +41,19 @@ /** @property {string} url - */ this.url = url; } + getUrl() { return this.url; } + getPrefixedDb() { return this.title; } + getPrefixedText() { return text( this.getPrefixedDb() ); } + getDomain() { return this.domain; } diff --git a/resources/mmv/model/mmv.model.License.js b/resources/mmv/model/mmv.model.License.js index c1382c999..044170228 100644 --- a/resources/mmv/model/mmv.model.License.js +++ b/resources/mmv/model/mmv.model.License.js @@ -65,6 +65,7 @@ const { HtmlUtils } = require( 'mmv.bootstrap' ); /** @property {HtmlUtils} htmlUtils - */ this.htmlUtils = new HtmlUtils(); } + /** * Check whether this is a Creative Commons license. * @@ -73,6 +74,7 @@ const { HtmlUtils } = require( 'mmv.bootstrap' ); isCc() { return this.internalName ? this.internalName.slice( 0, 2 ) === 'cc' : false; } + /** * Check whether this is a public domain "license". * @@ -81,6 +83,7 @@ const { HtmlUtils } = require( 'mmv.bootstrap' ); isPd() { return this.internalName === 'pd'; } + /** * Check whether this is a free license. * @@ -90,6 +93,7 @@ const { HtmlUtils } = require( 'mmv.bootstrap' ); // licenses with missing nonfree information are assumed free return !this.nonFree; } + /** * Check whether reusers need to attribute the author * @@ -99,6 +103,7 @@ const { HtmlUtils } = require( 'mmv.bootstrap' ); // to be on the safe side, if the attribution required flag is not set, it is assumed to be true return !this.isPd() && this.attributionRequired !== false; } + /** * Returns the short name of the license: * - if we have interface messages for this license (basically just CC and PD), use those @@ -109,7 +114,7 @@ const { HtmlUtils } = require( 'mmv.bootstrap' ); * FIXME a model should not depend on an i18n class. We should probably use view models. */ getShortName() { - const message = `multimediaviewer-license-${this.internalName || ''}`; + const message = `multimediaviewer-license-${ this.internalName || '' }`; if ( mw.messages.exists( message ) ) { // The following messages are used here: // * multimediaviewer-license-cc-by-1.0 @@ -134,6 +139,7 @@ const { HtmlUtils } = require( 'mmv.bootstrap' ); return this.shortName; } } + /** * Returns a short HTML representation of the license. * diff --git a/resources/mmv/provider/mmv.provider.Api.js b/resources/mmv/provider/mmv.provider.Api.js index e2b223292..c4cd129a0 100644 --- a/resources/mmv/provider/mmv.provider.Api.js +++ b/resources/mmv/provider/mmv.provider.Api.js @@ -73,7 +73,7 @@ this.cache[ key ] = getPromise(); this.cache[ key ].fail( ( error ) => { // constructor.name is usually not reliable in inherited classes, but OOjs fixes that - mw.log( `${this.constructor.name} provider failed to load: `, error ); + mw.log( `${ this.constructor.name } provider failed to load: `, error ); } ); } return this.cache[ key ]; @@ -113,7 +113,7 @@ const errorCode = data.error && data.error.code; let errorMessage = data.error && data.error.info || 'unknown error'; if ( errorCode ) { - errorMessage = `${errorCode}: ${errorMessage}`; + errorMessage = `${ errorCode }: ${ errorMessage }`; } return errorMessage; } diff --git a/resources/mmv/provider/mmv.provider.GuessedThumbnailInfo.js b/resources/mmv/provider/mmv.provider.GuessedThumbnailInfo.js index 37ac473ef..d323ffead 100644 --- a/resources/mmv/provider/mmv.provider.GuessedThumbnailInfo.js +++ b/resources/mmv/provider/mmv.provider.GuessedThumbnailInfo.js @@ -42,6 +42,7 @@ const Thumbnail = require( '../model/mmv.model.Thumbnail.js' ); svg: 1 }; } + /** * File extensions which can be displayed in the browser. * Other file types need to be thumbnailed even if the size of the original file would be right. @@ -261,7 +262,7 @@ const Thumbnail = require( '../model/mmv.model.Thumbnail.js' ); } // we are assuming here that the other thumbnail parameters do not look like a size - url = url.replace( sizeRegexp, `${width}px` ); + url = url.replace( sizeRegexp, `${ width }px` ); return this.restoreFilename( url, file ); } diff --git a/resources/mmv/provider/mmv.provider.Image.js b/resources/mmv/provider/mmv.provider.Image.js index 7503c142e..fe0f86170 100644 --- a/resources/mmv/provider/mmv.provider.Image.js +++ b/resources/mmv/provider/mmv.provider.Image.js @@ -62,7 +62,7 @@ if ( !this.cache[ cacheKey ] ) { this.cache[ cacheKey ] = this.rawGet( url, this.imagePreloadingSupported() ); this.cache[ cacheKey ].fail( ( error ) => { - mw.log( `${this.constructor.name} provider failed to load: `, error ); + mw.log( `${ this.constructor.name } provider failed to load: `, error ); } ); } @@ -87,7 +87,7 @@ } img.onload = () => deferred.resolve( img ); - img.onerror = () => deferred.reject( `could not load image from ${url}` ); + img.onerror = () => deferred.reject( `could not load image from ${ url }` ); img.src = url; diff --git a/resources/mmv/provider/mmv.provider.ImageInfo.js b/resources/mmv/provider/mmv.provider.ImageInfo.js index d4e7838bf..60ba02508 100644 --- a/resources/mmv/provider/mmv.provider.ImageInfo.js +++ b/resources/mmv/provider/mmv.provider.ImageInfo.js @@ -109,7 +109,7 @@ const ImageModel = require( '../model/mmv.model.Image.js' ); if ( page.imageinfo && page.imageinfo.length ) { return ImageModel.newFromImageInfo( file, page ); } else if ( page.missing === true && page.imagerepository === '' ) { - return $.Deferred().reject( `file does not exist: ${file.getPrefixedDb()}` ); + return $.Deferred().reject( `file does not exist: ${ file.getPrefixedDb() }` ); } else { return $.Deferred().reject( 'unknown error' ); } diff --git a/resources/mmv/provider/mmv.provider.ThumbnailInfo.js b/resources/mmv/provider/mmv.provider.ThumbnailInfo.js index 835f5b4c6..0a3ea7697 100644 --- a/resources/mmv/provider/mmv.provider.ThumbnailInfo.js +++ b/resources/mmv/provider/mmv.provider.ThumbnailInfo.js @@ -49,7 +49,7 @@ const Thumbnail = require( '../model/mmv.model.Thumbnail.js' ); * @return {jQuery.Promise.} */ get( file, width, height ) { - const cacheKey = `${file.getPrefixedDb()}|${width || ''}|${height || ''}`; + const cacheKey = `${ file.getPrefixedDb() }|${ width || '' }|${ height || '' }`; return this.getCachedPromise( cacheKey, () => { return this.apiGetWithMaxAge( { @@ -78,7 +78,7 @@ const Thumbnail = require( '../model/mmv.model.Thumbnail.js' ); return $.Deferred().reject( 'error in provider, thumb info not found' ); } } else if ( page.missing === true && page.imagerepository === '' ) { - return $.Deferred().reject( `file does not exist: ${file.getPrefixedDb()}` ); + return $.Deferred().reject( `file does not exist: ${ file.getPrefixedDb() }` ); } else { return $.Deferred().reject( 'unknown error' ); } diff --git a/resources/mmv/ui/mmv.ui.canvas.js b/resources/mmv/ui/mmv.ui.canvas.js index dcb32c795..bbc442264 100644 --- a/resources/mmv/ui/mmv.ui.canvas.js +++ b/resources/mmv/ui/mmv.ui.canvas.js @@ -322,8 +322,8 @@ const UiElement = require( './mmv.ui.js' ); duration: animationLength, step: ( step ) => { this.$image.css( { - '-webkit-filter': `blur(${step}px)`, - filter: `blur(${step}px)` + '-webkit-filter': `blur(${ step }px)`, + filter: `blur(${ step }px)` } ); }, complete: () => { @@ -332,6 +332,7 @@ const UiElement = require( './mmv.ui.js' ); } } ); } + unblur() { // We apply empty CSS values to remove the inline styles applied by jQuery // so that they don't get in the way of styles defined in CSS @@ -350,18 +351,18 @@ const UiElement = require( './mmv.ui.js' ); const htmlUtils = new HtmlUtils(); // ** is bolding in Phabricator - const description = `**${mw.message( 'multimediaviewer-errorreport-privacywarning' ).text()}** + const description = `**${ mw.message( 'multimediaviewer-errorreport-privacywarning' ).text() }** Error details: -error: ${error} -URL: ${location.href} -user agent: ${navigator.userAgent} -screen size: ${screen.width}x${screen.height} -canvas size: ${canvasDimensions.width}x${canvasDimensions.height} -image size: ${this.imageRawMetadata.originalWidth}x${this.imageRawMetadata.originalHeight} -thumbnail size: CSS: ${thumbnailDimensions.cssWidth}x${thumbnailDimensions.cssHeight}, screen width: ${thumbnailDimensions.screen}, real width: ${thumbnailDimensions.real}`; +error: ${ error } +URL: ${ location.href } +user agent: ${ navigator.userAgent } +screen size: ${ screen.width }x${ screen.height } +canvas size: ${ canvasDimensions.width }x${ canvasDimensions.height } +image size: ${ this.imageRawMetadata.originalWidth }x${ this.imageRawMetadata.originalHeight } +thumbnail size: CSS: ${ thumbnailDimensions.cssWidth }x${ thumbnailDimensions.cssHeight }, screen width: ${ thumbnailDimensions.screen }, real width: ${ thumbnailDimensions.real }`; const errorUri = mw.msg( 'multimediaviewer-report-issue-url', encodeURIComponent( description ) ); const $retryLink = $( '' ).addClass( 'mw-mmv-retry-link' ).text( diff --git a/resources/mmv/ui/mmv.ui.canvasButtons.js b/resources/mmv/ui/mmv.ui.canvasButtons.js index dbfe3b873..f67d79ca5 100644 --- a/resources/mmv/ui/mmv.ui.canvasButtons.js +++ b/resources/mmv/ui/mmv.ui.canvasButtons.js @@ -255,6 +255,7 @@ const UiElement = require( './mmv.ui.js' ); this.$reuse.prop( 'href', image.descriptionUrl ); this.$download.prop( 'href', image.url ); } + empty() { this.$reuse .removeClass( 'open' ) diff --git a/resources/mmv/ui/mmv.ui.dialog.js b/resources/mmv/ui/mmv.ui.dialog.js index a7b97e9c6..87d1c6402 100644 --- a/resources/mmv/ui/mmv.ui.dialog.js +++ b/resources/mmv/ui/mmv.ui.dialog.js @@ -154,14 +154,14 @@ const UiElement = require( './mmv.ui.js' ); this.closeDialog(); return false; } ); - $( document ).on( `click.mmv.${this.eventPrefix}`, this.outsideClickHandler ); + $( document ).on( `click.mmv.${ this.eventPrefix }`, this.outsideClickHandler ); } /** * Removes the event handler set up by startListeningToOutsideClick(). */ stopListeningToOutsideClick() { - $( document ).off( `click.mmv.${this.eventPrefix}`, this.outsideClickHandler ); + $( document ).off( `click.mmv.${ this.eventPrefix }`, this.outsideClickHandler ); } /** diff --git a/resources/mmv/ui/mmv.ui.metadataPanel.js b/resources/mmv/ui/mmv.ui.metadataPanel.js index 93f7d8ea9..28a8d50ab 100644 --- a/resources/mmv/ui/mmv.ui.metadataPanel.js +++ b/resources/mmv/ui/mmv.ui.metadataPanel.js @@ -373,6 +373,7 @@ const TruncatableTextField = require( './mmv.ui.truncatableTextField.js' ); ) .appendTo( this.$imageMetadata ); } + /* Setters */ /** * Sets the image title at the top of the metadata panel. @@ -531,7 +532,7 @@ const TruncatableTextField = require( './mmv.ui.truncatableTextField.js' ); let isCc; let isPd; - filePageUrl += `?uselang=${mw.config.get( 'wgUserLanguage' )}#${mw.message( 'license-header' ).text()}`; + filePageUrl += `?uselang=${ mw.config.get( 'wgUserLanguage' ) }#${ mw.message( 'license-header' ).text() }`; if ( license ) { shortName = license.getShortName(); @@ -592,7 +593,7 @@ const TruncatableTextField = require( './mmv.ui.truncatableTextField.js' ); // * multimediaviewer-restriction-trademarked // * multimediaviewer-restriction-default // * multimediaviewer-restriction-default-and-others - if ( !mw.message( `multimediaviewer-restriction-${value}` ).exists() || value === 'default' || index + 1 > MetadataPanel.MAX_RESTRICT ) { + if ( !mw.message( `multimediaviewer-restriction-${ value }` ).exists() || value === 'default' || index + 1 > MetadataPanel.MAX_RESTRICT ) { showDefault = true; // If the restriction isn't defined or there are more than MAX_RESTRICT of them, show a generic symbol at the end return; } @@ -640,7 +641,7 @@ const TruncatableTextField = require( './mmv.ui.truncatableTextField.js' ); // * multimediaviewer-restriction-trademarked // * multimediaviewer-restriction-default // * multimediaviewer-restriction-default-and-others - .prop( 'title', mw.message( `multimediaviewer-restriction-${type}` ).text() ); + .prop( 'title', mw.message( `multimediaviewer-restriction-${ type }` ).text() ); $( '' ) // The following classes are used here: @@ -658,8 +659,8 @@ const TruncatableTextField = require( './mmv.ui.truncatableTextField.js' ); // * mw-mmv-restriction-personality // * mw-mmv-restriction-trademarked:after // * mw-mmv-restriction-default - .addClass( `mw-mmv-restriction-label-inner mw-mmv-restriction-${type === 'default-and-others' ? 'default' : type}` ) - .text( mw.message( `multimediaviewer-restriction-${type}` ).text() ) + .addClass( `mw-mmv-restriction-label-inner mw-mmv-restriction-${ type === 'default-and-others' ? 'default' : type }` ) + .text( mw.message( `multimediaviewer-restriction-${ type }` ).text() ) .appendTo( $label ); return $label; @@ -676,13 +677,13 @@ const TruncatableTextField = require( './mmv.ui.truncatableTextField.js' ); } const latitude = imageData.latitude >= 0 ? imageData.latitude : imageData.latitude * -1; - const latmsg = `multimediaviewer-geoloc-${imageData.latitude >= 0 ? 'north' : 'south'}`; + const latmsg = `multimediaviewer-geoloc-${ imageData.latitude >= 0 ? 'north' : 'south' }`; const latdeg = Math.floor( latitude ); let latremain = latitude - latdeg; const latmin = Math.floor( ( latremain ) * 60 ); const longitude = imageData.longitude >= 0 ? imageData.longitude : imageData.longitude * -1; - const longmsg = `multimediaviewer-geoloc-${imageData.longitude >= 0 ? 'east' : 'west'}`; + const longmsg = `multimediaviewer-geoloc-${ imageData.longitude >= 0 ? 'east' : 'west' }`; const longdeg = Math.floor( longitude ); let longremain = longitude - longdeg; const longmin = Math.floor( ( longremain ) * 60 ); @@ -724,11 +725,11 @@ const TruncatableTextField = require( './mmv.ui.truncatableTextField.js' ); this.$location.prop( 'href', ( 'https://geohack.toolforge.org/geohack.php?pagename=' + - `File:${imageData.title.getMain() + `File:${ imageData.title.getMain() }¶ms=${ - Math.abs( imageData.latitude )}${imageData.latitude >= 0 ? '_N_' : '_S_' - }${Math.abs( imageData.longitude )}${imageData.longitude >= 0 ? '_E_' : '_W_' - }&language=${encodeURIComponent( mw.config.get( 'wgUserLanguage' ) )}` + Math.abs( imageData.latitude ) }${ imageData.latitude >= 0 ? '_N_' : '_S_' + }${ Math.abs( imageData.longitude ) }${ imageData.longitude >= 0 ? '_E_' : '_W_' + }&language=${ encodeURIComponent( mw.config.get( 'wgUserLanguage' ) ) }` ) ); this.$locationLi.removeClass( 'empty' ); diff --git a/resources/mmv/ui/mmv.ui.progressBar.js b/resources/mmv/ui/mmv.ui.progressBar.js index b19ff32c2..a63df9ba0 100644 --- a/resources/mmv/ui/mmv.ui.progressBar.js +++ b/resources/mmv/ui/mmv.ui.progressBar.js @@ -42,6 +42,7 @@ const UiElement = require( './mmv.ui.js' ); .addClass( 'mw-mmv-progress-percent' ) .appendTo( this.$progress ); } + empty() { this.hide(); } @@ -68,13 +69,13 @@ const UiElement = require( './mmv.ui.js' ); // fast to 100 and we hide the bar when the animation is done // FIXME: Use CSS transition // eslint-disable-next-line no-jquery/no-animate - this.$percent.animate( { width: `${percent}%` }, 50, 'swing', this.hide.bind( this ) ); + this.$percent.animate( { width: `${ percent }%` }, 50, 'swing', this.hide.bind( this ) ); } else { // When any other % update comes in, we make sure the bar is visible // and we animate to the right position // FIXME: Use CSS transition // eslint-disable-next-line no-jquery/no-animate - this.$percent.animate( { width: `${percent}%` } ); + this.$percent.animate( { width: `${ percent }%` } ); } } @@ -85,7 +86,7 @@ const UiElement = require( './mmv.ui.js' ); */ jumpTo( percent ) { this.$progress.removeClass( 'empty' ); - this.$percent.stop().css( { width: `${percent}%` } ); + this.$percent.stop().css( { width: `${ percent }%` } ); } } diff --git a/resources/mmv/ui/mmv.ui.reuse.dialog.js b/resources/mmv/ui/mmv.ui.reuse.dialog.js index d2e5f81aa..ac3f13fcb 100644 --- a/resources/mmv/ui/mmv.ui.reuse.dialog.js +++ b/resources/mmv/ui/mmv.ui.reuse.dialog.js @@ -47,6 +47,7 @@ const Dialog = require( './mmv.ui.dialog.js' ); this.eventPrefix = 'use-this-file'; } + // FIXME this should happen outside the dialog and the tabs, but we need to improve initTabs() { const makeTab = ( type ) => new OO.ui.MenuOptionWidget( { @@ -54,7 +55,7 @@ const Dialog = require( './mmv.ui.dialog.js' ); // The following messages are used here: // * multimediaviewer-embed-tab // * multimediaviewer-share-tab - label: mw.message( `multimediaviewer-${type}-tab` ).text() + label: mw.message( `multimediaviewer-${ type }-tab` ).text() } ); this.reuseTabs = new OO.ui.MenuSelectWidget( { @@ -104,6 +105,7 @@ const Dialog = require( './mmv.ui.dialog.js' ); this.tabsSetValues = undefined; } } + toggleDialog() { if ( this.tabs === null ) { this.initTabs(); diff --git a/resources/mmv/ui/mmv.ui.truncatableTextField.js b/resources/mmv/ui/mmv.ui.truncatableTextField.js index 79bf8a7e0..909b23f58 100644 --- a/resources/mmv/ui/mmv.ui.truncatableTextField.js +++ b/resources/mmv/ui/mmv.ui.truncatableTextField.js @@ -94,9 +94,11 @@ const UiElement = require( './mmv.ui.js' ); .addClass( 'mw-mmv-ttf-container empty' ) .append( this.$element, this.$ellipsis ); } + attach() { $( window ).on( 'resize.mmv-ttf', mw.util.debounce( this.repaint.bind( this ), 100 ) ); } + unattach() { $( window ).off( 'resize.mmv-ttf' ); } @@ -113,6 +115,7 @@ const UiElement = require( './mmv.ui.js' ); this.$ellipsis.hide(); this.shrink(); } + empty() { this.$element.empty(); // eslint-disable-next-line mediawiki/class-doc diff --git a/resources/mmv/ui/mmv.ui.viewingOptions.js b/resources/mmv/ui/mmv.ui.viewingOptions.js index 3316bacfa..1b1c3252f 100644 --- a/resources/mmv/ui/mmv.ui.viewingOptions.js +++ b/resources/mmv/ui/mmv.ui.viewingOptions.js @@ -36,6 +36,7 @@ const Dialog = require( './mmv.ui.dialog.js' ); this.initPanel(); } + attach() { this.handleEvent( 'mmv-options-open', this.handleOpenCloseClick.bind( this ) ); diff --git a/tests/qunit/.eslintrc.json b/tests/qunit/.eslintrc.json index 56674d2e3..58448a078 100644 --- a/tests/qunit/.eslintrc.json +++ b/tests/qunit/.eslintrc.json @@ -9,6 +9,7 @@ }, "rules": { "no-jquery/no-global-selector": "off", - "no-jquery/no-sizzle": "off" + "no-jquery/no-sizzle": "off", + "es-x/no-resizable-and-growable-arraybuffers": "warn" } } diff --git a/tests/qunit/mmv/mmv.EmbedFileFormatter.test.js b/tests/qunit/mmv/mmv.EmbedFileFormatter.test.js index 9e902bc66..8aaf17f9d 100644 --- a/tests/qunit/mmv/mmv.EmbedFileFormatter.test.js +++ b/tests/qunit/mmv/mmv.EmbedFileFormatter.test.js @@ -35,7 +35,9 @@ const { EmbedFileFormatter } = require( 'mmv.ui.ondemandshareddependencies' ); ); const repoInfo = { displayName: options.siteName, - getSiteLink: function () { return options.siteUrl; } + getSiteLink: function () { + return options.siteUrl; + } }; return { @@ -229,7 +231,9 @@ const { EmbedFileFormatter } = require( 'mmv.ui.ondemandshareddependencies' ); source: 'Source', descriptionShortUrl: 'link', title: { - getNameText: function () { return 'Image Title'; } + getNameText: function () { + return 'Image Title'; + } } } } ); @@ -246,10 +250,14 @@ const { EmbedFileFormatter } = require( 'mmv.ui.ondemandshareddependencies' ); source: 'Source', descriptionShortUrl: 'link', title: { - getNameText: function () { return 'Image Title'; } + getNameText: function () { + return 'Image Title'; + } }, license: { - getShortName: function () { return 'WTFPL v2'; }, + getShortName: function () { + return 'WTFPL v2'; + }, longName: 'Do What the Fuck You Want Public License Version 2', isFree: this.sandbox.stub().returns( true ) } @@ -265,7 +273,9 @@ const { EmbedFileFormatter } = require( 'mmv.ui.ondemandshareddependencies' ); let html = formatter.getCreditHtml( { repoInfo: { displayName: 'Localcommons', - getSiteLink: function () { return 'quux'; } + getSiteLink: function () { + return 'quux'; + } }, imageInfo: { @@ -273,7 +283,9 @@ const { EmbedFileFormatter } = require( 'mmv.ui.ondemandshareddependencies' ); source: 'Source', descriptionShortUrl: 'some link', title: { - getNameText: function () { return 'Image Title'; } + getNameText: function () { + return 'Image Title'; + } } } } ); @@ -287,7 +299,9 @@ const { EmbedFileFormatter } = require( 'mmv.ui.ondemandshareddependencies' ); html = formatter.getCreditHtml( { repoInfo: { displayName: 'Localcommons', - getSiteLink: function () { return 'quux'; } + getSiteLink: function () { + return 'quux'; + } }, imageInfo: { @@ -295,10 +309,14 @@ const { EmbedFileFormatter } = require( 'mmv.ui.ondemandshareddependencies' ); source: 'Source', descriptionShortUrl: 'some link', title: { - getNameText: function () { return 'Image Title'; } + getNameText: function () { + return 'Image Title'; + } }, license: { - getShortLink: function () { return 'WTFPL v2'; }, + getShortLink: function () { + return 'WTFPL v2'; + }, longName: 'Do What the Fuck You Want Public License Version 2', isFree: this.sandbox.stub().returns( true ) } diff --git a/tests/qunit/mmv/mmv.test.js b/tests/qunit/mmv/mmv.test.js index 0d45fe538..b2eb89eb2 100644 --- a/tests/qunit/mmv/mmv.test.js +++ b/tests/qunit/mmv/mmv.test.js @@ -60,8 +60,12 @@ const { MultimediaViewerBootstrap } = require( 'mmv.bootstrap' ); canvas: { set: function () {}, unblurWithAnimation: function () {}, unblur: function () {}, - getCurrentImageWidths: function () { return { real: 0 }; }, - getDimensions: function () { return {}; } + getCurrentImageWidths: function () { + return { real: 0 }; + }, + getDimensions: function () { + return {}; + } }, panel: { setImageInfo: function () {}, @@ -138,8 +142,12 @@ const { MultimediaViewerBootstrap } = require( 'mmv.bootstrap' ); canvas: { set: function () {}, unblurWithAnimation: function () {}, unblur: function () {}, - getCurrentImageWidths: function () { return { real: 0 }; }, - getDimensions: function () { return {}; } + getCurrentImageWidths: function () { + return { real: 0 }; + }, + getDimensions: function () { + return {}; + } }, panel: { setImageInfo: function () {}, @@ -249,7 +257,9 @@ const { MultimediaViewerBootstrap } = require( 'mmv.bootstrap' ); viewer.ui = { canvas: { unblurWithAnimation: function () {}, unblur: function () {}, - maybeDisplayPlaceholder: function () { return true; } + maybeDisplayPlaceholder: function () { + return true; + } } }; viewer.imageInfoProvider.get = this.sandbox.stub(); @@ -272,7 +282,9 @@ const { MultimediaViewerBootstrap } = require( 'mmv.bootstrap' ); viewer.ui = { canvas: { unblurWithAnimation: function () {}, unblur: function () {}, - maybeDisplayPlaceholder: function () { return true; } + maybeDisplayPlaceholder: function () { + return true; + } } }; viewer.imageInfoProvider.get = this.sandbox.stub().returns( $.Deferred().resolve( { width: 100, height: 100 } ) ); @@ -354,8 +366,12 @@ const { MultimediaViewerBootstrap } = require( 'mmv.bootstrap' ); setupForLoad: function () {}, canvas: { set: function () {}, - getCurrentImageWidths: function () { return { real: 0 }; }, - getDimensions: function () { return {}; } + getCurrentImageWidths: function () { + return { real: 0 }; + }, + getDimensions: function () { + return {}; + } }, panel: { setImageInfo: this.sandbox.stub(), diff --git a/tests/qunit/mmv/model/mmv.model.License.test.js b/tests/qunit/mmv/model/mmv.model.License.test.js index ce2f7d8cd..e2055c228 100644 --- a/tests/qunit/mmv/model/mmv.model.License.test.js +++ b/tests/qunit/mmv/model/mmv.model.License.test.js @@ -57,7 +57,9 @@ const { License } = require( 'mmv' ); mw.message = function ( name ) { return name === 'multimediaviewer-license-' + existingMessageKey ? - { text: function () { return 'Translated name'; } } : + { text: function () { + return 'Translated name'; + } } : oldMwMessage.apply( mw, arguments ); }; mw.messages.exists = function ( name ) { diff --git a/tests/qunit/mmv/provider/mmv.provider.Image.test.js b/tests/qunit/mmv/provider/mmv.provider.Image.test.js index 8b597c3cb..eeab687e3 100644 --- a/tests/qunit/mmv/provider/mmv.provider.Image.test.js +++ b/tests/qunit/mmv/provider/mmv.provider.Image.test.js @@ -99,7 +99,9 @@ const { ImageProvider } = require( 'mmv' ); imageProvider.imagePreloadingSupported = () => true; imageProvider.performance = { - record: function () { return $.Deferred().resolve(); } + record: function () { + return $.Deferred().resolve(); + } }; return imageProvider.get( url ).then( function ( image ) { @@ -115,7 +117,9 @@ const { ImageProvider } = require( 'mmv' ); imageProvider.imagePreloadingSupported = () => true; imageProvider.performance = { - record: function () { return $.Deferred().resolve(); } + record: function () { + return $.Deferred().resolve(); + } }; imageProvider.get( url ).fail( function () { diff --git a/tests/qunit/mmv/ui/mmv.ui.canvas.test.js b/tests/qunit/mmv/ui/mmv.ui.canvas.test.js index 49172eb0d..20bc677a1 100644 --- a/tests/qunit/mmv/ui/mmv.ui.canvas.test.js +++ b/tests/qunit/mmv/ui/mmv.ui.canvas.test.js @@ -101,7 +101,9 @@ const { Canvas, LightboxImage } = require( 'mmv' ); const canvas = new Canvas( $qf ); imageRawMetadata.filePageTitle = { - getExtension: function () { return 'svg'; } + getExtension: function () { + return 'svg'; + } }; canvas.imageRawMetadata = imageRawMetadata; @@ -129,7 +131,9 @@ const { Canvas, LightboxImage } = require( 'mmv' ); const canvas = new Canvas( $qf ); imageRawMetadata.filePageTitle = { - getExtension: function () { return 'png'; } + getExtension: function () { + return 'png'; + } }; canvas.imageRawMetadata = imageRawMetadata; @@ -157,7 +161,9 @@ const { Canvas, LightboxImage } = require( 'mmv' ); const canvas = new Canvas( $qf ); imageRawMetadata.filePageTitle = { - getExtension: function () { return 'png'; } + getExtension: function () { + return 'png'; + } }; canvas.imageRawMetadata = imageRawMetadata; @@ -185,7 +191,9 @@ const { Canvas, LightboxImage } = require( 'mmv' ); const canvas = new Canvas( $qf ); imageRawMetadata.filePageTitle = { - getExtension: function () { return 'png'; } + getExtension: function () { + return 'png'; + } }; canvas.imageRawMetadata = imageRawMetadata; @@ -213,7 +221,9 @@ const { Canvas, LightboxImage } = require( 'mmv' ); const canvas = new Canvas( $qf ); imageRawMetadata.filePageTitle = { - getExtension: function () { return 'png'; } + getExtension: function () { + return 'png'; + } }; canvas.imageRawMetadata = imageRawMetadata; diff --git a/tests/qunit/mmv/ui/mmv.ui.metadataPanel.test.js b/tests/qunit/mmv/ui/mmv.ui.metadataPanel.test.js index 5fbefcab0..02fd1c7f2 100644 --- a/tests/qunit/mmv/ui/mmv.ui.metadataPanel.test.js +++ b/tests/qunit/mmv/ui/mmv.ui.metadataPanel.test.js @@ -46,7 +46,9 @@ QUnit.test( '.setLocationData()', function ( assert ) { const imageData = { latitude: latitude, longitude: longitude, - hasCoords: function () { return true; }, + hasCoords: function () { + return true; + }, title: mw.Title.newFromText( 'File:Foobar.jpg' ) }; @@ -114,11 +116,17 @@ QUnit.test( '.setImageInfo()', function ( assert ) { title: image.filePageTitle, url: 'https://upload.wikimedia.org/wikipedia/commons/3/3a/Foobar.jpg', descriptionUrl: 'https://commons.wikimedia.org/wiki/File:Foobar.jpg', - hasCoords: function () { return false; } + hasCoords: function () { + return false; + } }; const repoData = { - getArticlePath: function () { return 'Foo'; }, - isCommons: function () { return false; } + getArticlePath: function () { + return 'Foo'; + }, + isCommons: function () { + return false; + } }; const clock = this.sandbox.useFakeTimers(); diff --git a/tests/qunit/mmv/ui/mmv.ui.metadataPanelScroller.test.js b/tests/qunit/mmv/ui/mmv.ui.metadataPanelScroller.test.js index 17cfaa7a6..8eb5966fd 100644 --- a/tests/qunit/mmv/ui/mmv.ui.metadataPanelScroller.test.js +++ b/tests/qunit/mmv/ui/mmv.ui.metadataPanelScroller.test.js @@ -39,9 +39,15 @@ const { MetadataPanelScroller } = require( 'mmv' ); let displayCount = null; // pretend it doesn't exist at first const localStorage = createLocalStorage( { // We simulate localStorage to avoid test side-effects - getItem: function () { return displayCount; }, - setItem: function ( _, val ) { displayCount = val; }, - removeItem: function () { displayCount = null; } + getItem: function () { + return displayCount; + }, + setItem: function ( _, val ) { + displayCount = val; + }, + removeItem: function () { + displayCount = null; + } } ); const scroller = new MetadataPanelScroller( $qf, $( '
' ).appendTo( $qf ), localStorage ); diff --git a/tests/qunit/mmv/ui/mmv.ui.reuse.embed.test.js b/tests/qunit/mmv/ui/mmv.ui.reuse.embed.test.js index 99a31d16a..095a689ac 100644 --- a/tests/qunit/mmv/ui/mmv.ui.reuse.embed.test.js +++ b/tests/qunit/mmv/ui/mmv.ui.reuse.embed.test.js @@ -272,8 +272,12 @@ const { Embed } = require( 'mmv.ui.reuse.shareembed' ); const height = 20; embed.formatter = { - getThumbnailWikitextFromEmbedFileInfo: function () { return 'wikitext'; }, - getThumbnailHtml: function () { return 'html'; } + getThumbnailWikitextFromEmbedFileInfo: function () { + return 'wikitext'; + }, + getThumbnailHtml: function () { + return 'html'; + } }; embed.set( {}, {} ); diff --git a/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js b/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js index acd22e2da..7a258266c 100644 --- a/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js +++ b/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js @@ -49,7 +49,9 @@ const { StripeButtons } = require( 'mmv' ); const fakeImageInfo = { descriptionUrl: '//commons.wikimedia.org/wiki/File:Foo.jpg' }; const fakeRepoInfo = { displayName: 'Wikimedia Commons', - isCommons: function () { return true; } + isCommons: function () { + return true; + } }; buttons.set( fakeImageInfo, fakeRepoInfo ); @@ -66,7 +68,9 @@ const { StripeButtons } = require( 'mmv' ); const descriptionUrl2 = 'http://example.com/different-desc'; const imageInfo = { descriptionUrl: descriptionUrl }; const repoInfo = { - isCommons: function () { return false; } + isCommons: function () { + return false; + } }; buttons.setDescriptionPageButton( imageInfo, repoInfo );