This run took 78 seconds.
$ date
--- stdout ---
Tue Jun 16 07:06:49 UTC 2026
--- end ---
$ git clone file:///srv/git/mediawiki-extensions-ReaderExperiments.git /src/repo --depth=1 -b master
--- stderr ---
Cloning into '/src/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 ---
fb90f71b15341215dd2b665eb28057ed92294360 refs/heads/master
--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
"auditReportVersion": 2,
"vulnerabilities": {
"@babel/core": {
"name": "@babel/core",
"severity": "low",
"isDirect": false,
"via": [
{
"source": 1120793,
"name": "@babel/core",
"dependency": "@babel/core",
"title": "@babel/core: Arbitrary File Read via sourceMappingURL Comment",
"url": "https://github.com/advisories/GHSA-4x5r-pxfx-6jf8",
"severity": "low",
"cwe": [
"CWE-22",
"CWE-200"
],
"cvss": {
"score": 3.2,
"vectorString": "CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:N"
},
"range": "<=7.29.0"
}
],
"effects": [],
"range": "<=7.29.0",
"nodes": [
"node_modules/@babel/core"
],
"fixAvailable": true
},
"@istanbuljs/load-nyc-config": {
"name": "@istanbuljs/load-nyc-config",
"severity": "moderate",
"isDirect": false,
"via": [
"js-yaml"
],
"effects": [
"babel-plugin-istanbul"
],
"range": "*",
"nodes": [
"node_modules/@istanbuljs/load-nyc-config"
],
"fixAvailable": {
"name": "jest",
"version": "25.0.0",
"isSemVerMajor": true
}
},
"@jest/core": {
"name": "@jest/core",
"severity": "moderate",
"isDirect": false,
"via": [
"@jest/reporters",
"@jest/transform",
"jest-config",
"jest-resolve-dependencies",
"jest-runner",
"jest-runtime",
"jest-snapshot"
],
"effects": [
"jest"
],
"range": ">=25.1.0",
"nodes": [
"node_modules/@jest/core"
],
"fixAvailable": {
"name": "jest",
"version": "25.0.0",
"isSemVerMajor": true
}
},
"@jest/expect": {
"name": "@jest/expect",
"severity": "moderate",
"isDirect": false,
"via": [
"jest-snapshot"
],
"effects": [
"@jest/globals",
"jest-circus"
],
"range": "*",
"nodes": [
"node_modules/@jest/expect"
],
"fixAvailable": true
},
"@jest/globals": {
"name": "@jest/globals",
"severity": "moderate",
"isDirect": false,
"via": [
"@jest/expect"
],
"effects": [
"jest-runtime"
],
"range": ">=28.0.0-alpha.0",
"nodes": [
"node_modules/@jest/globals"
],
"fixAvailable": true
},
"@jest/reporters": {
"name": "@jest/reporters",
"severity": "moderate",
"isDirect": false,
"via": [
"@jest/transform"
],
"effects": [],
"range": ">=25.1.0",
"nodes": [
"node_modules/@jest/reporters"
],
"fixAvailable": true
},
"@jest/transform": {
"name": "@jest/transform",
"severity": "moderate",
"isDirect": false,
"via": [
"babel-plugin-istanbul"
],
"effects": [
"@jest/core",
"@jest/reporters",
"jest-runner",
"jest-runtime",
"jest-snapshot"
],
"range": ">=25.1.0",
"nodes": [
"node_modules/@jest/transform"
],
"fixAvailable": {
"name": "jest",
"version": "25.0.0",
"isSemVerMajor": true
}
},
"@vue/vue3-jest": {
"name": "@vue/vue3-jest",
"severity": "moderate",
"isDirect": true,
"via": [
"babel-jest",
"jest"
],
"effects": [],
"range": "*",
"nodes": [
"node_modules/@vue/vue3-jest"
],
"fixAvailable": false
},
"babel-jest": {
"name": "babel-jest",
"severity": "moderate",
"isDirect": false,
"via": [
"@jest/transform",
"babel-plugin-istanbul"
],
"effects": [
"@vue/vue3-jest",
"jest-config"
],
"range": ">=25.1.0",
"nodes": [
"node_modules/babel-jest"
],
"fixAvailable": false
},
"babel-plugin-istanbul": {
"name": "babel-plugin-istanbul",
"severity": "moderate",
"isDirect": false,
"via": [
"@istanbuljs/load-nyc-config"
],
"effects": [
"@jest/transform",
"babel-jest"
],
"range": ">=6.0.0-beta.0",
"nodes": [
"node_modules/babel-plugin-istanbul"
],
"fixAvailable": {
"name": "jest",
"version": "25.0.0",
"isSemVerMajor": true
}
},
"create-jest": {
"name": "create-jest",
"severity": "moderate",
"isDirect": false,
"via": [
"jest-config"
],
"effects": [
"jest-cli"
],
"range": ">=29.7.0",
"nodes": [
"node_modules/create-jest"
],
"fixAvailable": true
},
"form-data": {
"name": "form-data",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1120743,
"name": "form-data",
"dependency": "form-data",
"title": "form-data: CRLF injection in form-data via unescaped multipart field names and filenames",
"url": "https://github.com/advisories/GHSA-hmw2-7cc7-3qxx",
"severity": "high",
"cwe": [
"CWE-93"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N"
},
"range": ">=4.0.0 <4.0.6"
}
],
"effects": [],
"range": "4.0.0 - 4.0.5",
"nodes": [
"node_modules/form-data"
],
"fixAvailable": true
},
"grunt": {
"name": "grunt",
"severity": "moderate",
"isDirect": true,
"via": [
"js-yaml"
],
"effects": [
"grunt-eslint"
],
"range": ">=0.4.0-a",
"nodes": [
"node_modules/grunt"
],
"fixAvailable": {
"name": "grunt",
"version": "0.3.17",
"isSemVerMajor": true
}
},
"grunt-eslint": {
"name": "grunt-eslint",
"severity": "moderate",
"isDirect": true,
"via": [
"grunt"
],
"effects": [],
"range": "<=1.0.0 || >=18.1.0",
"nodes": [
"node_modules/grunt-eslint"
],
"fixAvailable": {
"name": "grunt-eslint",
"version": "18.0.0",
"isSemVerMajor": true
}
},
"jest": {
"name": "jest",
"severity": "moderate",
"isDirect": true,
"via": [
"@jest/core",
"jest-cli"
],
"effects": [],
"range": ">=25.1.0",
"nodes": [
"node_modules/jest"
],
"fixAvailable": {
"name": "jest",
"version": "25.0.0",
"isSemVerMajor": true
}
},
"jest-circus": {
"name": "jest-circus",
"severity": "moderate",
"isDirect": false,
"via": [
"@jest/expect",
"jest-runtime",
"jest-snapshot"
],
"effects": [
"jest-config"
],
"range": ">=25.2.4",
"nodes": [
"node_modules/jest-circus"
],
"fixAvailable": true
},
"jest-cli": {
"name": "jest-cli",
"severity": "moderate",
"isDirect": false,
"via": [
"@jest/core",
"create-jest",
"jest-config"
],
"effects": [],
"range": ">=25.1.0",
"nodes": [
"node_modules/jest-cli"
],
"fixAvailable": true
},
"jest-config": {
"name": "jest-config",
"severity": "moderate",
"isDirect": false,
"via": [
"babel-jest",
"jest-circus",
"jest-runner"
],
"effects": [
"create-jest",
"jest-cli"
],
"range": ">=25.1.0",
"nodes": [
"node_modules/jest-config"
],
"fixAvailable": true
},
"jest-resolve-dependencies": {
"name": "jest-resolve-dependencies",
"severity": "moderate",
"isDirect": false,
"via": [
"jest-snapshot"
],
"effects": [],
"range": ">=27.0.0-next.0",
"nodes": [
"node_modules/jest-resolve-dependencies"
],
"fixAvailable": true
},
"jest-runner": {
"name": "jest-runner",
"severity": "moderate",
"isDirect": false,
"via": [
"@jest/transform",
"jest-runtime"
],
"effects": [
"jest-config"
],
"range": ">=25.1.0",
"nodes": [
"node_modules/jest-runner"
],
"fixAvailable": true
},
"jest-runtime": {
"name": "jest-runtime",
"severity": "moderate",
"isDirect": false,
"via": [
"@jest/globals",
"@jest/transform",
"jest-snapshot"
],
"effects": [
"jest-circus",
"jest-runner"
],
"range": ">=25.1.0",
"nodes": [
"node_modules/jest-runtime"
],
"fixAvailable": true
},
"jest-snapshot": {
"name": "jest-snapshot",
"severity": "moderate",
"isDirect": false,
"via": [
"@jest/transform"
],
"effects": [
"@jest/core",
"@jest/expect",
"jest-circus",
"jest-resolve-dependencies",
"jest-runtime"
],
"range": ">=27.0.0-next.0",
"nodes": [
"node_modules/jest-snapshot"
],
"fixAvailable": {
"name": "jest",
"version": "25.0.0",
"isSemVerMajor": true
}
},
"js-yaml": {
"name": "js-yaml",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1120792,
"name": "js-yaml",
"dependency": "js-yaml",
"title": "JS-YAML: Quadratic-complexity DoS in merge key handling via repeated aliases",
"url": "https://github.com/advisories/GHSA-h67p-54hq-rp68",
"severity": "moderate",
"cwe": [
"CWE-407"
],
"cvss": {
"score": 5.3,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
},
"range": "<=4.1.1"
}
],
"effects": [
"@istanbuljs/load-nyc-config",
"grunt"
],
"range": "<=4.1.1",
"nodes": [
"node_modules/@eslint/eslintrc/node_modules/js-yaml",
"node_modules/cosmiconfig/node_modules/js-yaml",
"node_modules/eslint/node_modules/js-yaml",
"node_modules/js-yaml"
],
"fixAvailable": {
"name": "jest",
"version": "25.0.0",
"isSemVerMajor": true
}
},
"ws": {
"name": "ws",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1120730,
"name": "ws",
"dependency": "ws",
"title": "ws: Memory exhaustion DoS from tiny fragments and data chunks",
"url": "https://github.com/advisories/GHSA-96hv-2xvq-fx4p",
"severity": "high",
"cwe": [
"CWE-400",
"CWE-770"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
},
"range": ">=8.0.0 <8.21.0"
}
],
"effects": [],
"range": "8.0.0 - 8.20.1",
"nodes": [
"node_modules/ws"
],
"fixAvailable": true
}
},
"metadata": {
"vulnerabilities": {
"info": 0,
"low": 1,
"moderate": 21,
"high": 2,
"critical": 0,
"total": 24
},
"dependencies": {
"prod": 1,
"dev": 838,
"optional": 3,
"peer": 1,
"peerOptional": 0,
"total": 838
}
}
}
--- end ---
$ /usr/bin/composer install
--- stderr ---
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 37 installs, 0 updates, 0 removals
- Locking composer/pcre (3.4.0)
- Locking composer/semver (3.4.4)
- Locking composer/spdx-licenses (1.6.0)
- Locking composer/xdebug-handler (3.0.5)
- Locking danog/advanced-json-rpc (v3.2.3)
- Locking dealerdirect/phpcodesniffer-composer-installer (v1.2.1)
- Locking doctrine/deprecations (1.1.6)
- Locking mediawiki/mediawiki-codesniffer (v51.0.0)
- Locking mediawiki/mediawiki-phan-config (0.20.0)
- Locking mediawiki/phan-taint-check-plugin (9.1.0)
- Locking netresearch/jsonmapper (v5.0.1)
- Locking phan/phan (6.0.2)
- Locking phan/tolerant-php-parser (v0.2.0)
- Locking phan/var_representation_polyfill (0.1.4)
- Locking php-parallel-lint/php-console-color (v1.0.1)
- Locking php-parallel-lint/php-console-highlighter (v1.0.0)
- Locking php-parallel-lint/php-parallel-lint (v1.4.0)
- Locking phpcsstandards/phpcsextra (1.5.0)
- Locking phpcsstandards/phpcsutils (1.2.2)
- Locking phpdocumentor/reflection-common (2.2.0)
- Locking phpdocumentor/reflection-docblock (6.0.3)
- Locking phpdocumentor/type-resolver (2.0.0)
- Locking phpstan/phpdoc-parser (2.3.2)
- Locking psr/container (2.0.2)
- Locking psr/log (3.0.2)
- Locking sabre/event (6.1.0)
- Locking squizlabs/php_codesniffer (3.13.5)
- Locking symfony/console (v8.1.0)
- Locking symfony/deprecation-contracts (v3.7.0)
- Locking symfony/polyfill-ctype (v1.37.0)
- Locking symfony/polyfill-intl-grapheme (v1.38.1)
- Locking symfony/polyfill-intl-normalizer (v1.38.0)
- Locking symfony/polyfill-mbstring (v1.38.2)
- Locking symfony/polyfill-php85 (v1.38.1)
- Locking symfony/service-contracts (v3.7.0)
- Locking symfony/string (v8.1.0)
- Locking webmozart/assert (2.4.1)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 37 installs, 0 updates, 0 removals
0 [>---------------------------] 0 [->--------------------------]
- Installing squizlabs/php_codesniffer (3.13.5): Extracting archive
- Installing dealerdirect/phpcodesniffer-composer-installer (v1.2.1): Extracting archive
- Installing composer/pcre (3.4.0): Extracting archive
- Installing phpcsstandards/phpcsutils (1.2.2): Extracting archive
- Installing phpcsstandards/phpcsextra (1.5.0): Extracting archive
- Installing symfony/polyfill-mbstring (v1.38.2): Extracting archive
- Installing composer/spdx-licenses (1.6.0): Extracting archive
- Installing composer/semver (3.4.4): Extracting archive
- Installing mediawiki/mediawiki-codesniffer (v51.0.0): Extracting archive
- Installing symfony/polyfill-intl-normalizer (v1.38.0): Extracting archive
- Installing symfony/polyfill-intl-grapheme (v1.38.1): Extracting archive
- Installing symfony/polyfill-ctype (v1.37.0): Extracting archive
- Installing symfony/string (v8.1.0): Extracting archive
- Installing symfony/deprecation-contracts (v3.7.0): Extracting archive
- Installing psr/container (2.0.2): Extracting archive
- Installing symfony/service-contracts (v3.7.0): Extracting archive
- Installing symfony/polyfill-php85 (v1.38.1): Extracting archive
- Installing symfony/console (v8.1.0): Extracting archive
- Installing sabre/event (6.1.0): Extracting archive
- Installing phan/var_representation_polyfill (0.1.4): Extracting archive
- Installing phan/tolerant-php-parser (v0.2.0): Extracting archive
- Installing netresearch/jsonmapper (v5.0.1): Extracting archive
- Installing webmozart/assert (2.4.1): Extracting archive
- Installing phpstan/phpdoc-parser (2.3.2): Extracting archive
- Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
- Installing doctrine/deprecations (1.1.6): Extracting archive
- Installing phpdocumentor/type-resolver (2.0.0): Extracting archive
- Installing phpdocumentor/reflection-docblock (6.0.3): Extracting archive
- Installing danog/advanced-json-rpc (v3.2.3): Extracting archive
- Installing psr/log (3.0.2): Extracting archive
- Installing composer/xdebug-handler (3.0.5): Extracting archive
- Installing phan/phan (6.0.2): Extracting archive
- Installing mediawiki/phan-taint-check-plugin (9.1.0): Extracting archive
- Installing mediawiki/mediawiki-phan-config (0.20.0): Extracting archive
- Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive
- Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive
- Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive
0/35 [>---------------------------] 0%
28/35 [======================>-----] 80%
35/35 [============================] 100%
1 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
17 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils
--- end ---
Upgrading n:grunt-stylelint from 0.20.1 -> 0.21.0
Upgrading n:stylelint-config-wikimedia from 0.18.0 -> 0.19.2
Upgrading n:@wikimedia/codex from 2.4.0 -> 2.6.0
Upgrading n:@wikimedia/codex-design-tokens from 2.4.0 -> 2.6.0
Upgrading n:@wikimedia/codex-icons from 2.4.0 -> 2.6.0
$ /usr/bin/npm install
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@wikimedia/codex@2.6.0',
npm WARN EBADENGINE required: { npm: '>=10.8.2', node: '>=20.20.2' },
npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@wikimedia/codex-design-tokens@2.6.0',
npm WARN EBADENGINE required: { npm: '>=10.8.1', node: '>=20.20.2' },
npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@wikimedia/codex-icons@2.6.0',
npm WARN EBADENGINE required: { npm: '>=10.8.2', node: '>=20.20.2' },
npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: 'grunt-stylelint@0.21.0',
npm WARN EBADENGINE required: { node: '>=20.19.5' },
npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---
added 867 packages, and audited 868 packages in 13s
152 packages are looking for funding
run `npm fund` for details
24 vulnerabilities (1 low, 21 moderate, 2 high)
To address issues that do not require attention, run:
npm audit fix
To address all issues possible (including breaking changes), run:
npm audit fix --force
Some issues need review, and may require choosing
a different dependency.
Run `npm audit` for details.
--- end ---
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json
--- end ---
$ ./node_modules/.bin/grunt stylelint
--- stdout ---
Running "stylelint:all" (stylelint) task
resources/experiments/shareHighlight/components/ShareQuoteDialog.vue
645:3 ⚠ Unexpected browser feature "viewport-unit-variants" is not supported by Edge 79-81,83-107, Firefox 49-100, Chrome 49-81,83-107, Safari 10-15,10.1,11.1,12.1,13.1,14.1,15.1,15.2-15.3, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3 plugin/no-unsupported-browser-features
resources/experiments/shareHighlight/components/QuoteCard.vue
410:2 ✖ Needless disable for "no-descending-specificity" --report-needless-disables
resources/experiments/mobilePagePreviews/components/PagePreviewCard.vue
136:4 ✖ Expected ".mf-font-size-clientpref-small" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
136:35 ✖ Expected ".content" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
142:4 ✖ Expected ".mf-font-size-clientpref-regular" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
142:37 ✖ Expected ".content" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
148:4 ✖ Expected ".mf-font-size-clientpref-large" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
148:35 ✖ Expected ".content" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
resources/experiments/minervaToc/components/StickyHeader.vue
168:16 ✖ Deprecated keyword "break-word" for property "word-break" declaration-property-value-keyword-no-deprecated
resources/experiments/imageBrowsing/components/DetailViewCaption.vue
238:3 ✖ Needless disable for "property-no-unknown" --report-needless-disables
276:3 ✖ Needless disable for "function-no-unknown" --report-needless-disables
306:3 ✖ Needless disable for "function-no-unknown" --report-needless-disables
✖ 12 problems (11 errors, 1 warning)
1 error potentially fixable with the "--fix" option.
⚠ 12 warnings
Warning: Task "stylelint:all" failed. Use --force to continue.
Aborted due to warnings.
--- end ---
$ ./node_modules/.bin/stylelint resources/experiments/imageBrowsing/components/Overlay.vue resources/experiments/mobilePagePreviews/components/FocusTrap.vue resources/experiments/imageBrowsing/components/DetailViewControls.vue resources/experiments/minervaToc/FloatingButtonApp.vue resources/experiments/stickyHeaders/legacy/styles/overrides.less resources/experiments/minervaToc/StickyHeaderApp.vue resources/experiments/shareHighlight/components/PopoverDialog.vue resources/experiments/minervaToc/components/Scrollable.vue resources/experiments/shareHighlight/styles/app.less resources/experiments/minervaToc/components/TableOfContents.vue resources/experiments/imageBrowsing/components/Carousel.vue resources/experiments/shareHighlight/components/QuoteCard.vue resources/experiments/imageBrowsing/components/VisualTableOfContents.vue resources/experiments/mobilePagePreviews/components/PagePreviewCard.vue resources/experiments/mobilePagePreviews/App.vue resources/experiments/imageBrowsing/components/VisualTableOfContentsOtherWikis.vue resources/experiments/minervaToc/components/StickyHeader.vue resources/experiments/shareHighlight/components/ShareQuoteDialog.vue resources/experiments/shareHighlight/components/ShareQuoteButton.vue resources/experiments/mobilePagePreviews/components/BottomSheet.vue resources/experiments/imageBrowsing/components/VisualTableOfContentsItem.vue resources/experiments/shareHighlight/App.vue resources/experiments/imageBrowsing/components/DetailView.vue resources/experiments/imageBrowsing/components/CarouselItem.vue resources/experiments/minervaToc/mixins/minerva-toc.less resources/experiments/imageBrowsing/components/VisualTableOfContentsOtherWikisItem.vue resources/experiments/shareHighlight/components/InlineSvg.vue resources/experiments/imageBrowsing/components/CroppedImage.vue resources/experiments/imageBrowsing/styles/app.less resources/experiments/imageBrowsing/App.vue resources/experiments/imageBrowsing/components/DetailViewCaption.vue resources/experiments/stickyHeaders/styles/stickyHeaders.less --fix
--- stderr ---
resources/experiments/imageBrowsing/components/DetailViewCaption.vue
238:3 ✖ Needless disable for "property-no-unknown" --report-needless-disables
276:3 ✖ Needless disable for "function-no-unknown" --report-needless-disables
306:3 ✖ Needless disable for "function-no-unknown" --report-needless-disables
resources/experiments/mobilePagePreviews/components/PagePreviewCard.vue
136:4 ✖ Expected ".mf-font-size-clientpref-small" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
136:35 ✖ Expected ".content" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
142:4 ✖ Expected ".mf-font-size-clientpref-regular" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
142:37 ✖ Expected ".content" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
148:4 ✖ Expected ".mf-font-size-clientpref-large" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
148:35 ✖ Expected ".content" to match pattern "^ext-readerExperiments-|^cdx-|^ib-" selector-class-pattern
resources/experiments/shareHighlight/components/QuoteCard.vue
410:2 ✖ Needless disable for "no-descending-specificity" --report-needless-disables
resources/experiments/shareHighlight/components/ShareQuoteDialog.vue
645:3 ⚠ Unexpected browser feature "viewport-unit-variants" is not supported by Edge 79-81,83-107, Firefox 49-100, Chrome 49-81,83-107, Safari 10-15,10.1,11.1,12.1,13.1,14.1,15.1,15.2-15.3, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3 plugin/no-unsupported-browser-features
resources/experiments/minervaToc/components/StickyHeader.vue
168:16 ✖ Deprecated keyword "break-word" for property "word-break" declaration-property-value-keyword-no-deprecated
✖ 12 problems (11 errors, 1 warning)
1 error potentially fixable with the "--fix" option.
--- stdout ---
--- end ---
$ ./node_modules/.bin/stylelint resources/experiments/imageBrowsing/components/Overlay.vue resources/experiments/mobilePagePreviews/components/FocusTrap.vue resources/experiments/imageBrowsing/components/DetailViewControls.vue resources/experiments/minervaToc/FloatingButtonApp.vue resources/experiments/stickyHeaders/legacy/styles/overrides.less resources/experiments/minervaToc/StickyHeaderApp.vue resources/experiments/shareHighlight/components/PopoverDialog.vue resources/experiments/minervaToc/components/Scrollable.vue resources/experiments/shareHighlight/styles/app.less resources/experiments/minervaToc/components/TableOfContents.vue resources/experiments/imageBrowsing/components/Carousel.vue resources/experiments/shareHighlight/components/QuoteCard.vue resources/experiments/imageBrowsing/components/VisualTableOfContents.vue resources/experiments/mobilePagePreviews/components/PagePreviewCard.vue resources/experiments/mobilePagePreviews/App.vue resources/experiments/imageBrowsing/components/VisualTableOfContentsOtherWikis.vue resources/experiments/minervaToc/components/StickyHeader.vue resources/experiments/shareHighlight/components/ShareQuoteDialog.vue resources/experiments/shareHighlight/components/ShareQuoteButton.vue resources/experiments/mobilePagePreviews/components/BottomSheet.vue resources/experiments/imageBrowsing/components/VisualTableOfContentsItem.vue resources/experiments/shareHighlight/App.vue resources/experiments/imageBrowsing/components/DetailView.vue resources/experiments/imageBrowsing/components/CarouselItem.vue resources/experiments/minervaToc/mixins/minerva-toc.less resources/experiments/imageBrowsing/components/VisualTableOfContentsOtherWikisItem.vue resources/experiments/shareHighlight/components/InlineSvg.vue resources/experiments/imageBrowsing/components/CroppedImage.vue resources/experiments/imageBrowsing/styles/app.less resources/experiments/imageBrowsing/App.vue resources/experiments/imageBrowsing/components/DetailViewCaption.vue resources/experiments/stickyHeaders/styles/stickyHeaders.less -f json
--- stdout ---
[{"source":"/src/repo/resources/experiments/imageBrowsing/components/Overlay.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/components/DetailViewControls.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/components/Carousel.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/components/VisualTableOfContents.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/components/VisualTableOfContentsOtherWikis.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/components/VisualTableOfContentsItem.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/components/DetailView.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/components/CarouselItem.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/components/VisualTableOfContentsOtherWikisItem.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/components/CroppedImage.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/components/DetailViewCaption.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":238,"column":3,"endLine":238,"endColumn":34,"rule":"--report-needless-disables","severity":"error","text":"Needless disable for \"property-no-unknown\""},{"line":276,"column":3,"endLine":276,"endColumn":34,"rule":"--report-needless-disables","severity":"error","text":"Needless disable for \"function-no-unknown\""},{"line":306,"column":3,"endLine":306,"endColumn":34,"rule":"--report-needless-disables","severity":"error","text":"Needless disable for \"function-no-unknown\""}]},{"source":"/src/repo/resources/experiments/mobilePagePreviews/components/FocusTrap.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/mobilePagePreviews/components/PagePreviewCard.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":136,"column":4,"endLine":136,"endColumn":34,"rule":"selector-class-pattern","severity":"error","text":"Expected \".mf-font-size-clientpref-small\" to match pattern \"^ext-readerExperiments-|^cdx-|^ib-\" (selector-class-pattern)"},{"line":136,"column":35,"endLine":136,"endColumn":43,"rule":"selector-class-pattern","severity":"error","text":"Expected \".content\" to match pattern \"^ext-readerExperiments-|^cdx-|^ib-\" (selector-class-pattern)"},{"line":142,"column":4,"endLine":142,"endColumn":36,"rule":"selector-class-pattern","severity":"error","text":"Expected \".mf-font-size-clientpref-regular\" to match pattern \"^ext-readerExperiments-|^cdx-|^ib-\" (selector-class-pattern)"},{"line":142,"column":37,"endLine":142,"endColumn":45,"rule":"selector-class-pattern","severity":"error","text":"Expected \".content\" to match pattern \"^ext-readerExperiments-|^cdx-|^ib-\" (selector-class-pattern)"},{"line":148,"column":4,"endLine":148,"endColumn":34,"rule":"selector-class-pattern","severity":"error","text":"Expected \".mf-font-size-clientpref-large\" to match pattern \"^ext-readerExperiments-|^cdx-|^ib-\" (selector-class-pattern)"},{"line":148,"column":35,"endLine":148,"endColumn":43,"rule":"selector-class-pattern","severity":"error","text":"Expected \".content\" to match pattern \"^ext-readerExperiments-|^cdx-|^ib-\" (selector-class-pattern)"}]},{"source":"/src/repo/resources/experiments/mobilePagePreviews/components/BottomSheet.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/minervaToc/FloatingButtonApp.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/minervaToc/StickyHeaderApp.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/stickyHeaders/legacy/styles/overrides.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/shareHighlight/components/PopoverDialog.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/shareHighlight/components/QuoteCard.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":410,"column":2,"endLine":410,"endColumn":60,"rule":"--report-needless-disables","severity":"error","text":"Needless disable for \"no-descending-specificity\""}]},{"source":"/src/repo/resources/experiments/shareHighlight/components/ShareQuoteDialog.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":645,"column":3,"endLine":645,"endColumn":37,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"viewport-unit-variants\" is not supported by Edge 79-81,83-107, Firefox 49-100, Chrome 49-81,83-107, Safari 10-15,10.1,11.1,12.1,13.1,14.1,15.1,15.2-15.3, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/resources/experiments/shareHighlight/components/ShareQuoteButton.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/shareHighlight/components/InlineSvg.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/minervaToc/components/Scrollable.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/minervaToc/components/TableOfContents.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/minervaToc/components/StickyHeader.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":168,"column":16,"endLine":168,"endColumn":26,"rule":"declaration-property-value-keyword-no-deprecated","severity":"error","text":"Deprecated keyword \"break-word\" for property \"word-break\" (declaration-property-value-keyword-no-deprecated)"}]},{"source":"/src/repo/resources/experiments/shareHighlight/styles/app.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/mobilePagePreviews/App.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/shareHighlight/App.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/minervaToc/mixins/minerva-toc.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/styles/app.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/imageBrowsing/App.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/experiments/stickyHeaders/styles/stickyHeaders.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]}]
--- end ---
Removing stylelint-disable (x3) from /src/repo/resources/experiments/imageBrowsing/components/DetailViewCaption.vue
Removing stylelint-disable (x1) from /src/repo/resources/experiments/shareHighlight/components/QuoteCard.vue
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@wikimedia/codex@2.6.0',
npm WARN EBADENGINE required: { node: '>=20.20.2', npm: '>=10.8.2' },
npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@wikimedia/codex-design-tokens@2.6.0',
npm WARN EBADENGINE required: { node: '>=20.20.2', npm: '>=10.8.1' },
npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@wikimedia/codex-icons@2.6.0',
npm WARN EBADENGINE required: { node: '>=20.20.2', npm: '>=10.8.2' },
npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: 'grunt-stylelint@0.21.0',
npm WARN EBADENGINE required: { node: '>=20.19.5' },
npm WARN EBADENGINE current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---
added 867 packages, and audited 868 packages in 9s
152 packages are looking for funding
run `npm fund` for details
24 vulnerabilities (1 low, 21 moderate, 2 high)
To address issues that do not require attention, run:
npm audit fix
To address all issues possible (including breaking changes), run:
npm audit fix --force
Some issues need review, and may require choosing
a different dependency.
Run `npm audit` for details.
--- end ---
$ /usr/bin/npm test
--- stdout ---
> test
> grunt lint && npm run jest
Running "eslint:all" (eslint) task
/src/repo/resources/common/composables/useContentImages.js
17:1 warning This line has a length of 116. Maximum allowed is 100 max-len
/src/repo/resources/common/thumbExtractor.js
169:1 warning This line has a length of 102. Maximum allowed is 100 max-len
/src/repo/resources/experiments/imageBrowsing/components/CarouselItem.vue
61:1 warning This line has a length of 106. Maximum allowed is 100 max-len
/src/repo/resources/experiments/imageBrowsing/components/CroppedImage.vue
226:1 warning This line has a length of 101. Maximum allowed is 100 max-len
/src/repo/resources/experiments/imageBrowsing/components/DetailViewCaption.vue
198:1 warning This line has a length of 107. Maximum allowed is 100 max-len
/src/repo/resources/experiments/imageBrowsing/composables/useMediaSearchResults.js
8:1 warning This line has a length of 105. Maximum allowed is 100 max-len
9:1 warning This line has a length of 105. Maximum allowed is 100 max-len
166:1 warning This line has a length of 135. Maximum allowed is 100 max-len
172:1 warning This line has a length of 102. Maximum allowed is 100 max-len
/src/repo/resources/experiments/minervaToc/FloatingButtonApp.vue
69:1 warning This line has a length of 164. Maximum allowed is 100 max-len
/src/repo/resources/experiments/minervaToc/StickyHeaderApp.vue
101:1 warning This line has a length of 164. Maximum allowed is 100 max-len
244:1 warning This line has a length of 103. Maximum allowed is 100 max-len
/src/repo/resources/experiments/minervaToc/components/Scrollable.vue
31:1 warning This line has a length of 138. Maximum allowed is 100 max-len
/src/repo/resources/experiments/minervaToc/components/TableOfContents.vue
16:1 warning This line has a length of 131. Maximum allowed is 100 max-len
/src/repo/resources/experiments/minervaToc/composables/useActiveHeading.js
68:1 warning This line has a length of 108. Maximum allowed is 100 max-len
/src/repo/resources/experiments/mobilePagePreviews/components/BottomSheet.vue
48:1 warning This line has a length of 116. Maximum allowed is 100 max-len
/src/repo/resources/experiments/mobilePagePreviews/components/PagePreviewCard.vue
70:1 warning This line has a length of 110. Maximum allowed is 100 max-len
/src/repo/resources/experiments/shareHighlight/App.vue
48:1 warning This line has a length of 108. Maximum allowed is 100 max-len
/src/repo/resources/experiments/shareHighlight/components/InlineSvg.vue
26:3 warning Unused eslint-disable directive (no problems were reported from 'vue/no-unused-properties')
/src/repo/resources/experiments/shareHighlight/components/QuoteCard.vue
26:1 warning This line has a length of 103. Maximum allowed is 100 max-len
39:1 warning This line has a length of 117. Maximum allowed is 100 max-len
40:1 warning This line has a length of 113. Maximum allowed is 100 max-len
55:1 warning This line has a length of 157. Maximum allowed is 100 max-len
73:1 warning This line has a length of 112. Maximum allowed is 100 max-len
79:1 warning This line has a length of 112. Maximum allowed is 100 max-len
99:1 warning This line has a length of 112. Maximum allowed is 100 max-len
104:1 warning This line has a length of 112. Maximum allowed is 100 max-len
109:1 warning This line has a length of 112. Maximum allowed is 100 max-len
124:1 warning This line has a length of 139. Maximum allowed is 100 max-len
/src/repo/resources/experiments/shareHighlight/components/ShareQuoteDialog.vue
22:1 warning This line has a length of 128. Maximum allowed is 100 max-len
22:5 warning Attribute ":style" should go before "@img-error" vue/attributes-order
52:1 warning This line has a length of 123. Maximum allowed is 100 max-len
75:1 warning This line has a length of 109. Maximum allowed is 100 max-len
76:1 warning This line has a length of 115. Maximum allowed is 100 max-len
204:1 warning This line has a length of 105. Maximum allowed is 100 max-len
519:1 warning This line has a length of 101. Maximum allowed is 100 max-len
/src/repo/resources/experiments/shareHighlight/toolbarBlueDot.js
43:2 warning All possible CSS classes should be documented. See https://w.wiki/PS2 for details mediawiki/class-doc
/src/repo/resources/experiments/shareHighlight/utils/textFragment.js
7:1 warning This line has a length of 103. Maximum allowed is 100 max-len
/src/repo/resources/lib/foreign-resources.yaml
8:1 warning This line has a length of 108. Maximum allowed is 100 max-len
✖ 39 problems (0 errors, 39 warnings)
0 errors and 2 warnings potentially fixable with the `--fix` option.
Running "stylelint:all" (stylelint) task
resources/experiments/stickyHeaders/styles/stickyHeaders.less
4:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
30:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/stickyHeaders/legacy/styles/overrides.less
6:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/shareHighlight/styles/app.less
12:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/shareHighlight/components/ShareQuoteDialog.vue
645:3 ⚠ Unexpected browser feature "viewport-unit-variants" is not supported by Edge 79-81,83-107, Firefox 49-100, Chrome 49-81,83-107, Safari 10-15,10.1,11.1,12.1,13.1,14.1,15.1,15.2-15.3, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3 plugin/no-unsupported-browser-features
resources/experiments/mobilePagePreviews/components/PagePreviewCard.vue
134:4 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
140:4 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
146:4 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/mobilePagePreviews/components/BottomSheet.vue
244:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/minervaToc/StickyHeaderApp.vue
208:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/minervaToc/FloatingButtonApp.vue
153:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
165:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/minervaToc/components/TableOfContents.vue
188:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/imageBrowsing/styles/app.less
3:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/imageBrowsing/components/DetailViewCaption.vue
270:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
272:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
278:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
284:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
286:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
292:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
298:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
301:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
307:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
✖ 23 problems (22 errors, 1 warning)
⚠ 23 warnings
Warning: Task "stylelint:all" failed. Use --force to continue.
Aborted due to warnings.
--- end ---
$ node_modules/.bin/jest --config /src/repo/tests/jest/jest.config.js -u
--- stderr ---
PASS tests/jest/textFragment.test.js
PASS tests/jest/VisualTableOfContentsItem.test.js
PASS tests/jest/DetailViewCaption.test.js
PASS tests/jest/Carousel.test.js
PASS tests/jest/App.test.js
PASS tests/jest/Overlay.test.js
PASS tests/jest/useMediaSearchResults.test.js
PASS tests/jest/ShareQuoteDialog.test.js
PASS tests/jest/VisualTableOfContents.test.js
PASS tests/jest/thumbExtractor.test.js
PASS tests/jest/CarouselItem.test.js
PASS tests/jest/DetailView.test.js
Test Suites: 12 passed, 12 total
Tests: 58 passed, 58 total
Snapshots: 0 total
Time: 4.857 s
Ran all test suites.
--- stdout ---
------------------------------------------|---------|----------|---------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
------------------------------------------|---------|----------|---------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
All files | 66.03 | 69.67 | 49.31 | 66.03 |
common | 55.11 | 72.72 | 53.84 | 55.11 |
excludedImageSelectors.js | 100 | 100 | 100 | 100 |
index.js | 100 | 100 | 100 | 100 |
thumbExtractor.js | 47.12 | 66.66 | 45.45 | 47.12 | 68-195,235-248,259-261,269-271,280-289,298-299,306-307,324-325,330-348,357-375
common/composables | 54.83 | 76 | 66.66 | 54.83 |
useAverageColor.js | 67.69 | 70.58 | 75 | 67.69 | 30-60,98-120,152-153,169-171,179-180,190-191
useContentImages.js | 82.6 | 75 | 100 | 82.6 | 11-12,17-18
useImageModel.js | 30.55 | 100 | 50 | 30.55 | 22-71
useSummary.js | 37.8 | 100 | 33.33 | 37.8 | 13-22,39-79
experiments/imageBrowsing | 76.28 | 57.14 | 85.71 | 76.28 |
App.vue | 76.28 | 57.14 | 85.71 | 76.28 | 67-108,111-116,133-137,164-165,190-194
experiments/imageBrowsing/components | 74.05 | 77.04 | 58.13 | 74.05 |
Carousel.vue | 76.11 | 100 | 30 | 76.11 | 122-129,137-152,160-175,183-186,194-198,206-208,215-221
CarouselItem.vue | 100 | 100 | 100 | 100 |
CroppedImage.vue | 60.85 | 58.82 | 60 | 60.85 | 102-104,106-117,128-142,175-181,189-288
DetailView.vue | 84.82 | 100 | 66.66 | 84.82 | 64-80
DetailViewCaption.vue | 92.97 | 88.88 | 66.66 | 92.97 | 78-79,107-112,117-119,133-141,158-159
DetailViewControls.vue | 43.07 | 100 | 0 | 43.07 | 148-369
Overlay.vue | 95.08 | 75 | 71.42 | 95.08 | 140-141,144-152,167-168,172,176
VisualTableOfContents.vue | 100 | 75 | 100 | 100 | 56
VisualTableOfContentsItem.vue | 92.54 | 72.72 | 75 | 92.54 | 94-96,113-114,143-145,154-162
VisualTableOfContentsOtherWikis.vue | 67.97 | 100 | 0 | 67.97 | 68-116
VisualTableOfContentsOtherWikisItem.vue | 47.03 | 100 | 0 | 47.03 | 63-187
experiments/imageBrowsing/composables | 71.88 | 76.92 | 68.42 | 71.88 |
useAltText.js | 72.72 | 60 | 100 | 72.72 | 12-16,19
useEntityId.js | 38.18 | 100 | 50 | 38.18 | 21-54
useExternalImages.js | 21.25 | 100 | 33.33 | 21.25 | 10-34,42-79
useImageLabel.js | 95 | 75 | 100 | 95 | 17
useMediaSearchResults.js | 90.54 | 72.5 | 100 | 90.54 | 16-17,226-232,244-252,266-271,273-274
useMwApi.js | 73.33 | 100 | 50 | 73.33 | 11-14
useSmartCrop.js | 55.88 | 66.66 | 33.33 | 55.88 | 9-18,29-33
useUniqueExternalGlobalUsageWikis.js | 100 | 100 | 100 | 100 |
experiments/shareHighlight/components | 71.42 | 43.58 | 30 | 71.42 |
InlineSvg.vue | 38.65 | 100 | 0 | 38.65 | 44-116
PopoverDialog.vue | 95.16 | 100 | 0 | 95.16 | 184-193
QuoteCard.vue | 72.92 | 100 | 0 | 72.92 | 199-200,215-365
ShareQuoteDialog.vue | 68.56 | 43.58 | 40 | 68.56 | 172-174,181,183-188,193-198,218,220-223,232-233,241-254,259-273,281-282,286-293,298-299,301-302,308-309,311-312,324-326,337-338,344,349-350,363-376,403-407,411-415,419-431,437-443,451-454,460-489,495-510,516-534,537-542,549-555
experiments/shareHighlight/utils | 66.89 | 90.9 | 66.66 | 66.89 |
rawParamsMessage.js | 32 | 100 | 50 | 32 | 16-49
textFragment.js | 84.69 | 88.88 | 75 | 84.69 | 54-55,79-91
lib/smartcrop | 23.06 | 42.85 | 4.34 | 23.06 |
smartcrop.js | 23.06 | 42.85 | 4.34 | 23.06 | 33-34,75-155,161-172,176-200,203-226,229-253,256-264,267-280,283-304,307-344,347-368,372-378,381-414,417-424,428-469,473-477,480-532,542-551,556-558,561-562,564-565,567-578,583-584,587-589
------------------------------------------|---------|----------|---------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--- end ---
$ /usr/bin/npm test
--- stdout ---
> test
> grunt lint && npm run jest
Running "eslint:all" (eslint) task
/src/repo/resources/common/composables/useContentImages.js
17:1 warning This line has a length of 116. Maximum allowed is 100 max-len
/src/repo/resources/common/thumbExtractor.js
169:1 warning This line has a length of 102. Maximum allowed is 100 max-len
/src/repo/resources/experiments/imageBrowsing/components/CarouselItem.vue
61:1 warning This line has a length of 106. Maximum allowed is 100 max-len
/src/repo/resources/experiments/imageBrowsing/components/CroppedImage.vue
226:1 warning This line has a length of 101. Maximum allowed is 100 max-len
/src/repo/resources/experiments/imageBrowsing/components/DetailViewCaption.vue
198:1 warning This line has a length of 107. Maximum allowed is 100 max-len
/src/repo/resources/experiments/imageBrowsing/composables/useMediaSearchResults.js
8:1 warning This line has a length of 105. Maximum allowed is 100 max-len
9:1 warning This line has a length of 105. Maximum allowed is 100 max-len
166:1 warning This line has a length of 135. Maximum allowed is 100 max-len
172:1 warning This line has a length of 102. Maximum allowed is 100 max-len
/src/repo/resources/experiments/minervaToc/FloatingButtonApp.vue
69:1 warning This line has a length of 164. Maximum allowed is 100 max-len
/src/repo/resources/experiments/minervaToc/StickyHeaderApp.vue
101:1 warning This line has a length of 164. Maximum allowed is 100 max-len
244:1 warning This line has a length of 103. Maximum allowed is 100 max-len
/src/repo/resources/experiments/minervaToc/components/Scrollable.vue
31:1 warning This line has a length of 138. Maximum allowed is 100 max-len
/src/repo/resources/experiments/minervaToc/components/TableOfContents.vue
16:1 warning This line has a length of 131. Maximum allowed is 100 max-len
/src/repo/resources/experiments/minervaToc/composables/useActiveHeading.js
68:1 warning This line has a length of 108. Maximum allowed is 100 max-len
/src/repo/resources/experiments/mobilePagePreviews/components/BottomSheet.vue
48:1 warning This line has a length of 116. Maximum allowed is 100 max-len
/src/repo/resources/experiments/mobilePagePreviews/components/PagePreviewCard.vue
70:1 warning This line has a length of 110. Maximum allowed is 100 max-len
/src/repo/resources/experiments/shareHighlight/App.vue
48:1 warning This line has a length of 108. Maximum allowed is 100 max-len
/src/repo/resources/experiments/shareHighlight/components/InlineSvg.vue
26:3 warning Unused eslint-disable directive (no problems were reported from 'vue/no-unused-properties')
/src/repo/resources/experiments/shareHighlight/components/QuoteCard.vue
26:1 warning This line has a length of 103. Maximum allowed is 100 max-len
39:1 warning This line has a length of 117. Maximum allowed is 100 max-len
40:1 warning This line has a length of 113. Maximum allowed is 100 max-len
55:1 warning This line has a length of 157. Maximum allowed is 100 max-len
73:1 warning This line has a length of 112. Maximum allowed is 100 max-len
79:1 warning This line has a length of 112. Maximum allowed is 100 max-len
99:1 warning This line has a length of 112. Maximum allowed is 100 max-len
104:1 warning This line has a length of 112. Maximum allowed is 100 max-len
109:1 warning This line has a length of 112. Maximum allowed is 100 max-len
124:1 warning This line has a length of 139. Maximum allowed is 100 max-len
/src/repo/resources/experiments/shareHighlight/components/ShareQuoteDialog.vue
22:1 warning This line has a length of 128. Maximum allowed is 100 max-len
22:5 warning Attribute ":style" should go before "@img-error" vue/attributes-order
52:1 warning This line has a length of 123. Maximum allowed is 100 max-len
75:1 warning This line has a length of 109. Maximum allowed is 100 max-len
76:1 warning This line has a length of 115. Maximum allowed is 100 max-len
204:1 warning This line has a length of 105. Maximum allowed is 100 max-len
519:1 warning This line has a length of 101. Maximum allowed is 100 max-len
/src/repo/resources/experiments/shareHighlight/toolbarBlueDot.js
43:2 warning All possible CSS classes should be documented. See https://w.wiki/PS2 for details mediawiki/class-doc
/src/repo/resources/experiments/shareHighlight/utils/textFragment.js
7:1 warning This line has a length of 103. Maximum allowed is 100 max-len
/src/repo/resources/lib/foreign-resources.yaml
8:1 warning This line has a length of 108. Maximum allowed is 100 max-len
✖ 39 problems (0 errors, 39 warnings)
0 errors and 2 warnings potentially fixable with the `--fix` option.
Running "stylelint:all" (stylelint) task
resources/experiments/stickyHeaders/styles/stickyHeaders.less
4:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
30:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/stickyHeaders/legacy/styles/overrides.less
6:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/shareHighlight/styles/app.less
12:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/shareHighlight/components/ShareQuoteDialog.vue
645:3 ⚠ Unexpected browser feature "viewport-unit-variants" is not supported by Edge 79-81,83-107, Firefox 49-100, Chrome 49-81,83-107, Safari 10-15,10.1,11.1,12.1,13.1,14.1,15.1,15.2-15.3, Safari on iOS 10.0-10.2,10.3,11.0-11.2,11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3 plugin/no-unsupported-browser-features
resources/experiments/mobilePagePreviews/components/PagePreviewCard.vue
134:4 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
140:4 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
146:4 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/mobilePagePreviews/components/BottomSheet.vue
244:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/minervaToc/StickyHeaderApp.vue
208:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/minervaToc/FloatingButtonApp.vue
153:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
165:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/minervaToc/components/TableOfContents.vue
188:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/imageBrowsing/styles/app.less
3:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
resources/experiments/imageBrowsing/components/DetailViewCaption.vue
270:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
272:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
278:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
284:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
286:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
292:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
298:1 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
301:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
307:2 ✖ Needless disable for "selector-class-pattern" --report-needless-disables
✖ 23 problems (22 errors, 1 warning)
⚠ 23 warnings
Warning: Task "stylelint:all" failed. Use --force to continue.
Aborted due to warnings.
--- end ---
Traceback (most recent call last):
File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 289, in npm_test
self.check_call(["npm", "test"])
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/venv/lib/python3.13/site-packages/runner/shell2.py", line 66, in check_call
res.check_returncode()
~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.13/subprocess.py", line 508, in check_returncode
raise CalledProcessError(self.returncode, self.args, self.stdout,
self.stderr)
subprocess.CalledProcessError: Command '['/usr/bin/npm', 'test']' returned non-zero exit status 3.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 1268, in main
libup.run()
~~~~~~~~~^^
File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 1202, in run
self.npm_upgrade(plan)
~~~~~~~~~~~~~~~~^^^^^^
File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 1064, in npm_upgrade
self.npm_test()
~~~~~~~~~~~~~^^
File "/venv/lib/python3.13/site-packages/runner/__init__.py", line 303, in npm_test
self.check_call(["npm", "test"])
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/venv/lib/python3.13/site-packages/runner/shell2.py", line 66, in check_call
res.check_returncode()
~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.13/subprocess.py", line 508, in check_returncode
raise CalledProcessError(self.returncode, self.args, self.stdout,
self.stderr)
subprocess.CalledProcessError: Command '['/usr/bin/npm', 'test']' returned non-zero exit status 3.