This run took 71 seconds.
From cd67b271bd5221653a719be4fbbd2d9f3d3d3d8e Mon Sep 17 00:00:00 2001 From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org> Date: Tue, 14 Mar 2023 22:12:53 +0000 Subject: [PATCH] build: Updating npm dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * eslint-config-wikimedia: 0.22.1 → 0.24.0 * grunt: 1.5.3 → 1.6.1 * stylelint-config-wikimedia: 0.13.1 → 0.14.0 The following rules are failing and were disabled: * selector-pseudo-element-colon-notation Change-Id: I7b2aeec026c93374d9f1616501ac5177ea2c43b0 --- .stylelintrc.json | 3 +- package-lock.json | 1718 ++++++++++++++++++++++----------------------- package.json | 6 +- 3 files changed, 857 insertions(+), 870 deletions(-) diff --git a/.stylelintrc.json b/.stylelintrc.json index a92a480..6fb8ca3 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -4,6 +4,7 @@ "no-descending-specificity": null, "selector-no-vendor-prefix": null, "value-keyword-case": null, - "declaration-property-unit-disallowed-list": null + "declaration-property-unit-disallowed-list": null, + "selector-pseudo-element-colon-notation": null } } diff --git a/package-lock.json b/package-lock.json index 556190b..2e6789b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,14 +8,14 @@ "name": "flow", "version": "0.0.0", "devDependencies": { - "eslint-config-wikimedia": "0.22.1", - "grunt": "1.5.3", + "eslint-config-wikimedia": "0.24.0", + "grunt": "1.6.1", "grunt-banana-checker": "0.10.0", "grunt-contrib-watch": "1.1.0", "grunt-eslint": "24.0.0", "grunt-stylelint": "0.18.0", "grunt-tyops": "0.1.0", - "stylelint-config-wikimedia": "0.13.1" + "stylelint-config-wikimedia": "0.14.0" } }, "node_modules/@babel/code-frame": { @@ -67,38 +67,91 @@ "node": ">=4" } }, + "node_modules/@csstools/selector-specificity": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz", + "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4", + "postcss-selector-parser": "^6.0.10" + } + }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", - "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", + "version": "0.23.6", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz", + "integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==", "dev": true, "dependencies": { - "comment-parser": "1.3.0", + "comment-parser": "1.3.1", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" + "jsdoc-type-pratt-parser": "~2.2.5" }, "engines": { "node": "^12 || ^14 || ^16 || ^17" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", + "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", + "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.5.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/argparse": { @@ -107,15 +160,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -128,20 +172,54 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", + "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -226,9 +304,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -385,6 +463,12 @@ "safe-json-parse": "~1.0.1" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -437,9 +521,9 @@ "dev": true }, "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, "engines": { "node": ">=6" @@ -584,15 +668,24 @@ } }, "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, "node_modules/clean-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, "dependencies": { "escape-string-regexp": "^1.0.5" @@ -612,18 +705,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "dependencies": { - "is-regexp": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -640,9 +721,9 @@ "dev": true }, "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, "node_modules/colors": { @@ -655,9 +736,9 @@ } }, "node_modules/comment-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true, "engines": { "node": ">= 12.0.0" @@ -693,9 +774,9 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", @@ -723,9 +804,9 @@ } }, "node_modules/css-functions-list": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz", - "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", "dev": true, "engines": { "node": ">=12.22" @@ -734,7 +815,7 @@ "node_modules/css-rule-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha1-N4bnGYmD2WWibjGVfgkHjLt3BaI=", + "integrity": "sha512-qiio/Zkr8I19jh/XuzEkK8OKDQRTrEYaRyIHy4Bwh/tPUe0w8GcQs7r6x24Yc9lT+FbnZFYULxEIXCmaymguUQ==", "dev": true, "dependencies": { "css-tokenize": "^1.0.1", @@ -749,7 +830,7 @@ "node_modules/css-rule-stream/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -761,7 +842,7 @@ "node_modules/css-rule-stream/node_modules/through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "dependencies": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -771,7 +852,7 @@ "node_modules/css-tokenize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", - "integrity": "sha1-RiXLHtohwUOFi3+B1oA8HSb8FL4=", + "integrity": "sha512-gLmmbJdwH9HLY4bcA17lnZ8GgPwEXRbvxBJGHnkiB6gLhRpTzjkjtMIvz7YORGW/Ptv2oMk8b5g+u7mRD6Dd7A==", "dev": true, "dependencies": { "inherits": "^2.0.1", @@ -791,9 +872,9 @@ } }, "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true, "engines": { "node": "*" @@ -968,7 +1049,7 @@ "node_modules/duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", "dev": true, "dependencies": { "readable-stream": "~1.1.9" @@ -1035,13 +1116,18 @@ } }, "node_modules/eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.1.0", - "@humanwhocodes/config-array": "^0.9.2", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", + "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.1", + "@eslint/js": "8.36.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -1049,32 +1135,32 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", + "espree": "^9.5.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -1087,25 +1173,26 @@ } }, "node_modules/eslint-config-wikimedia": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.22.1.tgz", - "integrity": "sha512-TtN+gWJrcW0i1sEu7vPE1tHpEilrMUuTxP6UK97Amvva/KDV9/tvRUifGhw0q5uBswp+HWgF12p8rq68hZqMbA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz", + "integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==", "dev": true, "dependencies": { - "eslint": "^8.6.0", + "browserslist-config-wikimedia": "^0.4.0", + "eslint": "^8.31.0", "eslint-plugin-compat": "^4.0.2", - "eslint-plugin-es": "^4.1.0", - "eslint-plugin-jsdoc": "^37.7.1", - "eslint-plugin-json-es": "^1.5.4", - "eslint-plugin-mediawiki": "^0.3.0", + "eslint-plugin-es-x": "^5.2.1", + "eslint-plugin-jsdoc": "39.2.2", + "eslint-plugin-json-es": "^1.5.7", + "eslint-plugin-mediawiki": "^0.4.0", "eslint-plugin-mocha": "^9.0.0", "eslint-plugin-no-jquery": "^2.7.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-qunit": "^7.2.0", - "eslint-plugin-unicorn": "^40.1.0", - "eslint-plugin-vue": "^8.4.1", - "eslint-plugin-wdio": "^7.4.2", - "eslint-plugin-yml": "^0.13.0" + "eslint-plugin-unicorn": "^42.0.0", + "eslint-plugin-vue": "^8.7.1", + "eslint-plugin-wdio": "^7.19.4", + "eslint-plugin-yml": "^0.14.0" } }, "node_modules/eslint-plugin-compat": { @@ -1191,42 +1278,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "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==", "dev": true, "dependencies": { - "eslint-utils": "^2.0.0", + "eslint-utils": "^2.0.0 || ^3.0.0", "regexpp": "^3.0.0" }, "engines": { "node": ">=8.10.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/ota-meshi" }, "peerDependencies": { "eslint": ">=4.19.1" } }, "node_modules/eslint-plugin-jsdoc": { - "version": "37.9.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.4.tgz", - "integrity": "sha512-VxCyGgUNNnj2T4bb1OqltkbsPp3ehRzR5onIfh6zGrAvISmvgX/sbxUlh3YyGqWtjOTSBCURdKdmelSXEIHnlA==", + "version": "39.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz", + "integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", + "@es-joy/jsdoccomment": "~0.23.1", + "comment-parser": "1.3.1", + "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "spdx-expression-parse": "^3.0.1" }, "engines": { - "node": "^12 || ^14 || ^16 || ^17" + "node": "^14 || ^16 || ^17" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" @@ -1244,14 +1330,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-plugin-json-es": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.4.tgz", - "integrity": "sha512-DdjnNMUZ1iMrUXfxUQrTU7IyoEOsa4Kg0Zd6nOyOq1mUb75deK7NrcbI1FlWGdGVgqX99bUOD27i81EYiG794Q==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz", + "integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0" + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1" }, "peerDependencies": { "eslint": ">= 7" @@ -1267,117 +1368,18 @@ } }, "node_modules/eslint-plugin-mediawiki": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.3.0.tgz", - "integrity": "sha512-Lhyj2PSkhDzYSc1PNbURysY/WoqvY0brw558ZInT3erzf5KUlro18MTKFdV+nlht475ZgnsfHsgfg6Ut2w1SVg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.4.0.tgz", + "integrity": "sha512-Eufptb8lrElYwIONvgxlMBnPD6PYT4xAFprWlBxV5brCmUh8MZ41+lMxt2TPwEC6C85ngflkVez8BV8tWS9RyQ==", "dev": true, "dependencies": { - "eslint-plugin-vue": "^7.20.0", + "eslint-plugin-vue": "^8.7.1", "upath": "^2.0.1" }, "peerDependencies": { "eslint": ">=5.0.0" } }, - "node_modules/eslint-plugin-mediawiki/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/eslint-plugin-mediawiki/node_modules/eslint-plugin-vue": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", - "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.1.0", - "natural-compare": "^1.4.0", - "semver": "^6.3.0", - "vue-eslint-parser": "^7.10.0" - }, - "engines": { - "node": ">=8.10" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-mediawiki/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/eslint-plugin-mediawiki/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint-plugin-mediawiki/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/eslint-plugin-mediawiki/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-mediawiki/node_modules/vue-eslint-parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", - "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8.10" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, "node_modules/eslint-plugin-mocha": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz", @@ -1519,9 +1521,9 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "40.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz", - "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==", + "version": "42.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz", + "integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.15.7", @@ -1546,7 +1548,7 @@ "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=7.32.0" + "eslint": ">=8.8.0" } }, "node_modules/eslint-plugin-unicorn/node_modules/eslint-utils": { @@ -1577,13 +1579,15 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.5.0.tgz", - "integrity": "sha512-i1uHCTAKOoEj12RDvdtONWrGzjFm/djkzqfhmQ0d6M/W8KM81mhswd/z+iTZ0jCpdUedW3YRgcVfQ37/J4zoYQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz", + "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==", "dev": true, "dependencies": { "eslint-utils": "^3.0.0", "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", "semver": "^7.3.5", "vue-eslint-parser": "^8.0.1" }, @@ -1622,18 +1626,18 @@ } }, "node_modules/eslint-plugin-wdio": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.4.2.tgz", - "integrity": "sha512-tkISFycJmRFMKsEjetRcAmWSHKJKnw5rKHDxfE7Ob3tF5lbmYlCLfNKH0UwanOpSdulpe52s3K+CBHSd6qUUNQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.25.3.tgz", + "integrity": "sha512-2zbYwV14Md9FNlyhaIILVGPB6w4bu2eJdOTywDUs2Qy4ebcQNwrxB0qCaf7Rm4O+T0Ir+tdYHYBBfbDocSLKng==", "dev": true, "engines": { "node": ">=12.0.0" } }, "node_modules/eslint-plugin-yml": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.13.0.tgz", - "integrity": "sha512-rZvdnhe28jIbgSIZo3qYqkl9hKslyTDfMwqIGDzz873gxghzBw0yeFG+P7sMfOkFfpqwJzZy3IKe2cIiCp4FrA==", + "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==", "dev": true, "dependencies": { "debug": "^4.3.2", @@ -1706,66 +1710,115 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/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/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" }, - "peerDependencies": { - "eslint": ">=5" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/node_modules/eslint-utils/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==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "*" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "yocto-queue": "^0.1.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", + "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "dev": true, "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { @@ -1791,9 +1844,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -1838,18 +1891,6 @@ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, - "node_modules/execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "dependencies": { - "clone-regexp": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -1884,9 +1925,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -1924,10 +1965,13 @@ "dev": true }, "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } }, "node_modules/fastq": { "version": "1.13.0", @@ -1988,31 +2032,18 @@ } }, "node_modules/findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "dependencies": { - "glob": "~5.0.0" - }, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/findup-sync/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" }, "engines": { - "node": "*" + "node": ">= 10.13.0" } }, "node_modules/fined": { @@ -2092,12 +2123,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "node_modules/gaze": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", @@ -2133,18 +2158,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/getobject": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.0.tgz", @@ -2225,9 +2238,9 @@ } }, "node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2291,33 +2304,37 @@ "node": ">= 0.10" } }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "dev": true, "dependencies": { - "dateformat": "~3.0.3", + "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", "exit": "~0.1.2", - "findup-sync": "~0.3.0", + "findup-sync": "~5.0.0", "glob": "~7.1.6", "grunt-cli": "~1.4.3", "grunt-known-options": "~2.0.0", "grunt-legacy-log": "~3.0.0", "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", + "iconv-lite": "~0.6.3", "js-yaml": "~3.14.0", "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" + "nopt": "~3.0.6" }, "bin": { "grunt": "bin/grunt" }, "engines": { - "node": ">=8" + "node": ">=16" } }, "node_modules/grunt-banana-checker": { @@ -2596,21 +2613,21 @@ "dev": true }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -2704,15 +2721,18 @@ "dev": true }, "node_modules/is-builtin-module": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", - "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, "dependencies": { - "builtin-modules": "^3.0.0" + "builtin-modules": "^3.3.0" }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-core-module": { @@ -2766,6 +2786,15 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -2778,15 +2807,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -2823,7 +2843,7 @@ "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, "node_modules/isexe": { @@ -2841,6 +2861,16 @@ "node": ">=0.10.0" } }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2861,9 +2891,9 @@ } }, "node_modules/jsdoc-type-pratt-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.3.tgz", - "integrity": "sha512-QPyxq62Q8veBSDtDrWmqaEPjSCeknUV9dH/OAGt3q9an8qC8UQDqitQiw1NvoMskIESpoRZ6qzt4H3rlK0xo8A==", + "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==", "dev": true, "engines": { "node": ">=12.0.0" @@ -2897,15 +2927,15 @@ } }, "node_modules/known-css-properties": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", - "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", "dev": true }, "node_modules/ldjson-stream": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz", - "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=", + "integrity": "sha512-xw/nNEXafuPSLu8NjjG3+atVVw+8U1APZAQylmwQn19Hgw6rC7QjHvP6MupnHWCrzSm9m0xs5QWkCLuRvBPjgQ==", "dev": true, "dependencies": { "split2": "^0.2.1", @@ -2915,7 +2945,7 @@ "node_modules/ldjson-stream/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -2927,7 +2957,7 @@ "node_modules/ldjson-stream/node_modules/through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "dependencies": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -3026,7 +3056,7 @@ "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, "node_modules/lru-cache": { @@ -3181,23 +3211,11 @@ }, "node_modules/minimist-options/node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, "node_modules/ms": { @@ -3294,11 +3312,17 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", - "dev": true + "node_modules/nth-check": { + "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" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } }, "node_modules/object-assign": { "version": "4.1.1", @@ -3592,9 +3616,9 @@ } }, "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "dev": true, "funding": [ { @@ -3677,9 +3701,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -3847,7 +3871,7 @@ "node_modules/readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -3902,19 +3926,10 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", - "dev": true, - "engines": { - "node": ">=0.1.14" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4224,9 +4239,9 @@ "dev": true }, "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "engines": { "node": ">= 8" @@ -4273,19 +4288,10 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, - "node_modules/specificity": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", - "dev": true, - "bin": { - "specificity": "bin/specificity" - } - }, "node_modules/split2": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", - "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", + "integrity": "sha512-D/oTExYAkC9nWleOCTOyNmAuzfAT/6rHGBA9LIK7FVnGo13CSvrKCUzKenwH6U1s2znY9MqH6v0UQTEDa3vJmg==", "dev": true, "dependencies": { "through2": "~0.6.1" @@ -4294,7 +4300,7 @@ "node_modules/split2/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -4306,7 +4312,7 @@ "node_modules/split2/node_modules/through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "dependencies": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -4388,52 +4394,49 @@ "dev": true }, "node_modules/stylelint": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz", - "integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==", + "version": "14.16.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", + "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", "dev": true, "dependencies": { + "@csstools/selector-specificity": "^2.0.2", "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "css-functions-list": "^3.0.1", + "colord": "^2.9.3", + "cosmiconfig": "^7.1.0", + "css-functions-list": "^3.1.0", "debug": "^4.3.4", - "execall": "^2.0.0", - "fast-glob": "^3.2.11", - "fastest-levenshtein": "^1.0.12", + "fast-glob": "^3.2.12", + "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.2.0", - "ignore": "^5.2.0", + "ignore": "^5.2.1", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.24.0", + "known-css-properties": "^0.26.0", "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", - "normalize-selector": "^0.2.0", "picocolors": "^1.0.0", - "postcss": "^8.4.12", + "postcss": "^8.4.19", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", - "specificity": "^0.4.1", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", + "supports-hyperlinks": "^2.3.0", "svg-tags": "^1.0.0", - "table": "^6.8.0", + "table": "^6.8.1", "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" + "write-file-atomic": "^4.0.2" }, "bin": { "stylelint": "bin/stylelint.js" @@ -4447,46 +4450,46 @@ } }, "node_modules/stylelint-config-recommended": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz", - "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz", + "integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==", "dev": true, "peerDependencies": { - "stylelint": "^14.4.0" + "stylelint": "^14.10.0" } }, "node_modules/stylelint-config-wikimedia": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.1.tgz", - "integrity": "sha512-Wpm+cVJ2eZmlPO8HCv223OZZwyVZh5Ha11dRkzlccZwscxVkoKj/lo6xo10GNWBV9kpEA0+ksYJTIXXmRw1AoA==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.14.0.tgz", + "integrity": "sha512-8gc5fcYsavMU6yBxE4Ium0XX8Ekedg+kcU0Oojjg5di6Jhv74bx3pcdfW+Z4bDYKWx3pg3Glemy/CBRqg+JViQ==", "dev": true, "dependencies": { "browserslist-config-wikimedia": "0.4.0", "postcss-html": "1.5.0", "postcss-less": "6.0.0", - "stylelint": "14.8.1", - "stylelint-config-recommended": "7.0.0", - "stylelint-no-unsupported-browser-features": "5.0.3" + "stylelint": "14.16.1", + "stylelint-config-recommended": "9.0.0", + "stylelint-no-unsupported-browser-features": "6.1.0" }, "peerDependencies": { "postcss-less": "^6.0.0" } }, "node_modules/stylelint-no-unsupported-browser-features": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz", - "integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz", + "integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==", "dev": true, "dependencies": { "doiuse": "^4.4.1", "lodash": "^4.17.15", - "postcss": "^8.3.6" + "postcss": "^8.4.16" }, "engines": { - "node": ">=12" + "node": ">=14" }, "peerDependencies": { - "stylelint": ">=13.0.0" + "stylelint": "^14.0.0||^15.0.0" } }, "node_modules/stylelint/node_modules/balanced-match": { @@ -4526,9 +4529,9 @@ } }, "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "dependencies": { "has-flag": "^4.0.0", @@ -4578,9 +4581,9 @@ "dev": true }, "node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -4594,9 +4597,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -4631,9 +4634,9 @@ } }, "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -4931,16 +4934,16 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/xtend": { @@ -5079,31 +5082,61 @@ } } }, + "@csstools/selector-specificity": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz", + "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==", + "dev": true, + "requires": {} + }, "@es-joy/jsdoccomment": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", - "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", + "version": "0.23.6", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz", + "integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==", "dev": true, "requires": { - "comment-parser": "1.3.0", + "comment-parser": "1.3.1", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" + "jsdoc-type-pratt-parser": "~2.2.5" + } + }, + "@eslint-community/eslint-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", + "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } } }, + "@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", + "dev": true + }, "@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", + "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.5.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "dependencies": { @@ -5113,12 +5146,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -5127,20 +5154,41 @@ "requires": { "argparse": "^2.0.1" } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } } } }, + "@eslint/js": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", + "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", + "dev": true + }, "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -5216,16 +5264,17 @@ "dev": true }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true }, "acorn-jsx": { "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", @@ -5340,6 +5389,12 @@ "safe-json-parse": "~1.0.1" } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5379,9 +5434,9 @@ "dev": true }, "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, "bytes": { @@ -5482,15 +5537,15 @@ } }, "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true }, "clean-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -5507,15 +5562,6 @@ "wrap-ansi": "^7.0.0" } }, - "clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "requires": { - "is-regexp": "^2.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -5532,9 +5578,9 @@ "dev": true }, "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, "colors": { @@ -5544,9 +5590,9 @@ "dev": true }, "comment-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true }, "concat-map": { @@ -5574,9 +5620,9 @@ "dev": true }, "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -5598,15 +5644,15 @@ } }, "css-functions-list": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz", - "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", "dev": true }, "css-rule-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha1-N4bnGYmD2WWibjGVfgkHjLt3BaI=", + "integrity": "sha512-qiio/Zkr8I19jh/XuzEkK8OKDQRTrEYaRyIHy4Bwh/tPUe0w8GcQs7r6x24Yc9lT+FbnZFYULxEIXCmaymguUQ==", "dev": true, "requires": { "css-tokenize": "^1.0.1", @@ -5618,7 +5664,7 @@ "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -5630,7 +5676,7 @@ "through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "requires": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -5642,7 +5688,7 @@ "css-tokenize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", - "integrity": "sha1-RiXLHtohwUOFi3+B1oA8HSb8FL4=", + "integrity": "sha512-gLmmbJdwH9HLY4bcA17lnZ8GgPwEXRbvxBJGHnkiB6gLhRpTzjkjtMIvz7YORGW/Ptv2oMk8b5g+u7mRD6Dd7A==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -5656,9 +5702,9 @@ "dev": true }, "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true }, "debug": { @@ -5782,7 +5828,7 @@ "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", "dev": true, "requires": { "readable-stream": "~1.1.9" @@ -5837,13 +5883,18 @@ "dev": true }, "eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.1.0", - "@humanwhocodes/config-array": "^0.9.2", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", + "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.1", + "@eslint/js": "8.36.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -5851,32 +5902,32 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", + "espree": "^9.5.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "argparse": { @@ -5891,29 +5942,22 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "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" - }, - "dependencies": { - "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-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -5922,29 +5966,66 @@ "requires": { "argparse": "^2.0.1" } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } } } }, "eslint-config-wikimedia": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.22.1.tgz", - "integrity": "sha512-TtN+gWJrcW0i1sEu7vPE1tHpEilrMUuTxP6UK97Amvva/KDV9/tvRUifGhw0q5uBswp+HWgF12p8rq68hZqMbA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz", + "integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==", "dev": true, "requires": { - "eslint": "^8.6.0", + "browserslist-config-wikimedia": "^0.4.0", + "eslint": "^8.31.0", "eslint-plugin-compat": "^4.0.2", - "eslint-plugin-es": "^4.1.0", - "eslint-plugin-jsdoc": "^37.7.1", - "eslint-plugin-json-es": "^1.5.4", - "eslint-plugin-mediawiki": "^0.3.0", + "eslint-plugin-es-x": "^5.2.1", + "eslint-plugin-jsdoc": "39.2.2", + "eslint-plugin-json-es": "^1.5.7", + "eslint-plugin-mediawiki": "^0.4.0", "eslint-plugin-mocha": "^9.0.0", "eslint-plugin-no-jquery": "^2.7.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-qunit": "^7.2.0", - "eslint-plugin-unicorn": "^40.1.0", - "eslint-plugin-vue": "^8.4.1", - "eslint-plugin-wdio": "^7.4.2", - "eslint-plugin-yml": "^0.13.0" + "eslint-plugin-unicorn": "^42.0.0", + "eslint-plugin-vue": "^8.7.1", + "eslint-plugin-wdio": "^7.19.4", + "eslint-plugin-yml": "^0.14.0" } }, "eslint-plugin-compat": { @@ -6002,29 +6083,28 @@ } } }, - "eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "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==", "dev": true, "requires": { - "eslint-utils": "^2.0.0", + "eslint-utils": "^2.0.0 || ^3.0.0", "regexpp": "^3.0.0" } }, "eslint-plugin-jsdoc": { - "version": "37.9.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.4.tgz", - "integrity": "sha512-VxCyGgUNNnj2T4bb1OqltkbsPp3ehRzR5onIfh6zGrAvISmvgX/sbxUlh3YyGqWtjOTSBCURdKdmelSXEIHnlA==", + "version": "39.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz", + "integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", + "@es-joy/jsdoccomment": "~0.23.1", + "comment-parser": "1.3.1", + "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "spdx-expression-parse": "^3.0.1" }, "dependencies": { @@ -6033,17 +6113,26 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "eslint-plugin-json-es": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.4.tgz", - "integrity": "sha512-DdjnNMUZ1iMrUXfxUQrTU7IyoEOsa4Kg0Zd6nOyOq1mUb75deK7NrcbI1FlWGdGVgqX99bUOD27i81EYiG794Q==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz", + "integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==", "dev": true, "requires": { - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0" + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1" }, "dependencies": { "eslint-visitor-keys": { @@ -6055,81 +6144,13 @@ } }, "eslint-plugin-mediawiki": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.3.0.tgz", - "integrity": "sha512-Lhyj2PSkhDzYSc1PNbURysY/WoqvY0brw558ZInT3erzf5KUlro18MTKFdV+nlht475ZgnsfHsgfg6Ut2w1SVg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.4.0.tgz", + "integrity": "sha512-Eufptb8lrElYwIONvgxlMBnPD6PYT4xAFprWlBxV5brCmUh8MZ41+lMxt2TPwEC6C85ngflkVez8BV8tWS9RyQ==", "dev": true, "requires": { - "eslint-plugin-vue": "^7.20.0", + "eslint-plugin-vue": "^8.7.1", "upath": "^2.0.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "eslint-plugin-vue": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", - "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", - "dev": true, - "requires": { - "eslint-utils": "^2.1.0", - "natural-compare": "^1.4.0", - "semver": "^6.3.0", - "vue-eslint-parser": "^7.10.0" - } - }, - "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" - } - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "vue-eslint-parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", - "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^6.3.0" - } - } } }, "eslint-plugin-mocha": { @@ -6163,7 +6184,8 @@ "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 + "dev": true, + "requires": {} }, "eslint-plugin-node": { "version": "11.1.0", @@ -6225,9 +6247,9 @@ } }, "eslint-plugin-unicorn": { - "version": "40.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz", - "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==", + "version": "42.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz", + "integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.15.7", @@ -6264,13 +6286,15 @@ } }, "eslint-plugin-vue": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.5.0.tgz", - "integrity": "sha512-i1uHCTAKOoEj12RDvdtONWrGzjFm/djkzqfhmQ0d6M/W8KM81mhswd/z+iTZ0jCpdUedW3YRgcVfQ37/J4zoYQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz", + "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==", "dev": true, "requires": { "eslint-utils": "^3.0.0", "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", "semver": "^7.3.5", "vue-eslint-parser": "^8.0.1" }, @@ -6293,15 +6317,15 @@ } }, "eslint-plugin-wdio": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.4.2.tgz", - "integrity": "sha512-tkISFycJmRFMKsEjetRcAmWSHKJKnw5rKHDxfE7Ob3tF5lbmYlCLfNKH0UwanOpSdulpe52s3K+CBHSd6qUUNQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.25.3.tgz", + "integrity": "sha512-2zbYwV14Md9FNlyhaIILVGPB6w4bu2eJdOTywDUs2Qy4ebcQNwrxB0qCaf7Rm4O+T0Ir+tdYHYBBfbDocSLKng==", "dev": true }, "eslint-plugin-yml": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.13.0.tgz", - "integrity": "sha512-rZvdnhe28jIbgSIZo3qYqkl9hKslyTDfMwqIGDzz873gxghzBw0yeFG+P7sMfOkFfpqwJzZy3IKe2cIiCp4FrA==", + "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==", "dev": true, "requires": { "debug": "^4.3.2", @@ -6336,13 +6360,13 @@ "dev": true }, "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", + "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "dev": true, "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "dependencies": { @@ -6361,9 +6385,9 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -6396,15 +6420,6 @@ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, - "execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "requires": { - "clone-regexp": "^2.1.0" - } - }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -6433,9 +6448,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -6469,9 +6484,9 @@ "dev": true }, "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true }, "fastq": { @@ -6521,27 +6536,15 @@ } }, "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" } }, "fined": { @@ -6606,12 +6609,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "gaze": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", @@ -6638,12 +6635,6 @@ "has-symbols": "^1.0.3" } }, - "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true - }, "getobject": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.0.tgz", @@ -6705,9 +6696,9 @@ } }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -6752,27 +6743,31 @@ "minimatch": "~3.0.2" } }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "dev": true, "requires": { - "dateformat": "~3.0.3", + "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", "exit": "~0.1.2", - "findup-sync": "~0.3.0", + "findup-sync": "~5.0.0", "glob": "~7.1.6", "grunt-cli": "~1.4.3", "grunt-known-options": "~2.0.0", "grunt-legacy-log": "~3.0.0", "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", + "iconv-lite": "~0.6.3", "js-yaml": "~3.14.0", "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" + "nopt": "~3.0.6" } }, "grunt-banana-checker": { @@ -6973,18 +6968,18 @@ "dev": true }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "import-fresh": { @@ -7060,12 +7055,12 @@ "dev": true }, "is-builtin-module": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", - "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, "requires": { - "builtin-modules": "^3.0.0" + "builtin-modules": "^3.3.0" } }, "is-core-module": { @@ -7104,6 +7099,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -7113,12 +7114,6 @@ "isobject": "^3.0.1" } }, - "is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true - }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -7146,7 +7141,7 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, "isexe": { @@ -7161,6 +7156,12 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7178,9 +7179,9 @@ } }, "jsdoc-type-pratt-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.3.tgz", - "integrity": "sha512-QPyxq62Q8veBSDtDrWmqaEPjSCeknUV9dH/OAGt3q9an8qC8UQDqitQiw1NvoMskIESpoRZ6qzt4H3rlK0xo8A==", + "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==", "dev": true }, "json-parse-even-better-errors": { @@ -7208,15 +7209,15 @@ "dev": true }, "known-css-properties": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", - "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", "dev": true }, "ldjson-stream": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz", - "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=", + "integrity": "sha512-xw/nNEXafuPSLu8NjjG3+atVVw+8U1APZAQylmwQn19Hgw6rC7QjHvP6MupnHWCrzSm9m0xs5QWkCLuRvBPjgQ==", "dev": true, "requires": { "split2": "^0.2.1", @@ -7226,7 +7227,7 @@ "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -7238,7 +7239,7 @@ "through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "requires": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -7329,7 +7330,7 @@ "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, "lru-cache": { @@ -7446,12 +7447,6 @@ } } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -7524,11 +7519,14 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", - "dev": true + "nth-check": { + "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" + } }, "object-assign": { "version": "4.1.1", @@ -7744,9 +7742,9 @@ "dev": true }, "postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "dev": true, "requires": { "nanoid": "^3.3.4", @@ -7778,7 +7776,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", @@ -7796,12 +7795,13 @@ "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.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -7921,7 +7921,7 @@ "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -7961,16 +7961,10 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, "require-from-string": { @@ -8183,9 +8177,9 @@ } }, "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true }, "source-map-js": { @@ -8226,16 +8220,10 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, - "specificity": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", - "dev": true - }, "split2": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", - "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", + "integrity": "sha512-D/oTExYAkC9nWleOCTOyNmAuzfAT/6rHGBA9LIK7FVnGo13CSvrKCUzKenwH6U1s2znY9MqH6v0UQTEDa3vJmg==", "dev": true, "requires": { "through2": "~0.6.1" @@ -8244,7 +8232,7 @@ "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -8256,7 +8244,7 @@ "through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "requires": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -8325,52 +8313,49 @@ "dev": true }, "stylelint": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz", - "integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==", + "version": "14.16.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", + "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", "dev": true, "requires": { + "@csstools/selector-specificity": "^2.0.2", "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "css-functions-list": "^3.0.1", + "colord": "^2.9.3", + "cosmiconfig": "^7.1.0", + "css-functions-list": "^3.1.0", "debug": "^4.3.4", - "execall": "^2.0.0", - "fast-glob": "^3.2.11", - "fastest-levenshtein": "^1.0.12", + "fast-glob": "^3.2.12", + "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.2.0", - "ignore": "^5.2.0", + "ignore": "^5.2.1", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.24.0", + "known-css-properties": "^0.26.0", "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", - "normalize-selector": "^0.2.0", "picocolors": "^1.0.0", - "postcss": "^8.4.12", + "postcss": "^8.4.19", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", - "specificity": "^0.4.1", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", + "supports-hyperlinks": "^2.3.0", "svg-tags": "^1.0.0", - "table": "^6.8.0", + "table": "^6.8.1", "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" + "write-file-atomic": "^4.0.2" }, "dependencies": { "balanced-match": { @@ -8394,34 +8379,35 @@ } }, "stylelint-config-recommended": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz", - "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==", - "dev": true + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz", + "integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==", + "dev": true, + "requires": {} }, "stylelint-config-wikimedia": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.1.tgz", - "integrity": "sha512-Wpm+cVJ2eZmlPO8HCv223OZZwyVZh5Ha11dRkzlccZwscxVkoKj/lo6xo10GNWBV9kpEA0+ksYJTIXXmRw1AoA==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.14.0.tgz", + "integrity": "sha512-8gc5fcYsavMU6yBxE4Ium0XX8Ekedg+kcU0Oojjg5di6Jhv74bx3pcdfW+Z4bDYKWx3pg3Glemy/CBRqg+JViQ==", "dev": true, "requires": { "browserslist-config-wikimedia": "0.4.0", "postcss-html": "1.5.0", "postcss-less": "6.0.0", - "stylelint": "14.8.1", - "stylelint-config-recommended": "7.0.0", - "stylelint-no-unsupported-browser-features": "5.0.3" + "stylelint": "14.16.1", + "stylelint-config-recommended": "9.0.0", + "stylelint-no-unsupported-browser-features": "6.1.0" } }, "stylelint-no-unsupported-browser-features": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz", - "integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz", + "integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==", "dev": true, "requires": { "doiuse": "^4.4.1", "lodash": "^4.17.15", - "postcss": "^8.3.6" + "postcss": "^8.4.16" } }, "supports-color": { @@ -8434,9 +8420,9 @@ } }, "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "requires": { "has-flag": "^4.0.0", @@ -8473,9 +8459,9 @@ "dev": true }, "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, "requires": { "ajv": "^8.0.1", @@ -8486,9 +8472,9 @@ }, "dependencies": { "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -8521,9 +8507,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -8758,9 +8744,9 @@ "dev": true }, "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "requires": { "imurmurhash": "^0.1.4", diff --git a/package.json b/package.json index 9e28c82..70f748d 100644 --- a/package.json +++ b/package.json @@ -8,13 +8,13 @@ "doc": "jsduck" }, "devDependencies": { - "eslint-config-wikimedia": "0.22.1", - "grunt": "1.5.3", + "eslint-config-wikimedia": "0.24.0", + "grunt": "1.6.1", "grunt-banana-checker": "0.10.0", "grunt-contrib-watch": "1.1.0", "grunt-eslint": "24.0.0", "grunt-stylelint": "0.18.0", "grunt-tyops": "0.1.0", - "stylelint-config-wikimedia": "0.13.1" + "stylelint-config-wikimedia": "0.14.0" } } -- 2.30.2
$ date --- stdout --- Tue Mar 14 22:11:48 UTC 2023 --- end --- $ git clone file:///srv/git/mediawiki-extensions-Flow.git repo --depth=1 -b master --- stderr --- Cloning into 'repo'... --- stdout --- --- end --- $ git config user.name libraryupgrader --- stdout --- --- end --- $ git config user.email tools.libraryupgrader@tools.wmflabs.org --- stdout --- --- end --- $ git submodule update --init --- stdout --- --- end --- $ grr init --- stdout --- Installed commit-msg hook. --- end --- $ git show-ref refs/heads/master --- stdout --- b4e37966f5da5f548b4e0089669e2979b1784240 refs/heads/master --- end --- $ /usr/bin/npm audit --json --legacy-peer-deps --- stdout --- { "auditReportVersion": 2, "vulnerabilities": {}, "metadata": { "vulnerabilities": { "info": 0, "low": 0, "moderate": 0, "high": 0, "critical": 0, "total": 0 }, "dependencies": { "prod": 1, "dev": 442, "optional": 0, "peer": 0, "peerOptional": 0, "total": 442 } } } --- end --- $ /usr/bin/composer install --- stderr --- No lock file found. Updating dependencies instead of installing from lock file. Use composer update over composer install if you do not have a lock file. Loading composer repositories with package information Info from https://repo.packagist.org: [37;44m#StandWith[30;43mUkraine[0m Updating dependencies Lock file operations: 37 installs, 0 updates, 0 removals - Locking composer/pcre (3.1.0) - Locking composer/semver (3.3.2) - Locking composer/spdx-licenses (1.5.7) - Locking composer/xdebug-handler (3.0.3) - Locking felixfbecker/advanced-json-rpc (v3.2.1) - Locking mediawiki/mediawiki-codesniffer (v41.0.0) - Locking mediawiki/mediawiki-phan-config (0.12.0) - Locking mediawiki/minus-x (1.1.1) - Locking mediawiki/phan-taint-check-plugin (4.0.0) - Locking microsoft/tolerant-php-parser (v0.1.1) - Locking netresearch/jsonmapper (v4.1.0) - Locking phan/phan (5.4.1) - Locking php-parallel-lint/php-console-color (v1.0.1) - Locking php-parallel-lint/php-console-highlighter (v1.0.0) - Locking php-parallel-lint/php-parallel-lint (v1.3.2) - Locking phpdocumentor/reflection-common (2.2.0) - Locking phpdocumentor/reflection-docblock (5.3.0) - Locking phpdocumentor/type-resolver (1.6.2) - Locking pimple/pimple (v3.5.0) - Locking psr/container (1.1.2) - Locking psr/log (1.1.4) - Locking sabre/event (5.1.4) - Locking squizlabs/php_codesniffer (3.7.2) - Locking symfony/console (v5.4.21) - Locking symfony/css-selector (v2.8.52) - Locking symfony/deprecation-contracts (v2.5.2) - Locking symfony/dom-crawler (v2.8.52) - Locking symfony/polyfill-ctype (v1.27.0) - Locking symfony/polyfill-intl-grapheme (v1.27.0) - Locking symfony/polyfill-intl-normalizer (v1.27.0) - Locking symfony/polyfill-mbstring (v1.27.0) - Locking symfony/polyfill-php73 (v1.27.0) - Locking symfony/polyfill-php80 (v1.27.0) - Locking symfony/service-contracts (v2.5.2) - Locking symfony/string (v5.4.21) - Locking tysonandre/var_representation_polyfill (0.1.3) - Locking webmozart/assert (1.11.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 37 installs, 0 updates, 0 removals - Downloading pimple/pimple (v3.5.0) - Downloading symfony/css-selector (v2.8.52) - Downloading symfony/dom-crawler (v2.8.52) 0/3 [>---------------------------] 0% 3/3 [============================] 100% - Installing composer/pcre (3.1.0): Extracting archive - Installing symfony/polyfill-php80 (v1.27.0): Extracting archive - Installing squizlabs/php_codesniffer (3.7.2): Extracting archive - Installing symfony/polyfill-mbstring (v1.27.0): Extracting archive - Installing composer/spdx-licenses (1.5.7): Extracting archive - Installing composer/semver (3.3.2): Extracting archive - Installing mediawiki/mediawiki-codesniffer (v41.0.0): Extracting archive - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive - Installing symfony/polyfill-intl-normalizer (v1.27.0): Extracting archive - Installing symfony/polyfill-intl-grapheme (v1.27.0): Extracting archive - Installing symfony/polyfill-ctype (v1.27.0): Extracting archive - Installing symfony/string (v5.4.21): Extracting archive - Installing symfony/deprecation-contracts (v2.5.2): Extracting archive - Installing psr/container (1.1.2): Extracting archive - Installing symfony/service-contracts (v2.5.2): Extracting archive - Installing symfony/polyfill-php73 (v1.27.0): Extracting archive - Installing symfony/console (v5.4.21): Extracting archive - Installing sabre/event (5.1.4): Extracting archive - Installing netresearch/jsonmapper (v4.1.0): Extracting archive - Installing microsoft/tolerant-php-parser (v0.1.1): Extracting archive - Installing webmozart/assert (1.11.0): Extracting archive - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive - Installing phpdocumentor/type-resolver (1.6.2): Extracting archive - Installing phpdocumentor/reflection-docblock (5.3.0): Extracting archive - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive - Installing psr/log (1.1.4): Extracting archive - Installing composer/xdebug-handler (3.0.3): Extracting archive - Installing phan/phan (5.4.1): Extracting archive - Installing mediawiki/phan-taint-check-plugin (4.0.0): Extracting archive - Installing mediawiki/mediawiki-phan-config (0.12.0): Extracting archive - Installing mediawiki/minus-x (1.1.1): Extracting archive - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive - Installing php-parallel-lint/php-parallel-lint (v1.3.2): Extracting archive - Installing pimple/pimple (v3.5.0): Extracting archive - Installing symfony/css-selector (v2.8.52): Extracting archive - Installing symfony/dom-crawler (v2.8.52): Extracting archive 0/28 [>---------------------------] 0% 10/28 [==========>-----------------] 35% 19/28 [===================>--------] 67% 28/28 [============================] 100%4 package suggestions were added by new dependencies, use `composer suggest` to see details. Generating autoload files 14 packages you are using are looking for funding. Use the `composer fund` command to find out more! --- stdout --- --- end --- Upgrading n:eslint-config-wikimedia from 0.22.1 -> 0.24.0 Upgrading n:grunt from 1.5.3 -> 1.6.1 Upgrading n:stylelint-config-wikimedia from 0.13.1 -> 0.14.0 $ /usr/bin/npm install --- stderr --- npm WARN deprecated debug@3.2.6: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) --- stdout --- added 440 packages, and audited 441 packages in 6s 73 packages are looking for funding run `npm fund` for details found 0 vulnerabilities --- end --- $ package-lock-lint package-lock.json --- stdout --- Checking package-lock.json --- end --- $ /usr/bin/npm install grunt-eslint@24.0.0 --save-exact --- stdout --- up to date, audited 441 packages in 1s 73 packages are looking for funding run `npm fund` for details found 0 vulnerabilities --- end --- $ package-lock-lint package-lock.json --- stdout --- Checking package-lock.json --- end --- $ ./node_modules/.bin/eslint modules/engine/components/board/features/flow-board-navigation.js i18n/te.json i18n/lb.json modules/engine/components/board/features/flow-board-visualeditor.js i18n/fr.json i18n/sk.json i18n/lt.json i18n/tl.json i18n/fit.json i18n/api/ko.json i18n/om.json i18n/az.json i18n/gl.json i18n/or.json i18n/pl.json i18n/bjn.json i18n/skr-arab.json i18n/en.json i18n/hy.json i18n/api/zh-hant.json i18n/jbo.json i18n/lag.json i18n/be.json i18n/ta.json i18n/bcl.json i18n/ku-latn.json modules/flow/ui/widgets/mw.flow.ui.NewTopicWidget.js i18n/api/it.json i18n/nn.json i18n/el.json i18n/nl.json i18n/kiu.json i18n/api/ckb.json i18n/api/pt-br.json i18n/ne.json modules/engine/components/common/flow-component-events.js i18n/ms.json modules/editor/editors/visualeditor/ui/contextitem/mw.flow.ve.ui.MentionContextItem.js i18n/tg-cyrl.json i18n/my.json modules/flow/ui/widgets/mw.flow.ui.TopicTitleWidget.js i18n/ce.json modules/flow/dm/mw.flow.dm.System.js i18n/sh.json modules/engine/components/board/features/flow-board-side-rail.js i18n/mn.json i18n/hr.json i18n/kjp.json i18n/kaa.json i18n/se.json modules/editor/editors/visualeditor/mw.flow.ve.UserCache.js i18n/api/gom-latn.json i18n/api/mr.json modules/flow/ui/widgets/mw.flow.ui.EditPostWidget.js i18n/api/en.json modules/flow/dm/mw.flow.dm.Item.js modules/editor/editors/visualeditor/ui/inspectors/mw.flow.ve.ui.MentionInspector.js modules/engine/misc/flow-api.js i18n/ckb.json modules/flow/ui/mw.flow.ui.CancelConfirmDialog.js modules/engine/misc/jquery.findWithParent.js i18n/nan.json i18n/ksw.json i18n/xsy.json modules/messagePoster/ext.flow.messagePoster.js modules/flow/dm/mw.flow.dm.Post.js i18n/cu.json i18n/eu.json i18n/api/gom-deva.json i18n/yi.json i18n/api/sd.json i18n/api/ps.json tests/qunit/flow/dm/test_mw.flow.dm.Content.js i18n/ky.json i18n/azb.json i18n/br.json i18n/tly.json modules/engine/components/board/features/flow-board-loadmore.js i18n/qqq.json modules/flow/mw.flow.js modules/flow-initialize.js i18n/nog.json i18n/api/diq.json i18n/api/ro.json modules/flow/ui/widgets/mw.flow.ui.TopicMenuSelectWidget.js i18n/hil.json i18n/ady-cyrl.json i18n/nds.json i18n/api/ast.json i18n/lkt.json i18n/api/ca.json i18n/frr.json i18n/api/te.json i18n/trv.json i18n/is.json i18n/fy.json i18n/ro.json i18n/ug-arab.json jsduck.json i18n/ast.json i18n/api/lki.json i18n/hsb.json i18n/myv.json modules/flow/dm/mw.flow.dm.Board.js i18n/sco.json i18n/pt-br.json i18n/ace.json i18n/mr.json i18n/api/sje.json i18n/sms.json i18n/cy.json i18n/su.json i18n/zh-hk.json i18n/api/bn.json i18n/mk.json i18n/bgn.json modules/engine/misc/mw-ui.enhance.js modules/engine/misc/mw-ui.modal.js i18n/gsw.json i18n/eo.json modules/flow/ui/widgets/mw.flow.ui.ReplyWidget.js i18n/id.json i18n/it.json i18n/api/id.json i18n/ary.json i18n/hyw.json i18n/si.json modules/engine/components/common/flow-component-engines.js i18n/vo.json i18n/udm.json sql/tables.json extension.json i18n/dsb.json i18n/da.json i18n/vec.json i18n/olo.json i18n/pnb.json tests/qunit/engine/misc/test_flow-handlebars.js i18n/scn.json i18n/api/sl.json i18n/min.json i18n/bnn.json build/typos.json i18n/shn.json i18n/sv.json modules/flow/ui/widgets/mw.flow.ui.CategoriesWidget.js i18n/ht.json modules/engine/misc/flow-handlebars.js composer.json i18n/nap.json i18n/ur.json i18n/atj.json i18n/ami.json i18n/ksh.json i18n/api/ce.json modules/flow/ui/widgets/editor/mw.flow.ui.EditorControlsWidget.js modules/engine/components/board/base/flow-board-interactive-events.js i18n/ja.json jsduck.external.js i18n/roa-tara.json modules/flow/dm/mw.flow.dm.RevisionedContent.js i18n/api/bqi.json i18n/api/lb.json modules/flow/dm/mw.flow.dm.BoardDescription.js i18n/kk-cyrl.json modules/flow/ui/widgets/mw.flow.ui.SidebarExpandWidget.js i18n/sr-el.json modules/engine/components/board/flow-board.js i18n/xmf.json i18n/ar.json modules/engine/components/board/base/flow-board-api-events.js i18n/tt-cyrl.json i18n/pa.json i18n/api/de.json i18n/be-tarask.json i18n/de.json i18n/gd.json i18n/tyv.json i18n/th.json modules/flow/dm/mw.flow.dm.Captcha.js i18n/af.json i18n/lmo.json i18n/zh-hans.json tests/qunit/flow/dm/test_mw.flow.dm.System.js i18n/et.json i18n/os.json i18n/api/ksh.json modules/engine/misc/jquery.conditionalScroll.js i18n/api/ms.json modules/flow/ui/widgets/mw.flow.ui.CaptchaWidget.js i18n/li.json i18n/bo.json modules/flow/ui/widgets/mw.flow.ui.CategoryItemWidget.js modules/flow/dm/mw.flow.dm.js i18n/es.json modules/flow/dm/mw.flow.dm.Topic.js modules/engine/components/board/flow-boardhistory.js i18n/mwl.json i18n/api/fi.json modules/engine/components/board/base/flow-board-load-events.js i18n/api/qqq.json i18n/ca.json i18n/api/tr.json modules/contributions/base.js i18n/uk.json i18n/cdo.json i18n/en-gb.json i18n/hu.json modules/editor/editors/visualeditor/mw.flow.ve.CommandRegistry.js modules/editor/editors/visualeditor/mw.flow.ve.Target.js i18n/kab.json i18n/lzh.json modules/flow/dm/mixins/mw.flow.dm.List.js i18n/api/gl.json i18n/sq.json i18n/tr.json i18n/ka.json i18n/io.json i18n/api/got.json i18n/api/vec.json tests/qunit/flow/dm/test_mw.flow.dm.Board.js i18n/api/eu.json i18n/sl.json i18n/api/mk.json i18n/kn.json i18n/krl.json modules/engine/components/flow-registry.js i18n/bcc.json i18n/ban.json i18n/api/ar.json i18n/yo.json modules/flow/ui/widgets/mw.flow.ui.ReorderTopicsWidget.js i18n/fa.json i18n/api/pam.json i18n/pam.json i18n/sr-ec.json i18n/oc.json package.json i18n/bn.json i18n/dty.json i18n/inh.json i18n/gom-deva.json i18n/he.json i18n/api/kk-cyrl.json i18n/api/ku-latn.json i18n/mnw.json tests/qunit/flow/dm/test_mw.flow.dm.Topic.js i18n/api/shn.json i18n/api/hu.json i18n/lo.json package-lock.json i18n/bqi.json i18n/api/hi.json i18n/tay.json i18n/aeb-arab.json i18n/cs.json i18n/nb.json i18n/gom-latn.json i18n/api/nb.json i18n/gu.json modules/engine/components/common/flow-component-menus.js Gruntfile.js modules/handlebars.js i18n/api/pl.json i18n/api/ja.json modules/engine/components/board/base/flow-boardandhistory-base.js i18n/uz.json i18n/mai.json i18n/api/nl.json i18n/api/roa-tara.json i18n/ia.json modules/flow/dm/api/mw.flow.dm.APIHandler.js i18n/ps.json i18n/jv.json i18n/api/fr.json modules/editor/editors/visualeditor/mw.flow.ve.SequenceRegistry.js i18n/api/ka.json i18n/km.json i18n/mzn.json i18n/sa.json i18n/zh-hant.json i18n/api/sv.json i18n/sje.json i18n/ru.json i18n/api/scn.json modules/flow/ui/mw.flow.ui.js i18n/ml.json i18n/api/oc.json modules/editor/editors/visualeditor/ui/tools/mw.flow.ve.ui.MWEditModeTool.js i18n/es-formal.json i18n/sd.json i18n/szy.json modules/editor/editors/visualeditor/ui/widgets/mw.flow.ve.ui.MentionTargetInputWidget.js i18n/api/ur.json i18n/api/bs.json i18n/api/hy.json i18n/lki.json i18n/lij.json i18n/smn.json i18n/api/pt.json i18n/ee.json i18n/diq.json i18n/hak.json modules/tours/flowOptIn.js i18n/fi.json modules/flow/ui/widgets/mw.flow.ui.EditTopicSummaryWidget.js i18n/lrc.json i18n/bg.json i18n/pt.json modules/flow/ui/widgets/mw.flow.ui.BoardDescriptionWidget.js i18n/api/uk.json i18n/got.json tests/qunit/engine/misc/test_jquery.findWithParent.js i18n/api/lt.json i18n/api/es.json i18n/ie.json i18n/api/ml.json i18n/hi.json i18n/api/he.json i18n/mt.json i18n/api/ia.json i18n/tk.json i18n/ig.json modules/flow/dm/mw.flow.dm.Content.js i18n/btm.json i18n/crh-latn.json i18n/sw.json i18n/ba.json i18n/api/ru.json i18n/bs.json i18n/api/zh-hans.json i18n/qu.json i18n/api/km.json tests/qunit/engine/misc/test_mw-ui.enhance.js i18n/bho.json modules/mw.flow.Initializer.js modules/flow/ui/widgets/mw.flow.ui.ToCWidget.js i18n/vi.json modules/flow/ui/widgets/editor/mw.flow.ui.EditorWidget.js modules/flow/ui/widgets/editor/mw.flow.ui.CanNotEditWidget.js modules/flow/dm/mw.flow.dm.Categories.js modules/flow/dm/mw.flow.dm.CategoryItem.js i18n/lv.json modules/editor/editors/visualeditor/ui/tools/mw.flow.ve.ui.MentionInspectorTool.js modules/flow/ui/widgets/mw.flow.ui.NavigationWidget.js i18n/api/vi.json i18n/ti.json modules/flow/ui/widgets/editor/mw.flow.ui.AnonWarningWidget.js i18n/api/da.json modules/flow/dm/mw.flow.dm.ModeratedRevisionedContent.js modules/engine/components/flow-component.js tests/qunit/flow/dm/test_mw.flow.dm.Post.js i18n/nds-nl.json i18n/ks-arab.json i18n/blk.json i18n/api/el.json i18n/api/fa.json i18n/ko.json i18n/as.json --fix --- stdout --- /src/repo/modules/engine/components/board/features/flow-board-loadmore.js 361:52 warning '$topic' is already declared in the upper scope on line 352 column 62 no-shadow /src/repo/modules/engine/components/common/flow-component-events.js 316:40 warning 'args' is already declared in the upper scope on line 285 column 4 no-shadow 336:40 warning 'args' is already declared in the upper scope on line 285 column 4 no-shadow 337:8 warning 'queryMap' is already declared in the upper scope on line 286 column 4 no-shadow 342:10 warning 'args' is already declared in the upper scope on line 336 column 40 no-shadow 351:7 warning 'args' is already declared in the upper scope on line 336 column 40 no-shadow /src/repo/modules/engine/components/flow-component.js 96:43 warning 'timestamp' is already declared in the upper scope on line 95 column 7 no-shadow /src/repo/modules/engine/components/flow-registry.js 42:5 warning 'i' is already declared in the upper scope on line 31 column 10 no-shadow /src/repo/modules/engine/misc/flow-handlebars.js 117:5 warning 'target' is already declared in the upper scope on line 113 column 70 no-shadow /src/repo/modules/engine/misc/jquery.findWithParent.js 51:33 warning 'selector' is already declared in the upper scope on line 46 column 35 no-shadow /src/repo/modules/flow/ui/widgets/mw.flow.ui.NavigationWidget.js 84:9 warning 'scrollTop' is already declared in the upper scope on line 76 column 7 no-shadow /src/repo/modules/mw.flow.Initializer.js 969:35 warning 'content' is already declared in the upper scope on line 909 column 79 no-shadow 1061:40 warning 'content' is already declared in the upper scope on line 1010 column 4 no-shadow /src/repo/tests/qunit/flow/dm/test_mw.flow.dm.Topic.js 7:38 warning 'operation' is already declared in the upper scope on line 6 column 39 no-shadow ✖ 14 problems (0 errors, 14 warnings) --- end --- $ ./node_modules/.bin/eslint modules/engine/components/board/features/flow-board-navigation.js i18n/te.json i18n/lb.json modules/engine/components/board/features/flow-board-visualeditor.js i18n/fr.json i18n/sk.json i18n/lt.json i18n/tl.json i18n/fit.json i18n/api/ko.json i18n/om.json i18n/az.json i18n/gl.json i18n/or.json i18n/pl.json i18n/bjn.json i18n/skr-arab.json i18n/en.json i18n/hy.json i18n/api/zh-hant.json i18n/jbo.json i18n/lag.json i18n/be.json i18n/ta.json i18n/bcl.json i18n/ku-latn.json modules/flow/ui/widgets/mw.flow.ui.NewTopicWidget.js i18n/api/it.json i18n/nn.json i18n/el.json i18n/nl.json i18n/kiu.json i18n/api/ckb.json i18n/api/pt-br.json i18n/ne.json modules/engine/components/common/flow-component-events.js i18n/ms.json modules/editor/editors/visualeditor/ui/contextitem/mw.flow.ve.ui.MentionContextItem.js i18n/tg-cyrl.json i18n/my.json modules/flow/ui/widgets/mw.flow.ui.TopicTitleWidget.js i18n/ce.json modules/flow/dm/mw.flow.dm.System.js i18n/sh.json modules/engine/components/board/features/flow-board-side-rail.js i18n/mn.json i18n/hr.json i18n/kjp.json i18n/kaa.json i18n/se.json modules/editor/editors/visualeditor/mw.flow.ve.UserCache.js i18n/api/gom-latn.json i18n/api/mr.json modules/flow/ui/widgets/mw.flow.ui.EditPostWidget.js i18n/api/en.json modules/flow/dm/mw.flow.dm.Item.js modules/editor/editors/visualeditor/ui/inspectors/mw.flow.ve.ui.MentionInspector.js modules/engine/misc/flow-api.js i18n/ckb.json modules/flow/ui/mw.flow.ui.CancelConfirmDialog.js modules/engine/misc/jquery.findWithParent.js i18n/nan.json i18n/ksw.json i18n/xsy.json modules/messagePoster/ext.flow.messagePoster.js modules/flow/dm/mw.flow.dm.Post.js i18n/cu.json i18n/eu.json i18n/api/gom-deva.json i18n/yi.json i18n/api/sd.json i18n/api/ps.json tests/qunit/flow/dm/test_mw.flow.dm.Content.js i18n/ky.json i18n/azb.json i18n/br.json i18n/tly.json modules/engine/components/board/features/flow-board-loadmore.js i18n/qqq.json modules/flow/mw.flow.js modules/flow-initialize.js i18n/nog.json i18n/api/diq.json i18n/api/ro.json modules/flow/ui/widgets/mw.flow.ui.TopicMenuSelectWidget.js i18n/hil.json i18n/ady-cyrl.json i18n/nds.json i18n/api/ast.json i18n/lkt.json i18n/api/ca.json i18n/frr.json i18n/api/te.json i18n/trv.json i18n/is.json i18n/fy.json i18n/ro.json i18n/ug-arab.json jsduck.json i18n/ast.json i18n/api/lki.json i18n/hsb.json i18n/myv.json modules/flow/dm/mw.flow.dm.Board.js i18n/sco.json i18n/pt-br.json i18n/ace.json i18n/mr.json i18n/api/sje.json i18n/sms.json i18n/cy.json i18n/su.json i18n/zh-hk.json i18n/api/bn.json i18n/mk.json i18n/bgn.json modules/engine/misc/mw-ui.enhance.js modules/engine/misc/mw-ui.modal.js i18n/gsw.json i18n/eo.json modules/flow/ui/widgets/mw.flow.ui.ReplyWidget.js i18n/id.json i18n/it.json i18n/api/id.json i18n/ary.json i18n/hyw.json i18n/si.json modules/engine/components/common/flow-component-engines.js i18n/vo.json i18n/udm.json sql/tables.json extension.json i18n/dsb.json i18n/da.json i18n/vec.json i18n/olo.json i18n/pnb.json tests/qunit/engine/misc/test_flow-handlebars.js i18n/scn.json i18n/api/sl.json i18n/min.json i18n/bnn.json build/typos.json i18n/shn.json i18n/sv.json modules/flow/ui/widgets/mw.flow.ui.CategoriesWidget.js i18n/ht.json modules/engine/misc/flow-handlebars.js composer.json i18n/nap.json i18n/ur.json i18n/atj.json i18n/ami.json i18n/ksh.json i18n/api/ce.json modules/flow/ui/widgets/editor/mw.flow.ui.EditorControlsWidget.js modules/engine/components/board/base/flow-board-interactive-events.js i18n/ja.json jsduck.external.js i18n/roa-tara.json modules/flow/dm/mw.flow.dm.RevisionedContent.js i18n/api/bqi.json i18n/api/lb.json modules/flow/dm/mw.flow.dm.BoardDescription.js i18n/kk-cyrl.json modules/flow/ui/widgets/mw.flow.ui.SidebarExpandWidget.js i18n/sr-el.json modules/engine/components/board/flow-board.js i18n/xmf.json i18n/ar.json modules/engine/components/board/base/flow-board-api-events.js i18n/tt-cyrl.json i18n/pa.json i18n/api/de.json i18n/be-tarask.json i18n/de.json i18n/gd.json i18n/tyv.json i18n/th.json modules/flow/dm/mw.flow.dm.Captcha.js i18n/af.json i18n/lmo.json i18n/zh-hans.json tests/qunit/flow/dm/test_mw.flow.dm.System.js i18n/et.json i18n/os.json i18n/api/ksh.json modules/engine/misc/jquery.conditionalScroll.js i18n/api/ms.json modules/flow/ui/widgets/mw.flow.ui.CaptchaWidget.js i18n/li.json i18n/bo.json modules/flow/ui/widgets/mw.flow.ui.CategoryItemWidget.js modules/flow/dm/mw.flow.dm.js i18n/es.json modules/flow/dm/mw.flow.dm.Topic.js modules/engine/components/board/flow-boardhistory.js i18n/mwl.json i18n/api/fi.json modules/engine/components/board/base/flow-board-load-events.js i18n/api/qqq.json i18n/ca.json i18n/api/tr.json modules/contributions/base.js i18n/uk.json i18n/cdo.json i18n/en-gb.json i18n/hu.json modules/editor/editors/visualeditor/mw.flow.ve.CommandRegistry.js modules/editor/editors/visualeditor/mw.flow.ve.Target.js i18n/kab.json i18n/lzh.json modules/flow/dm/mixins/mw.flow.dm.List.js i18n/api/gl.json i18n/sq.json i18n/tr.json i18n/ka.json i18n/io.json i18n/api/got.json i18n/api/vec.json tests/qunit/flow/dm/test_mw.flow.dm.Board.js i18n/api/eu.json i18n/sl.json i18n/api/mk.json i18n/kn.json i18n/krl.json modules/engine/components/flow-registry.js i18n/bcc.json i18n/ban.json i18n/api/ar.json i18n/yo.json modules/flow/ui/widgets/mw.flow.ui.ReorderTopicsWidget.js i18n/fa.json i18n/api/pam.json i18n/pam.json i18n/sr-ec.json i18n/oc.json package.json i18n/bn.json i18n/dty.json i18n/inh.json i18n/gom-deva.json i18n/he.json i18n/api/kk-cyrl.json i18n/api/ku-latn.json i18n/mnw.json tests/qunit/flow/dm/test_mw.flow.dm.Topic.js i18n/api/shn.json i18n/api/hu.json i18n/lo.json package-lock.json i18n/bqi.json i18n/api/hi.json i18n/tay.json i18n/aeb-arab.json i18n/cs.json i18n/nb.json i18n/gom-latn.json i18n/api/nb.json i18n/gu.json modules/engine/components/common/flow-component-menus.js Gruntfile.js modules/handlebars.js i18n/api/pl.json i18n/api/ja.json modules/engine/components/board/base/flow-boardandhistory-base.js i18n/uz.json i18n/mai.json i18n/api/nl.json i18n/api/roa-tara.json i18n/ia.json modules/flow/dm/api/mw.flow.dm.APIHandler.js i18n/ps.json i18n/jv.json i18n/api/fr.json modules/editor/editors/visualeditor/mw.flow.ve.SequenceRegistry.js i18n/api/ka.json i18n/km.json i18n/mzn.json i18n/sa.json i18n/zh-hant.json i18n/api/sv.json i18n/sje.json i18n/ru.json i18n/api/scn.json modules/flow/ui/mw.flow.ui.js i18n/ml.json i18n/api/oc.json modules/editor/editors/visualeditor/ui/tools/mw.flow.ve.ui.MWEditModeTool.js i18n/es-formal.json i18n/sd.json i18n/szy.json modules/editor/editors/visualeditor/ui/widgets/mw.flow.ve.ui.MentionTargetInputWidget.js i18n/api/ur.json i18n/api/bs.json i18n/api/hy.json i18n/lki.json i18n/lij.json i18n/smn.json i18n/api/pt.json i18n/ee.json i18n/diq.json i18n/hak.json modules/tours/flowOptIn.js i18n/fi.json modules/flow/ui/widgets/mw.flow.ui.EditTopicSummaryWidget.js i18n/lrc.json i18n/bg.json i18n/pt.json modules/flow/ui/widgets/mw.flow.ui.BoardDescriptionWidget.js i18n/api/uk.json i18n/got.json tests/qunit/engine/misc/test_jquery.findWithParent.js i18n/api/lt.json i18n/api/es.json i18n/ie.json i18n/api/ml.json i18n/hi.json i18n/api/he.json i18n/mt.json i18n/api/ia.json i18n/tk.json i18n/ig.json modules/flow/dm/mw.flow.dm.Content.js i18n/btm.json i18n/crh-latn.json i18n/sw.json i18n/ba.json i18n/api/ru.json i18n/bs.json i18n/api/zh-hans.json i18n/qu.json i18n/api/km.json tests/qunit/engine/misc/test_mw-ui.enhance.js i18n/bho.json modules/mw.flow.Initializer.js modules/flow/ui/widgets/mw.flow.ui.ToCWidget.js i18n/vi.json modules/flow/ui/widgets/editor/mw.flow.ui.EditorWidget.js modules/flow/ui/widgets/editor/mw.flow.ui.CanNotEditWidget.js modules/flow/dm/mw.flow.dm.Categories.js modules/flow/dm/mw.flow.dm.CategoryItem.js i18n/lv.json modules/editor/editors/visualeditor/ui/tools/mw.flow.ve.ui.MentionInspectorTool.js modules/flow/ui/widgets/mw.flow.ui.NavigationWidget.js i18n/api/vi.json i18n/ti.json modules/flow/ui/widgets/editor/mw.flow.ui.AnonWarningWidget.js i18n/api/da.json modules/flow/dm/mw.flow.dm.ModeratedRevisionedContent.js modules/engine/components/flow-component.js tests/qunit/flow/dm/test_mw.flow.dm.Post.js i18n/nds-nl.json i18n/ks-arab.json i18n/blk.json i18n/api/el.json i18n/api/fa.json i18n/ko.json i18n/as.json -f json --- stdout --- [{"filePath":"/src/repo/Gruntfile.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/build/typos.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/composer.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/extension.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ace.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ady-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/aeb-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/af.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ami.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ast.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/bn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/bqi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/bs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ca.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ce.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ckb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/da.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/diq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/eu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/fi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/gl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/gom-deva.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/gom-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/got.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/hi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/hu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/hy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/id.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ja.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ka.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/kk-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/km.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ksh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ku-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/lki.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/lt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ml.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/mr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/nb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/oc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/pam.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/pl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ps.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/pt-br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/pt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ro.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/roa-tara.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ru.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/scn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/sd.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/shn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/sje.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/sv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/te.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/uk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/ur.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/vec.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/vi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/api/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ary.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/as.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ast.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/atj.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/az.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/azb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ba.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ban.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bcc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bcl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/be-tarask.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/be.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bg.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bgn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bho.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bjn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/blk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bnn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bqi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/bs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/btm.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ca.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/cdo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ce.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ckb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/crh-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/cs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/cu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/cy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/da.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/diq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/dsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/dty.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ee.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/en-gb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/eo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/es-formal.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/et.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/eu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fit.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/frr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/fy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gd.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gom-deva.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gom-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/got.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gsw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/gu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hak.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hil.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ht.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/hyw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/id.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ie.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ig.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/inh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/io.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/is.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ja.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/jbo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/jv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ka.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kaa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kiu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kjp.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kk-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/km.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/kn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/krl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ks-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ksh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ksw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ku-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ky.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lag.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/li.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lij.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lki.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lkt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lmo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/lzh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mai.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/min.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ml.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mnw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mwl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/my.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/myv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/mzn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nan.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nap.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nds-nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nds.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ne.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/nog.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/oc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/olo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/om.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/or.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/os.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pam.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pnb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ps.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pt-br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/pt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/qu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ro.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/roa-tara.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ru.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/scn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sco.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sd.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/se.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/shn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/si.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sje.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/skr-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/smn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sr-ec.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sr-el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/su.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/sw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/szy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ta.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tay.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/te.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tg-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/th.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ti.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tly.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/trv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tt-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/tyv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/udm.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ug-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/uk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/ur.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/uz.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/vec.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/vi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/vo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/xmf.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/xsy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/yi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/yo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/i18n/zh-hk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/jsduck.external.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/jsduck.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/modules/contributions/base.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":30,"column":3,"nodeType":"CallExpression","endLine":30,"endColumn":22,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/editor/editors/visualeditor/mw.flow.ve.CommandRegistry.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/editor/editors/visualeditor/mw.flow.ve.SequenceRegistry.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/editor/editors/visualeditor/mw.flow.ve.Target.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":89,"column":23,"nodeType":"CallExpression","endLine":89,"endColumn":38,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/editor/editors/visualeditor/mw.flow.ve.UserCache.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/editor/editors/visualeditor/ui/contextitem/mw.flow.ve.ui.MentionContextItem.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/editor/editors/visualeditor/ui/inspectors/mw.flow.ve.ui.MentionInspector.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/editor/editors/visualeditor/ui/tools/mw.flow.ve.ui.MWEditModeTool.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/editor/editors/visualeditor/ui/tools/mw.flow.ve.ui.MentionInspectorTool.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/editor/editors/visualeditor/ui/widgets/mw.flow.ve.ui.MentionTargetInputWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/board/base/flow-board-api-events.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/board/base/flow-board-interactive-events.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/board/base/flow-board-load-events.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/board/base/flow-boardandhistory-base.js","messages":[],"suppressedMessages":[{"ruleId":"no-alert","severity":2,"message":"Unexpected confirm.","line":144,"column":5,"nodeType":"CallExpression","messageId":"unexpected","endLine":144,"endColumn":93,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/board/features/flow-board-loadmore.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'$topic' is already declared in the upper scope on line 352 column 62.","line":361,"column":52,"nodeType":"Identifier","messageId":"noShadow","endLine":361,"endColumn":58}],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":65,"column":6,"nodeType":"CallExpression","endLine":65,"endColumn":23,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-each-util","severity":2,"message":"Prefer Array#forEach to $.each","line":361,"column":3,"nodeType":"CallExpression","endLine":365,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":2,"message":"Selector extensions are not allowed","line":449,"column":3,"nodeType":"CallExpression","endLine":449,"endColumn":68,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unreachable","severity":2,"message":"Unreachable code.","line":498,"column":4,"nodeType":"IfStatement","messageId":"unreachableCode","endLine":521,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-class-state","severity":2,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":614,"column":11,"nodeType":"CallExpression","endLine":614,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/*!\n * Contains loadMore, jumpToTopic, and topic titles list functionality.\n */\n\n/**\n * @class FlowBoardComponent\n * TODO: Use @-external in JSDoc\n */\n\n( function () {\n\t/**\n\t * Bind UI events and infinite scroll handler for load more and titles list functionality.\n\t *\n\t * @param {jQuery} $container\n\t * @this FlowBoardComponent\n\t * @constructor\n\t */\n\tfunction FlowBoardComponentLoadMoreFeatureMixin() {\n\t\t/** Stores a reference to each topic element currently on the page */\n\t\tthis.renderedTopics = {};\n\t\t/** Stores a list of all topics titles by ID */\n\t\tthis.topicTitlesById = {};\n\t\t/** Stores a list of all topic IDs in order */\n\t\tthis.orderedTopicIds = [];\n\n\t\tthis.bindNodeHandlers( FlowBoardComponentLoadMoreFeatureMixin.UI.events );\n\t}\n\tOO.initClass( FlowBoardComponentLoadMoreFeatureMixin );\n\n\tFlowBoardComponentLoadMoreFeatureMixin.UI = {\n\t\tevents: {\n\t\t\tapiPreHandlers: {},\n\t\t\tapiHandlers: {},\n\t\t\tloadHandlers: {}\n\t\t}\n\t};\n\n\t//\n\t// Prototype methods\n\t//\n\n\t/**\n\t * Scrolls up or down to a specific topic, and loads any topics it needs to.\n\t * 1. If topic is rendered, scrolls to it.\n\t * 2. Otherwise, we load the topic itself\n\t * 3b. When the user scrolls up, we begin loading the topics in between.\n\t *\n\t * @param {string} topicId\n\t */\n\tfunction flowBoardComponentLoadMoreFeatureJumpTo( topicId ) {\n\t\tvar apiParameters,\n\t\t\tflowBoard = this,\n\t\t\t// Scrolls to the given topic, but disables infinite scroll loading while doing so\n\t\t\t_scrollWithoutInfinite = function () {\n\t\t\t\tvar $renderedTopic = flowBoard.renderedTopics[ topicId ];\n\n\t\t\t\tif ( $renderedTopic && $renderedTopic.length ) {\n\t\t\t\t\tflowBoard.infiniteScrollDisabled = true;\n\n\t\t\t\t\t// Get out of the way of the affixed navigation\n\t\t\t\t\t// Not going the full $( '.flow-board-navigation' ).height()\n\t\t\t\t\t// because then the load more button (above the new topic)\n\t\t\t\t\t// would get in sight and any scroll would fire it\n\t\t\t\t\t// eslint-disable-next-line no-jquery/no-global-selector\n\t\t\t\t\t$( 'html, body' ).scrollTop( $renderedTopic.offset().top - 20 );\n\n\t\t\t\t\t// Focus on given topic\n\t\t\t\t\t$renderedTopic.trigger( 'click' ).trigger( 'focus' );\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Re-enable infinite scroll. Only doing that after a couple\n\t\t\t\t\t * of milliseconds because we've just executed some\n\t\t\t\t\t * scrolling (to the selected topic) and the very last\n\t\t\t\t\t * scroll event may only just still be getting fired.\n\t\t\t\t\t * To prevent an immediate scroll (above the new topic),\n\t\t\t\t\t * let's only re-enable infinite scroll until we're sure\n\t\t\t\t\t * that event has been fired.\n\t\t\t\t\t */\n\t\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t\tdelete flowBoard.infiniteScrollDisabled;\n\t\t\t\t\t}, 1 );\n\t\t\t\t} else {\n\t\t\t\t\tflowBoard.debug( 'Rendered topic not found when attempting to scroll!' );\n\t\t\t\t}\n\t\t\t};\n\n\t\t// 1. Topic is already on the page; just scroll to it\n\t\tif ( flowBoard.renderedTopics[ topicId ] ) {\n\t\t\t_scrollWithoutInfinite();\n\t\t\treturn;\n\t\t}\n\n\t\t// 2a. Topic is not rendered; do we know about this topic ID?\n\t\tif ( flowBoard.topicTitlesById[ topicId ] === undefined ) {\n\t\t\t// We don't. Abort!\n\t\t\tflowBoard.debug( 'Unknown topicId', arguments );\n\t\t\treturn;\n\t\t}\n\n\t\t// 2b. Load that topic and jump to it\n\t\tapiParameters = {\n\t\t\taction: 'flow',\n\t\t\tsubmodule: 'view-topiclist',\n\t\t\t'vtloffset-dir': 'fwd', // @todo support \"middle\" dir\n\t\t\t'vtlinclude-offset': true,\n\t\t\tvtlsortby: this.topicIdSort\n\t\t};\n\n\t\tif ( this.topicIdSort === 'newest' ) {\n\t\t\tapiParameters[ 'vtloffset-id' ] = topicId;\n\t\t} else {\n\t\t\t// TODO: It would seem to be safer to pass 'offset-id' for both (what happens\n\t\t\t// if there are two posts at the same timestamp?). (Also, that would avoid needing\n\t\t\t// the timestamp in the TOC-only API response). However, currently\n\t\t\t// we must pass 'offset' for 'updated' order to get valid results.\n\n\t\t\tapiParameters.vtloffset = moment.utc( this.updateTimestampsByTopicId[ topicId ] ).format( 'YYYYMMDDHHmmss' );\n\t\t}\n\n\t\tflowBoard.Api.apiCall( apiParameters )\n\t\t\t// TODO: Finish this error handling or remove the empty functions.\n\t\t\t// Remove the load indicator\n\t\t\t.always( function () {\n\t\t\t\t// @todo support for multiple indicators on same target\n\t\t\t\t// $target.removeClass( 'flow-api-inprogress' );\n\t\t\t\t// $this.removeClass( 'flow-api-inprogress' );\n\t\t\t} )\n\t\t\t// On success, render the topic\n\t\t\t.done( function ( data ) {\n\t\t\t\t_flowBoardComponentLoadMoreFeatureRenderTopics(\n\t\t\t\t\tflowBoard,\n\t\t\t\t\tdata.flow[ 'view-topiclist' ].result.topiclist,\n\t\t\t\t\tfalse,\n\t\t\t\t\tnull,\n\t\t\t\t\t'',\n\t\t\t\t\t'',\n\t\t\t\t\t'flow_topiclist_loop.partial' // @todo clean up the way we pass these 3 params ^\n\t\t\t\t);\n\n\t\t\t\t_scrollWithoutInfinite();\n\t\t\t} )\n\t\t\t// On fail, render an error\n\t\t\t.fail( function ( code ) {\n\t\t\t\tflowBoard.debug( true, 'Failed to load topics: ' + code );\n\t\t\t\t// Failed fetching the new data to be displayed.\n\t\t\t\t// @todo render the error at topic position and scroll to it\n\t\t\t\t// @todo how do we render this?\n\t\t\t\t// $target = ????\n\t\t\t\t// flowBoard.emitWithReturn( 'removeError', $target );\n\t\t\t\t// var errorMsg = flowBoard.constructor.static.getApiErrorMessage( code, result );\n\t\t\t\t// errorMsg = mw.msg( '????', errorMsg );\n\t\t\t\t// flowBoard.emitWithReturn( 'showError', $target, errorMsg );\n\t\t\t} );\n\t}\n\tFlowBoardComponentLoadMoreFeatureMixin.prototype.jumpToTopic = flowBoardComponentLoadMoreFeatureJumpTo;\n\n\t//\n\t// API pre-handlers\n\t//\n\n\t/**\n\t * On before board reloading (eg. change sort).\n\t * This method only clears the storage in preparation for it to be reloaded.\n\t *\n\t * @param {Event} event\n\t * @param {Object} info\n\t * @param {jQuery} info.$target\n\t * @param {Object} info.queryMap\n\t * @param {FlowBoardComponent} info.component\n\t */\n\tfunction flowBoardComponentLoadMoreFeatureBoardApiPreHandler( event, info ) {\n\t\t// Backup the topic data\n\t\tinfo.component.renderedTopicsBackup = info.component.renderedTopics;\n\t\tinfo.component.topicTitlesByIdBackup = info.component.topicTitlesById;\n\t\t// Reset the topic data\n\t\tinfo.component.renderedTopics = {};\n\t\tinfo.component.topicTitlesById = {};\n\t}\n\tFlowBoardComponentLoadMoreFeatureMixin.UI.events.apiPreHandlers.board = flowBoardComponentLoadMoreFeatureBoardApiPreHandler;\n\n\t//\n\t// API callback handlers\n\t//\n\n\t/**\n\t * On failed board reloading (eg. change sort), restore old data.\n\t *\n\t * @param {Object} info\n\t * @param {string} info.status \"done\" or \"fail\"\n\t * @param {jQuery} info.$target\n\t * @param {FlowBoardComponent} info.component\n\t * @param {Object} data\n\t * @param {jQuery.jqXHR} jqxhr\n\t */\n\tfunction flowBoardComponentLoadMoreFeatureBoardApiCallback( info ) {\n\t\tif ( info.status !== 'done' ) {\n\t\t\t// Failed; restore the topic data\n\t\t\tinfo.component.renderedTopics = info.component.renderedTopicsBackup;\n\t\t\tinfo.component.topicTitlesById = info.component.topicTitlesByIdBackup;\n\t\t}\n\n\t\t// Delete the backups\n\t\tdelete info.component.renderedTopicsBackup;\n\t\tdelete info.component.topicTitlesByIdBackup;\n\t}\n\tFlowBoardComponentLoadMoreFeatureMixin.UI.events.apiHandlers.board = flowBoardComponentLoadMoreFeatureBoardApiCallback;\n\n\t/**\n\t * Loads more content\n\t *\n\t * @param {Object} info\n\t * @param {string} info.status \"done\" or \"fail\"\n\t * @param {jQuery} info.$target\n\t * @param {FlowBoardComponent} info.component\n\t * @param {Object} data\n\t * @param {jQuery.jqXHR} jqxhr\n\t * @return {jQuery.Promise}\n\t */\n\tfunction flowBoardComponentLoadMoreFeatureTopicsApiCallback( info, data ) {\n\t\tvar scrollTarget,\n\t\t\t$scrollTarget,\n\t\t\t$scrollContainer,\n\t\t\ttopicsData,\n\t\t\treadingTopicPosition,\n\t\t\t$this = $( this ),\n\t\t\t$target = info.$target,\n\t\t\tflowBoard = info.component;\n\n\t\tif ( info.status !== 'done' ) {\n\t\t\t// Error will be displayed by default, nothing else to wrap up\n\t\t\treturn $.Deferred().resolve().promise();\n\t\t}\n\n\t\tscrollTarget = $this.data( 'flow-scroll-target' );\n\t\t$scrollContainer = $.findWithParent( $this, $this.data( 'flow-scroll-container' ) );\n\t\ttopicsData = data.flow[ 'view-topiclist' ].result.topiclist;\n\n\t\tif ( scrollTarget === 'window' && flowBoard.readingTopicId ) {\n\t\t\t// Store the current position of the topic you are reading\n\t\t\treadingTopicPosition = { id: flowBoard.readingTopicId };\n\t\t\t// Where does the topic start?\n\t\t\treadingTopicPosition.topicStart = flowBoard.renderedTopics[ readingTopicPosition.id ].offset().top;\n\t\t\t// Where am I within the topic?\n\t\t\treadingTopicPosition.topicPlace = $( window ).scrollTop() - readingTopicPosition.topicStart;\n\t\t}\n\n\t\t// Render topics\n\t\t_flowBoardComponentLoadMoreFeatureRenderTopics(\n\t\t\tflowBoard,\n\t\t\ttopicsData,\n\t\t\tflowBoard.$container.find( flowBoard.$loadMoreNodes ).last()[ 0 ] === this, // if this is the last load more button\n\t\t\t$target,\n\t\t\tscrollTarget,\n\t\t\t$this.data( 'flow-scroll-container' ),\n\t\t\t$this.data( 'flow-template' )\n\t\t);\n\n\t\t// Remove the old load button (necessary if the above load_more template returns nothing)\n\t\t$target.remove();\n\n\t\tif ( scrollTarget === 'window' ) {\n\t\t\t$scrollTarget = $( window );\n\n\t\t\tif ( readingTopicPosition ) {\n\t\t\t\treadingTopicPosition.anuStart = flowBoard.renderedTopics[ readingTopicPosition.id ].offset().top;\n\t\t\t\tif ( readingTopicPosition.anuStart > readingTopicPosition.topicStart ) {\n\t\t\t\t\t// Looks like the topic we are reading got pushed down. Let's jump to where we were before\n\t\t\t\t\t$scrollTarget.scrollTop( readingTopicPosition.anuStart + readingTopicPosition.topicPlace );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t$scrollTarget = $.findWithParent( this, scrollTarget );\n\t\t}\n\n\t\t/*\n\t\t * Fire infinite scroll check again - if no (or few) topics were\n\t\t * added (e.g. because they're moderated), we should immediately\n\t\t * fetch more instead of waiting for the user to scroll again (when\n\t\t * there's no reason to scroll)\n\t\t */\n\t\t_flowBoardComponentLoadMoreFeatureInfiniteScrollCheck.call( flowBoard, $scrollContainer, $scrollTarget );\n\t\treturn $.Deferred().resolve().promise();\n\t}\n\tFlowBoardComponentLoadMoreFeatureMixin.UI.events.apiHandlers.loadMoreTopics = flowBoardComponentLoadMoreFeatureTopicsApiCallback;\n\n\t//\n\t// On element-load handlers\n\t//\n\n\t/**\n\t * Stores the load more button for use with infinite scroll.\n\t *\n\t * <button data-flow-scroll-target=\"< ul\"></button>\n\t *\n\t * @param {jQuery} $button\n\t */\n\tfunction flowBoardComponentLoadMoreFeatureElementLoadCallback( $button ) {\n\t\tvar scrollTargetSelector = $button.data( 'flow-scroll-target' ),\n\t\t\t$target,\n\t\t\tscrollContainerSelector = $button.data( 'flow-scroll-container' ),\n\t\t\t$scrollContainer = $.findWithParent( $button, scrollContainerSelector ),\n\t\t\tboard = this;\n\n\t\tif ( !this.$loadMoreNodes ) {\n\t\t\t// Create a new $loadMoreNodes list\n\t\t\tthis.$loadMoreNodes = $();\n\t\t} else {\n\t\t\t// Remove any loadMore nodes that are no longer in the body\n\t\t\tthis.$loadMoreNodes = this.$loadMoreNodes.filter( function () {\n\t\t\t\tvar $this = $( this );\n\n\t\t\t\t// @todo unbind scroll handlers\n\t\t\t\tif ( !$this.closest( 'body' ).length ) {\n\t\t\t\t\t// Get rid of this and its handlers\n\t\t\t\t\t$this.remove();\n\t\t\t\t\t// Delete from list\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t}\n\n\t\t// Store this new loadMore node\n\t\tthis.$loadMoreNodes = this.$loadMoreNodes.add( $button );\n\n\t\t// Make sure we didn't already bind to this element's scroll previously\n\t\tif ( $scrollContainer.data( 'scrollIsBound' ) ) {\n\t\t\treturn;\n\t\t}\n\t\t$scrollContainer.data( 'scrollIsBound', true );\n\n\t\t// Bind the event for this\n\t\tif ( scrollTargetSelector === 'window' ) {\n\t\t\tthis.on( 'windowScroll', function () {\n\t\t\t\t_flowBoardComponentLoadMoreFeatureInfiniteScrollCheck.call( board, $scrollContainer, $( window ) );\n\t\t\t} );\n\t\t} else {\n\t\t\t$target = $.findWithParent( $button, scrollTargetSelector );\n\t\t\t$target.on( 'scroll.flow-load-more', mw.util.throttle( function () {\n\t\t\t\t_flowBoardComponentLoadMoreFeatureInfiniteScrollCheck.call( board, $scrollContainer, $target );\n\t\t\t}, 50 ) );\n\t\t}\n\t}\n\tFlowBoardComponentLoadMoreFeatureMixin.UI.events.loadHandlers.loadMore = flowBoardComponentLoadMoreFeatureElementLoadCallback;\n\n\t/**\n\t * Stores a list of all topics currently visible on the page.\n\t *\n\t * @param {jQuery} $topic\n\t */\n\tfunction flowBoardComponentLoadMoreFeatureElementLoadTopic( $topic ) {\n\t\tvar self = this,\n\t\t\tcurrentTopicId = $topic.data( 'flow-id' );\n\n\t\t// Store this topic by ID\n\t\tthis.renderedTopics[ currentTopicId ] = $topic;\n\n\t\t// Remove any topics that are no longer on the page, just in case\n\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t$.each( this.renderedTopics, function ( topicId, $topic ) {\n\t\t\tif ( !$topic.closest( self.$board ).length ) {\n\t\t\t\tdelete self.renderedTopics[ topicId ];\n\t\t\t}\n\t\t} );\n\t}\n\tFlowBoardComponentLoadMoreFeatureMixin.UI.events.loadHandlers.topic = flowBoardComponentLoadMoreFeatureElementLoadTopic;\n\n\t//\n\t// Private functions\n\t//\n\n\t/**\n\t * Generates Array#sort callback for sorting a list of topic ids\n\t * by the 'recently active' sort order. This is a numerical\n\t * comparison of related timestamps held within the board object.\n\t * Also note that this is a reverse sort from newest to oldest.\n\t *\n\t * @private\n\t *\n\t * @param {Object} board Object from which to source\n\t * timestamps which map from topicId to its last updated timestamp\n\t * @return {Function} Sort callback\n\t * @return {string} return.a\n\t * @return {string} return.b\n\t * @return {number} return.return Per Array#sort callback rules\n\t */\n\tfunction _flowBoardTopicIdGenerateSortRecentlyActive( board ) {\n\t\treturn function ( a, b ) {\n\t\t\tvar aTimestamp = board.updateTimestampsByTopicId[ a ],\n\t\t\t\tbTimestamp = board.updateTimestampsByTopicId[ b ];\n\n\t\t\tif ( aTimestamp === undefined && bTimestamp === undefined ) {\n\t\t\t\treturn 0;\n\t\t\t} else if ( aTimestamp === undefined ) {\n\t\t\t\treturn 1;\n\t\t\t} else if ( bTimestamp === undefined ) {\n\t\t\t\treturn -1;\n\t\t\t} else {\n\t\t\t\treturn bTimestamp - aTimestamp;\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Re-sorts the orderedTopicIds after insert\n\t *\n\t * @param {Object} flowBoard\n\t */\n\tfunction _flowBoardSortTopicIds( flowBoard ) {\n\t\tvar topicIdSortCallback;\n\n\t\tif ( flowBoard.topicIdSort === 'updated' ) {\n\t\t\ttopicIdSortCallback = _flowBoardTopicIdGenerateSortRecentlyActive( flowBoard );\n\n\t\t\t// Custom sorts\n\t\t\tflowBoard.orderedTopicIds.sort( topicIdSortCallback );\n\t\t} else {\n\t\t\t// Default sort, takes advantage of topic ids monotonically increasing\n\t\t\t// which allows for the newest sort to be the default utf-8 string sort\n\t\t\t// in reverse.\n\t\t\t// TODO: This can be optimized (to avoid two in-place operations that affect\n\t\t\t// the whole array by doing a descending sort (with a custom comparator)\n\t\t\t// rather than sorting then reversing.\n\t\t\tflowBoard.orderedTopicIds.sort().reverse();\n\t\t}\n\t}\n\tFlowBoardComponentLoadMoreFeatureMixin.prototype.sortTopicIds = _flowBoardSortTopicIds;\n\n\t/**\n\t * Called on scroll. Checks to see if a FlowBoard needs to have more content loaded.\n\t *\n\t * @param {jQuery} $searchContainer Container to find 'load more' buttons in\n\t * @param {jQuery} $calculationContainer Container to do scroll calculations on (height, scrollTop, offset, etc.)\n\t */\n\tfunction _flowBoardComponentLoadMoreFeatureInfiniteScrollCheck( $searchContainer, $calculationContainer ) {\n\t\tvar calculationContainerHeight, calculationContainerScroll;\n\t\tif ( this.infiniteScrollDisabled ) {\n\t\t\t// This happens when the topic navigation is used to jump to a topic\n\t\t\t// We should not infinite-load anything when we are scrolling to a topic\n\t\t\treturn;\n\t\t}\n\n\t\tcalculationContainerHeight = $calculationContainer.height();\n\t\tcalculationContainerScroll = $calculationContainer.scrollTop();\n\n\t\t// Find load more buttons within our search container, and they must be visible\n\t\t// eslint-disable-next-line no-jquery/no-sizzle\n\t\t$searchContainer.find( this.$loadMoreNodes ).filter( ':visible' ).each( function () {\n\t\t\tvar $this = $( this ),\n\t\t\t\tnodeOffset = $this.offset().top,\n\t\t\t\tnodeHeight = $this.outerHeight( true );\n\n\t\t\t// First, is this element above or below us?\n\t\t\tif ( nodeOffset <= calculationContainerScroll ) {\n\t\t\t\t// Top of element is above the viewport; don't use it.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// @todo: this ignores that TOC also obscures the button: load more\n\t\t\t// also shouldn't be triggered if it's still behind TOC!\n\n\t\t\t// Is this element in the viewport?\n\t\t\tif ( nodeOffset - nodeHeight <= calculationContainerScroll + calculationContainerHeight ) {\n\t\t\t\t// Element is almost in viewport, click it.\n\t\t\t\t$( this ).trigger( 'click' );\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Renders and inserts a list of new topics.\n\t *\n\t * @param {FlowBoardComponent} flowBoard\n\t * @param {Object} topicsData\n\t * @param {boolean} [forceShowLoadMore]\n\t * @param {jQuery} [$insertAt]\n\t * @param {string} [scrollTarget]\n\t * @param {string} [scrollContainer]\n\t * @param {string} [scrollTemplate]\n\t * @private\n\t */\n\tfunction _flowBoardComponentLoadMoreFeatureRenderTopics( flowBoard, topicsData, forceShowLoadMore, $insertAt, scrollTarget, scrollContainer, scrollTemplate ) {\n\t\tvar i, j, $topic, topicId,\n\t\t\t$allRendered = $( [] ),\n\t\t\ttoInsert = [];\n\n\t\tif ( !topicsData.roots.length ) {\n\t\t\tflowBoard.debug( 'No topics returned from API', arguments );\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _createRevPagination( $target ) {\n\t\t\t// FIXME reverse pagination is broken in the backend, don't use it\n\t\t\treturn;\n\n\t\t\t// eslint-disable-next-line no-unreachable\n\t\t\tif ( !topicsData.links.pagination.fwd && !topicsData.links.pagination.rev ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !topicsData.links.pagination.rev && topicsData.links.pagination.fwd ) {\n\t\t\t\t// This is a fix for the fact that a \"rev\" is not available here (TODO: Why not?)\n\t\t\t\t// We can create one by overriding dir=rev\n\t\t\t\ttopicsData.links.pagination.rev = $.extend( true, {}, topicsData.links.pagination.fwd, { title: 'rev' } );\n\t\t\t\ttopicsData.links.pagination.rev.url = topicsData.links.pagination.rev.url.replace( '_offset-dir=fwd', '_offset-dir=rev' );\n\t\t\t}\n\n\t\t\t$allRendered = $allRendered.add(\n\t\t\t\t$( flowBoard.constructor.static.TemplateEngine.processTemplateGetFragment(\n\t\t\t\t\t'flow_load_more.partial',\n\t\t\t\t\t{\n\t\t\t\t\t\tloadMoreObject: topicsData.links.pagination.rev,\n\t\t\t\t\t\tloadMoreApiHandler: 'loadMoreTopics',\n\t\t\t\t\t\tloadMoreTarget: scrollTarget,\n\t\t\t\t\t\tloadMoreContainer: scrollContainer,\n\t\t\t\t\t\tloadMoreTemplate: scrollTemplate\n\t\t\t\t\t}\n\t\t\t\t) ).children()\n\t\t\t\t\t.insertBefore( $target.first() )\n\t\t\t);\n\t\t}\n\n\t\tfunction _createFwdPagination( $target ) {\n\t\t\tif ( forceShowLoadMore || topicsData.links.pagination.fwd ) {\n\t\t\t\t// Add the load more to the end of the stack\n\t\t\t\t$allRendered = $allRendered.add(\n\t\t\t\t\t$( flowBoard.constructor.static.TemplateEngine.processTemplateGetFragment(\n\t\t\t\t\t\t'flow_load_more.partial',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tloadMoreObject: topicsData.links.pagination.fwd,\n\t\t\t\t\t\t\tloadMoreApiHandler: 'loadMoreTopics',\n\t\t\t\t\t\t\tloadMoreTarget: scrollTarget,\n\t\t\t\t\t\t\tloadMoreContainer: scrollContainer,\n\t\t\t\t\t\t\tloadMoreTemplate: scrollTemplate\n\t\t\t\t\t\t}\n\t\t\t\t\t) ).children()\n\t\t\t\t\t\t.insertAfter( $target.last() )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Renders topics by IDs from topicsData, and returns the elements.\n\t\t *\n\t\t * @param {Array} toRender List of topic IDs in topicsData\n\t\t * @return {jQuery}\n\t\t * @private\n\t\t */\n\t\tfunction _render( toRender ) {\n\t\t\tvar rootsBackup = topicsData.roots,\n\t\t\t\t$newTopics;\n\n\t\t\t// Temporarily set roots to our subset to be rendered\n\t\t\ttopicsData.roots = toRender;\n\n\t\t\ttry {\n\t\t\t\t$newTopics = $( flowBoard.constructor.static.TemplateEngine.processTemplateGetFragment(\n\t\t\t\t\tscrollTemplate,\n\t\t\t\t\ttopicsData\n\t\t\t\t) ).children();\n\t\t\t} catch ( e ) {\n\t\t\t\tflowBoard.debug( true, 'Failed to render new topic' );\n\t\t\t\t$newTopics = $();\n\t\t\t}\n\n\t\t\ttopicsData.roots = rootsBackup;\n\n\t\t\treturn $newTopics;\n\t\t}\n\n\t\tfor ( i = 0; i < topicsData.roots.length; i++ ) {\n\t\t\ttopicId = topicsData.roots[ i ];\n\n\t\t\tif ( !flowBoard.renderedTopics[ topicId ] ) {\n\t\t\t\tflowBoard.renderedTopics[ topicId ] = _render( [ topicId ] );\n\t\t\t\t$allRendered.push( flowBoard.renderedTopics[ topicId ][ 0 ] );\n\t\t\t\ttoInsert.push( topicId );\n\t\t\t\tif ( flowBoard.orderedTopicIds.indexOf( topicId ) === -1 ) {\n\t\t\t\t\tflowBoard.orderedTopicIds.push( topicId );\n\t\t\t\t}\n\t\t\t\t// @todo this is already done elsewhere, but it runs after insert\n\t\t\t\t// to the DOM instead of before. Not sure how to fix ordering.\n\t\t\t\tif ( !flowBoard.updateTimestampsByTopicId[ topicId ] ) {\n\t\t\t\t\tflowBoard.updateTimestampsByTopicId[ topicId ] = topicsData.revisions[ topicsData.posts[ topicId ][ 0 ] ].last_updated;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( toInsert.length ) {\n\t\t\t_flowBoardSortTopicIds( flowBoard );\n\n\t\t\t// This uses the assumption that there will be at least one pre-existing\n\t\t\t// topic above the topics to be inserted. This should hold true as the\n\t\t\t// initial page load starts at the begining.\n\t\t\tfor ( i = 1; i < flowBoard.orderedTopicIds.length; i++ ) {\n\t\t\t\t// topic is not to be inserted yet.\n\t\t\t\tif ( toInsert.indexOf( flowBoard.orderedTopicIds[ i ] ) === -1 ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// find the most recent topic in the list that exists and insert after it.\n\t\t\t\tfor ( j = i - 1; j >= 0; j-- ) {\n\t\t\t\t\t$topic = flowBoard.renderedTopics[ flowBoard.orderedTopicIds[ j ] ];\n\t\t\t\t\tif ( $topic && $topic.length && $.contains( document.body, $topic[ 0 ] ) ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Put the new topic after the found topic above it\n\t\t\t\tif ( j >= 0 ) {\n\t\t\t\t\t// If there is a load-more here, insert after that as well\n\t\t\t\t\t// eslint-disable-next-line no-jquery/no-class-state\n\t\t\t\t\tif ( $topic.next().hasClass( 'flow-load-more' ) ) {\n\t\t\t\t\t\t$topic = $topic.next();\n\t\t\t\t\t}\n\t\t\t\t\t$topic.after( flowBoard.renderedTopics[ flowBoard.orderedTopicIds[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// This works because orderedTopicIds includes not only the topics on\n\t\t\t// page but also the ones loaded by the toc. If these topics are due\n\t\t\t// to a jump rather than forward auto-pagination the prior topic will\n\t\t\t// not be rendered.\n\t\t\ti = flowBoard.orderedTopicIds.indexOf( topicsData.roots[ 0 ] );\n\t\t\tif ( i > 0 && flowBoard.renderedTopics[ flowBoard.orderedTopicIds[ i - 1 ] ] === undefined ) {\n\t\t\t\t_createRevPagination( flowBoard.renderedTopics[ topicsData.roots[ 0 ] ] );\n\t\t\t}\n\t\t\t// Same for forward pagination, if we jumped and then scrolled backwards the\n\t\t\t// topic after the last will already be rendered, and forward pagination\n\t\t\t// will not be necessary.\n\t\t\ti = flowBoard.orderedTopicIds.indexOf( topicsData.roots[ topicsData.roots.length - 1 ] );\n\t\t\tif ( i === flowBoard.orderedTopicIds.length - 1 || flowBoard.renderedTopics[ flowBoard.orderedTopicIds[ i + 1 ] ] === undefined ) {\n\t\t\t\t_createFwdPagination( flowBoard.renderedTopics[ topicsData.roots[ topicsData.roots.length - 1 ] ] );\n\t\t\t}\n\n\t\t}\n\n\t\t// Run loadHandlers\n\t\tflowBoard.emitWithReturn( 'makeContentInteractive', $allRendered );\n\n\t\t// HACK: Emit an event here so that the flow data model can populate\n\t\t// itself based on the API response\n\t\tflowBoard.emit( 'loadmore', topicsData );\n\t}\n\n\t// Mixin to FlowBoardComponent\n\tmw.flow.mixinComponent( 'board', FlowBoardComponentLoadMoreFeatureMixin );\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/board/features/flow-board-navigation.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/board/features/flow-board-side-rail.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":40,"column":4,"nodeType":"CallExpression","endLine":40,"endColumn":26,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":56,"column":25,"nodeType":"CallExpression","endLine":56,"endColumn":47,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-class-state","severity":2,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":56,"column":25,"nodeType":"CallExpression","endLine":56,"endColumn":73,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-class-state","severity":2,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":56,"column":25,"nodeType":"CallExpression","endLine":56,"endColumn":96,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/board/features/flow-board-visualeditor.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/board/flow-board.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-sizzle","severity":2,"message":"Positional selector extensions are not allowed","line":85,"column":13,"nodeType":"CallExpression","endLine":85,"endColumn":99,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":2,"message":"Positional selector extensions are not allowed","line":87,"column":22,"nodeType":"CallExpression","endLine":87,"endColumn":116,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":2,"message":"Positional selector extensions are not allowed","line":89,"column":12,"nodeType":"CallExpression","endLine":89,"endColumn":84,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":184,"column":52,"nodeType":"CallExpression","endLine":184,"endColumn":68,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/board/flow-boardhistory.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/common/flow-component-engines.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/common/flow-component-events.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'args' is already declared in the upper scope on line 285 column 4.","line":316,"column":40,"nodeType":"Identifier","messageId":"noShadow","endLine":316,"endColumn":44},{"ruleId":"no-shadow","severity":1,"message":"'args' is already declared in the upper scope on line 285 column 4.","line":336,"column":40,"nodeType":"Identifier","messageId":"noShadow","endLine":336,"endColumn":44},{"ruleId":"no-shadow","severity":1,"message":"'queryMap' is already declared in the upper scope on line 286 column 4.","line":337,"column":8,"nodeType":"Identifier","messageId":"noShadow","endLine":337,"endColumn":16},{"ruleId":"no-shadow","severity":1,"message":"'args' is already declared in the upper scope on line 336 column 40.","line":342,"column":10,"nodeType":"Identifier","messageId":"noShadow","endLine":342,"endColumn":14},{"ruleId":"no-shadow","severity":1,"message":"'args' is already declared in the upper scope on line 336 column 40.","line":351,"column":7,"nodeType":"Identifier","messageId":"noShadow","endLine":351,"endColumn":11}],"suppressedMessages":[{"ruleId":"no-jquery/no-each-util","severity":2,"message":"Prefer Array#forEach to $.each","line":167,"column":3,"nodeType":"CallExpression","endLine":177,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-each-util","severity":2,"message":"Prefer Array#forEach to $.each","line":191,"column":3,"nodeType":"CallExpression","endLine":207,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-each-util","severity":2,"message":"Prefer Array#forEach to $.each","line":194,"column":4,"nodeType":"CallExpression","endLine":206,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-each-util","severity":2,"message":"Prefer Array#forEach to $.each","line":753,"column":3,"nodeType":"CallExpression","endLine":755,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/*!\n * Contains the code which registers and handles event callbacks.\n * In addition, it contains some common callbacks (eg. apiRequest)\n * @todo Find better places for a lot of the callbacks that have been placed here\n */\n\n/**\n * @class FlowComponent\n * TODO: Use @-external in JSDoc\n */\n/**\n * @class FlowBoardComponent\n * TODO: Use @-external in JSDoc\n */\n\n( function () {\n\tvar _isGlobalBound;\n\n\t/**\n\t * This implements functionality for being able to capture the return value from a called event.\n\t * In addition, this handles Flow event triggering and binding.\n\t *\n\t * @class\n\t * @extends OO.EventEmitter\n\t * @constructor\n\t * @param {jQuery} $container Container\n\t */\n\tfunction FlowComponentEventsMixin( $container ) {\n\t\tvar self = this;\n\n\t\t/**\n\t\t * Stores event callbacks.\n\t\t */\n\t\tthis.UI = {\n\t\t\tevents: {\n\t\t\t\tglobalApiPreHandlers: {},\n\t\t\t\tapiPreHandlers: {},\n\t\t\t\tapiHandlers: {},\n\t\t\t\tinteractiveHandlers: {},\n\t\t\t\tloadHandlers: {}\n\t\t\t}\n\t\t};\n\n\t\t// Init EventEmitter\n\t\tOO.EventEmitter.call( this );\n\n\t\t// Bind events to this instance\n\t\tthis.bindComponentHandlers( FlowComponentEventsMixin.eventHandlers );\n\n\t\t// Bind element handlers\n\t\tthis.bindNodeHandlers( FlowComponentEventsMixin.UI.events );\n\n\t\t// Container handlers\n\t\t// @todo move some to FlowBoardComponent events, rename the others to FlowComponent\n\t\t$container\n\t\t\t.off( '.FlowBoardComponent' )\n\t\t\t.on(\n\t\t\t\t'click.FlowBoardComponent keypress.FlowBoardComponent',\n\t\t\t\t'a, input, button, .flow-click-interactive',\n\t\t\t\tthis.getDispatchCallback( 'interactiveHandler' )\n\t\t\t)\n\t\t\t.on(\n\t\t\t\t'focusin.FlowBoardComponent',\n\t\t\t\t'a, input, button, .flow-click-interactive',\n\t\t\t\tthis.getDispatchCallback( 'interactiveHandlerFocus' )\n\t\t\t)\n\t\t\t.on(\n\t\t\t\t'focusin.FlowBoardComponent',\n\t\t\t\t'input.mw-ui-input, textarea',\n\t\t\t\tthis.getDispatchCallback( 'focusField' )\n\t\t\t);\n\n\t\tif ( _isGlobalBound ) {\n\t\t\t// Don't bind window.scroll again.\n\t\t\treturn;\n\t\t}\n\t\t_isGlobalBound = true;\n\n\t\t// Handle scroll and resize events globally\n\t\t$( window )\n\t\t\t.on(\n\t\t\t\t// Normal scroll events on elements do not bubble. However, if they\n\t\t\t\t// are triggered, jQuery will do so. To avoid this affecting the\n\t\t\t\t// global scroll handler, trigger scroll events on elements only with\n\t\t\t\t// scroll.flow-something, where 'something' is not 'window-scroll'.\n\t\t\t\t'scroll.flow-window-scroll',\n\t\t\t\tmw.util.throttle( function ( evt ) {\n\t\t\t\t\tif ( evt.target !== window && evt.target !== document ) {\n\t\t\t\t\t\tthrow new Error( 'Target is \"' + evt.target.nodeName + '\", not window or document.' );\n\t\t\t\t\t}\n\n\t\t\t\t\tself.getDispatchCallback( 'windowScroll' ).apply( self, arguments );\n\t\t\t\t}, 50 )\n\t\t\t)\n\t\t\t.on(\n\t\t\t\t'resize.flow',\n\t\t\t\tmw.util.throttle( this.getDispatchCallback( 'windowResize' ), 50 )\n\t\t\t);\n\t}\n\tOO.mixinClass( FlowComponentEventsMixin, OO.EventEmitter );\n\n\tFlowComponentEventsMixin.eventHandlers = {};\n\tFlowComponentEventsMixin.UI = {\n\t\tevents: {\n\t\t\tinteractiveHandlers: {}\n\t\t}\n\t};\n\n\t//\n\t// Prototype methods\n\t//\n\n\t/**\n\t * Same as OO.EventEmitter.emit, except that it returns an array of results.\n\t * If something returns false, we stop processing the rest of the callbacks, if any.\n\t *\n\t * @param {string} event Name of the event to trigger\n\t * @param {...*} [args] Arguments to pass to event callback\n\t * @return {Array}\n\t */\n\tfunction emitWithReturn( event, args ) {\n\t\tvar i, len, binding, bindings, method, retVal,\n\t\t\treturns = [];\n\n\t\tif ( event in this.bindings ) {\n\t\t\t// Slicing ensures that we don't get tripped up by event handlers that add/remove bindings\n\t\t\tbindings = this.bindings[ event ].slice();\n\t\t\targs = Array.prototype.slice.call( arguments, 1 );\n\t\t\tfor ( i = 0, len = bindings.length; i < len; i++ ) {\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( typeof binding.method === 'string' ) {\n\t\t\t\t\t// Lookup method by name (late binding)\n\t\t\t\t\tmethod = binding.context[ binding.method ];\n\t\t\t\t} else {\n\t\t\t\t\tmethod = binding.method;\n\t\t\t\t}\n\n\t\t\t\t// Call function\n\t\t\t\tretVal = method.apply(\n\t\t\t\t\tbinding.context || this,\n\t\t\t\t\tbinding.args ? binding.args.concat( args ) : args\n\t\t\t\t);\n\n\t\t\t\t// Add this result to our list of return vals\n\t\t\t\treturns.push( retVal );\n\n\t\t\t\tif ( retVal === false ) {\n\t\t\t\t\t// Returned false; stop running callbacks\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn returns;\n\t\t}\n\t\treturn [];\n\t}\n\tFlowComponentEventsMixin.prototype.emitWithReturn = emitWithReturn;\n\n\t/**\n\t * @param {Object} handlers\n\t */\n\tfunction bindFlowComponentHandlers( handlers ) {\n\t\tvar self = this;\n\n\t\t// Bind class event handlers, triggered by .emit\n\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t$.each( handlers, function ( key, fn ) {\n\t\t\tself.on( key, function () {\n\t\t\t\t// Trigger callback with class instance context\n\t\t\t\ttry {\n\t\t\t\t\treturn fn.apply( self, arguments );\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tmw.flow.debug( 'Error in component handler:', key, e, arguments );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\tFlowComponentEventsMixin.prototype.bindComponentHandlers = bindFlowComponentHandlers;\n\n\t/**\n\t * handlers can have keys globalApiPreHandlers, apiPreHandlers, apiHandlers, interactiveHandlers, loadHandlers\n\t *\n\t * @param {Object} handlers\n\t */\n\tfunction bindFlowNodeHandlers( handlers ) {\n\t\tvar self = this;\n\n\t\t// eg. { interactiveHandlers: { foo: Function } }\n\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t$.each( handlers, function ( type, callbacks ) {\n\t\t\t// eg. { foo: Function }\n\t\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t\t$.each( callbacks, function ( name, fn ) {\n\t\t\t\t// First time for this callback name, instantiate the callback list\n\t\t\t\tif ( !self.UI.events[ type ][ name ] ) {\n\t\t\t\t\tself.UI.events[ type ][ name ] = [];\n\t\t\t\t}\n\t\t\t\tif ( Array.isArray( fn ) ) {\n\t\t\t\t\t// eg. UI.events.interactiveHandlers.foo concat [Function, Function];\n\t\t\t\t\tself.UI.events[ type ][ name ] = self.UI.events[ type ][ name ].concat( fn );\n\t\t\t\t} else {\n\t\t\t\t\t// eg. UI.events.interactiveHandlers.foo = [Function];\n\t\t\t\t\tself.UI.events[ type ][ name ].push( fn );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\tFlowComponentEventsMixin.prototype.bindNodeHandlers = bindFlowNodeHandlers;\n\n\t/**\n\t * Returns a callback function which passes off arguments to the emitter.\n\t * This only exists to clean up the FlowComponentEventsMixin constructor,\n\t * by preventing it from having too many anonymous functions.\n\t *\n\t * @param {string} name\n\t * @return {Function}\n\t * @private\n\t */\n\tfunction flowComponentGetDispatchCallback( name ) {\n\t\tvar context = this;\n\n\t\treturn function () {\n\t\t\tvar args = Array.prototype.slice.call( arguments, 0 );\n\n\t\t\t// Add event name as first arg of emit\n\t\t\targs.unshift( name );\n\n\t\t\treturn context.emitWithReturn.apply( context, args );\n\t\t};\n\t}\n\tFlowComponentEventsMixin.prototype.getDispatchCallback = flowComponentGetDispatchCallback;\n\n\t//\n\t// Static methods\n\t//\n\n\t/**\n\t * Utility to get error message for API result.\n\t *\n\t * @param {string} code\n\t * @param {Object} result\n\t * @return {string}\n\t */\n\tfunction flowGetApiErrorMessage( code, result ) {\n\t\tif ( result.error && result.error.info ) {\n\t\t\treturn result.error.info;\n\t\t} else {\n\t\t\tif ( code === 'http' ) {\n\t\t\t\t// XXX: some network errors have English info in result.exception and result.textStatus.\n\t\t\t\treturn mw.msg( 'flow-error-http' );\n\t\t\t} else {\n\t\t\t\treturn mw.msg( 'flow-error-external', code );\n\t\t\t}\n\t\t}\n\t}\n\tFlowComponentEventsMixin.static.getApiErrorMessage = flowGetApiErrorMessage;\n\n\t//\n\t// Interactive Handlers\n\t//\n\n\t/**\n\t * Triggers an API request based on URL and form data, and triggers the callbacks based on flow-api-handler.\n\t *\n\t * <a data-flow-interactive-handler=\"apiRequest\" data-flow-api-handler=\"loadMore\" data-flow-api-target=\"< .flow-component div\" href=\"...\">...</a>\n\t *\n\t * @param {Event} event\n\t * @return {jQuery.Promise}\n\t */\n\tfunction flowEventsMixinApiRequestInteractiveHandler( event ) {\n\t\tvar deferred = $.Deferred(),\n\t\t\tdeferreds = [ deferred ],\n\t\t\t$target,\n\t\t\tself = event.currentTarget || event.delegateTarget || event.target,\n\t\t\t$this = $( self ),\n\t\t\tflowComponent = mw.flow.getPrototypeMethod( 'component', 'getInstanceByElement' )( $this ),\n\t\t\tdataParams = $this.data(),\n\t\t\thandlerName = dataParams.flowApiHandler,\n\t\t\tinfo = {\n\t\t\t\t$target: null,\n\t\t\t\tstatus: null,\n\t\t\t\tcomponent: flowComponent\n\t\t\t},\n\t\t\targs = Array.prototype.slice.call( arguments, 0 ),\n\t\t\tqueryMap = flowComponent.Api.getQueryMap( self.href || self ),\n\t\t\tpreHandlers = [];\n\n\t\tevent.preventDefault();\n\n\t\t// Find the target node\n\t\tif ( dataParams.flowApiTarget ) {\n\t\t\t// This fn supports finding parents\n\t\t\t$target = $this.findWithParent( dataParams.flowApiTarget );\n\t\t}\n\t\tif ( !$target || !$target.length ) {\n\t\t\t// Assign a target node if none\n\t\t\t$target = $this;\n\t\t}\n\n\t\t// insert queryMap & info into args for prehandler\n\t\tinfo.$target = $target;\n\t\targs.splice( 1, 0, info );\n\t\targs.splice( 2, 0, queryMap );\n\n\t\tdeferred.resolve( args );\n\n\t\t// chain apiPreHandler callbacks\n\t\tpreHandlers = _getApiPreHandlers( self, handlerName );\n\t\tpreHandlers.forEach( function ( callback ) {\n\t\t\tdeferred = deferred.then( callback );\n\t\t} );\n\n\t\t// mark the element as \"in progress\" (we're only doing this after running\n\t\t// preHandlers since they may reject the API call)\n\t\tdeferred = deferred.then( function ( args ) {\n\t\t\t// Protect against repeated or nested API calls for the same handler\n\t\t\tvar inProgress = $target.data( 'inProgress' ) || [];\n\t\t\tif ( inProgress.indexOf( handlerName ) !== -1 ) {\n\t\t\t\treturn $.Deferred().reject( 'fail-api-inprogress', { error: { info: 'apiRequest already in progress' } } );\n\t\t\t}\n\t\t\tinProgress.push( handlerName );\n\t\t\t$target.data( 'inProgress', inProgress );\n\n\t\t\t// Mark the target node as \"in progress\" to disallow any further API calls until it finishes\n\t\t\t$target.addClass( 'flow-api-inprogress' );\n\t\t\t$this.addClass( 'flow-api-inprogress' );\n\n\t\t\t// Remove existing errors from previous attempts\n\t\t\tflowComponent.emitWithReturn( 'removeError', $this );\n\n\t\t\treturn args;\n\t\t} );\n\n\t\t// execute API call\n\t\tdeferred = deferred.then( function ( args ) {\n\t\t\tvar queryMap = args[ 2 ];\n\t\t\treturn flowComponent.Api.requestFromNode( self, queryMap ).then(\n\t\t\t\t// alter API response: apiHandler expects a 1st param info (that\n\t\t\t\t// includes 'status') & `this` being the target element\n\t\t\t\tfunction () {\n\t\t\t\t\tvar args = Array.prototype.slice.call( arguments, 0 );\n\t\t\t\t\tinfo.status = 'done';\n\t\t\t\t\targs.unshift( info );\n\t\t\t\t\treturn $.Deferred().resolveWith( self, args );\n\t\t\t\t},\n\t\t\t\t// failure: display the error message to end-user & turn the rejected\n\t\t\t\t// deferred back into resolve: apiHandlers may want to wrap up\n\t\t\t\tfunction ( code, result ) {\n\t\t\t\t\tvar errorMsg,\n\t\t\t\t\t\targs = Array.prototype.slice.call( arguments, 0 ),\n\t\t\t\t\t\t$form = $this.closest( 'form' );\n\n\t\t\t\t\tif ( code === 'http' && result.textStatus === 'abort' ) {\n\t\t\t\t\t\t// don't show error for aborted API requests & don't turn\n\t\t\t\t\t\t// into resolved: we don't want callbacks to run here!\n\t\t\t\t\t\treturn $.Deferred().rejectWith( self, args );\n\t\t\t\t\t}\n\n\t\t\t\t\tinfo.status = 'fail';\n\t\t\t\t\targs.unshift( info );\n\n\t\t\t\t\t/*\n\t\t\t\t\t * In the event of edit conflicts, store the previous\n\t\t\t\t\t * revision id so we can re-submit an edit against the\n\t\t\t\t\t * current id later.\n\t\t\t\t\t */\n\t\t\t\t\tif ( result.error && result.error.prev_revision ) {\n\t\t\t\t\t\t$form.data( 'flow-prev-revision', result.error.prev_revision.revision_id );\n\t\t\t\t\t}\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Generic error handling: displays error message in the\n\t\t\t\t\t * nearest error container.\n\t\t\t\t\t *\n\t\t\t\t\t * Errors returned by MW/Flow should always be in the\n\t\t\t\t\t * same format. If the request failed without a specific\n\t\t\t\t\t * error message, just fall back to some default error.\n\t\t\t\t\t */\n\t\t\t\t\terrorMsg = flowComponent.constructor.static.getApiErrorMessage( code, result );\n\t\t\t\t\tflowComponent.emitWithReturn( 'showError', $this, errorMsg );\n\n\t\t\t\t\tflowComponent.Api.abortOldRequestFromNode( self, queryMap, null );\n\n\t\t\t\t\t// keep going & process those apiHandlers; based on info.status,\n\t\t\t\t\t// they'll know if they're dealing with successful submissions,\n\t\t\t\t\t// or cleaning up after error\n\t\t\t\t\treturn $.Deferred().resolveWith( self, args );\n\t\t\t\t}\n\t\t\t);\n\t\t} );\n\n\t\t// chain apiHandler callbacks (it can distinguish in how it needs to wrap up\n\t\t// depending on info.status)\n\t\tif ( flowComponent.UI.events.apiHandlers[ handlerName ] ) {\n\t\t\tflowComponent.UI.events.apiHandlers[ handlerName ].forEach( function ( callback ) {\n\t\t\t\t/*\n\t\t\t\t * apiHandlers will return promises that won't resolve until\n\t\t\t\t * the apiHandler has completed all it needs to do.\n\t\t\t\t * These handlers aren't chainable, though (although we only\n\t\t\t\t * have 1 per call, AFAIK), they don't return the same data the\n\t\t\t\t * next handler assumes.\n\t\t\t\t * In order to suspend something until all of these apiHandlers\n\t\t\t\t * have completed, we'll combine them in an array which we can\n\t\t\t\t * keep tabs on until all of these promises are done ($.when)\n\t\t\t\t */\n\t\t\t\tdeferreds.push( deferred.then( callback ) );\n\t\t\t} );\n\t\t}\n\n\t\t// all-purpose error handling: whichever step in this chain rejects, we'll send it to console\n\t\tdeferred.fail( function ( code, result ) {\n\t\t\tvar errorMsg = flowComponent.constructor.static.getApiErrorMessage( code, result );\n\t\t\tflowComponent.debug( false, errorMsg, handlerName, args );\n\t\t} );\n\n\t\t// cleanup after successfully completing the request & handler(s)\n\t\treturn $.when.apply( $, deferreds ).done( function () {\n\t\t\tvar inProgress = $target.data( 'inProgress' ) || [];\n\t\t\tinProgress.splice( inProgress.indexOf( handlerName ), 1 );\n\t\t\t$target.data( 'inProgress', inProgress );\n\n\t\t\tif ( inProgress.length === 0 ) {\n\t\t\t\t$target.removeClass( 'flow-api-inprogress' );\n\t\t\t\t$this.removeClass( 'flow-api-inprogress' );\n\t\t\t}\n\t\t} );\n\t}\n\tFlowComponentEventsMixin.UI.events.interactiveHandlers.apiRequest = flowEventsMixinApiRequestInteractiveHandler;\n\n\t//\n\t// Event handler methods\n\t//\n\n\t/**\n\t * @param {FlowComponent|jQuery} $container or entire FlowComponent\n\t * @todo Perhaps use name=\"flow-load-handler\" for performance in older browsers\n\t */\n\tfunction flowMakeContentInteractiveCallback( $container ) {\n\t\tvar component, $content;\n\n\t\tif ( !$container.jquery ) {\n\t\t\t$container = $container.$container;\n\t\t}\n\n\t\tif ( !$container.length ) {\n\t\t\t// Prevent erroring out with an empty node set\n\t\t\treturn;\n\t\t}\n\n\t\t// Get the FlowComponent\n\t\tcomponent = mw.flow.getPrototypeMethod( 'component', 'getInstanceByElement' )( $container );\n\n\t\t// Find all load-handlers and trigger them\n\t\t$container.find( '.flow-load-interactive' ).add( $container.filter( '.flow-load-interactive' ) ).each( function () {\n\t\t\tvar $this = $( this ),\n\t\t\t\thandlerName = $this.data( 'flow-load-handler' );\n\n\t\t\tif ( $this.data( 'flow-load-handler-called' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$this.data( 'flow-load-handler-called', true );\n\n\t\t\t// If this has a special load handler, run it.\n\t\t\tcomponent.emitWithReturn( 'loadHandler', handlerName, $this );\n\t\t} );\n\n\t\t// Trigger for flow-actions-disabler\n\t\t// @todo move this into a flow-load-handler\n\t\t$container.find( 'input, textarea' ).trigger( 'keyup' );\n\n\t\t$content = $container.find( '.mw-parser-output' ).filter( function () {\n\t\t\t// Ignore content that has already been initialized, see flow-initialize.js\n\t\t\treturn !$( this ).data( 'flow-wikipage-content-fired' );\n\t\t} );\n\t\tif ( $content.length ) {\n\t\t\tmw.hook( 'wikipage.content' ).fire( $content );\n\t\t}\n\t}\n\tFlowComponentEventsMixin.eventHandlers.makeContentInteractive = flowMakeContentInteractiveCallback;\n\n\t// Triggers load handlers\n\tfunction flowLoadHandlerCallback( handlerName, args, context ) {\n\t\targs = Array.isArray( args ) ? args : ( args ? [ args ] : [] );\n\t\tcontext = context || this;\n\n\t\tif ( this.UI.events.loadHandlers[ handlerName ] ) {\n\t\t\tthis.UI.events.loadHandlers[ handlerName ].forEach( function ( fn ) {\n\t\t\t\tfn.apply( context, args );\n\t\t\t} );\n\t\t}\n\t}\n\tFlowComponentEventsMixin.eventHandlers.loadHandler = flowLoadHandlerCallback;\n\n\t/**\n\t * Executes interactive handlers.\n\t *\n\t * @param {Array} args\n\t * @param {jQuery} $context\n\t * @param {string} interactiveHandlerName\n\t * @param {string} apiHandlerName\n\t */\n\tfunction flowExecuteInteractiveHandler( args, $context, interactiveHandlerName, apiHandlerName ) {\n\t\tvar promises = [];\n\n\t\t// Call any matching interactive handlers\n\t\tif ( this.UI.events.interactiveHandlers[ interactiveHandlerName ] ) {\n\t\t\tthis.UI.events.interactiveHandlers[ interactiveHandlerName ].forEach( function ( fn ) {\n\t\t\t\tpromises.push( fn.apply( $context[ 0 ], args ) );\n\t\t\t} );\n\t\t} else if ( this.UI.events.apiHandlers[ apiHandlerName ] ) {\n\t\t\t// Call any matching API handlers\n\t\t\tthis.UI.events.interactiveHandlers.apiRequest.forEach( function ( fn ) {\n\t\t\t\tpromises.push( fn.apply( $context[ 0 ], args ) );\n\t\t\t} );\n\t\t} else if ( interactiveHandlerName ) {\n\t\t\tthis.debug( 'Failed to find interactiveHandler', interactiveHandlerName, arguments );\n\t\t} else if ( apiHandlerName ) {\n\t\t\tthis.debug( 'Failed to find apiHandler', apiHandlerName, arguments );\n\t\t}\n\n\t\t// Add aggregate deferred object as data attribute, so we can hook into\n\t\t// the element when the handlers have run\n\t\t$context.data( 'flow-interactive-handler-promise', $.when.apply( $, promises ) );\n\t}\n\n\t/**\n\t * Triggers both API and interactive handlers.\n\t * To manually trigger a handler on an element, you can use extraParameters via $el.trigger.\n\t *\n\t * @param {Event} event\n\t * @param {Object} [extraParameters]\n\t * @param {string} [extraParameters.interactiveHandler]\n\t * @param {string} [extraParameters.apiHandler]\n\t */\n\tfunction flowInteractiveHandlerCallback( event, extraParameters ) {\n\t\tvar args, $context, interactiveHandlerName, apiHandlerName;\n\n\t\t// Only trigger with enter key & no modifier keys, if keypress\n\t\tif ( event.type === 'keypress' && ( event.charCode !== 13 || event.metaKey || event.shiftKey || event.ctrlKey || event.altKey ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\targs = Array.prototype.slice.call( arguments, 0 );\n\t\t$context = $( event.currentTarget || event.delegateTarget || event.target );\n\t\t// Have either of these been forced via trigger extraParameters?\n\t\tinteractiveHandlerName = ( extraParameters || {} ).interactiveHandler || $context.data( 'flow-interactive-handler' );\n\t\tapiHandlerName = ( extraParameters || {} ).apiHandler || $context.data( 'flow-api-handler' );\n\n\t\tflowExecuteInteractiveHandler.call( this, args, $context, interactiveHandlerName, apiHandlerName );\n\t}\n\tFlowComponentEventsMixin.eventHandlers.interactiveHandler = flowInteractiveHandlerCallback;\n\tFlowComponentEventsMixin.eventHandlers.apiRequest = flowInteractiveHandlerCallback;\n\n\t/**\n\t * Triggers both API and interactive handlers, on focus.\n\t *\n\t * @param {Event} event\n\t */\n\tfunction flowInteractiveHandlerFocusCallback( event ) {\n\t\tvar args = Array.prototype.slice.call( arguments, 0 ),\n\t\t\t$context = $( event.currentTarget || event.delegateTarget || event.target ),\n\t\t\tinteractiveHandlerName = $context.data( 'flow-interactive-handler-focus' ),\n\t\t\tapiHandlerName = $context.data( 'flow-api-handler-focus' );\n\n\t\tflowExecuteInteractiveHandler.call( this, args, $context, interactiveHandlerName, apiHandlerName );\n\t}\n\tFlowComponentEventsMixin.eventHandlers.interactiveHandlerFocus = flowInteractiveHandlerFocusCallback;\n\n\t/**\n\t * When the whole class has been instantiated fully (after every constructor has been called).\n\t *\n\t * @param {FlowComponent} component\n\t */\n\tfunction flowEventsMixinInstantiationComplete() {\n\t\t$( window ).trigger( 'scroll.flow-window-scroll' );\n\t}\n\tFlowComponentEventsMixin.eventHandlers.instantiationComplete = flowEventsMixinInstantiationComplete;\n\n\t/**\n\t * Compress a flow form and/or its actions.\n\t *\n\t * @param {jQuery} $form\n\t * @todo Move this to a separate file\n\t */\n\tfunction flowEventsMixinHideForm( $form ) {\n\t\t// Hide its actions\n\t\t// @todo Use TemplateEngine to find and hide actions?\n\t\t$form.find( '.flow-form-collapsible' ).toggleClass( 'flow-form-collapsible-collapsed', true );\n\t}\n\tFlowComponentEventsMixin.eventHandlers.hideForm = flowEventsMixinHideForm;\n\n\t/**\n\t * Show form when input is focused.\n\t *\n\t * @param {Event} event\n\t * @todo Move this to a separate file\n\t */\n\tfunction flowEventsMixinFocusField( event ) {\n\t\tvar $context = $( event.currentTarget || event.delegateTarget || event.target ),\n\t\t\tcomponent = mw.flow.getPrototypeMethod( 'component', 'getInstanceByElement' )( $context );\n\n\t\t// Show the form\n\t\tcomponent.emitWithReturn( 'showForm', $context.closest( 'form' ) );\n\t}\n\tFlowComponentEventsMixin.eventHandlers.focusField = flowEventsMixinFocusField;\n\n\t/**\n\t * Expand a flow form and/or its actions.\n\t *\n\t * @param {jQuery} $form\n\t */\n\tfunction flowEventsMixinShowForm( $form ) {\n\t\t// Show its actions\n\t\t$form.find( '.flow-form-collapsible' ).toggleClass( 'flow-form-collapsible-collapsed', false );\n\t}\n\tFlowComponentEventsMixin.eventHandlers.showForm = flowEventsMixinShowForm;\n\n\t/**\n\t * Adds a flow-cancel-callback to a given form, to be triggered on click of the \"cancel\" button.\n\t *\n\t * @param {jQuery} $form\n\t * @param {Function} callback\n\t */\n\tfunction flowEventsMixinAddFormCancelCallback( $form, callback ) {\n\t\tvar fns = $form.data( 'flow-cancel-callback' ) || [];\n\t\tfns.push( callback );\n\t\t$form.data( 'flow-cancel-callback', fns );\n\t}\n\tFlowComponentEventsMixin.eventHandlers.addFormCancelCallback = flowEventsMixinAddFormCancelCallback;\n\n\t/**\n\t * @param {FlowBoardComponent|jQuery} $node or entire FlowBoard\n\t */\n\tfunction flowEventsMixinRemoveError( $node ) {\n\t\t_flowFindUpward( $node, '.flow-error-container' ).filter( ':first' ).empty();\n\t}\n\tFlowComponentEventsMixin.eventHandlers.removeError = flowEventsMixinRemoveError;\n\n\t/**\n\t * @param {FlowBoardComponent|jQuery} $node or entire FlowBoard\n\t * @param {string} msg The error that occurred. Currently hardcoded.\n\t */\n\tfunction flowEventsMixinShowError( $node, msg ) {\n\t\tvar fragment = mw.flow.TemplateEngine.processTemplate( 'flow_errors.partial', { errors: [ { message: msg } ] } );\n\n\t\tif ( !$node.jquery ) {\n\t\t\t$node = $node.$container;\n\t\t}\n\n\t\t_flowFindUpward( $node, '.flow-error-container' ).filter( ':first' ).replaceWith( fragment );\n\t}\n\tFlowComponentEventsMixin.eventHandlers.showError = flowEventsMixinShowError;\n\n\t/**\n\t * Shows a tooltip telling the user that they have subscribed\n\t * to this topic|board\n\t *\n\t * @param {jQuery} $tooltipTarget Element to attach tooltip to.\n\t * @param {string} type 'topic' or 'board'\n\t * @param {string} dir Direction to point the pointer. 'left', 'right', 'up' or 'down'\n\t */\n\tfunction flowEventsMixinShowSubscribedTooltip( $tooltipTarget, type, dir ) {\n\t\tdir = dir || 'left';\n\n\t\tmw.tooltip.show(\n\t\t\t$tooltipTarget,\n\t\t\t// tooltipTarget will not always be part of a FlowBoardComponent\n\t\t\t$(\n\t\t\t\tmw.flow.TemplateEngine.processTemplateGetFragment(\n\t\t\t\t\t'flow_tooltip_subscribed.partial',\n\t\t\t\t\t{\n\t\t\t\t\t\tunsubscribe: false,\n\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\tdirection: dir,\n\t\t\t\t\t\tuser: mw.user\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t).children(),\n\t\t\t{\n\t\t\t\ttooltipPointing: dir\n\t\t\t}\n\t\t);\n\n\t\t// Hide after 5s\n\t\tsetTimeout( function () {\n\t\t\tmw.tooltip.hide( $tooltipTarget );\n\t\t}, 5000 );\n\t}\n\tFlowComponentEventsMixin.eventHandlers.showSubscribedTooltip = flowEventsMixinShowSubscribedTooltip;\n\n\t/**\n\t * If a form has a cancelForm handler, we clear the form and trigger it. This allows easy cleanup\n\t * and triggering of form events after successful API calls.\n\t *\n\t * @param {HTMLElement|jQuery} formElement\n\t */\n\tfunction flowEventsMixinCancelForm( formElement ) {\n\t\tvar $form = $( formElement ),\n\t\t\t$button = $form.find( 'button, input, a' ).filter( '[data-flow-interactive-handler=\"cancelForm\"]' );\n\n\t\tif ( $button.length ) {\n\t\t\t// Clear contents to not trigger the \"are you sure you want to\n\t\t\t// discard your text\" warning\n\t\t\t$form.find( 'textarea, [type=text]' ).each( function () {\n\t\t\t\t$( this ).val( this.defaultValue );\n\t\t\t} );\n\n\t\t\t// Trigger a click on cancel to have it destroy the form the way it should\n\t\t\t$button.trigger( 'click' );\n\t\t}\n\t}\n\tFlowComponentEventsMixin.eventHandlers.cancelForm = flowEventsMixinCancelForm;\n\n\t//\n\t// Private functions\n\t//\n\n\t/**\n\t * Given node & a selector, this will return the result closest to $node\n\t * by first looking inside $node, then travelling up the DOM tree to\n\t * locate the first result in a common ancestor.\n\t *\n\t * @param {jQuery} $node\n\t * @param {string} selector\n\t * @return {jQuery}\n\t */\n\tfunction _flowFindUpward( $node, selector ) {\n\t\t// first check if result can already be found inside $node\n\t\tvar $result = $node.find( selector );\n\n\t\t// then keep looking up the tree until a result is found\n\t\twhile ( $result.length === 0 && $node.length !== 0 ) {\n\t\t\t$node = $node.parent();\n\t\t\t$result = $node.children( selector );\n\t\t}\n\n\t\treturn $result;\n\t}\n\n\t/**\n\t * @param {HTMLElement} target\n\t * @param {string} handlerName\n\t * @return {Function[]}\n\t * @private\n\t */\n\tfunction _getApiPreHandlers( target, handlerName ) {\n\t\tvar flowComponent = mw.flow.getPrototypeMethod( 'component', 'getInstanceByElement' )( $( target ) ),\n\t\t\tpreHandlers = [];\n\n\t\t// Compile a list of all preHandlers to be run\n\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t$.each( flowComponent.UI.events.globalApiPreHandlers, function ( key, callbackArray ) {\n\t\t\tArray.prototype.push.apply( preHandlers, callbackArray );\n\t\t} );\n\t\tif ( flowComponent.UI.events.apiPreHandlers[ handlerName ] ) {\n\t\t\tArray.prototype.push.apply( preHandlers, flowComponent.UI.events.apiPreHandlers[ handlerName ] );\n\t\t}\n\n\t\tpreHandlers = preHandlers.map( function ( callback ) {\n\t\t\t/*\n\t\t\t * apiPreHandlers aren't properly set up to serve as chained promise\n\t\t\t * callbacks (they'll return false instead of returning a rejected\n\t\t\t * promise, the incoming & outgoing params don't line up)\n\t\t\t * This will wrap all those callbacks into callbacks we can chain.\n\t\t\t */\n\t\t\treturn function ( args ) {\n\t\t\t\tvar queryMap = callback.apply( target, args );\n\t\t\t\tif ( queryMap === false ) {\n\t\t\t\t\treturn $.Deferred().reject( 'fail-prehandler', { error: { info: 'apiPreHandler returned false' } } );\n\t\t\t\t}\n\n\t\t\t\tif ( $.isPlainObject( queryMap ) ) {\n\t\t\t\t\targs[ 2 ] = queryMap;\n\t\t\t\t}\n\n\t\t\t\treturn args;\n\t\t\t};\n\t\t} );\n\n\t\treturn preHandlers;\n\t}\n\n\t// Copy static and prototype from mixin to main class\n\tmw.flow.mixinComponent( 'component', FlowComponentEventsMixin );\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/common/flow-component-menus.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-class-state","severity":2,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":55,"column":5,"nodeType":"CallExpression","endLine":55,"endColumn":33,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-class-state","severity":2,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":59,"column":10,"nodeType":"CallExpression","endLine":59,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-class-state","severity":2,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":136,"column":8,"nodeType":"CallExpression","endLine":136,"endColumn":33,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/flow-component.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'timestamp' is already declared in the upper scope on line 95 column 7.","line":96,"column":43,"nodeType":"Identifier","messageId":"noShadow","endLine":96,"endColumn":52}],"suppressedMessages":[{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":74,"column":20,"nodeType":"MemberExpression","messageId":"unexpected","endLine":74,"endColumn":33,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":76,"column":5,"nodeType":"MemberExpression","messageId":"unexpected","endLine":76,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":80,"column":4,"nodeType":"MemberExpression","messageId":"unexpected","endLine":80,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/*!\n * Contains base FlowComponent class.\n */\n\n( function () {\n\tvar _totalInstanceCount = 0;\n\n\t/**\n\t * Inherited base class. Stores the instance in the class's instance registry.\n\t *\n\t * @class FlowComponent\n\t * @param {jQuery} $container\n\t * @mixins FlowComponentEventsMixin\n\t * @mixins FlowComponentEnginesMixin\n\t * @mixins FlowComponentMenusFeatureMixin\n\t * @constructor\n\t */\n\tfunction FlowComponent( $container ) {\n\t\tvar parent = this.constructor.super;\n\n\t\t// Run progressive enhancements if any are needed by this container\n\t\tmw.flow.TemplateEngine.processProgressiveEnhancement( $container );\n\n\t\t// Store the container for later use\n\t\tthis.$container = $container;\n\n\t\t// Get this component's ID\n\t\tthis.id = $container.data( 'flow-id' );\n\t\tif ( !this.id ) {\n\t\t\t// Generate an ID for this component\n\t\t\tthis.id = 'flow-generated-' + _totalInstanceCount;\n\t\t\t$container.data( 'flow-id', this.id );\n\t\t\t// @todo throw an exception here instead of generating an id?\n\t\t} else if ( this.getInstanceByElement( $container ) ) {\n\t\t\t// Check if this board was already instantiated, and return that instead\n\t\t\treturn this.getInstanceByElement( $container );\n\t\t}\n\n\t\t// Give this board its own API instance @todo do this with OOjs\n\t\tthis.Api = new mw.flow.FlowApi( this.id );\n\n\t\t// Keep this in the registry to find it by other means\n\t\twhile ( parent ) {\n\t\t\tparent._instanceRegistryById[ this.id ] = parent._instanceRegistry.push( this ) - 1;\n\t\t\tparent = parent.super; // and add it to every instance registry\n\t\t}\n\t\t_totalInstanceCount++;\n\t}\n\tOO.initClass( FlowComponent );\n\n\t//\n\t// PROTOTYPE METHODS\n\t//\n\n\t/**\n\t * Takes any length of arguments, and passes it off to console.log.\n\t *\n\t * @param {boolean} [isError=true]\n\t */\n\tmw.flow.debug = FlowComponent.prototype.debug = function ( isError ) {\n\t\tvar args;\n\t\t/* eslint-disable no-console */\n\t\tif ( window.console ) {\n\t\t\targs = Array.prototype.slice.call( arguments, 0 );\n\n\t\t\tif ( typeof isError === 'boolean' ) {\n\t\t\t\targs.shift();\n\t\t\t} else {\n\t\t\t\tisError = true;\n\t\t\t}\n\n\t\t\targs.unshift( '[FLOW] ' );\n\n\t\t\tif ( isError && console.error ) {\n\t\t\t\t// If console.error is supported, send that, because it gives a stack trace\n\t\t\t\tconsole.error.apply( console, args );\n\t\t\t}\n\n\t\t\t// Otherwise, use console.log\n\t\t\tconsole.log.apply( console, args );\n\t\t}\n\t\t/* eslint-enable no-console */\n\t};\n\n\t/**\n\t * Converts a Flow UUID to a UNIX timestamp.\n\t *\n\t * Example: sfhzxr5a00jkf405 -> 1429101316919\n\t *\n\t * @param {string} uuid\n\t * @return {number} UNIX time\n\t */\n\tmw.flow.uuidToTime = FlowComponent.prototype.uuidToTime = function ( uuid ) {\n\n\t\tvar timestamp,\n\t\t\t_expandScientificNotation = function ( timestamp ) {\n\t\t\t\tvar parts, first, zeroes;\n\n\t\t\t\tif ( timestamp.indexOf( 'e' ) !== -1 ) {\n\t\t\t\t\tparts = timestamp.split( '(e+' );\n\t\t\t\t\tfirst = parts[ 0 ].replace( '.', '' );\n\t\t\t\t\tzeroes = parseInt( parts[ 1 ], 10 ) - ( first.length - 1 );\n\t\t\t\t\tfirst += Array( zeroes + 1 ).join( '0' );\n\n\t\t\t\t\treturn first;\n\t\t\t\t}\n\n\t\t\t\treturn timestamp;\n\t\t\t};\n\n\t\ttimestamp = parseInt( uuid, 36 ).toString( 2 ); // Parse from base-36, then serialize to base-2\n\n\t\t// IE's toString converts large numbers to scientific notation ( 1.1001110011(e+23) )\n\t\ttimestamp = _expandScientificNotation( timestamp );\n\n\t\ttimestamp = Array( 88 + 1 - timestamp.length ).join( '0' ) + timestamp; // left pad 0 to 88 chars\n\t\ttimestamp = parseInt( timestamp.slice( 0, 46 ), 2 ); // first 46 chars base-2 to base-10\n\n\t\treturn timestamp;\n\t};\n\n\t/**\n\t * Returns all the registered instances of a given FlowComponent.\n\t *\n\t * @return {FlowComponent[]}\n\t */\n\tFlowComponent.prototype.getInstances = function () {\n\t\t// Use the correct context (instance vs prototype)\n\t\treturn ( this.constructor.super || this )._instanceRegistry;\n\t};\n\n\t/**\n\t * Goes up the DOM tree to find which FlowComponent $el belongs to, via .flow-component[flow-id].\n\t *\n\t * @param {jQuery} $el\n\t * @return {FlowComponent|boolean}\n\t */\n\tFlowComponent.prototype.getInstanceByElement = function ( $el ) {\n\t\tvar $container = $el.closest( '.flow-component' ),\n\t\t\tcontext = this.constructor.super || this, // Use the correct context (instance vs prototype)\n\t\t\tid;\n\n\t\t// This element isn't _within_ any actual component; was it spawned _by_ a component?\n\t\tif ( !$container.length ) {\n\t\t\t// Find any parents of this element with the flowSpawnedBy data attribute\n\t\t\t$container = $el.parents().addBack().filter( function () {\n\t\t\t\treturn $( this ).data( 'flowSpawnedBy' );\n\t\t\t} ).last()\n\t\t\t\t// Get the flowSpawnedBy node\n\t\t\t\t.data( 'flowSpawnedBy' );\n\t\t\t// and then return the closest flow-component of it\n\t\t\t$container = $container ? $container.closest( '.flow-component' ) : $();\n\t\t}\n\n\t\t// Still no parent component. Crap out!\n\t\tif ( !$container.length ) {\n\t\t\tmw.flow.debug( 'Failed to getInstanceByElement: no $container.length', arguments );\n\t\t\treturn false;\n\t\t}\n\n\t\tid = $container.data( 'flow-id' );\n\n\t\treturn context._instanceRegistry[ context._instanceRegistryById[ id ] ] || false;\n\t};\n\n\t/**\n\t * Sets the FlowComponent's $container element as the data-flow-spawned-by attribute on $el.\n\t * Fires ALL events from within $el onto $eventTarget, albeit with the whole event intact.\n\t * This allows us to listen for events from outside of FlowComponent's nodes, but still trigger them within.\n\t *\n\t * @param {jQuery} $el\n\t * @param {jQuery} [$eventTarget]\n\t */\n\tFlowComponent.prototype.assignSpawnedNode = function ( $el, $eventTarget ) {\n\t\t// Target defaults to .flow-component\n\t\t$eventTarget = $eventTarget || this.$container;\n\n\t\t// Assign flowSpawnedBy data attribute\n\t\t$el.data( 'flowSpawnedBy', $eventTarget );\n\n\t\t// Forward all events (except mouse movement) to $eventTarget\n\t\t$el.on(\n\t\t\t'blur change click dblclick error focus focusin focusout keydown keypress keyup load mousedown mouseenter mouseleave mouseup resize scroll select submit',\n\t\t\t'*',\n\t\t\t{ flowSpawnedBy: this.$container, flowSpawnedFrom: $el },\n\t\t\tfunction ( event ) {\n\t\t\t\tvar i, $nodes;\n\t\t\t\t// Let's forward these events in an unusual way, similar to how jQuery propagates events...\n\t\t\t\t// First, only take the very first, top-level event, as the rest of the propagation is handled elsewhere\n\t\t\t\tif ( event.target === this ) {\n\t\t\t\t\t// Get all the parent nodes of our target,\n\t\t\t\t\t// but do not include any nodes we will already be bubbling up to (eg. body)\n\t\t\t\t\t$nodes = $eventTarget.parents().addBack().not( $( this ).parents().addBack() );\n\t\t\t\t\ti = $nodes.length;\n\n\t\t\t\t\t// For every node between $eventTarget and window that was not filtered out above...\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t// Trigger a bubbling event on each one, with the correct context\n\t\t\t\t\t\t_eventForwardDispatch.call( $nodes[ i ], event, $el[ 0 ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t};\n\n\t//\n\t// PRIVATE FUNCTIONS\n\t//\n\n\t/**\n\t * This method is mostly cloned from jQuery.event.dispatch, except that it has been modified to use container\n\t * as its base for finding event handlers (via jQuery.event.handlers). This allows us to trigger events on said\n\t * container (and its parents, bubbling up), as if the event originated from within it.\n\t * jQuery itself doesn't allow for this, as the context (this & event.currentTarget) become the actual element you\n\t * are triggering an event on, instead of the element which matched the selector.\n\t *\n\t * _eventForwardDispatch.call( Element, Event, Element );\n\t *\n\t * @param {jQuery.Event} event\n\t * @param {HTMLElement} container\n\t * @return {*}\n\t * @private\n\t */\n\tfunction _eventForwardDispatch( event, container ) {\n\t\tvar i, ret, handleObj, matched, j,\n\t\t\targs, handlers, special,\n\t\t\thandlerQueue = [];\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = $.event.fix( event );\n\t\targs = Array.prototype.slice.call( arguments, 0 );\n\t\thandlers = ( $._data( this, 'events' ) || {} )[ event.type ] || [];\n\t\tspecial = $.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\t// The important modification: we use container instead of this as the context\n\t\thandlerQueue = $.event.handlers.call( container, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) && !event.isImmediatePropagationStopped() ) {\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( $.event.special[ handleObj.origType ] || {} ).handle || handleObj.handler )\n\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t}\n\n\tmw.flow.registerComponent( 'component', FlowComponent );\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/components/flow-registry.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'i' is already declared in the upper scope on line 31 column 10.","line":42,"column":5,"nodeType":"Identifier","messageId":"noShadow","endLine":42,"endColumn":6}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/*!\n * Creates and manages the component registry.\n * We expand upon OOjs in several ways here:\n * 1. Allow mixinClasses to have their constructor functions to be called (at initComponent).\n * 2. Automatically call all parent constructors from inheritClasses (at initComponent).\n * 3. Create a global instance registry of components on a page, and also create a registry for each component type.\n * 4. Have the ability to fetch individual prototype methods from classes in the registry, as they are out of scope.\n */\n\n/**\n * @class FlowComponent\n * TODO: Use @-external in JSDoc\n */\n\n( function () {\n\tvar _componentRegistry = new OO.Registry();\n\n\t/** @class mw.flow */\n\tmw.flow = mw.flow || {}; // create mw.flow globally\n\n\t/**\n\t * Instantiate one or more new FlowComponents.\n\t * Uses data-flow-component to find the right class, and returns that new instance.\n\t * Accepts one or more container elements in $container. If multiple, returns an array of FlowBoardComponents.\n\t *\n\t * @param {jQuery} $container\n\t * @return {FlowComponent|boolean|Array} The created FlowComponent instance, or an\n\t * array of FlowComponent instances, or boolean false in case of an error.\n\t */\n\tfunction initFlowComponent( $container ) {\n\t\tvar a, i, componentName, componentBase;\n\n\t\t/**\n\t\t * @private\n\t\t * Deep magic: This crazy little function becomes the \"real\" top-level constructor\n\t\t * It recursively calls every parent so that we don't have to do it manually in a Component constructor\n\t\t * @return {FlowComponent}\n\t\t */\n\t\tfunction _RecursiveConstructor() {\n\t\t\tvar constructors = [],\n\t\t\t\tparent = this.constructor.super,\n\t\t\t\ti, j, parentReturn;\n\n\t\t\t// Find each parent class\n\t\t\twhile ( parent ) {\n\t\t\t\tconstructors.push( parent );\n\t\t\t\tparent = parent.super;\n\t\t\t}\n\n\t\t\t// Call each parent in reverse (starting with the base class and moving up the chain)\n\t\t\tfor ( i = constructors.length; i--; ) {\n\t\t\t\t// Call each mixin constructor\n\t\t\t\tfor ( j = 0; j < constructors[ i ].static.mixinConstructors.length; j++ ) {\n\t\t\t\t\tconstructors[ i ].static.mixinConstructors[ j ].apply( this, arguments );\n\t\t\t\t}\n\n\t\t\t\t// Call this class constructor\n\t\t\t\tparentReturn = constructors[ i ].apply( this, arguments );\n\n\t\t\t\tif ( parentReturn && parentReturn.constructor ) {\n\t\t\t\t\t// If the parent returned an instantiated class (cached), return that instead\n\t\t\t\t\treturn parentReturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Run any post-instantiation handlers\n\t\t\tthis.emitWithReturn( 'instantiationComplete', this );\n\t\t}\n\n\t\tif ( !$container || !$container.length ) {\n\t\t\t// No containers found\n\t\t\tmw.flow.debug( 'Will not instantiate: no $container.length', arguments );\n\t\t\treturn false;\n\t\t} else if ( $container.length > 1 ) {\n\t\t\t// Too many elements; instantiate them all\n\t\t\tfor ( a = [], i = $container.length; i--; ) {\n\t\t\t\ta.push( initFlowComponent( $( $container[ i ] ) ) );\n\t\t\t}\n\t\t\treturn a;\n\t\t}\n\n\t\t// Find out which component this is\n\t\tcomponentName = $container.data( 'flow-component' );\n\t\t// Get that component\n\t\tcomponentBase = _componentRegistry.lookup( componentName );\n\t\tif ( componentBase ) {\n\t\t\t// Return the new instance of that FlowComponent, via our _RecursiveConstructor method\n\t\t\tOO.inheritClass( _RecursiveConstructor, componentBase );\n\t\t\treturn new _RecursiveConstructor( $container );\n\t\t}\n\n\t\t// Don't know what kind of component this is.\n\t\tmw.flow.debug( 'Unknown FlowComponent: ', componentName, arguments );\n\t\treturn false;\n\t}\n\tmw.flow.initComponent = initFlowComponent;\n\n\t/**\n\t * Registers a given FlowComponent into the component registry, and also has it inherit another class using the\n\t * prototypeName argument (defaults to 'component', which returns FlowComponent).\n\t *\n\t * @param {string} name Name of component to register\n\t * @param {Function} constructorClass Actual class to link to that name\n\t * @param {string} [prototypeName='component'] A base class which this one will inherit\n\t */\n\tfunction registerFlowComponent( name, constructorClass, prototypeName ) {\n\t\tif ( name !== 'component' ) {\n\t\t\t// Inherit a base class; defaults to FlowComponent\n\t\t\tOO.inheritClass( constructorClass, _componentRegistry.lookup( prototypeName || 'component' ) );\n\t\t}\n\n\t\t// Create the instance registry for this component\n\t\tconstructorClass._instanceRegistry = [];\n\t\tconstructorClass._instanceRegistryById = {};\n\n\t\t// Assign the OOjs static name to this class\n\t\tconstructorClass.static.name = name;\n\n\t\t// Allow mixins to use their constructor\n\t\tconstructorClass.static.mixinConstructors = [];\n\n\t\t// Register the component class\n\t\t_componentRegistry.register( name, constructorClass );\n\t}\n\tmw.flow.registerComponent = registerFlowComponent;\n\n\t/**\n\t * For when you want to call a specific function from a class's prototype.\n\t *\n\t * mw.flow.getPrototypeMethod( 'board', 'getInstanceByElement' )( $el );\n\t *\n\t * @param {string} className\n\t * @param {string} methodName\n\t * @param {*} [context]\n\t * @return {Function}\n\t */\n\tfunction getFlowPrototypeMethod( className, methodName, context ) {\n\t\tvar registeredClass = _componentRegistry.lookup( className ),\n\t\t\tmethod;\n\n\t\tif ( !registeredClass ) {\n\t\t\tmw.flow.debug( 'Failed to find FlowComponent.', arguments );\n\t\t\treturn function () {};\n\t\t}\n\n\t\tmethod = registeredClass.prototype[ methodName ];\n\t\tif ( !method ) {\n\t\t\tmw.flow.debug( 'Failed to find FlowComponent method.', arguments );\n\t\t\treturn function () {};\n\t\t}\n\n\t\treturn method.bind( context || registeredClass );\n\t}\n\tmw.flow.getPrototypeMethod = getFlowPrototypeMethod;\n\n\t/**\n\t * Mixes in the given mixinClass to be copied to an existing class, by name.\n\t *\n\t * @param {string} targetName Target component\n\t * @param {Function} mixinClass Class with extension to add to target\n\t */\n\tfunction mixinFlowComponent( targetName, mixinClass ) {\n\t\tvar registeredClass = _componentRegistry.lookup( targetName );\n\n\t\tif ( !registeredClass ) {\n\t\t\tmw.flow.debug( 'Failed to find FlowComponent to extend.', arguments );\n\t\t\treturn;\n\t\t}\n\n\t\tOO.mixinClass( registeredClass, mixinClass );\n\n\t\t// Allow mixins to use their constructors (in init)\n\t\tif ( typeof mixinClass === 'function' ) {\n\t\t\tregisteredClass.static.mixinConstructors.push( mixinClass );\n\t\t}\n\t}\n\tmw.flow.mixinComponent = mixinFlowComponent;\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/misc/flow-api.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/misc/flow-handlebars.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'target' is already declared in the upper scope on line 113 column 70.","line":117,"column":5,"nodeType":"Identifier","messageId":"noShadow","endLine":117,"endColumn":11}],"suppressedMessages":[{"ruleId":"mediawiki/msg-doc","severity":2,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":204,"column":10,"nodeType":"CallExpression","endLine":204,"endColumn":27,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/msg-doc","severity":2,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":218,"column":4,"nodeType":"CallExpression","endLine":218,"endColumn":21,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-useless-concat","severity":2,"message":"Unexpected string concatenation of literals.","line":453,"column":11,"nodeType":"BinaryExpression","messageId":"unexpectedConcat","endLine":453,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-useless-concat","severity":2,"message":"Unexpected string concatenation of literals.","line":461,"column":12,"nodeType":"BinaryExpression","messageId":"unexpectedConcat","endLine":461,"endColumn":13,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-each-util","severity":2,"message":"Prefer Array#forEach to $.each","line":592,"column":2,"nodeType":"CallExpression","endLine":604,"endColumn":5,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-each-util","severity":2,"message":"Prefer Array#forEach to $.each","line":594,"column":3,"nodeType":"CallExpression","endLine":603,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/*!\n * Implements a Handlebars layer for FlowBoard.TemplateEngine\n */\n\n( function () {\n\tvar _tplcache = {},\n\t\t_timestamp = {\n\t\t\tlist: [],\n\t\t\tcurrentIndex: 0\n\t\t};\n\n\tmw.flow = mw.flow || {}; // create mw.flow globally\n\n\t/**\n\t * Instantiates a FlowHandlebars instance for TemplateEngine.\n\t *\n\t * @class FlowHandlebars\n\t * @constructor\n\t */\n\tfunction FlowHandlebars() {\n\t}\n\n\tmw.flow.FlowHandlebars = FlowHandlebars;\n\n\t/**\n\t * Returns a given template function. If template is missing, the template function is noop with mw.flow.debug.\n\t *\n\t * @param {string|Function} templateName\n\t * @return {Function}\n\t */\n\tFlowHandlebars.prototype.getTemplate = function ( templateName ) {\n\t\t// If a template is already being passed, use it\n\t\tif ( typeof templateName === 'function' ) {\n\t\t\treturn templateName;\n\t\t}\n\n\t\tif ( _tplcache[ templateName ] ) {\n\t\t\t// Return cached compiled template\n\t\t\treturn _tplcache[ templateName ];\n\t\t}\n\n\t\t_tplcache[ templateName ] = mw.template.get( 'ext.flow.templating', 'handlebars/' + templateName + '.handlebars' );\n\t\tif ( _tplcache[ templateName ] ) {\n\t\t\t// Try to get this template\n\t\t\t_tplcache[ templateName ] = _tplcache[ templateName ].render;\n\t\t}\n\n\t\treturn _tplcache[ templateName ] || function () {\n\t\t\tmw.flow.debug( '[Handlebars] Missing template', arguments );\n\t\t};\n\t};\n\n\t/**\n\t * Processes a given template and returns the HTML generated by it.\n\t *\n\t * @param {string} templateName\n\t * @param {*} [args]\n\t * @return {string}\n\t */\n\tFlowHandlebars.prototype.processTemplate = function ( templateName, args ) {\n\t\treturn FlowHandlebars.prototype.getTemplate( templateName )( args );\n\t};\n\n\t/**\n\t * Runs processTemplate inside, but returns a DocumentFragment instead of an HTML string.\n\t * This should be used for runtime parsing of a template, as it triggers processProgressiveEnhancement on the\n\t * fragment, which allows progressiveEnhancement blocks to be instantiated.\n\t *\n\t * @param {string} templateName\n\t * @param {*} [args]\n\t * @return {DocumentFragment}\n\t */\n\tFlowHandlebars.prototype.processTemplateGetFragment = function ( templateName, args ) {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = document.createElement( 'div' );\n\n\t\tdiv.innerHTML = FlowHandlebars.prototype.processTemplate( templateName, args );\n\n\t\tFlowHandlebars.prototype.processProgressiveEnhancement( div );\n\n\t\twhile ( div.firstChild ) {\n\t\t\tfragment.appendChild( div.firstChild );\n\t\t}\n\n\t\tdiv = null;\n\n\t\treturn fragment;\n\t};\n\n\t/**\n\t * A method to call helper functions from outside templates. This removes Handlebars.SafeString wrappers.\n\t *\n\t * @param {string} helperName\n\t * @param {...Mixed} [args]\n\t * @return {Mixed}\n\t */\n\tFlowHandlebars.prototype.callHelper = function ( helperName ) {\n\t\tvar result = this[ helperName ].apply( this, Array.prototype.slice.call( arguments, 1 ) );\n\t\tif ( result && result.string ) {\n\t\t\treturn result.string;\n\t\t}\n\t\treturn result;\n\t};\n\n\t/**\n\t * Finds scripts of x-handlebars-template-progressive-enhancement type, compiles its innerHTML as a Handlebars\n\t * template, and then replaces the whole script tag with it. This is used to \"progressively enhance\" a page with\n\t * elements that are only necessary with JavaScript. On a non-JS page, these elements are never rendered at all.\n\t *\n\t * @param {HTMLElement|jQuery} target\n\t * @todo Lacks args, lacks functionality, full support. (see also FlowHandlebars#progressiveEnhancement)\n\t */\n\tFlowHandlebars.prototype.processProgressiveEnhancement = function ( target ) {\n\t\t$( target ).find( 'script' ).addBack( 'script' ).filter( '[type=\"text/x-handlebars-template-progressive-enhancement\"]' ).each( function () {\n\t\t\tvar $this = $( this ),\n\t\t\t\tdata = $this.data(),\n\t\t\t\ttarget = data.target && data.target.trim(),\n\t\t\t\t$target = $this,\n\t\t\t\tcontent, $prevTarg, $nextTarg;\n\n\t\t\t// Find new target, if not the script tag itself\n\t\t\tif ( target ) {\n\t\t\t\t$target = $this.findWithParent( target );\n\n\t\t\t\tif ( !$target.length ) {\n\t\t\t\t\tmw.flow.debug( '[processProgressiveEnhancement] Failed to find target', target, arguments );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Replace the nested flowprogressivescript tag with a real script tag for recursive progressiveEnhancement\n\t\t\tcontent = this.innerHTML.replace( /<\\/flowprogressivescript>/g, '</script>' );\n\n\t\t\t// Inject the content\n\t\t\tswitch ( data.type ) {\n\t\t\t\tcase 'content':\n\t\t\t\t\t// Insert\n\t\t\t\t\t$target.empty().append( content );\n\t\t\t\t\t// Get all new nodes\n\t\t\t\t\t$target = $target.children();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'insert':\n\t\t\t\t\t// Store sibling before adding new content\n\t\t\t\t\t$prevTarg = $target.prev();\n\t\t\t\t\t// Insert\n\t\t\t\t\t$target.before( content );\n\t\t\t\t\t// Get all new nodes\n\t\t\t\t\t$target = $target.prevUntil( $prevTarg );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'replace':\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault:\n\t\t\t\t\t// Store siblings before adding new content\n\t\t\t\t\t$prevTarg = $target.prev();\n\t\t\t\t\t$nextTarg = $target.next();\n\t\t\t\t\t// Insert\n\t\t\t\t\t$target.replaceWith( content );\n\t\t\t\t\t// Get all new nodes\n\t\t\t\t\t$target = $prevTarg.nextUntil( $nextTarg );\n\t\t\t}\n\n\t\t\t// $target now contains all the new elements inserted; let's recursively do progressiveEnhancement if needed\n\t\t\tFlowHandlebars.prototype.processProgressiveEnhancement( $target );\n\n\t\t\t// Remove script tag\n\t\t\t$this.remove();\n\t\t} );\n\t};\n\n\t/**\n\t * Parameters could be Message::rawParam (in PHP) object, which will\n\t * translate into a { raw: \"string\" } object in JS.\n\t *\n\t * TODO: this does not exactly match the behavior in PHP yet (no parse,\n\t * no escape), but at least it won't print an [Object object] param.\n\t *\n\t * @param {Array} parameters\n\t * @return {Array}\n\t */\n\tfunction flowNormalizeL10nParameters( parameters ) {\n\t\treturn parameters.map( function ( arg ) {\n\t\t\treturn arg ? ( arg.raw || arg.plaintext || arg ) : '';\n\t\t} );\n\t}\n\n\t/**\n\t * Calls flowMessages to get localized message strings.\n\t *\n\t * Example: `{{l10n \"reply_count\" 12}}`\n\t *\n\t * @todo use mw.message\n\t * @param {string} str\n\t * @param {...*} [args]\n\t * @param {Object} [options]\n\t * @return {string}\n\t */\n\tFlowHandlebars.prototype.l10n = function ( str /* , args..., options */ ) {\n\t\t// chop off str and options leaving just args\n\t\tvar args = flowNormalizeL10nParameters( Array.prototype.slice.call( arguments, 1, -1 ) );\n\n\t\t// eslint-disable-next-line mediawiki/msg-doc\n\t\treturn mw.message( str ).params( args ).text();\n\t};\n\n\t/**\n\t * HTML-safe version of l10n.\n\t *\n\t * @param {string} str\n\t * @return {string|Handlebars.SafeString}\n\t */\n\tFlowHandlebars.prototype.l10nParse = function ( str /* , args..., options */ ) {\n\t\tvar args = flowNormalizeL10nParameters( Array.prototype.slice.call( arguments, 1, -1 ) );\n\n\t\treturn FlowHandlebars.prototype.html(\n\t\t\t// eslint-disable-next-line mediawiki/msg-doc\n\t\t\tmw.message( str ).params( args ).parse()\n\t\t);\n\t};\n\n\t/**\n\t * @param {string} key\n\t * @return {string|Handlebars.SafeString}\n\t */\n\tFlowHandlebars.prototype.l10nParseFlowTermsOfUse = function ( key ) {\n\t\tvar flowTermsOfUse = require( './flowTermsOfUse.json' );\n\t\treturn FlowHandlebars.prototype.html( flowTermsOfUse[ key ] );\n\t};\n\n\t/**\n\t * Parses the timestamp out of a base-36 UUID, and calls timestamp with it.\n\t *\n\t * Example: `{{uuidTimestamp id \"flow-message-x-\"}}`\n\t *\n\t * @param {string} uuid id\n\t * @param {boolean} [timeAgoOnly]\n\t * @return {string}\n\t */\n\tFlowHandlebars.prototype.uuidTimestamp = function ( uuid, timeAgoOnly ) {\n\t\tvar timestamp = mw.flow.uuidToTime( uuid );\n\n\t\treturn FlowHandlebars.prototype.timestamp( timestamp, timeAgoOnly );\n\t};\n\n\t/**\n\t * Generates markup for an \"nnn sssss ago\" and date/time string.\n\t *\n\t * Example: `{{timestamp start_time}}`\n\t *\n\t * @param {number} timestamp milliseconds\n\t * @return {string}\n\t */\n\tFlowHandlebars.prototype.timestamp = function ( timestamp ) {\n\t\tvar guid, formatter;\n\n\t\tif ( isNaN( timestamp ) ) {\n\t\t\tmw.flow.debug( '[timestamp] Invalid arguments', arguments );\n\t\t\treturn;\n\t\t}\n\n\t\tformatter = moment( timestamp );\n\n\t\t// Generate a GUID for this element to find it later\n\t\tguid = ( Math.random() + 1 ).toString( 36 ).slice( 2 );\n\n\t\t// Store this in the timestamps auto-updater array\n\t\t_timestamp.list.push( { guid: guid, timestamp: timestamp, failcount: 0 } );\n\n\t\t// Render the timestamp template\n\t\treturn FlowHandlebars.prototype.html(\n\t\t\tFlowHandlebars.prototype.processTemplate(\n\t\t\t\t'timestamp',\n\t\t\t\t{\n\t\t\t\t\ttime_iso: timestamp,\n\t\t\t\t\ttime_ago: formatter.fromNow(),\n\t\t\t\t\ttime_readable: formatter.format( 'LLL' ),\n\t\t\t\t\tguid: guid\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t};\n\n\t/**\n\t * Updates one flow-timestamp node at a time every 100ms, until finishing, and then sleeps 5s.\n\t * Nodes do not get updated again until they have changed.\n\t *\n\t * @todo Perhaps only update elements within the viewport?\n\t * @todo Maybe updating elements every few seconds is distracting? Think about this.\n\t */\n\tfunction timestampAutoUpdate() {\n\t\tvar arrayItem, $ago, failed, secondsAgo, text, formatter,\n\t\t\tcurrentTime = Date.now() / 1000;\n\n\t\t// Only update elements that need updating (eg. only update minutes every 60s)\n\t\tdo {\n\t\t\tarrayItem = _timestamp.list[ _timestamp.list._currentIndex ];\n\n\t\t\tif ( !arrayItem || !arrayItem.nextUpdate || currentTime >= arrayItem.nextUpdate ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Find the next array item\n\t\t\t_timestamp.list._currentIndex++;\n\t\t} while ( arrayItem );\n\n\t\tif ( !arrayItem ) {\n\t\t\t// Finished array; reset loop\n\t\t\t_timestamp.list._currentIndex = 0;\n\n\t\t\t// Run again in 5s\n\t\t\tsetTimeout( timestampAutoUpdate, 5000 );\n\t\t\treturn;\n\t\t}\n\n\t\t$ago = $( document.getElementById( arrayItem.guid ) );\n\t\tfailed = true;\n\t\tsecondsAgo = currentTime - ( arrayItem.timestamp / 1000 );\n\n\t\tif ( $ago && $ago.length ) {\n\t\t\tformatter = moment( arrayItem.timestamp );\n\t\t\ttext = formatter.fromNow();\n\n\t\t\t// Returned a valid \"n ago\" string?\n\t\t\tif ( text ) {\n\t\t\t\t// Reset the failcount\n\t\t\t\tfailed = arrayItem.failcount = 0;\n\n\t\t\t\t// Set the next update time\n\t\t\t\tarrayItem.nextUpdate = currentTime + ( secondsAgo > 604800 ? 604800 - currentTime % 604800 : ( secondsAgo > 86400 ? 86400 - currentTime % 86400 : ( secondsAgo > 3600 ? 3600 - currentTime % 3600 : ( secondsAgo > 60 ? 60 - currentTime % 60 : 1 ) ) ) );\n\n\t\t\t\t// Only touch the DOM if the text has actually changed\n\t\t\t\tif ( $ago.text() !== text ) {\n\t\t\t\t\t$ago.text( text );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( failed && ++arrayItem.failcount > 9 ) {\n\t\t\t// Remove this array item if we failed this 10 times in a row\n\t\t\t_timestamp.list.splice( _timestamp.list._currentIndex, 1 );\n\t\t} else {\n\t\t\t// Go to next item\n\t\t\t_timestamp.list._currentIndex++;\n\t\t}\n\n\t\t// Run every 100ms until we update all nodes\n\t\tsetTimeout( timestampAutoUpdate, 100 );\n\t}\n\n\tif ( typeof QUnit === 'undefined' ) {\n\t\t// FIXME: T204633\n\t\t$( timestampAutoUpdate );\n\t}\n\n\t/**\n\t * Do not escape HTML string. Used as a Handlebars helper.\n\t *\n\t * Example: `{{html \"<div/>\"}}`\n\t *\n\t * @param {string} string\n\t * @return {string|Handlebars.SafeString}\n\t */\n\tFlowHandlebars.prototype.html = function ( string ) {\n\t\treturn new Handlebars.SafeString( string );\n\t};\n\n\t/**\n\t * Example: `{{block this}}`\n\t *\n\t * @param {Object} context\n\t * @param {Object} options\n\t * @return {string}\n\t */\n\tFlowHandlebars.prototype.workflowBlock = function ( context ) {\n\t\treturn FlowHandlebars.prototype.html( FlowHandlebars.prototype.processTemplate(\n\t\t\t'flow_block_' + context.type + ( context[ 'block-action-template' ] || '' ),\n\t\t\tcontext\n\t\t) );\n\t};\n\n\t/**\n\t * Example: `{{post ../../../../rootBlock this}}`\n\t *\n\t * @param {Object} context\n\t * @param {Object} revision\n\t * @param {Object} options\n\t * @return {string}\n\t */\n\tFlowHandlebars.prototype.postBlock = function ( context, revision ) {\n\t\treturn FlowHandlebars.prototype.html( FlowHandlebars.prototype.processTemplate(\n\t\t\t'flow_post',\n\t\t\t{\n\t\t\t\trevision: revision,\n\t\t\t\trootBlock: context\n\t\t\t}\n\t\t) );\n\t};\n\n\t/**\n\t * Example: `{{#each topics}}{{#eachPost this}}{{content}}{{/eachPost}}{{/each}}`\n\t *\n\t * @param {string} context\n\t * @param {string} postId\n\t * @param {Object} options\n\t * @return {string}\n\t * @todo support multiple postIds in an array\n\t */\n\tFlowHandlebars.prototype.eachPost = function ( context, postId, options ) {\n\t\tvar revId = ( context.posts && context.posts[ postId ] && context.posts[ postId ][ 0 ] ),\n\t\t\trevision = ( context.revisions && context.revisions[ revId ] ) || { content: null };\n\n\t\tif ( revision.content === null ) {\n\t\t\tmw.flow.debug( '[eachPost] Failed to find revision object', arguments );\n\t\t}\n\n\t\treturn options.fn ? options.fn( revision ) : revision;\n\t};\n\n\t/**\n\t * The progressiveEnhancement helper essentially does one of replace things:\n\t * 1. type=\"replace\": (target=\"selector\") Replaces target entirely with rendered template.\n\t * 2. type=\"content\": (target=\"selector\") Replaces target's content with rendered template.\n\t * 3. type=\"insert\": Inserts rendered template at the helper's location.\n\t *\n\t * This template is used to simplify server-side and client-side rendering. Client-side renders a\n\t * progressiveEnhancement helper instantly, in the post-process stage. The server-side renders only a script tag\n\t * with a template inside. This script tag is found ondomready, and then the post-processing occurs at that time.\n\t *\n\t * Option keys:\n\t * * type=String (replace, content, insert)\n\t * * target=String (jQuery selector; needed for replace and content -- defaults to self)\n\t * * id=String\n\t *\n\t * Example: `{{#progressiveEnhancement type=\"content\"}}{{> ok}}{{/progressiveEnhancement}}`\n\t *\n\t * @param {Object} options\n\t * @return {string}\n\t * @todo Implement support for full functionality, perhaps revisit the implementation.\n\t */\n\tFlowHandlebars.prototype.progressiveEnhancement = function ( options ) {\n\t\tvar hash = options.hash,\n\t\t\t// Replace nested script tag with placeholder tag for\n\t\t\t// recursive progresiveEnhancement\n\t\t\tinner = options.fn( this ).replace( /<\\/script>/g, '</flowprogressivescript>' );\n\n\t\tif ( !hash.type ) {\n\t\t\thash.type = 'insert';\n\t\t}\n\n\t\treturn FlowHandlebars.prototype.html(\n\t\t\t// eslint-disable-next-line no-useless-concat\n\t\t\t'<scr' + 'ipt' +\n\t\t\t\t' type=\"text/x-handlebars-template-progressive-enhancement\"' +\n\t\t\t\t' data-type=\"' + hash.type + '\"' +\n\t\t\t\t( hash.target ? ' data-target=\"' + hash.target + '\"' : '' ) +\n\t\t\t\t( hash.id ? ' id=\"' + hash.id + '\"' : '' ) +\n\t\t\t'>' +\n\t\t\t\tinner +\n\t\t\t// eslint-disable-next-line no-useless-concat\n\t\t\t'</scr' + 'ipt>'\n\t\t);\n\t};\n\n\t/**\n\t * Runs a callback when user is anonymous\n\t *\n\t * @param {Object} options which must contain fn and inverse key mapping to functions.\n\t * @return {Mixed} result of callback\n\t */\n\tFlowHandlebars.prototype.ifAnonymous = function ( options ) {\n\t\tif ( mw.user.isAnon() ) {\n\t\t\treturn options.fn( this );\n\t\t}\n\t\treturn options.inverse( this );\n\t};\n\n\t/**\n\t * Adds returnto parameter pointing to given Title to an existing URL\n\t *\n\t * @param {string} title\n\t * @return {string} modified url\n\t */\n\tFlowHandlebars.prototype.linkWithReturnTo = function ( title ) {\n\t\treturn mw.util.getUrl( title, {\n\t\t\treturntoquery: encodeURIComponent( window.location.search ),\n\t\t\treturnto: mw.config.get( 'wgPageName' )\n\t\t} );\n\t};\n\n\t/**\n\t * Accepts the contentType and content properties returned from the api\n\t * for individual revisions and ensures that content is included in the\n\t * final html page in an XSS safe manner.\n\t *\n\t * It is expected that all content with contentType of html has been\n\t * processed by parsoid and is safe for direct output into the document.\n\t *\n\t * Usage:\n\t * {{escapeContent revision.contentType revision.content}}\n\t *\n\t * @param {string} contentType\n\t * @param {string} content\n\t * @return {string}\n\t */\n\tFlowHandlebars.prototype.escapeContent = function ( contentType, content ) {\n\t\tif ( contentType === 'html' || contentType === 'fixed-html' || contentType === 'topic-title-html' ) {\n\t\t\treturn FlowHandlebars.prototype.html( content );\n\t\t}\n\t\treturn content;\n\t};\n\n\t/**\n\t * Renders a tooltip node.\n\t *\n\t * Example: `{{#tooltip positionClass=\"up\" contextClass=\"progressive\" extraClass=\"flow-my-tooltip\"}}what{{/tooltip}}`\n\t *\n\t * @param {Object} options\n\t * @return {string}\n\t */\n\tFlowHandlebars.prototype.tooltip = function ( options ) {\n\t\tvar params = options.hash;\n\n\t\treturn FlowHandlebars.prototype.html( FlowHandlebars.prototype.processTemplate(\n\t\t\t'flow_tooltip',\n\t\t\t{\n\t\t\t\tpositionClass: params.positionClass ? 'flow-ui-tooltip-' + params.positionClass : null,\n\t\t\t\tcontextClass: params.contextClass ? 'mw-ui-' + params.contextClass : null,\n\t\t\t\textraClass: params.extraClass,\n\t\t\t\tblockClass: params.isBlock ? 'flow-ui-tooltip-block' : null,\n\t\t\t\tcontent: options.fn( this )\n\t\t\t}\n\t\t) );\n\t};\n\n\t/**\n\t * Return url for putting post into the specified moderation state. If the user\n\t * cannot put the post into the specified state a blank string is returned.\n\t *\n\t * @param {Object} actions\n\t * @param {string} moderationState\n\t * @return {string}\n\t */\n\tFlowHandlebars.prototype.moderationAction = function ( actions, moderationState ) {\n\t\treturn actions[ moderationState ] ? actions[ moderationState ].url : '';\n\t};\n\n\t/**\n\t * Concatenate all unnamed handlebars arguments\n\t *\n\t * @return {string}\n\t */\n\tFlowHandlebars.prototype.concat = function () {\n\t\t// handlebars puts an options argument at the end of\n\t\t// user supplied parameters, pop that off\n\t\treturn Array.prototype.slice.call( arguments, 0, -1 ).join( '' );\n\t};\n\n\t/**\n\t * Renders block if condition is true\n\t *\n\t * @param {string} value\n\t * @param {string} operator supported values: 'or'\n\t * @param {string} value2\n\t * @param {Object} options\n\t * @return {string}\n\t */\n\tFlowHandlebars.prototype.ifCond = function ( value, operator, value2, options ) {\n\t\tif ( operator === 'or' ) {\n\t\t\treturn value || value2 ? options.fn( this ) : options.inverse( this );\n\t\t}\n\t\tif ( operator === '===' ) {\n\t\t\treturn value === value2 ? options.fn( this ) : options.inverse( this );\n\t\t}\n\t\tif ( operator === '!==' ) {\n\t\t\treturn value !== value2 ? options.fn( this ) : options.inverse( this );\n\t\t}\n\t\treturn '';\n\t};\n\n\t/**\n\t * Outputs debugging information\n\t *\n\t * For development use only\n\t */\n\tFlowHandlebars.prototype.debug = function () {\n\t\tmw.flow.debug( '[Handlebars] debug', arguments );\n\t};\n\n\t// Load partials\n\t// eslint-disable-next-line no-jquery/no-each-util\n\t$.each( mw.templates.get(), function ( moduleName, moduleTemplates ) {\n\t\t// eslint-disable-next-line no-jquery/no-each-util\n\t\t$.each( moduleTemplates, function ( name ) {\n\t\t\t// remove extension\n\t\t\tvar partialMatch, partialName;\n\n\t\t\tpartialMatch = name.match( /handlebars\\/(.*)\\.partial\\.handlebars$/ );\n\t\t\tif ( partialMatch ) {\n\t\t\t\tpartialName = partialMatch[ 1 ];\n\t\t\t\tHandlebars.partials[ partialName ] = mw.template.get( moduleName, name ).render;\n\t\t\t}\n\t\t} );\n\t} );\n\n\t// Register helpers\n\tHandlebars.registerHelper( 'l10n', FlowHandlebars.prototype.l10n );\n\tHandlebars.registerHelper( 'l10nParse', FlowHandlebars.prototype.l10nParse );\n\tHandlebars.registerHelper( 'l10nParseFlowTermsOfUse', FlowHandlebars.prototype.l10nParseFlowTermsOfUse );\n\tHandlebars.registerHelper( 'uuidTimestamp', FlowHandlebars.prototype.uuidTimestamp );\n\tHandlebars.registerHelper( 'timestamp', FlowHandlebars.prototype.timestamp );\n\tHandlebars.registerHelper( 'html', FlowHandlebars.prototype.html );\n\tHandlebars.registerHelper( 'block', FlowHandlebars.prototype.workflowBlock );\n\tHandlebars.registerHelper( 'post', FlowHandlebars.prototype.postBlock );\n\tHandlebars.registerHelper( 'eachPost', FlowHandlebars.prototype.eachPost );\n\tHandlebars.registerHelper( 'progressiveEnhancement', FlowHandlebars.prototype.progressiveEnhancement );\n\tHandlebars.registerHelper( 'ifAnonymous', FlowHandlebars.prototype.ifAnonymous );\n\tHandlebars.registerHelper( 'linkWithReturnTo', FlowHandlebars.prototype.linkWithReturnTo );\n\tHandlebars.registerHelper( 'escapeContent', FlowHandlebars.prototype.escapeContent );\n\tHandlebars.registerHelper( 'tooltip', FlowHandlebars.prototype.tooltip );\n\tHandlebars.registerHelper( 'moderationAction', FlowHandlebars.prototype.moderationAction );\n\tHandlebars.registerHelper( 'concat', FlowHandlebars.prototype.concat );\n\tHandlebars.registerHelper( 'ifCond', FlowHandlebars.prototype.ifCond );\n\tHandlebars.registerHelper( 'debug', FlowHandlebars.prototype.debug );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/misc/jquery.conditionalScroll.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":42,"column":5,"nodeType":"CallExpression","endLine":42,"endColumn":22,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/misc/jquery.findWithParent.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'selector' is already declared in the upper scope on line 46 column 35.","line":51,"column":33,"nodeType":"Identifier","messageId":"noShadow","endLine":51,"endColumn":41}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t/** @class jQuery */\n\n\t/**\n\t * Adds support to find parent elements using .closest with less-than selector syntax.\n\t *\n\t * $.findWithParent( $div, \"< html div < body\" ); // find closest parent of $div \"html\", find child \"div\" of it, find closest parent \"body\" of that, return \"body\"\n\t * $( '#foo' ).findWithParent( '.bar < .baz' ); // find child \".bar\" of \"#foo\", return closest parent \".baz\" from there\n\t *\n\t * @method findWithParent\n\t * @param {jQuery|HTMLElement|string} $context\n\t * @param {string} selector\n\t * @return {jQuery}\n\t */\n\tfunction jQueryFindWithParent( $context, selector ) {\n\t\tvar matches;\n\n\t\t$context = $( $context );\n\t\tselector = selector.trim();\n\n\t\twhile ( selector && ( matches = selector.match( /(.*?(?:^|[>\\s+~]))(<\\s*[^>\\s+~]+)(.*?)$/ ) ) ) {\n\t\t\tif ( matches[ 1 ].trim() ) {\n\t\t\t\t$context = $context.find( matches[ 1 ] );\n\t\t\t}\n\t\t\tif ( matches[ 2 ].trim() ) {\n\t\t\t\t$context = $context.closest( matches[ 2 ].slice( 1 ) );\n\t\t\t}\n\t\t\tselector = matches[ 3 ].trim();\n\t\t}\n\n\t\tif ( selector ) {\n\t\t\t$context = $context.find( selector );\n\t\t}\n\n\t\treturn $context;\n\t}\n\n\t$.findWithParent = jQueryFindWithParent;\n\n\t/** @class jQuery.fn */\n\t/**\n\t * @param {string} selector\n\t * @return {jQuery}\n\t * @see jQuery#findWithParent\n\t */\n\t$.fn.findWithParent = function ( selector ) {\n\t\tvar selectors = selector.split( ',' ),\n\t\t\t$elements = $(),\n\t\t\tself = this;\n\n\t\tselectors.forEach( function ( selector ) {\n\t\t\t$elements = $elements.add( jQueryFindWithParent( self, selector ) );\n\t\t} );\n\n\t\treturn $elements;\n\t};\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/misc/mw-ui.enhance.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-class-state","severity":2,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":169,"column":10,"nodeType":"CallExpression","endLine":169,"endColumn":49,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-class-state","severity":2,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":172,"column":17,"nodeType":"CallExpression","endLine":172,"endColumn":56,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/class-doc","severity":2,"message":"All possible CSS classes should be documented. See https://w.wiki/PS2 for details.","line":194,"column":5,"nodeType":"CallExpression","endLine":194,"endColumn":71,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/class-doc","severity":2,"message":"All possible CSS classes should be documented. See https://w.wiki/PS2 for details.","line":202,"column":5,"nodeType":"CallExpression","endLine":202,"endColumn":78,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/class-doc","severity":2,"message":"All possible CSS classes should be documented. See https://w.wiki/PS2 for details.","line":275,"column":4,"nodeType":"CallExpression","endLine":275,"endColumn":64,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":2,"message":"Selector extensions are not allowed","line":332,"column":31,"nodeType":"CallExpression","endLine":332,"endColumn":55,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/engine/misc/mw-ui.modal.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-sizzle","severity":2,"message":"Selector extensions are not allowed","line":165,"column":13,"nodeType":"CallExpression","endLine":165,"endColumn":73,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-sizzle","severity":2,"message":"Selector extensions are not allowed","line":340,"column":14,"nodeType":"CallExpression","endLine":340,"endColumn":101,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow-initialize.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":13,"column":17,"nodeType":"CallExpression","endLine":13,"endColumn":39,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":15,"column":13,"nodeType":"CallExpression","endLine":15,"endColumn":31,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":47,"column":21,"nodeType":"CallExpression","endLine":47,"endColumn":39,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":62,"column":36,"nodeType":"CallExpression","endLine":62,"endColumn":63,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/api/mw.flow.dm.APIHandler.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mixins/mw.flow.dm.List.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.Board.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.BoardDescription.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.Captcha.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.Categories.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.CategoryItem.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.Content.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.Item.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.ModeratedRevisionedContent.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.Post.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.RevisionedContent.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.System.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.Topic.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/dm/mw.flow.dm.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/mw.flow.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/mw.flow.ui.CancelConfirmDialog.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/mw.flow.ui.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/editor/mw.flow.ui.AnonWarningWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/editor/mw.flow.ui.CanNotEditWidget.js","messages":[],"suppressedMessages":[{"ruleId":"mediawiki/msg-doc","severity":2,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":121,"column":16,"nodeType":"CallExpression","endLine":121,"endColumn":68,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/msg-doc","severity":2,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":127,"column":16,"nodeType":"CallExpression","endLine":127,"endColumn":100,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/editor/mw.flow.ui.EditorControlsWidget.js","messages":[],"suppressedMessages":[{"ruleId":"mediawiki/msg-doc","severity":2,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":32,"column":11,"nodeType":"CallExpression","endLine":32,"endColumn":62,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/msg-doc","severity":2,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":40,"column":11,"nodeType":"CallExpression","endLine":40,"endColumn":57,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-undef","severity":2,"message":"'ve' is not defined.","line":50,"column":17,"nodeType":"Identifier","messageId":"undef","endLine":50,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-undef","severity":2,"message":"'ve' is not defined.","line":55,"column":13,"nodeType":"Identifier","messageId":"undef","endLine":55,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/editor/mw.flow.ui.EditorWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.BoardDescriptionWidget.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-class-state","severity":2,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":315,"column":14,"nodeType":"CallExpression","endLine":315,"endColumn":41,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.CaptchaWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.CategoriesWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.CategoryItemWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.EditPostWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.EditTopicSummaryWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.NavigationWidget.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'scrollTop' is already declared in the upper scope on line 76 column 7.","line":84,"column":9,"nodeType":"Identifier","messageId":"noShadow","endLine":84,"endColumn":18}],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":124,"column":4,"nodeType":"CallExpression","endLine":124,"endColumn":22,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t/**\n\t * Flow navigation widget\n\t *\n\t * @extends OO.ui.Widget\n\t *\n\t * @constructor\n\t * @param {mw.flow.dm.System} system System model\n\t * @param {Object} [config]\n\t * @cfg {number} [tocPostLimit=50] The number of topics in the ToC per API request\n\t * @cfg {string} [defaultSort='newest'] The current default topic sort order\n\t */\n\tmw.flow.ui.NavigationWidget = function mwFlowUiNavigationWidget( system, config ) {\n\t\tconfig = config || {};\n\n\t\t// Parent constructor\n\t\tmw.flow.ui.NavigationWidget.super.call( this, config );\n\n\t\tthis.board = system.getBoard();\n\n\t\tthis.tocWidget = new mw.flow.ui.ToCWidget( system, {\n\t\t\tclasses: [ 'flow-ui-navigationWidget-tocWidget' ],\n\t\t\ttocPostLimit: config.tocPostLimit\n\t\t} );\n\n\t\tthis.reorderTopicsWidget = new mw.flow.ui.ReorderTopicsWidget( this.board, config );\n\n\t\t// Events\n\t\t$( window ).on( 'scroll resize', this.onWindowScroll.bind( this ) );\n\t\tthis.tocWidget.connect( this, { loadTopic: 'onToCWidgetLoadTopic' } );\n\t\tthis.reorderTopicsWidget.connect( this, { reorder: 'onReorderTopicsWidgetReorder' } );\n\n\t\t// Initialize\n\t\tthis.$element\n\t\t\t.append(\n\t\t\t\tthis.tocWidget.$element,\n\t\t\t\tthis.reorderTopicsWidget.$element\n\t\t\t)\n\t\t\t.addClass( [\n\t\t\t\t'flow-ui-navigationWidget'\n\t\t\t] );\n\t};\n\n\t/* Initialization */\n\n\tOO.inheritClass( mw.flow.ui.NavigationWidget, OO.ui.Widget );\n\n\t/* Methods */\n\n\t/**\n\t * Propagate the scrollto event so the old code can\n\t * work on it.\n\t *\n\t * @param {string} topicId Topic id\n\t * @fires loadTopic\n\t */\n\tmw.flow.ui.NavigationWidget.prototype.onToCWidgetLoadTopic = function ( topicId ) {\n\t\tthis.emit( 'loadTopic', topicId );\n\t};\n\n\t/**\n\t * Propagate the reorder event from the reorderTopicsWidget\n\t * so the old code can be updated\n\t *\n\t * @param {string} order New order\n\t * @fires reorderTopics\n\t */\n\tmw.flow.ui.NavigationWidget.prototype.onReorderTopicsWidgetReorder = function ( order ) {\n\t\tthis.emit( 'reorderTopics', order );\n\t};\n\n\t/**\n\t * Respond to window scroll\n\t */\n\tmw.flow.ui.NavigationWidget.prototype.onWindowScroll = function () {\n\t\tvar scrollTop, isScrolledDown, topicId,\n\t\t\t/*!\n\t\t\t * Check if element is in the viewport.\n\t\t\t *\n\t\t\t * @param {jQuery} $el Element to test\n\t\t\t * @return {boolean} Element is in screen\n\t\t\t */\n\t\t\tisElementInView = function ( $el ) {\n\t\t\t\tvar scrollTop, containerHeight,\n\t\t\t\t\theight = $el.height(),\n\t\t\t\t\ttop = $el.offset().top,\n\t\t\t\t\tbottom = top + height;\n\n\t\t\t\tscrollTop = $( window ).scrollTop();\n\t\t\t\tcontainerHeight = $( window ).height();\n\n\t\t\t\treturn (\n\t\t\t\t\t// Topic top is visible\n\t\t\t\t\t(\n\t\t\t\t\t\ttop >= scrollTop &&\n\t\t\t\t\t\ttop <= scrollTop + containerHeight\n\t\t\t\t\t) ||\n\t\t\t\t\t// Topic bottom is visible\n\t\t\t\t\t(\n\t\t\t\t\t\tbottom >= scrollTop &&\n\t\t\t\t\t\tbottom <= scrollTop + containerHeight\n\t\t\t\t\t) ||\n\t\t\t\t\t// Topic is long and we are in the middle of it\n\t\t\t\t\t(\n\t\t\t\t\t\ttop < scrollTop &&\n\t\t\t\t\t\tbottom > scrollTop + containerHeight\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t};\n\n\t\t// HACK: Quit if the widget is unattached. This happens when we are\n\t\t// waiting to rebuild the board when reordering the topics\n\t\t// This should not be needed when the board is wigdetized\n\t\tif ( this.$element.parent().length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tscrollTop = $( window ).scrollTop();\n\t\tisScrolledDown = scrollTop >= this.$element.parent().offset().top;\n\n\t\tif ( isScrolledDown ) {\n\t\t\t// TODO use binary search\n\t\t\t// eslint-disable-next-line no-jquery/no-global-selector\n\t\t\t$( '.flow-topic' ).each( function () {\n\t\t\t\tif ( isElementInView( $( this ) ) ) {\n\t\t\t\t\ttopicId = $( this ).data( 'flowId' );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\t// Update the toc selection\n\t\tthis.tocWidget.updateSelection( topicId );\n\n\t\t// Fix the widget to the top when we scroll down below its original\n\t\t// location\n\t\tthis.$element.toggleClass(\n\t\t\t// mw-sticky-header-element avoids conflicting with the Vector sticky header,\n\t\t\t// see https://www.mediawiki.org/wiki/Reading/Web/Desktop_Improvements/Features/Sticky_Header/#Integration_notes_for_developers\n\t\t\t'flow-ui-navigationWidget-affixed mw-sticky-header-element',\n\t\t\tisScrolledDown\n\t\t);\n\t\tif ( isScrolledDown ) {\n\t\t\t// Copy width from parent, width: 100% doesn't do what we want when\n\t\t\t// position: fixed; is set\n\t\t\tthis.$element.css( 'width', this.$element.parent().width() );\n\t\t} else {\n\t\t\t// Unset width when we no longer have position: fixed;\n\t\t\tthis.$element.css( 'width', '' );\n\t\t}\n\n\t\tthis.reorderTopicsWidget.toggle( !isScrolledDown );\n\t};\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.NewTopicWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.ReorderTopicsWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.ReplyWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.SidebarExpandWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.ToCWidget.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":85,"column":4,"nodeType":"CallExpression","endLine":85,"endColumn":21,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.TopicMenuSelectWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/flow/ui/widgets/mw.flow.ui.TopicTitleWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/handlebars.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/messagePoster/ext.flow.messagePoster.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/mw.flow.Initializer.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'content' is already declared in the upper scope on line 909 column 79.","line":969,"column":35,"nodeType":"Identifier","messageId":"noShadow","endLine":969,"endColumn":42},{"ruleId":"no-shadow","severity":1,"message":"'content' is already declared in the upper scope on line 1010 column 4.","line":1061,"column":40,"nodeType":"Identifier","messageId":"noShadow","endLine":1061,"endColumn":47}],"suppressedMessages":[{"ruleId":"no-jquery/no-class-state","severity":2,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":117,"column":4,"nodeType":"CallExpression","endLine":117,"endColumn":49,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-class-state","severity":2,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":119,"column":4,"nodeType":"CallExpression","endLine":119,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":149,"column":31,"nodeType":"CallExpression","endLine":149,"endColumn":60,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":152,"column":29,"nodeType":"CallExpression","endLine":152,"endColumn":59,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":155,"column":32,"nodeType":"CallExpression","endLine":155,"endColumn":70,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":348,"column":6,"nodeType":"CallExpression","endLine":348,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":354,"column":32,"nodeType":"CallExpression","endLine":354,"endColumn":62,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":409,"column":15,"nodeType":"CallExpression","endLine":409,"endColumn":61,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":410,"column":17,"nodeType":"CallExpression","endLine":410,"endColumn":61,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":423,"column":3,"nodeType":"CallExpression","endLine":423,"endColumn":47,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":425,"column":3,"nodeType":"CallExpression","endLine":425,"endColumn":50,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":502,"column":14,"nodeType":"CallExpression","endLine":502,"endColumn":32,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":999,"column":12,"nodeType":"CallExpression","endLine":999,"endColumn":106,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":1003,"column":19,"nodeType":"CallExpression","endLine":1003,"endColumn":113,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":1081,"column":3,"nodeType":"CallExpression","endLine":1081,"endColumn":31,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint-disable no-jquery/no-global-selector */\n( function () {\n\t/**\n\t * Initializer object for flow-initialize\n\t *\n\t * @class\n\t *\n\t * @constructor\n\t * @param {Object} config Configuration object\n\t */\n\tmw.flow.Initializer = function ( config ) {\n\t\tconfig = config || {};\n\n\t\tthis.$component = null;\n\t\tthis.$board = null;\n\t\tthis.siderailCollapsed = mw.user.options.get( 'flow-side-rail-state' ) === 'collapsed';\n\t\tthis.pageTitle = config.pageTitle || mw.Title.newFromText( mw.config.get( 'wgPageName' ) );\n\n\t\tthis.system = null;\n\t\tthis.board = null;\n\t\tthis.navWidget = null;\n\t};\n\n\t/* Inheritance */\n\n\tOO.initClass( mw.flow.Initializer );\n\n\t/**\n\t * Sets the DOM element that is the flow component\n\t *\n\t * @param {jQuery} $component The DOM element that is the component\n\t * @return {boolean} The component DOM element exists and is set\n\t */\n\tmw.flow.Initializer.prototype.setComponentDom = function ( $component ) {\n\t\tif ( !$component || !$component.length ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.$component = $component;\n\t\treturn true;\n\t};\n\n\t/**\n\t * Sets the DOM element that is the flow board\n\t *\n\t * @param {jQuery} $board The DOM element that is the board\n\t * @return {boolean} The board DOM element exists and is set\n\t */\n\tmw.flow.Initializer.prototype.setBoardDom = function ( $board ) {\n\t\tif ( !$board || !$board.length ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.$board = $board;\n\t\treturn true;\n\t};\n\n\t/**\n\t * Set the flowBoard object representing the 'old' Flow system board\n\t *\n\t * @param {Object} board flowBoard _RecursiveConstructor\n\t */\n\tmw.flow.Initializer.prototype.setBoardObject = function ( board ) {\n\t\tvar self = this;\n\n\t\tthis.flowBoard = board;\n\n\t\tthis.flowBoard.connect( this, {\n\t\t\tloadmore: function ( topiclist ) {\n\t\t\t\t// Add to dm board\n\t\t\t\tif ( self.system ) {\n\t\t\t\t\tself.system.populateBoardTopicsFromJson( topiclist );\n\t\t\t\t}\n\n\t\t\t\t// Replace reply forms\n\t\t\t\tself.replaceReplyForms( self.$board );\n\t\t\t\tself.reopenPostWidgets( self.$board );\n\t\t\t},\n\t\t\t// HACK: Update the DM when topic is refreshed\n\t\t\trefreshTopic: function ( workflowId, topicData ) {\n\t\t\t\tvar revisionId, revision,\n\t\t\t\t\ttopic = self.board.getItemById( workflowId ),\n\t\t\t\t\tdata = topicData.flow[ 'view-topic' ].result.topic;\n\n\t\t\t\tif ( !topic ) {\n\t\t\t\t\t// New topic\n\t\t\t\t\tmw.flow.system.populateBoardTopicsFromJson( data, 0 );\n\t\t\t\t} else {\n\t\t\t\t\t// Topic already exists. Repopulate\n\t\t\t\t\trevisionId = data.posts[ workflowId ];\n\t\t\t\t\trevision = data.revisions[ revisionId ];\n\n\t\t\t\t\ttopic.populate( revision );\n\t\t\t\t}\n\n\t\t\t\t// Replace reply forms\n\t\t\t\tself.replaceReplyForms( topicData.$topic );\n\t\t\t\tself.reopenPostWidgets( topicData.$topic );\n\t\t\t}\n\t\t} );\n\t};\n\n\t/**\n\t * Set up the window manager\n\t */\n\tmw.flow.Initializer.prototype.setupWindowManager = function () {\n\t\t$( document.body ).append( mw.flow.ui.windowManager.$element );\n\t};\n\n\t/**\n\t * Set up the sidebar widget if needed\n\t */\n\tmw.flow.Initializer.prototype.setupSidebarWidget = function () {\n\t\tvar sidebarExpandWidget,\n\t\t\tself = this;\n\n\t\tif (\n\t\t\t// eslint-disable-next-line no-jquery/no-class-state\n\t\t\tthis.$component.hasClass( 'flow-topic-page' ) &&\n\t\t\t// eslint-disable-next-line no-jquery/no-class-state\n\t\t\t$( document.body ).hasClass( 'action-view' )\n\t\t) {\n\t\t\tthis.$board.toggleClass( 'flow-board-expanded', this.siderailCollapsed );\n\n\t\t\t// We are in single-topic view. Initialize the sidebar expand widget\n\t\t\tsidebarExpandWidget = new mw.flow.ui.SidebarExpandWidget( {\n\t\t\t\tcollapsed: this.siderailCollapsed,\n\t\t\t\texpandedButtonTitle: mw.msg( 'flow-topic-collapse-siderail' ),\n\t\t\t\tcollapsedButtonTitle: mw.msg( 'flow-topic-expand-siderail' )\n\t\t\t} );\n\t\t\tsidebarExpandWidget.$element.insertAfter( this.$board );\n\n\t\t\t// Events\n\t\t\tsidebarExpandWidget.on( 'toggle', function ( collapsed ) {\n\t\t\t\tself.$board.toggleClass( 'flow-board-expanded', collapsed );\n\t\t\t} );\n\t\t}\n\t};\n\n\t/**\n\t * Initialize the UI widgets\n\t */\n\tmw.flow.Initializer.prototype.initializeWidgets = function () {\n\t\t// Set up window manager\n\t\tthis.setupWindowManager();\n\n\t\t// Set up sidebar widget if it needs to be there\n\t\tthis.setupSidebarWidget();\n\n\t\t// Set up navigation widget\n\t\tthis.setupNavigationWidget( $( '.flow-board-navigation' ) );\n\n\t\t// Set up new topic widget\n\t\tthis.setupNewTopicWidget( $( 'form.flow-newtopic-form' ) );\n\n\t\t// Set up description widget\n\t\tthis.setupDescriptionWidget( $( '.flow-ui-boardDescriptionWidget' ) );\n\n\t\t// Replace reply forms on the board\n\t\tthis.replaceReplyForms( this.$board );\n\n\t\t/* Take over click actions */\n\t\tthis.setupReplyLinkActions();\n\t\tthis.setupEditPostAction();\n\t\tthis.setupEditTopicSummaryAction();\n\t\tthis.setupEditTopicTitleAction();\n\n\t\tthis.reopenNewTopicWidget();\n\t\tthis.reopenDescriptionWidget();\n\t\tthis.reopenPostWidgets();\n\t};\n\n\t/**\n\t * Re-open any post widgets with stored data\n\t *\n\t * @param {jQuery} [$container] Container, defaults to this.$component\n\t */\n\tmw.flow.Initializer.prototype.reopenPostWidgets = function ( $container ) {\n\t\t$container = $container || this.$component;\n\n\t\tthis.reopenReplyWidgets( $container );\n\t\tthis.reopenTopicTitleWidgets( $container );\n\t\tthis.reopenEditPostWidgets( $container );\n\t\tthis.reopenEditTopicSummaryWidget( $container );\n\t};\n\n\t/**\n\t * Initialize the 'old' Flow ui component\n\t */\n\tmw.flow.Initializer.prototype.initOldComponent = function () {\n\t\tif ( this.$component ) {\n\t\t\tmw.flow.initComponent( this.$component );\n\t\t}\n\t};\n\n\t/**\n\t * Initialize the data model objects\n\t *\n\t * @param {Object} config Configuration options for the mw.flow.dm.System\n\t */\n\tmw.flow.Initializer.prototype.initDataModel = function ( config ) {\n\t\tvar self = this;\n\n\t\tthis.system = new mw.flow.dm.System( config );\n\t\tthis.board = this.system.getBoard();\n\t\t// Initialize the old system to accept the default\n\t\t// order for the topic order widget\n\t\tthis.flowBoard.topicIdSort = this.board.getSortOrder();\n\n\t\t// Events\n\t\tthis.board.connect( this, {\n\t\t\tadd: function ( newItems ) {\n\t\t\t\tvar i, len, item, itemId;\n\n\t\t\t\tfor ( i = 0, len = newItems.length; i < len; i++ ) {\n\t\t\t\t\titem = newItems[ i ];\n\t\t\t\t\titemId = item.getId();\n\n\t\t\t\t\tif ( self.flowBoard.orderedTopicIds.indexOf( itemId ) === -1 ) {\n\t\t\t\t\t\tself.flowBoard.orderedTopicIds.push( itemId );\n\t\t\t\t\t}\n\n\t\t\t\t\tself.flowBoard.topicTitlesById[ itemId ] = item.getContent();\n\t\t\t\t\tself.flowBoard.updateTimestampsByTopicId[ itemId ] = item.getLastUpdate();\n\t\t\t\t}\n\t\t\t\tself.flowBoard.sortTopicIds( self.flowBoard );\n\t\t\t},\n\t\t\t// E.g. on topic re-order, before re-population.\n\t\t\tclear: function () {\n\t\t\t\tself.flowBoard.orderedTopicIds = [];\n\t\t\t\tself.flowBoard.topicTitlesById = {};\n\t\t\t}\n\t\t\t// We shouldn't have to worry about 'remove', since by the time we have filtering,\n\t\t\t// orderedTopicIds should be gone.\n\t\t} );\n\t};\n\n\t/**\n\t * Get the data model system\n\t *\n\t * @return {mw.flow.dm.System} DM system\n\t */\n\tmw.flow.Initializer.prototype.getDataModelSystem = function () {\n\t\treturn this.system;\n\t};\n\n\t/**\n\t * Populate the data model\n\t *\n\t * @param {Object} dataBlob Data blob to populate the system with\n\t */\n\tmw.flow.Initializer.prototype.populateDataModel = function ( dataBlob ) {\n\t\tvar preloadTopic = OO.getProp( dataBlob, 'blocks', 'topiclist', 'submitted', 'topic' ),\n\t\t\tpreloadContent = OO.getProp( dataBlob, 'blocks', 'topiclist', 'submitted', 'content' ),\n\t\t\tpreloadFormat = OO.getProp( dataBlob, 'blocks', 'topiclist', 'submitted', 'format' );\n\n\t\tif ( dataBlob && dataBlob.blocks ) {\n\t\t\t// Populate the rendered topics or topic (if we are in a single-topic view)\n\t\t\tthis.system.populateBoardTopicsFromJson( dataBlob.blocks.topiclist || dataBlob.blocks.topic );\n\t\t\t// Populate header\n\t\t\tthis.system.populateBoardDescriptionFromJson( dataBlob.blocks.header || {} );\n\t\t\t// Populate the ToC topics\n\t\t\tif ( dataBlob.toc ) {\n\t\t\t\tthis.system.populateBoardTopicsFromJson( dataBlob.toc );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.system.populateBoardFromApi();\n\t\t}\n\t\tif ( preloadTopic || preloadContent ) {\n\t\t\tthis.newTopicWidget.preload( preloadTopic, preloadContent, preloadFormat );\n\t\t}\n\t};\n\n\t/**\n\t * Set up the navigation widget and its events\n\t *\n\t * @param {jQuery} $navDom Navigation widget DOM element\n\t */\n\tmw.flow.Initializer.prototype.setupNavigationWidget = function ( $navDom ) {\n\t\tvar self = this;\n\n\t\tif ( !$navDom.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.navWidget = new mw.flow.ui.NavigationWidget( this.system, {\n\t\t\tdefaultSort: this.flowBoard.topicIdSort\n\t\t} );\n\t\t$navDom.append( this.navWidget.$element );\n\n\t\t// Events\n\t\t// Load a topic from the ToC that isn't rendered on\n\t\t// the page yet. This will be gone once board, topic\n\t\t// and post are widgetized.\n\t\tthis.navWidget.connect( this, {\n\t\t\tloadTopic: function ( topicId ) {\n\t\t\t\tself.flowBoard.jumpToTopic( topicId );\n\t\t\t},\n\t\t\treorderTopics: function ( newOrder ) {\n\t\t\t\tself.flowBoard.topicIdSort = newOrder;\n\t\t\t}\n\t\t} );\n\n\t\t// Connect to system events\n\n\t\t// HACK: These event handlers should be in the prospective widgets\n\t\t// they will move once we have Board UI and Topic UI widgets\n\t\tthis.system.connect( this, {\n\t\t\tresetBoardStart: function () {\n\t\t\t\tself.$component.addClass( 'flow-api-inprogress' );\n\t\t\t\t// Before we reinitialize the board we have to detach\n\t\t\t\t// the navigation widget. This should not be necessary when\n\t\t\t\t// the board and topics are OOUI widgets\n\t\t\t\tself.navWidget.$element.detach();\n\t\t\t},\n\t\t\tresetBoardEnd: function ( data ) {\n\t\t\t\tvar $rendered;\n\n\t\t\t\t// populateBoardFromApi uses the larger TOC limit so the TOC can\n\t\t\t\t// be fully populated on re-sort. To avoid two requests\n\t\t\t\t// (TOC and full topics) with different limits, we do a single\n\t\t\t\t// full-topic request with that limit.\n\t\t\t\t//\n\t\t\t\t// However, this is inconsistent with the number of topics\n\t\t\t\t// we show at page load.\n\t\t\t\t//\n\t\t\t\t// This could be addressed by either showing the larger number of\n\t\t\t\t// topics on page load, doing two separate requests (might still be\n\t\t\t\t// faster considering the backend doesn't have to get full data for\n\t\t\t\t// many topics), or filtering the topic list on render.\n\t\t\t\t//\n\t\t\t\t// The latter (filter on render) could be done when the topic- and\n\t\t\t\t// board-widget are operational using some sort of computed subset\n\t\t\t\t// data model.\n\t\t\t\t$rendered = $(\n\t\t\t\t\tmw.flow.TemplateEngine.processTemplateGetFragment(\n\t\t\t\t\t\t'flow_block_loop',\n\t\t\t\t\t\t{ blocks: data }\n\t\t\t\t\t)\n\t\t\t\t).children();\n\t\t\t\t// Run this on a short timeout so that the other board handler in FlowBoardComponentLoadMoreFeatureMixin can run\n\t\t\t\t// TODO: Using a timeout doesn't seem like the right way to do this.\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\tvar boardEl = $rendered[ 1 ];\n\n\t\t\t\t\t// Since we've replaced the entire board, we need to reinitialize\n\t\t\t\t\t// it. This also takes away the original navWidget, so we need to\n\t\t\t\t\t// make sure it's reinitialized too\n\t\t\t\t\tself.flowBoard.reinitializeContainer( $rendered );\n\t\t\t\t\t$( '.flow-board-navigation' ).append( self.navWidget.$element );\n\n\t\t\t\t\tself.setBoardDom( $( boardEl ) );\n\n\t\t\t\t\tself.replaceReplyForms( self.$board );\n\n\t\t\t\t\tself.setupNewTopicWidget( $( 'form.flow-newtopic-form' ) );\n\n\t\t\t\t\tself.$component.removeClass( 'flow-api-inprogress' );\n\t\t\t\t}, 50 );\n\t\t\t}\n\t\t} );\n\t};\n\n\t/**\n\t * Set up the new topic widget and its events\n\t *\n\t * @param {jQuery} $form New topic form DOM element\n\t */\n\tmw.flow.Initializer.prototype.setupNewTopicWidget = function ( $form ) {\n\t\tvar self = this;\n\n\t\tthis.newTopicWidget = new mw.flow.ui.NewTopicWidget( this.pageTitle.getPrefixedDb(), {\n\t\t\teditor: {\n\t\t\t\tconfirmLeave: !!mw.user.options.get( 'useeditwarning' )\n\t\t\t}\n\t\t} );\n\n\t\t// Events\n\t\tthis.newTopicWidget.connect( this, {\n\t\t\tsave: function ( newTopicId ) {\n\t\t\t\t// Display the new topic with the old system\n\t\t\t\tvar $stub = $( '<div>' ).addClass( 'flow-topic' ).append( $( '<div>' ) ).prependTo( self.flowBoard.$container.find( '.flow-topics' ) );\n\t\t\t\treturn this.flowBoard.flowBoardComponentRefreshTopic( $stub.find( 'div' ), newTopicId );\n\t\t\t}\n\t\t} ).once( 'save', this.reloadOnCreate ); // Reload page if board is new so we get page actions at top\n\n\t\t$form.replaceWith( this.newTopicWidget.$element );\n\t};\n\n\t/**\n\t * Re-open the new topic widget if it has stored data\n\t */\n\tmw.flow.Initializer.prototype.reopenNewTopicWidget = function () {\n\t\tif ( this.newTopicWidget.title.getValue() || mw.storage.session.get( this.newTopicWidget.id + '/ve-docstate' ) ) {\n\t\t\tthis.newTopicWidget.activate();\n\t\t}\n\t};\n\n\t/**\n\t * Set up the description widget and its events\n\t *\n\t * @param {jQuery} $element Description DOM element\n\t */\n\tmw.flow.Initializer.prototype.setupDescriptionWidget = function ( $element ) {\n\t\tvar initializer = this;\n\t\tif ( !$element.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.descriptionWidget = new mw.flow.ui.BoardDescriptionWidget( this.board, {\n\t\t\t$existing: $( '.flow-ui-boardDescriptionWidget-content' ).contents(),\n\t\t\t$categories: $( '.flow-board-header-category-view-nojs' ).contents(),\n\t\t\teditor: {\n\t\t\t\tconfirmLeave: !!mw.user.options.get( 'useeditwarning' )\n\t\t\t}\n\t\t} )\n\t\t\t// Reload page if board is new so we get page actions at top\n\t\t\t.once( 'saveContent', this.reloadOnCreate )\n\t\t\t.on( 'saveContent', function () {\n\t\t\t\tmw.hook( 'wikipage.content' ).fire( initializer.descriptionWidget.$content );\n\t\t\t} );\n\n\t\t// The category widget is inside the board description widget.\n\t\t// Remove it from the nojs version here\n\t\t$( '.flow-board-header-category-view-nojs' ).detach();\n\t\t// HACK: Remove the MW page categories\n\t\t$( '.catlinks:not(.flow-ui-categoriesWidget)' ).detach();\n\n\t\t$element.replaceWith( this.descriptionWidget.$element );\n\t};\n\n\t/**\n\t * Re-open the board description widget if it has stored data\n\t */\n\tmw.flow.Initializer.prototype.reopenDescriptionWidget = function () {\n\t\tif ( this.descriptionWidget && mw.storage.session.get( this.descriptionWidget.id + '/ve-docstate' ) ) {\n\t\t\tthis.descriptionWidget.onEditButtonClick();\n\t\t}\n\t};\n\n\t/**\n\t * If the board page is being saved for the first time, reload the page\n\t * to show actions like History, Move, Protect, etc.\n\t */\n\tmw.flow.Initializer.prototype.reloadOnCreate = function () {\n\t\tif ( mw.config.get( 'wgArticleId' ) === 0 ) {\n\t\t\tlocation.reload();\n\t\t}\n\t};\n\n\t/**\n\t * Replace the reply forms given by the php version with js editors\n\t *\n\t * @param {jQuery} $element The element to conduct the replacements in\n\t */\n\tmw.flow.Initializer.prototype.replaceReplyForms = function ( $element ) {\n\t\tvar self = this;\n\n\t\tif ( !$element || !$element.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$element.find( '.flow-post.flow-reply-form' ).each( function () {\n\t\t\tvar $topic = $( this ).parent(),\n\t\t\t\tplaceholder = mw.msg( 'flow-reply-topic-title-placeholder', $topic.find( '.flow-topic-title' ).text().trim() ),\n\t\t\t\treplyTo = $( this ).find( 'input[name=\"topic_replyTo\"]' ).val(),\n\t\t\t\treplyWidget = new mw.flow.ui.ReplyWidget( $topic.data( 'flowId' ), replyTo, {\n\t\t\t\t\tplaceholder: placeholder,\n\t\t\t\t\teditor: {\n\t\t\t\t\t\tconfirmLeave: !!mw.user.options.get( 'useeditwarning' )\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\treplyWidget.on( 'saveContent', function ( workflow ) {\n\t\t\t\treplyWidget.destroy().then( function () {\n\t\t\t\t\treplyWidget.$element.remove();\n\n\t\t\t\t\t// HACK: get the old system to rerender the topic\n\t\t\t\t\tself.flowBoard.flowBoardComponentRefreshTopic(\n\t\t\t\t\t\t$topic,\n\t\t\t\t\t\tworkflow\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} );\n\t\t\treplyWidget.$element.data( 'self', replyWidget );\n\n\t\t\t// Replace the reply form with the new editor widget\n\t\t\t$( this ).replaceWith( replyWidget.$element );\n\t\t} );\n\t};\n\n\t/**\n\t * Take over the action of the 'edit post' links\n\t * This is delegated, so it applies to all future links as well.\n\t */\n\tmw.flow.Initializer.prototype.setupEditPostAction = function () {\n\t\tthis.$component.on( 'click', '.flow-ui-edit-post-link', function ( event ) {\n\t\t\tvar editPostWidget,\n\t\t\t\t$topic = $( this ).closest( '.flow-topic' ),\n\t\t\t\ttopicId = $topic.data( 'flow-id' ),\n\t\t\t\t$post = $( this ).closest( '.flow-post' ),\n\t\t\t\t$postMain = $post.children( '.flow-post-main' ),\n\t\t\t\tpostId = $post.data( 'flow-id' ),\n\t\t\t\t$board = $( '.flow-board' ),\n\t\t\t\tflowBoard = mw.flow.getPrototypeMethod( 'component', 'getInstanceByElement' )( $board );\n\n\t\t\teditPostWidget = new mw.flow.ui.EditPostWidget( topicId, postId, {\n\t\t\t\teditor: {\n\t\t\t\t\tconfirmLeave: !!mw.user.options.get( 'useeditwarning' )\n\t\t\t\t}\n\t\t\t} );\n\t\t\teditPostWidget\n\t\t\t\t.on( 'saveContent', function ( workflow ) {\n\t\t\t\t\teditPostWidget.destroy().then( function () {\n\t\t\t\t\t\teditPostWidget.$element.remove();\n\n\t\t\t\t\t\t// HACK get the old system to rerender the topic\n\t\t\t\t\t\tflowBoard.flowBoardComponentRefreshTopic(\n\t\t\t\t\t\t\t$topic,\n\t\t\t\t\t\t\tworkflow\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t\t.on( 'cancel', function () {\n\t\t\t\t\teditPostWidget.destroy().then( function () {\n\t\t\t\t\t\teditPostWidget.$element.replaceWith( $postMain );\n\t\t\t\t\t} );\n\t\t\t\t} );\n\n\t\t\t$postMain.replaceWith( editPostWidget.$element );\n\t\t\teditPostWidget.activate();\n\n\t\t\tevent.preventDefault();\n\t\t} );\n\t};\n\n\t/**\n\t * Re-open any edit post widgets with stored data\n\t *\n\t * @param {jQuery} $container\n\t */\n\tmw.flow.Initializer.prototype.reopenEditPostWidgets = function ( $container ) {\n\t\t// Re-open widgets with stored data\n\t\t$container.find( '.flow-ui-edit-post-link' ).each( function () {\n\t\t\tvar $post = $( this ).closest( '.flow-post' ),\n\t\t\t\tpostId = $post.data( 'flow-id' );\n\n\t\t\tif ( mw.storage.session.get( 'edit/' + postId + '/ve-docstate' ) ) {\n\t\t\t\t$( this ).trigger( 'click' );\n\t\t\t}\n\t\t} );\n\t};\n\n\t/**\n\t * Take over the action of the 'edit topic summary' links\n\t * This is delegated, so it applies to all future links as well.\n\t */\n\tmw.flow.Initializer.prototype.setupEditTopicSummaryAction = function () {\n\t\tvar self = this;\n\n\t\tthis.$component\n\t\t\t// Summarize action\n\t\t\t.on( 'click', '.flow-ui-summarize-topic-link', function ( event ) {\n\t\t\t\tvar $topic = $( this ).closest( '.flow-topic' ),\n\t\t\t\t\ttopicId = $topic.data( 'flow-id' );\n\n\t\t\t\tself.startEditTopicSummary( true, topicId );\n\t\t\t\tevent.preventDefault();\n\t\t\t} )\n\t\t\t// Lock action\n\t\t\t.on( 'click', '.flow-ui-topicmenu-lock', function () {\n\t\t\t\tvar promise,\n\t\t\t\t\taction = $( this ).data( 'role' ),\n\t\t\t\t\t$topic = $( this ).closest( '.flow-topic' ),\n\t\t\t\t\ttopicId = $topic.data( 'flow-id' ),\n\t\t\t\t\tapi = new mw.flow.dm.APIHandler();\n\n\t\t\t\tif ( action === 'lock' ) {\n\t\t\t\t\tpromise = api.resolveTopic( topicId );\n\t\t\t\t} else {\n\t\t\t\t\tpromise = api.reopenTopic( topicId );\n\t\t\t\t}\n\n\t\t\t\tpromise\n\t\t\t\t\t.then( function ( workflow ) {\n\t\t\t\t\t\treturn self.flowBoard.flowBoardComponentRefreshTopic(\n\t\t\t\t\t\t\t$topic,\n\t\t\t\t\t\t\tworkflow\n\t\t\t\t\t\t);\n\t\t\t\t\t} )\n\t\t\t\t\t.then( function ( data ) {\n\t\t\t\t\t\tvar revisionId = data.topic.posts[ topicId ],\n\t\t\t\t\t\t\trevision = data.topic.revisions[ revisionId ],\n\t\t\t\t\t\t\tsummaryContent = OO.getProp( revision, 'summary', 'revision', 'content', 'content' ),\n\t\t\t\t\t\t\tskipSummarize = action === 'unlock' && !summaryContent;\n\n\t\t\t\t\t\tif ( !skipSummarize ) {\n\t\t\t\t\t\t\tself.startEditTopicSummary( true, topicId, action );\n\t\t\t\t\t\t}\n\t\t\t\t\t} )\n\t\t\t\t\t.fail( function ( code, result ) {\n\t\t\t\t\t\tvar errorMsg = self.flowBoard.constructor.static.getApiErrorMessage( code, result );\n\n\t\t\t\t\t\tself.flowBoard.emit( 'removeError', $topic );\n\t\t\t\t\t\tself.flowBoard.emit( 'showError', $topic, errorMsg );\n\t\t\t\t\t} );\n\n\t\t\t\t// Prevent default\n\t\t\t\treturn false;\n\t\t\t} );\n\t};\n\n\t/**\n\t * Re-open any edit topic summary widgets with stored data\n\t *\n\t * @param {jQuery} $container\n\t */\n\tmw.flow.Initializer.prototype.reopenEditTopicSummaryWidget = function ( $container ) {\n\t\t$container.find( '.flow-ui-summarize-topic-link' ).each( function () {\n\t\t\tvar $topic = $( this ).closest( '.flow-topic' ),\n\t\t\t\ttopicId = $topic.data( 'flow-id' );\n\n\t\t\tif ( mw.storage.session.get( 'edit-summary/' + topicId + '/ve-docstate' ) ) {\n\t\t\t\t$( this ).trigger( 'click' );\n\t\t\t}\n\t\t} );\n\t};\n\n\t/**\n\t * Take over the action of the 'edit topic title' links\n\t * This is delegated, so it applies to all future links as well.\n\t */\n\tmw.flow.Initializer.prototype.setupEditTopicTitleAction = function () {\n\t\tvar self = this;\n\n\t\tthis.$component\n\t\t\t.on( 'click', 'a.flow-ui-edit-title-link', function ( event ) {\n\t\t\t\tvar $topic = $( this ).closest( '.flow-topic' ),\n\t\t\t\t\ttopicId = $topic.data( 'flow-id' ),\n\t\t\t\t\t$container = $topic.find( '.flow-topic-titlebar-container' ),\n\t\t\t\t\t$topicTitleViewMode = $container.find( 'h2.flow-topic-title' ),\n\t\t\t\t\t$editForm = $topic.find( '.flow-ui-topicTitleWidget' ),\n\t\t\t\t\twidget;\n\n\t\t\t\tif ( $editForm.length ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\twidget = new mw.flow.ui.TopicTitleWidget( topicId, {\n\t\t\t\t\teditor: {\n\t\t\t\t\t\tconfirmLeave: !!mw.user.options.get( 'useeditwarning' )\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\twidget\n\t\t\t\t\t.on( 'saveContent', function ( workflow ) {\n\t\t\t\t\t\twidget.$element.remove();\n\n\t\t\t\t\t\treturn self.flowBoard.flowBoardComponentRefreshTopic(\n\t\t\t\t\t\t\t$topic,\n\t\t\t\t\t\t\tworkflow\n\t\t\t\t\t\t);\n\t\t\t\t\t} )\n\t\t\t\t\t.on( 'cancel', function () {\n\t\t\t\t\t\twidget.$element.remove();\n\t\t\t\t\t\t$container.prepend( $topicTitleViewMode );\n\t\t\t\t\t} );\n\n\t\t\t\t$topicTitleViewMode.remove();\n\t\t\t\t$container.prepend( widget.$element );\n\n\t\t\t\tevent.preventDefault();\n\t\t\t} );\n\t};\n\n\t/**\n\t * Re-open any edit topic title widgets with stored data\n\t *\n\t * @param {jQuery} $container\n\t */\n\tmw.flow.Initializer.prototype.reopenTopicTitleWidgets = function ( $container ) {\n\t\t$container.find( 'a.flow-ui-edit-title-link' ).each( function () {\n\t\t\tvar $topic = $( this ).closest( '.flow-topic' ),\n\t\t\t\ttopicId = $topic.data( 'flow-id' );\n\n\t\t\tif ( mw.storage.session.get( 'edit-topic/' + topicId + '/title' ) ) {\n\t\t\t\t$( this ).trigger( 'click' );\n\t\t\t}\n\t\t} );\n\t};\n\n\t/**\n\t * Take over the action of the 'reply' links. This is delegated,\n\t * so it applies to current and future links.\n\t */\n\tmw.flow.Initializer.prototype.setupReplyLinkActions = function () {\n\t\tvar self = this;\n\n\t\t// Replace the handler used for reply links.\n\t\tthis.$component.on( 'click', 'a.flow-reply-link', function () {\n\t\t\t// Store the needed details so we can get rid of the URL in JS mode\n\t\t\tvar replyWidget,\n\t\t\t\texistingWidget,\n\t\t\t\thref = $( this ).attr( 'href' ),\n\t\t\t\turi = new mw.Uri( href ),\n\t\t\t\treplyTo = uri.query.topic_postId,\n\t\t\t\t$topic = $( this ).closest( '.flow-topic' ),\n\t\t\t\tplaceholder = mw.msg( 'flow-reply-topic-title-placeholder', $topic.find( '.flow-topic-title' ).text().trim() ),\n\t\t\t\t// replyTo can refer to a post ID or a topic ID\n\t\t\t\t// For posts, the ReplyWidget should go in .flow-replies\n\t\t\t\t// For topics, it's directly inside the topic\n\t\t\t\t$targetContainer = $( '#flow-post-' + replyTo + ' > .flow-replies, #flow-topic-' + replyTo ),\n\t\t\t\t$existingWidget = $targetContainer.children( '.flow-ui-replyWidget' );\n\n\t\t\t// Check that there's not already a reply widget existing in the same place\n\t\t\tif ( $existingWidget.length > 0 ) {\n\t\t\t\t// Focus the existing reply widget\n\t\t\t\texistingWidget = $existingWidget.data( 'self' );\n\t\t\t\texistingWidget.activateEditor();\n\t\t\t\texistingWidget.focus();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treplyWidget = new mw.flow.ui.ReplyWidget( $topic.data( 'flowId' ), replyTo, {\n\t\t\t\tplaceholder: placeholder,\n\t\t\t\texpandable: false,\n\t\t\t\teditor: {\n\t\t\t\t\tconfirmLeave: !!mw.user.options.get( 'useeditwarning' )\n\t\t\t\t}\n\t\t\t} );\n\t\t\t// Create a reference so we can call it from the DOM above\n\t\t\treplyWidget.$element.data( 'self', replyWidget );\n\n\t\t\t// Add reply form below the post being replied to (WRT max depth)\n\t\t\t$targetContainer.append( replyWidget.$element );\n\t\t\treplyWidget.activateEditor();\n\n\t\t\treplyWidget\n\t\t\t\t.on( 'saveContent', function ( workflow ) {\n\t\t\t\t\treplyWidget.destroy().then( function () {\n\t\t\t\t\t\treplyWidget.$element.remove();\n\n\t\t\t\t\t\t// HACK get the old system to rerender the topic\n\t\t\t\t\t\tself.flowBoard.flowBoardComponentRefreshTopic(\n\t\t\t\t\t\t\t$topic,\n\t\t\t\t\t\t\tworkflow\n\t\t\t\t\t\t);\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t\t.on( 'cancel', function () {\n\t\t\t\t\treplyWidget.destroy().then( function () {\n\t\t\t\t\t\treplyWidget.$element.remove();\n\t\t\t\t\t} );\n\t\t\t\t} );\n\n\t\t\treturn false;\n\t\t} );\n\t};\n\n\t/**\n\t * Re-open any reply widgets with stored data\n\t *\n\t * @param {jQuery} $container\n\t */\n\tmw.flow.Initializer.prototype.reopenReplyWidgets = function ( $container ) {\n\t\tvar queuedClicks = {};\n\n\t\t$container.find( 'a.flow-reply-link' ).each( function () {\n\t\t\tvar href = $( this ).attr( 'href' ),\n\t\t\t\turi = new mw.Uri( href ),\n\t\t\t\treplyTo = uri.query.topic_postId;\n\n\t\t\tif ( mw.storage.session.get( 'reply/' + replyTo + '/ve-docstate' ) ) {\n\t\t\t\t// There can be multiple links to reply to a given topicId. They all behave\n\t\t\t\t// the same but show the widget in a slightly different place.\n\t\t\t\t// Assume the user wanted to use the last one.\n\t\t\t\tqueuedClicks[ replyTo ] = this;\n\t\t\t}\n\t\t} );\n\n\t\tObject.keys( queuedClicks ).forEach( function ( replyTo ) {\n\t\t\t$( queuedClicks[ replyTo ] ).trigger( 'click' );\n\t\t} );\n\t};\n\n\t/**\n\t * Initialize the edit topic summary action\n\t *\n\t * @param {boolean} isFullBoard The page is a full board page\n\t * @param {string} topicId Topic id\n\t * @param {string} [action] Lock action 'lock' or 'unlock'. If not given, the action\n\t * is assumed as summary only.\n\t */\n\tmw.flow.Initializer.prototype.startEditTopicSummary = function ( isFullBoard, topicId, action ) {\n\t\tvar editTopicSummaryWidget,\n\t\t\tself = this,\n\t\t\t$topic = $( '#flow-topic-' + topicId ),\n\t\t\t$summaryContainer = $topic.find( '.flow-topic-summary-container' ),\n\t\t\t$topicSummary = $summaryContainer.find( '.flow-topic-summary' ),\n\t\t\teditorOptions = {\n\t\t\t\tconfirmLeave: !!mw.user.options.get( 'useeditwarning' )\n\t\t\t},\n\t\t\tpageName = mw.config.get( 'wgPageName' ),\n\t\t\ttitle = mw.Title.newFromText( pageName );\n\n\t\tif ( !$summaryContainer.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Don't launch a summary editor when there is one already\n\t\tif ( $summaryContainer.find( '.flow-ui-editTopicSummaryWidget' ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// TODO: This should be managed by the EditTopicSummary widget\n\t\tif ( action === 'lock' || action === 'unlock' ) {\n\t\t\teditorOptions.cancelMsgKey = 'flow-skip-summary';\n\t\t}\n\n\t\teditTopicSummaryWidget = new mw.flow.ui.EditTopicSummaryWidget( topicId, { editor: editorOptions } );\n\t\teditTopicSummaryWidget\n\t\t\t.on( 'saveContent', function ( workflow ) {\n\t\t\t\teditTopicSummaryWidget.destroy().then( function () {\n\t\t\t\t\teditTopicSummaryWidget.$element.remove();\n\n\t\t\t\t\tif ( isFullBoard ) {\n\t\t\t\t\t\t// HACK get the old system to rerender the topic\n\t\t\t\t\t\tself.flowBoard.flowBoardComponentRefreshTopic(\n\t\t\t\t\t\t\t$topic,\n\t\t\t\t\t\t\tworkflow\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// HACK: redirect to topic view\n\t\t\t\t\t\twindow.location.href = title.getUrl();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} )\n\t\t\t.on( 'cancel', function () {\n\t\t\t\teditTopicSummaryWidget.destroy().then( function () {\n\t\t\t\t\teditTopicSummaryWidget.$element.remove();\n\t\t\t\t\tif ( isFullBoard ) {\n\t\t\t\t\t\t$summaryContainer.append( $topicSummary );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// HACK: redirect to topic view\n\t\t\t\t\t\twindow.location.href = title.getUrl();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t$topicSummary.remove();\n\t\t$summaryContainer.append( editTopicSummaryWidget.$element );\n\t\teditTopicSummaryWidget.activate();\n\t};\n\n\t/**\n\t * Replace the editor in no-js pages, like editing in a separate window\n\t *\n\t * @param {jQuery} $element The element to conduct the replacements in\n\t */\n\tmw.flow.Initializer.prototype.replaceNoJSEditor = function ( $element ) {\n\t\tvar editPostWidget,\n\t\t\t$post = $element.parent(),\n\t\t\t$topic = $post.closest( '.flow-topic' ),\n\t\t\tself = this;\n\n\t\tfunction saveOrCancelHandler( workflow ) {\n\t\t\teditPostWidget.destroy().then( function () {\n\t\t\t\teditPostWidget.$element.remove();\n\n\t\t\t\t// HACK get the old system to rerender the topic\n\t\t\t\tself.flowBoard.flowBoardComponentRefreshTopic(\n\t\t\t\t\t$topic,\n\t\t\t\t\tworkflow\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( !$element.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\teditPostWidget = new mw.flow.ui.EditPostWidget( $topic.data( 'flowId' ), $post.data( 'flowId' ), {\n\t\t\teditor: {\n\t\t\t\tconfirmLeave: !!mw.user.options.get( 'useeditwarning' )\n\t\t\t}\n\t\t} );\n\n\t\teditPostWidget\n\t\t\t.on( 'saveContent', saveOrCancelHandler )\n\t\t\t// HACK: In this case, we are in an edge case where the topic already\n\t\t\t// loaded with the editor open. We can't trust the content of the editor\n\t\t\t// for displaying the post in case of a 'cancel' event and we don't have\n\t\t\t// the actual content stored in the DOM anywhere else.\n\t\t\t// We must reload the topic -- just like we do on save -- for a cancel\n\t\t\t// event too.\n\t\t\t.on( 'cancel', saveOrCancelHandler.bind( null, $topic.data( 'flowId' ) ) );\n\n\t\t$element.replaceWith( editPostWidget.$element );\n\t\teditPostWidget.activate();\n\t};\n\n\t/**\n\t * Create an editor widget\n\t *\n\t * @param {jQuery} $domToReplace The element, usually a form, that the new editor replaces\n\t * @param {string} [content] The content of the editing area\n\t * @param {string} [saveMsgKey] The message key for the editor save button\n\t * @param {string} [id] Editor ID\n\t * @return {mw.flow.ui.EditorWidget}\n\t */\n\tmw.flow.Initializer.prototype.createEditorWidget = function ( $domToReplace, content, saveMsgKey, id ) {\n\t\tvar $wrapper,\n\t\t\t$messages = $( '<div>' ).addClass( 'flow-ui-editorContainerWidget-messages' ),\n\t\t\tisProbablyEditable = mw.config.get( 'wgIsProbablyEditable' ),\n\t\t\tanonWarning = new mw.flow.ui.AnonWarningWidget( {\n\t\t\t\tisProbablyEditable: isProbablyEditable\n\t\t\t} ),\n\t\t\tcanNotEdit = new mw.flow.ui.CanNotEditWidget( new mw.flow.dm.APIHandler(), {\n\t\t\t\tuserGroups: mw.config.get( 'wgUserGroups' ),\n\t\t\t\trestrictionEdit: mw.config.get( 'wgRestrictionEdit' ),\n\t\t\t\tisProbablyEditable: isProbablyEditable\n\t\t\t} ),\n\t\t\tcaptcha = new mw.flow.dm.Captcha(),\n\t\t\tcaptchaWidget = new mw.flow.ui.CaptchaWidget( captcha ),\n\t\t\terror = new OO.ui.LabelWidget( {\n\t\t\t\tclasses: [ 'flow-ui-boardDescriptionWidget-error flow-errors flow-errorbox mw-message-box mw-message-box-error' ]\n\t\t\t} ),\n\t\t\teditor = new mw.flow.ui.EditorWidget( {\n\t\t\t\tsaveMsgKey: saveMsgKey,\n\t\t\t\tconfirmLeave: !!mw.user.options.get( 'useeditwarning' ),\n\t\t\t\tid: id\n\t\t\t} );\n\n\t\tfunction handleFailure( errorCode, errorObj ) {\n\t\t\tcaptchaWidget.model.update( errorCode, errorObj );\n\n\t\t\tif ( !captchaWidget.model.isRequired() ) {\n\t\t\t\terror.setLabel( new OO.ui.HtmlSnippet( errorObj.error && errorObj.error.info || errorObj.exception ) );\n\t\t\t\terror.toggle( true );\n\t\t\t}\n\n\t\t\teditor.popPending();\n\t\t}\n\n\t\terror.toggle( false );\n\t\teditor.toggle( true );\n\t\tanonWarning.toggle( mw.user.isAnon() );\n\t\tcanNotEdit.toggle( !isProbablyEditable );\n\n\t\t$wrapper = $( '<div>' )\n\t\t\t.append(\n\t\t\t\t$messages.append(\n\t\t\t\t\terror.$element,\n\t\t\t\t\tcaptchaWidget.$element,\n\t\t\t\t\tanonWarning.$element,\n\t\t\t\t\tcanNotEdit.$element\n\t\t\t\t),\n\t\t\t\teditor.$element\n\t\t\t);\n\n\t\t$domToReplace.replaceWith( $wrapper );\n\n\t\t// Prepare the editor\n\t\teditor.pushPending();\n\t\teditor.activate( { content: content || '', format: 'wikitext' } )\n\t\t\t.then( function () {\n\t\t\t\teditor.popPending();\n\t\t\t} );\n\n\t\teditor\n\t\t\t.on( 'saveContent', function ( content, contentFormat ) {\n\t\t\t\tvar captchaResponse;\n\n\t\t\t\teditor.pushPending();\n\n\t\t\t\tcaptchaResponse = captchaWidget.getResponse();\n\n\t\t\t\terror.setLabel( '' );\n\t\t\t\terror.toggle( false );\n\n\t\t\t\t// HACK: This is a cheat so that we can have a single function\n\t\t\t\t// that creates the editor and a single error-handler, but multiple\n\t\t\t\t// uses, especially for the APIhandler in different cases\n\t\t\t\teditor.emit( 'afterSaveContent', content, contentFormat, captchaResponse, handleFailure );\n\t\t\t} )\n\t\t\t.on( 'cancel', function () {\n\t\t\t\teditor.pushPending();\n\t\t\t\teditor.emit( 'afterCancel' );\n\t\t\t\t// returnToBoard();\n\t\t\t} );\n\n\t\treturn editor;\n\t};\n\n\t/**\n\t * Check whether we are on an undo form page\n\t *\n\t * @return {boolean} The page is an in-progress undo form\n\t */\n\tmw.flow.Initializer.prototype.isUndoForm = function () {\n\t\treturn !!$( 'form[data-module=\"topic\"], form[data-module=\"header\"], form[data-module=\"topicsummary\"]' ).length;\n\t};\n\n\tmw.flow.Initializer.prototype.setupUndoPage = function () {\n\t\tvar $undoForm = $( 'form[data-module=\"topic\"], form[data-module=\"header\"], form[data-module=\"topicsummary\"]' ),\n\t\t\tundoType = $undoForm.attr( 'data-module' ),\n\t\t\tpageName = mw.config.get( 'wgPageName' ),\n\t\t\ttitle = mw.Title.newFromText( pageName ),\n\t\t\ttopicId = title.getNameText(),\n\t\t\tpostId = $undoForm.find( 'input[name=\"topic_postId\"]' ).val(),\n\t\t\tprevRevId = $undoForm.find( 'input[name=\"' + undoType + '_prev_revision\"]' ).val(),\n\t\t\tcontent = $undoForm.find( 'textarea' ).val(),\n\t\t\treturnToTitle = function () {\n\t\t\t\tvar url;\n\t\t\t\tif ( undoType === 'topic' ) {\n\t\t\t\t\t// If we're undoing a post edit, redirect to the topic page with the right parameter\n\t\t\t\t\t// and fragment to highlight the post\n\t\t\t\t\turl = title.getUrl( { topic_showPostId: postId } ) + '#flow-post-' + postId;\n\t\t\t\t} else {\n\t\t\t\t\t// When undoing a topic summary edit, redirect to the topic;\n\t\t\t\t\t// when undoing a board description edit, redirect to the board\n\t\t\t\t\turl = title.getUrl();\n\t\t\t\t}\n\t\t\t\twindow.location.href = url;\n\t\t\t},\n\t\t\tapiHandler = new mw.flow.dm.APIHandler(\n\t\t\t\ttitle.getPrefixedDb(),\n\t\t\t\t{ currentRevision: prevRevId }\n\t\t\t),\n\t\t\tsave = ( {\n\t\t\t\ttopic: apiHandler.savePost.bind( apiHandler, topicId, postId ),\n\t\t\t\theader: apiHandler.saveDescription.bind( apiHandler ),\n\t\t\t\ttopicsummary: apiHandler.saveTopicSummary.bind( apiHandler, topicId )\n\t\t\t} )[ undoType ],\n\t\t\tsaveMsgKey = ( {\n\t\t\t\ttopic: [\n\t\t\t\t\t'flow-post-action-edit-post-submit-anonymously',\n\t\t\t\t\t'flow-post-action-edit-post-submit'\n\t\t\t\t],\n\t\t\t\theader: [\n\t\t\t\t\t'flow-edit-header-submit-anonymously',\n\t\t\t\t\t'flow-edit-header-submit'\n\t\t\t\t],\n\t\t\t\ttopicsummary: [\n\t\t\t\t\t'flow-topic-action-update-topic-summary',\n\t\t\t\t\t'flow-topic-action-update-topic-summary'\n\t\t\t\t]\n\t\t\t} )[ undoType ][ mw.user.isAnon() ? 0 : 1 ],\n\t\t\teditor = this.createEditorWidget( $undoForm, content, saveMsgKey, 'undo/' + prevRevId );\n\n\t\tif (\n\t\t\tmw.config.get( 'wgEditSubmitButtonLabelPublish' ) &&\n\t\t\tundoType !== 'topicsummary'\n\t\t) {\n\t\t\t// i18n messages:\n\t\t\t// 'flow-post-action-edit-post-submit-anonymously-publish',\n\t\t\t// 'flow-post-action-edit-post-submit-publish'\n\t\t\t// 'flow-edit-header-submit-anonymously-publish',\n\t\t\t// 'flow-edit-header-submit-publish'\n\t\t\tsaveMsgKey += '-publish';\n\t\t}\n\t\teditor\n\t\t\t.on( 'afterSaveContent', function ( content, contentFormat, captcha, handleFailure ) {\n\t\t\t\tsave( content, contentFormat, captcha )\n\t\t\t\t\t.then(\n\t\t\t\t\t\t// Success\n\t\t\t\t\t\treturnToTitle,\n\n\t\t\t\t\t\t// Failure\n\t\t\t\t\t\thandleFailure\n\t\t\t\t\t);\n\t\t\t} )\n\t\t\t.on( 'afterCancel', returnToTitle );\n\t};\n\n\t/**\n\t * Finish the loading process\n\t */\n\tmw.flow.Initializer.prototype.finishLoading = function () {\n\t\tif ( this.$component ) {\n\t\t\tthis.$component.addClass( 'flow-component-ready' );\n\t\t}\n\t\t$( '.flow-ui-load-overlay' ).addClass( 'oo-ui-element-hidden' );\n\t};\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/tours/flowOptIn.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":3,"column":26,"nodeType":"CallExpression","endLine":3,"endColumn":54,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":2,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":5,"column":36,"nodeType":"CallExpression","endLine":5,"endColumn":61,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/sql/tables.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/qunit/engine/misc/test_flow-handlebars.js","messages":[],"suppressedMessages":[{"ruleId":"no-useless-concat","severity":2,"message":"Unexpected string concatenation of literals.","line":99,"column":11,"nodeType":"BinaryExpression","messageId":"unexpectedConcat","endLine":99,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-useless-concat","severity":2,"message":"Unexpected string concatenation of literals.","line":106,"column":12,"nodeType":"BinaryExpression","messageId":"unexpectedConcat","endLine":106,"endColumn":13,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/engine/misc/test_jquery.findWithParent.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/engine/misc/test_mw-ui.enhance.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-sizzle","severity":2,"message":"Selector extensions are not allowed","line":41,"column":23,"nodeType":"CallExpression","endLine":41,"endColumn":92,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/flow/dm/test_mw.flow.dm.Board.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/flow/dm/test_mw.flow.dm.Content.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/flow/dm/test_mw.flow.dm.Post.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/flow/dm/test_mw.flow.dm.System.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/flow/dm/test_mw.flow.dm.Topic.js","messages":[{"ruleId":"no-shadow","severity":1,"message":"'operation' is already declared in the upper scope on line 6 column 39.","line":7,"column":38,"nodeType":"Identifier","messageId":"noShadow","endLine":7,"endColumn":47}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"QUnit.module( 'ext.flow.dm mw.flow.dm.Topic' );\n\n/* Tests */\n\nQUnit.test( 'Load topics', function ( assert ) {\n\tvar i, j, ilen, jlen, topic, result, operation, cases,\n\t\texecuteOperation = function ( obj, operation, params ) {\n\t\t\treturn obj[ operation ].apply( obj, params );\n\t\t};\n\n\tcases = [\n\t\t{\n\t\t\targs: {\n\t\t\t\tid: 'sgl9yjs9nwgmc7l7',\n\t\t\t\tdata: {\n\t\t\t\t\tworkflowId: 'sgl9yjs9nwgmc7l7',\n\t\t\t\t\tarticleTitle: 'Topic:Sgl9yjs9nwgmc7l7',\n\t\t\t\t\trevisionId: 'sgl9yjsb80w9oeaz',\n\t\t\t\t\ttimestamp: '20150503034600',\n\t\t\t\t\tchangeType: 'new-post',\n\t\t\t\t\tdateFormats: [],\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\t'topic-of-post': {\n\t\t\t\t\t\t\tplaintext: 'This is the title of the topic.'\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tisOriginalContent: true,\n\t\t\t\t\tisModerated: false,\n\t\t\t\t\tlinks: {\n\t\t\t\t\t\t'topic-history': {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&action=history',\n\t\t\t\t\t\t\ttitle: 'History',\n\t\t\t\t\t\t\ttext: 'History'\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttopic: {\n\t\t\t\t\t\t\turl: '/wiki/index.php/Topic:Sgl9yjs9nwgmc7l7',\n\t\t\t\t\t\t\ttitle: 'topic',\n\t\t\t\t\t\t\ttext: 'topic'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost: {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&topic_showPostId=sgl9yjs9nwgmc7l7#flow-post-sgl9yjs9nwgmc7l7',\n\t\t\t\t\t\t\ttitle: 'post',\n\t\t\t\t\t\t\ttext: 'post'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'topic-revision': {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&topic_revId=sgl9yjsb80w9oeaz&action=single-view',\n\t\t\t\t\t\t\ttitle: 'topic revision',\n\t\t\t\t\t\t\ttext: 'topic revision'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'watch-topic': {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&action=watch',\n\t\t\t\t\t\t\ttitle: 'Watch',\n\t\t\t\t\t\t\ttext: 'Watch'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'unwatch-topic': {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&action=unwatch',\n\t\t\t\t\t\t\ttitle: 'Unwatch',\n\t\t\t\t\t\t\ttext: 'Unwatch'\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tactions: {\n\t\t\t\t\t\treply: {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&action=reply&topic_postId=sgl9yjs9nwgmc7l7#flow-post-sgl9yjs9nwgmc7l7-form-content',\n\t\t\t\t\t\t\ttitle: 'Reply',\n\t\t\t\t\t\t\ttext: 'Reply'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tedit: {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&action=edit-title&topic_revId=sgl9yjsb80w9oeaz',\n\t\t\t\t\t\t\ttitle: 'Edit title',\n\t\t\t\t\t\t\ttext: 'Edit title'\n\t\t\t\t\t\t},\n\t\t\t\t\t\thide: {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&action=moderate-topic&topic_moderationState=hide',\n\t\t\t\t\t\t\ttitle: 'Hide topic',\n\t\t\t\t\t\t\ttext: 'Hide topic'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdelete: {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&action=moderate-topic&topic_moderationState=delete',\n\t\t\t\t\t\t\ttitle: 'Delete topic',\n\t\t\t\t\t\t\ttext: 'Delete topic'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuppress: {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&action=moderate-topic&topic_moderationState=suppress',\n\t\t\t\t\t\t\ttitle: 'Suppress topic',\n\t\t\t\t\t\t\ttext: 'Suppress topic'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsummarize: {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&action=edit-topic-summary',\n\t\t\t\t\t\t\ttitle: 'Summarize',\n\t\t\t\t\t\t\ttext: 'Summarize'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlock: {\n\t\t\t\t\t\t\turl: '/wiki/index.php?title=Topic:Sgl9yjs9nwgmc7l7&action=lock-topic&flow_moderationState=lock',\n\t\t\t\t\t\t\ttitle: 'Lock topic',\n\t\t\t\t\t\t\ttext: 'Lock topic'\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tsize: {\n\t\t\t\t\t\told: '0',\n\t\t\t\t\t\tnew: '16'\n\t\t\t\t\t},\n\t\t\t\t\tauthor: {\n\t\t\t\t\t\tname: '127.0.0.1',\n\t\t\t\t\t\twiki: 'mediawiki',\n\t\t\t\t\t\tgender: 'unknown',\n\t\t\t\t\t\tlinks: {\n\t\t\t\t\t\t\tcontribs: {\n\t\t\t\t\t\t\t\turl: '/wiki/index.php/Special:Contributions/127.0.0.1',\n\t\t\t\t\t\t\t\ttitle: 'Contributions/127.0.0.1',\n\t\t\t\t\t\t\t\texists: true\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tuserpage: {\n\t\t\t\t\t\t\t\turl: '/wiki/index.php/User:127.0.0.1',\n\t\t\t\t\t\t\t\ttitle: '127.0.0.1',\n\t\t\t\t\t\t\t\texists: false\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttalk: {\n\t\t\t\t\t\t\t\turl: '/wiki/index.php/User_talk:127.0.0.1',\n\t\t\t\t\t\t\t\ttitle: 'User talk:127.0.0.1',\n\t\t\t\t\t\t\t\texists: true\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tblock: {\n\t\t\t\t\t\t\t\turl: '/wiki/index.php/Special:Block/127.0.0.1',\n\t\t\t\t\t\t\t\ttitle: 'block',\n\t\t\t\t\t\t\t\texists: true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tid: 0\n\t\t\t\t\t},\n\t\t\t\t\tlastEditUser: {\n\t\t\t\t\t\tname: null,\n\t\t\t\t\t\twiki: null,\n\t\t\t\t\t\tgender: 'unknown',\n\t\t\t\t\t\tlinks: [],\n\t\t\t\t\t\tid: null\n\t\t\t\t\t},\n\t\t\t\t\tlastEditId: null,\n\t\t\t\t\tpreviousRevisionId: null,\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\tcontent: 'This is the title of the topic.',\n\t\t\t\t\t\tformat: 'topic-title-wikitext'\n\t\t\t\t\t},\n\t\t\t\t\tisWatched: true,\n\t\t\t\t\twatchable: true,\n\t\t\t\t\treplyToId: null,\n\t\t\t\t\tpostId: 'sgl9yjs9nwgmc7l7',\n\t\t\t\t\tisMaxThreadingDepth: false,\n\t\t\t\t\tcreator: {\n\t\t\t\t\t\tname: '127.0.0.1',\n\t\t\t\t\t\twiki: 'mediawiki',\n\t\t\t\t\t\tgender: 'unknown',\n\t\t\t\t\t\tlinks: {\n\t\t\t\t\t\t\tcontribs: {\n\t\t\t\t\t\t\t\turl: '/wiki/index.php/Special:Contributions/127.0.0.1',\n\t\t\t\t\t\t\t\ttitle: 'Contributions/127.0.0.1',\n\t\t\t\t\t\t\t\texists: true\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tuserpage: {\n\t\t\t\t\t\t\t\turl: '/wiki/index.php/User:127.0.0.1',\n\t\t\t\t\t\t\t\ttitle: '127.0.0.1',\n\t\t\t\t\t\t\t\texists: false\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttalk: {\n\t\t\t\t\t\t\t\turl: '/wiki/index.php/User_talk:127.0.0.1',\n\t\t\t\t\t\t\t\ttitle: 'User talk:127.0.0.1',\n\t\t\t\t\t\t\t\texists: true\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tblock: {\n\t\t\t\t\t\t\t\turl: '/wiki/index.php/Special:Block/127.0.0.1',\n\t\t\t\t\t\t\t\ttitle: 'block',\n\t\t\t\t\t\t\t\texists: true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tid: 0\n\t\t\t\t\t},\n\t\t\t\t\treplies: [\n\t\t\t\t\t\t'sgl9yjsb82vasga3'\n\t\t\t\t\t],\n\t\t\t\t\treply_count: 1,\n\t\t\t\t\tlast_updated_readable: '03:46, 3 May 2015',\n\t\t\t\t\tlast_updated: 1430624760000\n\t\t\t\t}\n\t\t\t},\n\t\t\toperations: [\n\t\t\t\t{\n\t\t\t\t\tmethod: 'getId',\n\t\t\t\t\texpected: 'sgl9yjs9nwgmc7l7',\n\t\t\t\t\tmsg: 'Get topic id'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: 'getContent',\n\t\t\t\t\texpected: 'This is the title of the topic.',\n\t\t\t\t\tmsg: 'Get topic content in default format'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: 'isModerated',\n\t\t\t\t\texpected: false,\n\t\t\t\t\tmsg: 'Check unmoderated topic moderation state'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: 'setModerated',\n\t\t\t\t\tparams: [ true, 'suppressed', 'Some moderation reason', {} ]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: 'isModerated',\n\t\t\t\t\texpected: true,\n\t\t\t\t\tmsg: 'Moderate topic'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: 'getModerationState',\n\t\t\t\t\texpected: 'suppressed',\n\t\t\t\t\tmsg: 'Get moderated topic state'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: 'getModerationReason',\n\t\t\t\t\texpected: 'Some moderation reason',\n\t\t\t\t\tmsg: 'Get moderated topic reason'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: 'isWatched',\n\t\t\t\t\texpected: true,\n\t\t\t\t\tmsg: 'Check watched topic watch state'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: 'toggleWatched',\n\t\t\t\t\tparams: [ false ]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tmethod: 'isWatched',\n\t\t\t\t\texpected: false,\n\t\t\t\t\tmsg: 'Unwatch topic'\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t];\n\n\tfor ( i = 0, ilen = cases.length; i < ilen; i++ ) {\n\t\ttopic = new mw.flow.dm.Topic( cases[ i ].args.id, cases[ i ].args.data );\n\n\t\tfor ( j = 0, jlen = cases[ i ].operations.length; j < jlen; j++ ) {\n\t\t\toperation = cases[ i ].operations[ j ];\n\t\t\tresult = executeOperation( topic, operation.method, operation.params || [] );\n\t\t\tif ( operation.expected !== undefined ) {\n\t\t\t\t// Test\n\t\t\t\tassert.deepEqual( result, operation.expected, operation.msg );\n\t\t\t}\n\t\t}\n\t}\n} );\n","usedDeprecatedRules":[]}] --- end --- $ ./node_modules/.bin/grunt stylelint --- stdout --- Running "stylelint:all" (stylelint) task modules/styles/board/header.less 42:14 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation modules/styles/board/topic/post.less 214:4 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 223:5 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation modules/styles/board/topic/titlebar.less 66:22 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 85:22 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation modules/styles/common.less 95:13 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 185:21 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 229:21 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 281:6 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 286:10 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 290:18 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 328:21 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 334:21 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 338:37 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 342:37 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation modules/styles/flow/widgets/mw.flow.ui.NavigationWidget.less 57:3 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation modules/styles/mediawiki.ui/modal.less 23:3 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation modules/styles/mediawiki.ui/tooltips.less 52:4 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 107:5 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 124:5 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 142:5 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 161:5 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 179:28 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 183:51 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 188:51 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 193:52 ✖ Expected double colon pseudo-element notation selector-pseudo-element-colon-notation 26 problems (26 errors, 0 warnings) ⚠ 26 warnings Warning: Task "stylelint:all" failed. Use --force to continue. Aborted due to warnings. --- end --- $ ./node_modules/.bin/stylelint modules/styles/flow/widgets/editor/mw.flow.ui.EditorWidget.less modules/styles/mediawiki.ui/forms.less modules/styles/flow/widgets/mw.flow.ui.SidebarExpandWidget.less modules/styles/mediawiki.ui/tooltips.less modules/styles/board/replycount.less modules/styles/board/topic/watchlist.less modules/styles/flow.colors.less modules/tours/flowOptIn.less modules/styles/mediawiki.ui/modal.less modules/styles/flow/widgets/mw.flow.ui.ReplyWidget.less modules/styles/board/navigation.less modules/styles/errors.less modules/styles/board/header.less modules/styles/flow/widgets/mw.flow.ui.NavigationWidget.less modules/styles/board/form-actions.less modules/styles/flow/widgets/mw.flow.ui.CategoryItemWidget.less modules/styles/board/menu.less modules/styles/nojs.less modules/styles/js.less modules/styles/common.less modules/styles/flow.variables.less modules/styles/flow/widgets/mw.flow.ui.TopicMenuSelectWidget.less modules/styles/history/history-line.less modules/styles/flow/widgets/editor/mw.flow.ui.editor-wikimediauitheme.less modules/styles/board/topic/meta.less modules/styles/flow/widgets/mw.flow.ui.TopicTitleWidget.less modules/styles/flow/widgets/mw.flow.ui.NewTopicWidget.less modules/styles/flow/widgets/editor/mw.flow.ui.EditorControlsWidget.less modules/styles/board/terms-of-use.less modules/editor/editors/visualeditor/mw.flow.ve.Target.less modules/styles/board/topic/post.less modules/styles/mediawiki.ui/anchors.less modules/styles/board/moderated.less modules/styles/flow/widgets/mw.flow.ui.ReorderTopicsWidget.less modules/styles/flow/widgets/mw.flow.ui.CategoriesWidget.less modules/styles/flow/widgets/editor/mw.flow.ui.editor-apextheme.less modules/styles/flow/widgets/editor/mw.flow.ui.CanNotEditWidget.less modules/styles/flow/widgets/editor/mw.flow.ui.AnonWarningWidget.less modules/styles/board/topic/titlebar.less modules/styles/board/timestamps.less modules/styles/board/topic/summary.less -f json --- stdout --- [{"source":"/src/repo/modules/styles/flow/widgets/editor/mw.flow.ui.EditorWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/mediawiki.ui/forms.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/mw.flow.ui.SidebarExpandWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/mediawiki.ui/tooltips.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":52,"column":4,"endLine":52,"endColumn":5,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":107,"column":5,"endLine":107,"endColumn":6,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":124,"column":5,"endLine":124,"endColumn":6,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":142,"column":5,"endLine":142,"endColumn":6,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":161,"column":5,"endLine":161,"endColumn":6,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":179,"column":28,"endLine":179,"endColumn":29,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":183,"column":51,"endLine":183,"endColumn":52,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":188,"column":51,"endLine":188,"endColumn":52,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":193,"column":52,"endLine":193,"endColumn":53,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"}]},{"source":"/src/repo/modules/styles/board/replycount.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/board/topic/watchlist.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow.colors.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/tours/flowOptIn.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/mediawiki.ui/modal.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":23,"column":3,"endLine":23,"endColumn":4,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"}]},{"source":"/src/repo/modules/styles/flow/widgets/mw.flow.ui.ReplyWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/board/navigation.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/errors.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/board/header.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":42,"column":14,"endLine":42,"endColumn":15,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"}]},{"source":"/src/repo/modules/styles/flow/widgets/mw.flow.ui.NavigationWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":57,"column":3,"endLine":57,"endColumn":4,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"}]},{"source":"/src/repo/modules/styles/board/form-actions.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/mw.flow.ui.CategoryItemWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/board/menu.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/nojs.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/js.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/common.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":95,"column":13,"endLine":95,"endColumn":14,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":185,"column":21,"endLine":185,"endColumn":22,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":229,"column":21,"endLine":229,"endColumn":22,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":281,"column":6,"endLine":281,"endColumn":7,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":286,"column":10,"endLine":286,"endColumn":11,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":290,"column":18,"endLine":290,"endColumn":19,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":328,"column":21,"endLine":328,"endColumn":22,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":334,"column":21,"endLine":334,"endColumn":22,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":338,"column":37,"endLine":338,"endColumn":38,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":342,"column":37,"endLine":342,"endColumn":38,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"}]},{"source":"/src/repo/modules/styles/flow.variables.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/mw.flow.ui.TopicMenuSelectWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/history/history-line.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/editor/mw.flow.ui.editor-wikimediauitheme.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/board/topic/meta.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/mw.flow.ui.TopicTitleWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/mw.flow.ui.NewTopicWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/editor/mw.flow.ui.EditorControlsWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/board/terms-of-use.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/editor/editors/visualeditor/mw.flow.ve.Target.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/board/topic/post.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":214,"column":4,"endLine":214,"endColumn":5,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":223,"column":5,"endLine":223,"endColumn":6,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"}]},{"source":"/src/repo/modules/styles/mediawiki.ui/anchors.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/board/moderated.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/mw.flow.ui.ReorderTopicsWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/mw.flow.ui.CategoriesWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/editor/mw.flow.ui.editor-apextheme.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/editor/mw.flow.ui.CanNotEditWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/flow/widgets/editor/mw.flow.ui.AnonWarningWidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/board/topic/titlebar.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":66,"column":22,"endLine":66,"endColumn":23,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":85,"column":22,"endLine":85,"endColumn":23,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"}]},{"source":"/src/repo/modules/styles/board/timestamps.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/modules/styles/board/topic/summary.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]}] --- end --- $ /usr/bin/npm ci --legacy-peer-deps --- stderr --- npm WARN deprecated debug@3.2.6: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) --- stdout --- added 440 packages, and audited 441 packages in 4s 73 packages are looking for funding run `npm fund` for details found 0 vulnerabilities --- end --- $ /usr/bin/npm test --- stdout --- > flow@0.0.0 test > grunt test Running "tyops:src" (tyops) task >> No typos found; 953 files checked for 13 typos. Running "eslint:all" (eslint) task /src/repo/modules/engine/components/board/features/flow-board-loadmore.js 361:52 warning '$topic' is already declared in the upper scope on line 352 column 62 no-shadow /src/repo/modules/engine/components/common/flow-component-events.js 316:40 warning 'args' is already declared in the upper scope on line 285 column 4 no-shadow 336:40 warning 'args' is already declared in the upper scope on line 285 column 4 no-shadow 337:8 warning 'queryMap' is already declared in the upper scope on line 286 column 4 no-shadow 342:10 warning 'args' is already declared in the upper scope on line 336 column 40 no-shadow 351:7 warning 'args' is already declared in the upper scope on line 336 column 40 no-shadow /src/repo/modules/engine/components/flow-component.js 96:43 warning 'timestamp' is already declared in the upper scope on line 95 column 7 no-shadow /src/repo/modules/engine/components/flow-registry.js 42:5 warning 'i' is already declared in the upper scope on line 31 column 10 no-shadow /src/repo/modules/engine/misc/flow-handlebars.js 117:5 warning 'target' is already declared in the upper scope on line 113 column 70 no-shadow /src/repo/modules/engine/misc/jquery.findWithParent.js 51:33 warning 'selector' is already declared in the upper scope on line 46 column 35 no-shadow /src/repo/modules/flow/ui/widgets/mw.flow.ui.NavigationWidget.js 84:9 warning 'scrollTop' is already declared in the upper scope on line 76 column 7 no-shadow /src/repo/modules/mw.flow.Initializer.js 969:35 warning 'content' is already declared in the upper scope on line 909 column 79 no-shadow 1061:40 warning 'content' is already declared in the upper scope on line 1010 column 4 no-shadow /src/repo/tests/qunit/flow/dm/test_mw.flow.dm.Topic.js 7:38 warning 'operation' is already declared in the upper scope on line 6 column 39 no-shadow ✖ 14 problems (0 errors, 14 warnings) Running "stylelint:all" (stylelint) task >> Linted 41 files without errors Running "banana:Flow" (banana) task >> 2 message directories checked. Done. --- end --- $ /usr/bin/npm audit --json --legacy-peer-deps --- stdout --- { "auditReportVersion": 2, "vulnerabilities": {}, "metadata": { "vulnerabilities": { "info": 0, "low": 0, "moderate": 0, "high": 0, "critical": 0, "total": 0 }, "dependencies": { "prod": 1, "dev": 440, "optional": 0, "peer": 0, "peerOptional": 0, "total": 440 } } } --- end --- $ package-lock-lint package-lock.json --- stdout --- Checking package-lock.json --- end --- build: Updating npm dependencies * eslint-config-wikimedia: 0.22.1 → 0.24.0 * grunt: 1.5.3 → 1.6.1 * stylelint-config-wikimedia: 0.13.1 → 0.14.0 The following rules are failing and were disabled: * selector-pseudo-element-colon-notation $ git add . --- stdout --- --- end --- $ git commit -F /tmp/tmpvbg9eyu_ --- stdout --- [master cd67b27] build: Updating npm dependencies 3 files changed, 857 insertions(+), 870 deletions(-) --- end --- $ git format-patch HEAD~1 --stdout --- stdout --- From cd67b271bd5221653a719be4fbbd2d9f3d3d3d8e Mon Sep 17 00:00:00 2001 From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org> Date: Tue, 14 Mar 2023 22:12:53 +0000 Subject: [PATCH] build: Updating npm dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * eslint-config-wikimedia: 0.22.1 → 0.24.0 * grunt: 1.5.3 → 1.6.1 * stylelint-config-wikimedia: 0.13.1 → 0.14.0 The following rules are failing and were disabled: * selector-pseudo-element-colon-notation Change-Id: I7b2aeec026c93374d9f1616501ac5177ea2c43b0 --- .stylelintrc.json | 3 +- package-lock.json | 1718 ++++++++++++++++++++++----------------------- package.json | 6 +- 3 files changed, 857 insertions(+), 870 deletions(-) diff --git a/.stylelintrc.json b/.stylelintrc.json index a92a480..6fb8ca3 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -4,6 +4,7 @@ "no-descending-specificity": null, "selector-no-vendor-prefix": null, "value-keyword-case": null, - "declaration-property-unit-disallowed-list": null + "declaration-property-unit-disallowed-list": null, + "selector-pseudo-element-colon-notation": null } } diff --git a/package-lock.json b/package-lock.json index 556190b..2e6789b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,14 +8,14 @@ "name": "flow", "version": "0.0.0", "devDependencies": { - "eslint-config-wikimedia": "0.22.1", - "grunt": "1.5.3", + "eslint-config-wikimedia": "0.24.0", + "grunt": "1.6.1", "grunt-banana-checker": "0.10.0", "grunt-contrib-watch": "1.1.0", "grunt-eslint": "24.0.0", "grunt-stylelint": "0.18.0", "grunt-tyops": "0.1.0", - "stylelint-config-wikimedia": "0.13.1" + "stylelint-config-wikimedia": "0.14.0" } }, "node_modules/@babel/code-frame": { @@ -67,38 +67,91 @@ "node": ">=4" } }, + "node_modules/@csstools/selector-specificity": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz", + "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4", + "postcss-selector-parser": "^6.0.10" + } + }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", - "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", + "version": "0.23.6", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz", + "integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==", "dev": true, "dependencies": { - "comment-parser": "1.3.0", + "comment-parser": "1.3.1", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" + "jsdoc-type-pratt-parser": "~2.2.5" }, "engines": { "node": "^12 || ^14 || ^16 || ^17" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", + "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", + "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.5.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/argparse": { @@ -107,15 +160,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -128,20 +172,54 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", + "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -226,9 +304,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -385,6 +463,12 @@ "safe-json-parse": "~1.0.1" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -437,9 +521,9 @@ "dev": true }, "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, "engines": { "node": ">=6" @@ -584,15 +668,24 @@ } }, "node_modules/ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, "node_modules/clean-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, "dependencies": { "escape-string-regexp": "^1.0.5" @@ -612,18 +705,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "dependencies": { - "is-regexp": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -640,9 +721,9 @@ "dev": true }, "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, "node_modules/colors": { @@ -655,9 +736,9 @@ } }, "node_modules/comment-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true, "engines": { "node": ">= 12.0.0" @@ -693,9 +774,9 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", @@ -723,9 +804,9 @@ } }, "node_modules/css-functions-list": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz", - "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", "dev": true, "engines": { "node": ">=12.22" @@ -734,7 +815,7 @@ "node_modules/css-rule-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha1-N4bnGYmD2WWibjGVfgkHjLt3BaI=", + "integrity": "sha512-qiio/Zkr8I19jh/XuzEkK8OKDQRTrEYaRyIHy4Bwh/tPUe0w8GcQs7r6x24Yc9lT+FbnZFYULxEIXCmaymguUQ==", "dev": true, "dependencies": { "css-tokenize": "^1.0.1", @@ -749,7 +830,7 @@ "node_modules/css-rule-stream/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -761,7 +842,7 @@ "node_modules/css-rule-stream/node_modules/through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "dependencies": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -771,7 +852,7 @@ "node_modules/css-tokenize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", - "integrity": "sha1-RiXLHtohwUOFi3+B1oA8HSb8FL4=", + "integrity": "sha512-gLmmbJdwH9HLY4bcA17lnZ8GgPwEXRbvxBJGHnkiB6gLhRpTzjkjtMIvz7YORGW/Ptv2oMk8b5g+u7mRD6Dd7A==", "dev": true, "dependencies": { "inherits": "^2.0.1", @@ -791,9 +872,9 @@ } }, "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true, "engines": { "node": "*" @@ -968,7 +1049,7 @@ "node_modules/duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", "dev": true, "dependencies": { "readable-stream": "~1.1.9" @@ -1035,13 +1116,18 @@ } }, "node_modules/eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.1.0", - "@humanwhocodes/config-array": "^0.9.2", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", + "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.1", + "@eslint/js": "8.36.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -1049,32 +1135,32 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", + "espree": "^9.5.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -1087,25 +1173,26 @@ } }, "node_modules/eslint-config-wikimedia": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.22.1.tgz", - "integrity": "sha512-TtN+gWJrcW0i1sEu7vPE1tHpEilrMUuTxP6UK97Amvva/KDV9/tvRUifGhw0q5uBswp+HWgF12p8rq68hZqMbA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz", + "integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==", "dev": true, "dependencies": { - "eslint": "^8.6.0", + "browserslist-config-wikimedia": "^0.4.0", + "eslint": "^8.31.0", "eslint-plugin-compat": "^4.0.2", - "eslint-plugin-es": "^4.1.0", - "eslint-plugin-jsdoc": "^37.7.1", - "eslint-plugin-json-es": "^1.5.4", - "eslint-plugin-mediawiki": "^0.3.0", + "eslint-plugin-es-x": "^5.2.1", + "eslint-plugin-jsdoc": "39.2.2", + "eslint-plugin-json-es": "^1.5.7", + "eslint-plugin-mediawiki": "^0.4.0", "eslint-plugin-mocha": "^9.0.0", "eslint-plugin-no-jquery": "^2.7.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-qunit": "^7.2.0", - "eslint-plugin-unicorn": "^40.1.0", - "eslint-plugin-vue": "^8.4.1", - "eslint-plugin-wdio": "^7.4.2", - "eslint-plugin-yml": "^0.13.0" + "eslint-plugin-unicorn": "^42.0.0", + "eslint-plugin-vue": "^8.7.1", + "eslint-plugin-wdio": "^7.19.4", + "eslint-plugin-yml": "^0.14.0" } }, "node_modules/eslint-plugin-compat": { @@ -1191,42 +1278,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "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==", "dev": true, "dependencies": { - "eslint-utils": "^2.0.0", + "eslint-utils": "^2.0.0 || ^3.0.0", "regexpp": "^3.0.0" }, "engines": { "node": ">=8.10.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/ota-meshi" }, "peerDependencies": { "eslint": ">=4.19.1" } }, "node_modules/eslint-plugin-jsdoc": { - "version": "37.9.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.4.tgz", - "integrity": "sha512-VxCyGgUNNnj2T4bb1OqltkbsPp3ehRzR5onIfh6zGrAvISmvgX/sbxUlh3YyGqWtjOTSBCURdKdmelSXEIHnlA==", + "version": "39.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz", + "integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", + "@es-joy/jsdoccomment": "~0.23.1", + "comment-parser": "1.3.1", + "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "spdx-expression-parse": "^3.0.1" }, "engines": { - "node": "^12 || ^14 || ^16 || ^17" + "node": "^14 || ^16 || ^17" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" @@ -1244,14 +1330,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-plugin-json-es": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.4.tgz", - "integrity": "sha512-DdjnNMUZ1iMrUXfxUQrTU7IyoEOsa4Kg0Zd6nOyOq1mUb75deK7NrcbI1FlWGdGVgqX99bUOD27i81EYiG794Q==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz", + "integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0" + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1" }, "peerDependencies": { "eslint": ">= 7" @@ -1267,117 +1368,18 @@ } }, "node_modules/eslint-plugin-mediawiki": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.3.0.tgz", - "integrity": "sha512-Lhyj2PSkhDzYSc1PNbURysY/WoqvY0brw558ZInT3erzf5KUlro18MTKFdV+nlht475ZgnsfHsgfg6Ut2w1SVg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.4.0.tgz", + "integrity": "sha512-Eufptb8lrElYwIONvgxlMBnPD6PYT4xAFprWlBxV5brCmUh8MZ41+lMxt2TPwEC6C85ngflkVez8BV8tWS9RyQ==", "dev": true, "dependencies": { - "eslint-plugin-vue": "^7.20.0", + "eslint-plugin-vue": "^8.7.1", "upath": "^2.0.1" }, "peerDependencies": { "eslint": ">=5.0.0" } }, - "node_modules/eslint-plugin-mediawiki/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/eslint-plugin-mediawiki/node_modules/eslint-plugin-vue": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", - "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.1.0", - "natural-compare": "^1.4.0", - "semver": "^6.3.0", - "vue-eslint-parser": "^7.10.0" - }, - "engines": { - "node": ">=8.10" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-mediawiki/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/eslint-plugin-mediawiki/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint-plugin-mediawiki/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/eslint-plugin-mediawiki/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-mediawiki/node_modules/vue-eslint-parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", - "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8.10" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, "node_modules/eslint-plugin-mocha": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz", @@ -1519,9 +1521,9 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "40.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz", - "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==", + "version": "42.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz", + "integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.15.7", @@ -1546,7 +1548,7 @@ "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=7.32.0" + "eslint": ">=8.8.0" } }, "node_modules/eslint-plugin-unicorn/node_modules/eslint-utils": { @@ -1577,13 +1579,15 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.5.0.tgz", - "integrity": "sha512-i1uHCTAKOoEj12RDvdtONWrGzjFm/djkzqfhmQ0d6M/W8KM81mhswd/z+iTZ0jCpdUedW3YRgcVfQ37/J4zoYQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz", + "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==", "dev": true, "dependencies": { "eslint-utils": "^3.0.0", "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", "semver": "^7.3.5", "vue-eslint-parser": "^8.0.1" }, @@ -1622,18 +1626,18 @@ } }, "node_modules/eslint-plugin-wdio": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.4.2.tgz", - "integrity": "sha512-tkISFycJmRFMKsEjetRcAmWSHKJKnw5rKHDxfE7Ob3tF5lbmYlCLfNKH0UwanOpSdulpe52s3K+CBHSd6qUUNQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.25.3.tgz", + "integrity": "sha512-2zbYwV14Md9FNlyhaIILVGPB6w4bu2eJdOTywDUs2Qy4ebcQNwrxB0qCaf7Rm4O+T0Ir+tdYHYBBfbDocSLKng==", "dev": true, "engines": { "node": ">=12.0.0" } }, "node_modules/eslint-plugin-yml": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.13.0.tgz", - "integrity": "sha512-rZvdnhe28jIbgSIZo3qYqkl9hKslyTDfMwqIGDzz873gxghzBw0yeFG+P7sMfOkFfpqwJzZy3IKe2cIiCp4FrA==", + "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==", "dev": true, "dependencies": { "debug": "^4.3.2", @@ -1706,66 +1710,115 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/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/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" }, - "peerDependencies": { - "eslint": ">=5" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/node_modules/eslint-utils/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==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "*" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "yocto-queue": "^0.1.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", + "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "dev": true, "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { @@ -1791,9 +1844,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -1838,18 +1891,6 @@ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, - "node_modules/execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "dependencies": { - "clone-regexp": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -1884,9 +1925,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -1924,10 +1965,13 @@ "dev": true }, "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } }, "node_modules/fastq": { "version": "1.13.0", @@ -1988,31 +2032,18 @@ } }, "node_modules/findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "dependencies": { - "glob": "~5.0.0" - }, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/findup-sync/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" }, "engines": { - "node": "*" + "node": ">= 10.13.0" } }, "node_modules/fined": { @@ -2092,12 +2123,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "node_modules/gaze": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", @@ -2133,18 +2158,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/getobject": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.0.tgz", @@ -2225,9 +2238,9 @@ } }, "node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2291,33 +2304,37 @@ "node": ">= 0.10" } }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "dev": true, "dependencies": { - "dateformat": "~3.0.3", + "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", "exit": "~0.1.2", - "findup-sync": "~0.3.0", + "findup-sync": "~5.0.0", "glob": "~7.1.6", "grunt-cli": "~1.4.3", "grunt-known-options": "~2.0.0", "grunt-legacy-log": "~3.0.0", "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", + "iconv-lite": "~0.6.3", "js-yaml": "~3.14.0", "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" + "nopt": "~3.0.6" }, "bin": { "grunt": "bin/grunt" }, "engines": { - "node": ">=8" + "node": ">=16" } }, "node_modules/grunt-banana-checker": { @@ -2596,21 +2613,21 @@ "dev": true }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -2704,15 +2721,18 @@ "dev": true }, "node_modules/is-builtin-module": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", - "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, "dependencies": { - "builtin-modules": "^3.0.0" + "builtin-modules": "^3.3.0" }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-core-module": { @@ -2766,6 +2786,15 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -2778,15 +2807,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -2823,7 +2843,7 @@ "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, "node_modules/isexe": { @@ -2841,6 +2861,16 @@ "node": ">=0.10.0" } }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2861,9 +2891,9 @@ } }, "node_modules/jsdoc-type-pratt-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.3.tgz", - "integrity": "sha512-QPyxq62Q8veBSDtDrWmqaEPjSCeknUV9dH/OAGt3q9an8qC8UQDqitQiw1NvoMskIESpoRZ6qzt4H3rlK0xo8A==", + "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==", "dev": true, "engines": { "node": ">=12.0.0" @@ -2897,15 +2927,15 @@ } }, "node_modules/known-css-properties": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", - "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", "dev": true }, "node_modules/ldjson-stream": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz", - "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=", + "integrity": "sha512-xw/nNEXafuPSLu8NjjG3+atVVw+8U1APZAQylmwQn19Hgw6rC7QjHvP6MupnHWCrzSm9m0xs5QWkCLuRvBPjgQ==", "dev": true, "dependencies": { "split2": "^0.2.1", @@ -2915,7 +2945,7 @@ "node_modules/ldjson-stream/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -2927,7 +2957,7 @@ "node_modules/ldjson-stream/node_modules/through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "dependencies": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -3026,7 +3056,7 @@ "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, "node_modules/lru-cache": { @@ -3181,23 +3211,11 @@ }, "node_modules/minimist-options/node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, "node_modules/ms": { @@ -3294,11 +3312,17 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", - "dev": true + "node_modules/nth-check": { + "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" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } }, "node_modules/object-assign": { "version": "4.1.1", @@ -3592,9 +3616,9 @@ } }, "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "dev": true, "funding": [ { @@ -3677,9 +3701,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -3847,7 +3871,7 @@ "node_modules/readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -3902,19 +3926,10 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", - "dev": true, - "engines": { - "node": ">=0.1.14" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4224,9 +4239,9 @@ "dev": true }, "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "engines": { "node": ">= 8" @@ -4273,19 +4288,10 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, - "node_modules/specificity": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", - "dev": true, - "bin": { - "specificity": "bin/specificity" - } - }, "node_modules/split2": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", - "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", + "integrity": "sha512-D/oTExYAkC9nWleOCTOyNmAuzfAT/6rHGBA9LIK7FVnGo13CSvrKCUzKenwH6U1s2znY9MqH6v0UQTEDa3vJmg==", "dev": true, "dependencies": { "through2": "~0.6.1" @@ -4294,7 +4300,7 @@ "node_modules/split2/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -4306,7 +4312,7 @@ "node_modules/split2/node_modules/through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "dependencies": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -4388,52 +4394,49 @@ "dev": true }, "node_modules/stylelint": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz", - "integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==", + "version": "14.16.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", + "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", "dev": true, "dependencies": { + "@csstools/selector-specificity": "^2.0.2", "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "css-functions-list": "^3.0.1", + "colord": "^2.9.3", + "cosmiconfig": "^7.1.0", + "css-functions-list": "^3.1.0", "debug": "^4.3.4", - "execall": "^2.0.0", - "fast-glob": "^3.2.11", - "fastest-levenshtein": "^1.0.12", + "fast-glob": "^3.2.12", + "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.2.0", - "ignore": "^5.2.0", + "ignore": "^5.2.1", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.24.0", + "known-css-properties": "^0.26.0", "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", - "normalize-selector": "^0.2.0", "picocolors": "^1.0.0", - "postcss": "^8.4.12", + "postcss": "^8.4.19", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", - "specificity": "^0.4.1", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", + "supports-hyperlinks": "^2.3.0", "svg-tags": "^1.0.0", - "table": "^6.8.0", + "table": "^6.8.1", "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" + "write-file-atomic": "^4.0.2" }, "bin": { "stylelint": "bin/stylelint.js" @@ -4447,46 +4450,46 @@ } }, "node_modules/stylelint-config-recommended": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz", - "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz", + "integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==", "dev": true, "peerDependencies": { - "stylelint": "^14.4.0" + "stylelint": "^14.10.0" } }, "node_modules/stylelint-config-wikimedia": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.1.tgz", - "integrity": "sha512-Wpm+cVJ2eZmlPO8HCv223OZZwyVZh5Ha11dRkzlccZwscxVkoKj/lo6xo10GNWBV9kpEA0+ksYJTIXXmRw1AoA==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.14.0.tgz", + "integrity": "sha512-8gc5fcYsavMU6yBxE4Ium0XX8Ekedg+kcU0Oojjg5di6Jhv74bx3pcdfW+Z4bDYKWx3pg3Glemy/CBRqg+JViQ==", "dev": true, "dependencies": { "browserslist-config-wikimedia": "0.4.0", "postcss-html": "1.5.0", "postcss-less": "6.0.0", - "stylelint": "14.8.1", - "stylelint-config-recommended": "7.0.0", - "stylelint-no-unsupported-browser-features": "5.0.3" + "stylelint": "14.16.1", + "stylelint-config-recommended": "9.0.0", + "stylelint-no-unsupported-browser-features": "6.1.0" }, "peerDependencies": { "postcss-less": "^6.0.0" } }, "node_modules/stylelint-no-unsupported-browser-features": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz", - "integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz", + "integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==", "dev": true, "dependencies": { "doiuse": "^4.4.1", "lodash": "^4.17.15", - "postcss": "^8.3.6" + "postcss": "^8.4.16" }, "engines": { - "node": ">=12" + "node": ">=14" }, "peerDependencies": { - "stylelint": ">=13.0.0" + "stylelint": "^14.0.0||^15.0.0" } }, "node_modules/stylelint/node_modules/balanced-match": { @@ -4526,9 +4529,9 @@ } }, "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "dependencies": { "has-flag": "^4.0.0", @@ -4578,9 +4581,9 @@ "dev": true }, "node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -4594,9 +4597,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -4631,9 +4634,9 @@ } }, "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -4931,16 +4934,16 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/xtend": { @@ -5079,31 +5082,61 @@ } } }, + "@csstools/selector-specificity": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz", + "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==", + "dev": true, + "requires": {} + }, "@es-joy/jsdoccomment": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", - "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", + "version": "0.23.6", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.23.6.tgz", + "integrity": "sha512-cCtumxG+qrYORGeOkDQ58GtSt/bb2XiP9GC0x2YduoUEX2EmBQ48FtoZMUs+8wiIdTDN1izUiRUD2FDu+p+Lvg==", "dev": true, "requires": { - "comment-parser": "1.3.0", + "comment-parser": "1.3.1", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" + "jsdoc-type-pratt-parser": "~2.2.5" + } + }, + "@eslint-community/eslint-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", + "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } } }, + "@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", + "dev": true + }, "@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", + "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.5.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "dependencies": { @@ -5113,12 +5146,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -5127,20 +5154,41 @@ "requires": { "argparse": "^2.0.1" } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } } } }, + "@eslint/js": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", + "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", + "dev": true + }, "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -5216,16 +5264,17 @@ "dev": true }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true }, "acorn-jsx": { "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", @@ -5340,6 +5389,12 @@ "safe-json-parse": "~1.0.1" } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5379,9 +5434,9 @@ "dev": true }, "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, "bytes": { @@ -5482,15 +5537,15 @@ } }, "ci-info": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true }, "clean-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -5507,15 +5562,6 @@ "wrap-ansi": "^7.0.0" } }, - "clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "requires": { - "is-regexp": "^2.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -5532,9 +5578,9 @@ "dev": true }, "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, "colors": { @@ -5544,9 +5590,9 @@ "dev": true }, "comment-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true }, "concat-map": { @@ -5574,9 +5620,9 @@ "dev": true }, "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -5598,15 +5644,15 @@ } }, "css-functions-list": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz", - "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", "dev": true }, "css-rule-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha1-N4bnGYmD2WWibjGVfgkHjLt3BaI=", + "integrity": "sha512-qiio/Zkr8I19jh/XuzEkK8OKDQRTrEYaRyIHy4Bwh/tPUe0w8GcQs7r6x24Yc9lT+FbnZFYULxEIXCmaymguUQ==", "dev": true, "requires": { "css-tokenize": "^1.0.1", @@ -5618,7 +5664,7 @@ "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -5630,7 +5676,7 @@ "through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "requires": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -5642,7 +5688,7 @@ "css-tokenize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", - "integrity": "sha1-RiXLHtohwUOFi3+B1oA8HSb8FL4=", + "integrity": "sha512-gLmmbJdwH9HLY4bcA17lnZ8GgPwEXRbvxBJGHnkiB6gLhRpTzjkjtMIvz7YORGW/Ptv2oMk8b5g+u7mRD6Dd7A==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -5656,9 +5702,9 @@ "dev": true }, "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true }, "debug": { @@ -5782,7 +5828,7 @@ "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", "dev": true, "requires": { "readable-stream": "~1.1.9" @@ -5837,13 +5883,18 @@ "dev": true }, "eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.1.0", - "@humanwhocodes/config-array": "^0.9.2", + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", + "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.1", + "@eslint/js": "8.36.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -5851,32 +5902,32 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", + "espree": "^9.5.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "argparse": { @@ -5891,29 +5942,22 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "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" - }, - "dependencies": { - "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-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -5922,29 +5966,66 @@ "requires": { "argparse": "^2.0.1" } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } } } }, "eslint-config-wikimedia": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.22.1.tgz", - "integrity": "sha512-TtN+gWJrcW0i1sEu7vPE1tHpEilrMUuTxP6UK97Amvva/KDV9/tvRUifGhw0q5uBswp+HWgF12p8rq68hZqMbA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.24.0.tgz", + "integrity": "sha512-8oH/YhJ87ONSmuRfATgx8U7Jcwz3tBemrh6YOezIfj9f2QfE71ZhaKZrNPdfS7vIklLor/cB9vX7sxN10nz8xw==", "dev": true, "requires": { - "eslint": "^8.6.0", + "browserslist-config-wikimedia": "^0.4.0", + "eslint": "^8.31.0", "eslint-plugin-compat": "^4.0.2", - "eslint-plugin-es": "^4.1.0", - "eslint-plugin-jsdoc": "^37.7.1", - "eslint-plugin-json-es": "^1.5.4", - "eslint-plugin-mediawiki": "^0.3.0", + "eslint-plugin-es-x": "^5.2.1", + "eslint-plugin-jsdoc": "39.2.2", + "eslint-plugin-json-es": "^1.5.7", + "eslint-plugin-mediawiki": "^0.4.0", "eslint-plugin-mocha": "^9.0.0", "eslint-plugin-no-jquery": "^2.7.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-qunit": "^7.2.0", - "eslint-plugin-unicorn": "^40.1.0", - "eslint-plugin-vue": "^8.4.1", - "eslint-plugin-wdio": "^7.4.2", - "eslint-plugin-yml": "^0.13.0" + "eslint-plugin-unicorn": "^42.0.0", + "eslint-plugin-vue": "^8.7.1", + "eslint-plugin-wdio": "^7.19.4", + "eslint-plugin-yml": "^0.14.0" } }, "eslint-plugin-compat": { @@ -6002,29 +6083,28 @@ } } }, - "eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "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==", "dev": true, "requires": { - "eslint-utils": "^2.0.0", + "eslint-utils": "^2.0.0 || ^3.0.0", "regexpp": "^3.0.0" } }, "eslint-plugin-jsdoc": { - "version": "37.9.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.4.tgz", - "integrity": "sha512-VxCyGgUNNnj2T4bb1OqltkbsPp3ehRzR5onIfh6zGrAvISmvgX/sbxUlh3YyGqWtjOTSBCURdKdmelSXEIHnlA==", + "version": "39.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.2.2.tgz", + "integrity": "sha512-ybkvja0p9JRzHEd2ST9h+Z47DLOuPyXpeb6r18/zKHdMmggPU1J0/zl+F0phea8ze9rMxi42MJVmGXi2NZ7PpA==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", + "@es-joy/jsdoccomment": "~0.23.1", + "comment-parser": "1.3.1", + "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", + "semver": "^7.3.7", "spdx-expression-parse": "^3.0.1" }, "dependencies": { @@ -6033,17 +6113,26 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "eslint-plugin-json-es": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.4.tgz", - "integrity": "sha512-DdjnNMUZ1iMrUXfxUQrTU7IyoEOsa4Kg0Zd6nOyOq1mUb75deK7NrcbI1FlWGdGVgqX99bUOD27i81EYiG794Q==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz", + "integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==", "dev": true, "requires": { - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0" + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1" }, "dependencies": { "eslint-visitor-keys": { @@ -6055,81 +6144,13 @@ } }, "eslint-plugin-mediawiki": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.3.0.tgz", - "integrity": "sha512-Lhyj2PSkhDzYSc1PNbURysY/WoqvY0brw558ZInT3erzf5KUlro18MTKFdV+nlht475ZgnsfHsgfg6Ut2w1SVg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.4.0.tgz", + "integrity": "sha512-Eufptb8lrElYwIONvgxlMBnPD6PYT4xAFprWlBxV5brCmUh8MZ41+lMxt2TPwEC6C85ngflkVez8BV8tWS9RyQ==", "dev": true, "requires": { - "eslint-plugin-vue": "^7.20.0", + "eslint-plugin-vue": "^8.7.1", "upath": "^2.0.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "eslint-plugin-vue": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", - "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", - "dev": true, - "requires": { - "eslint-utils": "^2.1.0", - "natural-compare": "^1.4.0", - "semver": "^6.3.0", - "vue-eslint-parser": "^7.10.0" - } - }, - "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" - } - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "vue-eslint-parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", - "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^6.3.0" - } - } } }, "eslint-plugin-mocha": { @@ -6163,7 +6184,8 @@ "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 + "dev": true, + "requires": {} }, "eslint-plugin-node": { "version": "11.1.0", @@ -6225,9 +6247,9 @@ } }, "eslint-plugin-unicorn": { - "version": "40.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz", - "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==", + "version": "42.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-42.0.0.tgz", + "integrity": "sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.15.7", @@ -6264,13 +6286,15 @@ } }, "eslint-plugin-vue": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.5.0.tgz", - "integrity": "sha512-i1uHCTAKOoEj12RDvdtONWrGzjFm/djkzqfhmQ0d6M/W8KM81mhswd/z+iTZ0jCpdUedW3YRgcVfQ37/J4zoYQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz", + "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==", "dev": true, "requires": { "eslint-utils": "^3.0.0", "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", "semver": "^7.3.5", "vue-eslint-parser": "^8.0.1" }, @@ -6293,15 +6317,15 @@ } }, "eslint-plugin-wdio": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.4.2.tgz", - "integrity": "sha512-tkISFycJmRFMKsEjetRcAmWSHKJKnw5rKHDxfE7Ob3tF5lbmYlCLfNKH0UwanOpSdulpe52s3K+CBHSd6qUUNQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.25.3.tgz", + "integrity": "sha512-2zbYwV14Md9FNlyhaIILVGPB6w4bu2eJdOTywDUs2Qy4ebcQNwrxB0qCaf7Rm4O+T0Ir+tdYHYBBfbDocSLKng==", "dev": true }, "eslint-plugin-yml": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-0.13.0.tgz", - "integrity": "sha512-rZvdnhe28jIbgSIZo3qYqkl9hKslyTDfMwqIGDzz873gxghzBw0yeFG+P7sMfOkFfpqwJzZy3IKe2cIiCp4FrA==", + "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==", "dev": true, "requires": { "debug": "^4.3.2", @@ -6336,13 +6360,13 @@ "dev": true }, "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", + "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "dev": true, "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "dependencies": { @@ -6361,9 +6385,9 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -6396,15 +6420,6 @@ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, - "execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "requires": { - "clone-regexp": "^2.1.0" - } - }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -6433,9 +6448,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -6469,9 +6484,9 @@ "dev": true }, "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true }, "fastq": { @@ -6521,27 +6536,15 @@ } }, "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" } }, "fined": { @@ -6606,12 +6609,6 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "gaze": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", @@ -6638,12 +6635,6 @@ "has-symbols": "^1.0.3" } }, - "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true - }, "getobject": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.0.tgz", @@ -6705,9 +6696,9 @@ } }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -6752,27 +6743,31 @@ "minimatch": "~3.0.2" } }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "dev": true, "requires": { - "dateformat": "~3.0.3", + "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", "exit": "~0.1.2", - "findup-sync": "~0.3.0", + "findup-sync": "~5.0.0", "glob": "~7.1.6", "grunt-cli": "~1.4.3", "grunt-known-options": "~2.0.0", "grunt-legacy-log": "~3.0.0", "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", + "iconv-lite": "~0.6.3", "js-yaml": "~3.14.0", "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" + "nopt": "~3.0.6" } }, "grunt-banana-checker": { @@ -6973,18 +6968,18 @@ "dev": true }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "import-fresh": { @@ -7060,12 +7055,12 @@ "dev": true }, "is-builtin-module": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", - "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, "requires": { - "builtin-modules": "^3.0.0" + "builtin-modules": "^3.3.0" } }, "is-core-module": { @@ -7104,6 +7099,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -7113,12 +7114,6 @@ "isobject": "^3.0.1" } }, - "is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true - }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -7146,7 +7141,7 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, "isexe": { @@ -7161,6 +7156,12 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7178,9 +7179,9 @@ } }, "jsdoc-type-pratt-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.3.tgz", - "integrity": "sha512-QPyxq62Q8veBSDtDrWmqaEPjSCeknUV9dH/OAGt3q9an8qC8UQDqitQiw1NvoMskIESpoRZ6qzt4H3rlK0xo8A==", + "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==", "dev": true }, "json-parse-even-better-errors": { @@ -7208,15 +7209,15 @@ "dev": true }, "known-css-properties": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", - "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", "dev": true }, "ldjson-stream": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz", - "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=", + "integrity": "sha512-xw/nNEXafuPSLu8NjjG3+atVVw+8U1APZAQylmwQn19Hgw6rC7QjHvP6MupnHWCrzSm9m0xs5QWkCLuRvBPjgQ==", "dev": true, "requires": { "split2": "^0.2.1", @@ -7226,7 +7227,7 @@ "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -7238,7 +7239,7 @@ "through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "requires": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -7329,7 +7330,7 @@ "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, "lru-cache": { @@ -7446,12 +7447,6 @@ } } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -7524,11 +7519,14 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", - "dev": true + "nth-check": { + "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" + } }, "object-assign": { "version": "4.1.1", @@ -7744,9 +7742,9 @@ "dev": true }, "postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "dev": true, "requires": { "nanoid": "^3.3.4", @@ -7778,7 +7776,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", @@ -7796,12 +7795,13 @@ "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.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -7921,7 +7921,7 @@ "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -7961,16 +7961,10 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, "require-from-string": { @@ -8183,9 +8177,9 @@ } }, "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true }, "source-map-js": { @@ -8226,16 +8220,10 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, - "specificity": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", - "dev": true - }, "split2": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", - "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", + "integrity": "sha512-D/oTExYAkC9nWleOCTOyNmAuzfAT/6rHGBA9LIK7FVnGo13CSvrKCUzKenwH6U1s2znY9MqH6v0UQTEDa3vJmg==", "dev": true, "requires": { "through2": "~0.6.1" @@ -8244,7 +8232,7 @@ "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -8256,7 +8244,7 @@ "through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "requires": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -8325,52 +8313,49 @@ "dev": true }, "stylelint": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz", - "integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==", + "version": "14.16.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", + "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", "dev": true, "requires": { + "@csstools/selector-specificity": "^2.0.2", "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "css-functions-list": "^3.0.1", + "colord": "^2.9.3", + "cosmiconfig": "^7.1.0", + "css-functions-list": "^3.1.0", "debug": "^4.3.4", - "execall": "^2.0.0", - "fast-glob": "^3.2.11", - "fastest-levenshtein": "^1.0.12", + "fast-glob": "^3.2.12", + "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.2.0", - "ignore": "^5.2.0", + "ignore": "^5.2.1", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.24.0", + "known-css-properties": "^0.26.0", "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", - "normalize-selector": "^0.2.0", "picocolors": "^1.0.0", - "postcss": "^8.4.12", + "postcss": "^8.4.19", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", - "specificity": "^0.4.1", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", + "supports-hyperlinks": "^2.3.0", "svg-tags": "^1.0.0", - "table": "^6.8.0", + "table": "^6.8.1", "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" + "write-file-atomic": "^4.0.2" }, "dependencies": { "balanced-match": { @@ -8394,34 +8379,35 @@ } }, "stylelint-config-recommended": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz", - "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==", - "dev": true + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz", + "integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==", + "dev": true, + "requires": {} }, "stylelint-config-wikimedia": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.13.1.tgz", - "integrity": "sha512-Wpm+cVJ2eZmlPO8HCv223OZZwyVZh5Ha11dRkzlccZwscxVkoKj/lo6xo10GNWBV9kpEA0+ksYJTIXXmRw1AoA==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.14.0.tgz", + "integrity": "sha512-8gc5fcYsavMU6yBxE4Ium0XX8Ekedg+kcU0Oojjg5di6Jhv74bx3pcdfW+Z4bDYKWx3pg3Glemy/CBRqg+JViQ==", "dev": true, "requires": { "browserslist-config-wikimedia": "0.4.0", "postcss-html": "1.5.0", "postcss-less": "6.0.0", - "stylelint": "14.8.1", - "stylelint-config-recommended": "7.0.0", - "stylelint-no-unsupported-browser-features": "5.0.3" + "stylelint": "14.16.1", + "stylelint-config-recommended": "9.0.0", + "stylelint-no-unsupported-browser-features": "6.1.0" } }, "stylelint-no-unsupported-browser-features": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-5.0.3.tgz", - "integrity": "sha512-FqfbOTk5UEkHsAKOkPH6SvajsfO9YuoWvKxd34tCRBZug9ZNeaPn141nyWkd+ncc8S1gVmO2+O6qVAMj9bvWww==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz", + "integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==", "dev": true, "requires": { "doiuse": "^4.4.1", "lodash": "^4.17.15", - "postcss": "^8.3.6" + "postcss": "^8.4.16" } }, "supports-color": { @@ -8434,9 +8420,9 @@ } }, "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "requires": { "has-flag": "^4.0.0", @@ -8473,9 +8459,9 @@ "dev": true }, "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, "requires": { "ajv": "^8.0.1", @@ -8486,9 +8472,9 @@ }, "dependencies": { "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -8521,9 +8507,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -8758,9 +8744,9 @@ "dev": true }, "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "requires": { "imurmurhash": "^0.1.4", diff --git a/package.json b/package.json index 9e28c82..70f748d 100644 --- a/package.json +++ b/package.json @@ -8,13 +8,13 @@ "doc": "jsduck" }, "devDependencies": { - "eslint-config-wikimedia": "0.22.1", - "grunt": "1.5.3", + "eslint-config-wikimedia": "0.24.0", + "grunt": "1.6.1", "grunt-banana-checker": "0.10.0", "grunt-contrib-watch": "1.1.0", "grunt-eslint": "24.0.0", "grunt-stylelint": "0.18.0", "grunt-tyops": "0.1.0", - "stylelint-config-wikimedia": "0.13.1" + "stylelint-config-wikimedia": "0.14.0" } } -- 2.30.2 --- end ---