mediawiki/extensions/EventLogging: main (log #965774)

sourcepatches

This run took 39 seconds.

$ date
--- stdout ---
Wed Mar 22 19:49:22 UTC 2023

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-EventLogging.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 ---
15218ebfd210ffe8c8a863c6d5ea3d73f31cf4c4 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": 418,
      "optional": 0,
      "peer": 10,
      "peerOptional": 0,
      "total": 418
    }
  }
}

--- 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: #StandWithUkraine
Updating dependencies
Lock file operations: 38 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 doctrine/deprecations (v1.0.0)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking justinrainbow/json-schema (5.2.12)
  - 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.7.0)
  - Locking phpstan/phpdoc-parser (1.16.1)
  - 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/deprecation-contracts (v2.5.2)
  - 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)
  - Locking wikimedia/metrics-platform (2.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 38 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]    0 [--->------------------------]  - 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 phpstan/phpdoc-parser (1.16.1): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing doctrine/deprecations (v1.0.0): Extracting archive
  - Installing phpdocumentor/type-resolver (1.7.0): 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 justinrainbow/json-schema (5.2.12): Extracting archive
  - Installing wikimedia/metrics-platform (2.0.0): Extracting archive
  0/29 [>---------------------------]   0%
 10/29 [=========>------------------]  34%
 20/29 [===================>--------]  68%
 28/29 [===========================>]  96%
 29/29 [============================] 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.20.0 -> 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
--- stdout ---

added 407 packages, and audited 408 packages in 6s

66 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 408 packages in 855ms

66 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 . --fix
--- stdout ---

/src/repo/devserver/eventgate.config.yaml
  61:54  error  Irregular whitespace not allowed  yml/no-irregular-whitespace

/src/repo/modules/lib/foreign-resources.yaml
  15:5  error  Empty mapping values are forbidden  yml/no-empty-mapping-value
  16:5  error  Empty mapping values are forbidden  yml/no-empty-mapping-value

/src/repo/tests/qunit/ext.eventLogging.debug/debug.test.js
  84:4  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/ext.eventLogging/log.test.js
  59:3  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  60:3  error  Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  61:3  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  91:4  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions

/src/repo/tests/qunit/ext.eventLogging/stream.test.js
  51:22  warning  navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11  compat/compat
  52:15  warning  navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11  compat/compat

✖ 10 problems (8 errors, 2 warnings)


--- end ---
$ ./node_modules/.bin/eslint . -f json
--- stdout ---
[{"filePath":"/src/repo/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/.stylelintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/Gruntfile.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/composer.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/devserver/eventgate.config.yaml","messages":[{"ruleId":"yml/no-irregular-whitespace","severity":2,"message":"Irregular whitespace not allowed.","line":61,"column":54,"nodeType":null,"messageId":"disallow"}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"# Default config for a eventgate-wikimedia-dev server.  This\n# validates events in the same way as eventgate-wikimedia,\n# but outputs them to the configured output_path file (or to stdout).\n#\n# The default config is set up to use trace logging to have events show up\n# in the logs on the terminal when $(npm bin)/eventgate-wikimedia-dev is run.\n# If you pipe this output through $(npm bin)/bunyan, logs will be pretty printed, including\n# the valid events.\n# Events will also be output to the output_path, which defaults to ./events.json.\n\n# Number of worker processes to spawn.\n# Set to 0 to run everything in a single process without clustering.\n# Use 'ncpu' to run as many workers as there are CPU units\nnum_workers: 0\n\n# Log error messages and gracefully restart a worker if v8 reports that it\n# uses more heap (note: not RSS) than this many mb.\nworker_heap_limit_mb: 200\n\n# Logger info\nlogging:\n  # trace level logging outputs a lot of extra info as events come in, including\n  # pretty printing events if piped through bunyan.\n  level: trace\n\nservices:\n  - name: eventgate-devserver\n    # a relative path or the name of an npm package, if different from name\n    module: eventgate\n    entrypoint: app\n    # optionally, a version constraint of the npm package\n    # version: ^0.4.0\n    # per-service config\n    conf:\n      port: 8192\n      # Events can be large; increase max body size\n      max_body_size: 1mb\n\n      # more per-service config settings\n      user_agent: eventgate-devserver\n\n      # This EventGate implemenation uses the same\n      # validate function that eventgate-wikimedia does, but\n      # writes events to stdout (or to output_path).\n      eventgate_factory_module: eventgate-wikimedia/eventgate-wikimedia-dev\n\n      # If set, these URIs will be prepended to any relative schema URI\n      # extracted from each event's schema_field.  The resulting URLs will\n      # be searched until a schema is found.  Change this\n      # to match paths to your local schema repositories.\n      schema_base_uris:\n        - https://schema.wikimedia.org/repositories/primary/jsonschema\n        - https://schema.wikimedia.org/repositories/secondary/jsonschema\n\n      # Valid events will be output to this file.\n      # If you unset this, events will be printed to stdout instead.\n      # (If you usnet this and logging.level is trace, you'll see the\n      # events on stdout multiple times.)\n      output_path: ./events.json\n\n      # If true, output events will be formatted into pretty printed multiline strings.\n      should_pretty_print: false\n\n      # Setting test_events will enable the /v1/_test/events route.\n      # A GET request to this path will submit these events to EventGate.\n      test_events:\n        - $schema: /test/event/1.0.0\n          meta:\n            stream: eventgate-devserver.test.event\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/devserver/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/extension.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ast.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ba.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/be-tarask.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/be.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/bn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ce.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/cs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/da.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/dsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/eo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/et.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/frp.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/gl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/hi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/hsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/hu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/id.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ilo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/io.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/is.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ja.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ka.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/kk-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ksh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/li.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/lij.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/lt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ml.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/mt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/nap.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/nb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/oc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/pl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/pms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/pt-br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/pt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ro.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/roa-tara.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/ru.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/scn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/si.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/sv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/szy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/uk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/vi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/core/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ast.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ba.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/be-tarask.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/bg.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/cs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/dsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/frp.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/gl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/hsb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/id.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ja.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ksh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/nb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/pms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/pt-br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/pt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/roa-tara.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/ru.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/si.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/sv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/uk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/vi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/jsonschema/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/jsduck.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging.debug/debug.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-type","severity":1,"message":"Prefer typeof/instanceof to $.type","line":72,"column":15,"nodeType":"CallExpression","endLine":72,"endColumn":30,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":201,"column":25,"nodeType":"MemberExpression","messageId":"unexpected","endLine":201,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":202,"column":3,"nodeType":"MemberExpression","messageId":"unexpected","endLine":202,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":283,"column":25,"nodeType":"MemberExpression","messageId":"unexpected","endLine":283,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":284,"column":3,"nodeType":"MemberExpression","messageId":"unexpected","endLine":284,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging.jsonSchema/jsonSchema.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":12,"column":17,"nodeType":"CallExpression","endLine":12,"endColumn":52,"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":14,"column":2,"nodeType":"CallExpression","endLine":14,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging/BackgroundQueue.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging/MediaWikiMetricsClientIntegration.js","messages":[],"suppressedMessages":[{"ruleId":"camelcase","severity":2,"message":"Identifier 'client_platform' is not in camel case.","line":121,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":121,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'client_platform_family' is not in camel case.","line":122,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":122,"endColumn":26,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'namespace_name' is not in camel case.","line":128,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":128,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'revision_id' is not in camel case.","line":129,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":129,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'wikidata_id' is not in camel case.","line":130,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":130,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'content_language' is not in camel case.","line":131,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":131,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'is_redirect' is not in camel case.","line":132,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":132,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'user_groups_allowed_to_move' is not in camel case.","line":133,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":133,"endColumn":31,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'user_groups_allowed_to_edit' is not in camel case.","line":134,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":134,"endColumn":31,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'is_production' is not in camel case.","line":139,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":139,"endColumn":17,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'is_debug_mode' is not in camel case.","line":140,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":140,"endColumn":17,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'site_content_language' is not in camel case.","line":142,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":142,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'is_logged_in' is not in camel case.","line":145,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":145,"endColumn":16,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'is_bot' is not in camel case.","line":159,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":159,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'language_variant' is not in camel case.","line":162,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":162,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'can_probably_edit_page' is not in camel case.","line":163,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":163,"endColumn":26,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'edit_count' is not in camel case.","line":164,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":164,"endColumn":14,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'edit_count_bucket' is not in camel case.","line":165,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":165,"endColumn":21,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'registration_dt' is not in camel case.","line":166,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":166,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging/Schema.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging/core.js","messages":[],"suppressedMessages":[{"ruleId":"camelcase","severity":2,"message":"Identifier 'client_dt' is not in camel case.","line":115,"column":10,"nodeType":"Identifier","messageId":"notCamelCase","endLine":115,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/ext.eventLogging/subscriber.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/modules/lib/foreign-resources.yaml","messages":[{"ruleId":"yml/no-empty-mapping-value","severity":2,"message":"Empty mapping values are forbidden.","line":15,"column":5,"nodeType":"YAMLPair","messageId":"unexpectedEmpty","endLine":15,"endColumn":32},{"ruleId":"yml/no-empty-mapping-value","severity":2,"message":"Empty mapping values are forbidden.","line":16,"column":5,"nodeType":"YAMLPair","messageId":"unexpectedEmpty","endLine":16,"endColumn":36}],"suppressedMessages":[],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"# See /resources/lib/foreign-resources.yaml in MediaWiki Core for a detailed explanation of the\n# format of this file.\n\n# Ideally we'd use https://gerrit.wikimedia.org/g/mediawiki/libs/metrics-platform/+archive/X.tar.gz\n# instead of GitHub mirror, but https://github.com/google/gitiles/issues/217\nmetrics-platform:\n  license: GPL-2.0+\n  homepage: https://wikitech.wikimedia.org/wiki/Metrics_Platform\n  version: 44b6b0ab12\n  type: tar\n  src: https://codeload.github.com/wikimedia/metrics-platform/tar.gz/44b6b0ab12f77499301f554ec9be17693a4194f9\n  integrity: sha384-z7AFIncbaXLGoCEMGdwXN15dTYOxMqoRamlJxy38M7wkH6fsI+Zyvx7zRGS/KC2u\n  # GitHub nests their archives with a variable subdirectory...\n  dest:\n    metrics-platform-*/COPYING:\n    metrics-platform-*/js/src/*.js:\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/schemas/schemaschema.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging.debug/debug.test.js","messages":[{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":84,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":84,"endColumn":66}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"QUnit.module( 'ext.eventLogging.debug', function () {\n\t'use strict';\n\n\tvar eventLogDebug = require( 'ext.eventLogging.debug' );\n\n\tQUnit.test( 'validate()', function ( assert ) {\n\t\tvar earthquakeSchema = {\n\t\t\trevision: 123,\n\t\t\tschema: {\n\t\t\t\tdescription: 'Record of a history earthquake',\n\t\t\t\tproperties: {\n\t\t\t\t\tepicenter: {\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tenum: [ 'Valdivia', 'Sumatra', 'Kamchatka' ],\n\t\t\t\t\t\trequired: true\n\t\t\t\t\t},\n\t\t\t\t\tmagnitude: {\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\trequired: true\n\t\t\t\t\t},\n\t\t\t\t\tarticle: {\n\t\t\t\t\t\ttype: 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tvar validationCases = [\n\t\t\t{\n\t\t\t\targs: {},\n\t\t\t\tregex: /^Missing property/,\n\t\t\t\tmsg: 'Empty, omitting all optional and required fields.'\n\t\t\t},\n\t\t\t{\n\t\t\t\targs: {\n\t\t\t\t\tepicenter: 'Valdivia'\n\t\t\t\t},\n\t\t\t\tregex: /^Missing property/,\n\t\t\t\tmsg: 'Empty, omitting one optional and one required field.'\n\t\t\t},\n\t\t\t{\n\t\t\t\targs: {\n\t\t\t\t\tepicenter: 'Valdivia',\n\t\t\t\t\tarticle: '[[1960 Valdivia earthquake]]'\n\t\t\t\t},\n\t\t\t\tregex: /^Missing property/,\n\t\t\t\tmsg: 'Required fields must be present.'\n\t\t\t},\n\t\t\t{\n\t\t\t\targs: {\n\t\t\t\t\tepicenter: 'Valdivia',\n\t\t\t\t\tmagnitude: '9.5'\n\t\t\t\t},\n\t\t\t\tregex: /wrong type for property/,\n\t\t\t\tmsg: 'Values must be instances of declared type'\n\t\t\t},\n\t\t\t{\n\t\t\t\targs: {\n\t\t\t\t\tepicenter: 'Valdivia',\n\t\t\t\t\tmagnitude: 9.5,\n\t\t\t\t\tdepth: 33\n\t\t\t\t},\n\t\t\t\tregex: /^Undeclared property/,\n\t\t\t\tmsg: 'Unrecognized fields fail validation'\n\t\t\t},\n\t\t\t{\n\t\t\t\targs: {\n\t\t\t\t\tepicenter: 'Tōhoku',\n\t\t\t\t\tmagnitude: 9.0\n\t\t\t\t},\n\t\t\t\tregex: /is not one of/,\n\t\t\t\tmsg: 'Enum fields constrain possible values'\n\t\t\t}\n\t\t];\n\n\t\tvar errors = eventLogDebug.validate( {\n\t\t\tepicenter: 'Valdivia',\n\t\t\tmagnitude: 9.5\n\t\t}, earthquakeSchema.schema );\n\n\t\tassert.propEqual( errors, [], 'Non-required fields may be omitted' );\n\n\t\tvalidationCases.forEach( function ( vCase ) {\n\t\t\terrors = eventLogDebug.validate( vCase.args, earthquakeSchema.schema );\n\t\t\tassert.ok( errors.join( '' ).match( vCase.regex ), vCase.msg );\n\t\t} );\n\t} );\n\n\tQUnit.test.each( 'isInstanceOf()', {\n\t\tboolean: {\n\t\t\ttype: 'boolean',\n\t\t\tvalid: [ true, false ],\n\t\t\tinvalid: [ undefined, null, 0, -1, 1, 'false' ]\n\t\t},\n\t\tinteger: {\n\t\t\ttype: 'integer',\n\t\t\tvalid: [ -12, 42, 0, 4294967296 ],\n\t\t\tinvalid: [ 42.1, NaN, Infinity, '42', [ 42 ] ]\n\t\t},\n\t\tnumber: {\n\t\t\ttype: 'number',\n\t\t\tvalid: [ 12, 42.1, 0, Math.PI ],\n\t\t\tinvalid: [ '42.1', NaN, [ 42 ], undefined ]\n\t\t},\n\t\tstring: {\n\t\t\ttype: 'string',\n\t\t\tvalid: [ 'Hello', '', '-1' ],\n\t\t\tinvalid: [ [], 0, true ]\n\t\t},\n\t\ttimestamp: {\n\t\t\ttype: 'timestamp',\n\t\t\tvalid: [ Date.now(), new Date() ],\n\t\t\tinvalid: [ -1, 'yesterday', NaN ]\n\t\t},\n\t\tarray: {\n\t\t\ttype: 'array',\n\t\t\tvalid: [ [], [ 42 ] ],\n\t\t\tinvalid: [ -1, {}, undefined ]\n\t\t}\n\t}, function ( assert, data ) {\n\t\tdata.valid.forEach( function ( value ) {\n\t\t\tassert.strictEqual( eventLogDebug.isInstanceOf( value, data.type ), true,\n\t\t\t\tJSON.stringify( value ) + ' is valid' );\n\t\t} );\n\t\tdata.invalid.forEach( function ( value ) {\n\t\t\tassert.strictEqual( eventLogDebug.isInstanceOf( value, data.type ), false,\n\t\t\t\tJSON.stringify( value ) + ' is invalid' );\n\t\t} );\n\t} );\n\n} );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/BackgroundQueue.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/bucketing.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/id.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/log.test.js","messages":[{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":59,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":59,"endColumn":50},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":60,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":60,"endColumn":47},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":61,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":61,"endColumn":54},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":91,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":91,"endColumn":43}],"suppressedMessages":[],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nQUnit.module( 'ext.eventLogging/log', {\n\tbeforeEach: function () {\n\t\tthis.sandbox.stub( mw.log, 'warn', function () {} );\n\t\tthis.sandbox.stub( mw.log, 'error', function () {} );\n\n\t\tthis.originalOptions = mw.eventLog.setOptionsForTest( {\n\t\t\tbaseUrl: '/dummy/',\n\t\t\tschemasInfo: {\n\t\t\t\tearthquake: 123,\n\t\t\t\t// eruption events will be prepared for POSTing to EventGate.\n\t\t\t\teruption: '/analytics/legacy/eruption/1.0.0'\n\t\t\t},\n\t\t\tstreamConfigs: false\n\t\t} );\n\t},\n\tafterEach: function () {\n\t\tmw.eventLog.setOptionsForTest( this.originalOptions );\n\t}\n} );\n\nQUnit.test( 'logEvent()', function ( assert ) {\n\tvar eventData = {\n\t\tepicenter: 'Valdivia',\n\t\tmagnitude: 9.5\n\t};\n\n\treturn mw.eventLog.logEvent( 'earthquake', eventData ).then( function ( e ) {\n\t\tassert.deepEqual( e.event, eventData, 'logEvent promise resolves with event' );\n\t\tassert.strictEqual( e.revision, 123, 'logEvent gets the revision id from config' );\n\t} );\n} );\n\nQUnit.test( 'logEvent() via submit()', function ( assert ) {\n\tvar eventData = {\n\t\tvolcano: 'Nyiragongo',\n\t\tExplosivity: 1\n\t};\n\n\treturn mw.eventLog.logEvent( 'eruption', eventData ).then( function ( e ) {\n\t\tvar expectedEventData = {\n\t\t\tvolcano: 'Nyiragongo',\n\t\t\tExplosivity: 1\n\t\t};\n\n\t\tassert.deepEqual(\n\t\t\te.event,\n\t\t\texpectedEventData,\n\t\t\t'logEvent promise resolves with event prepared for EventGate'\n\t\t);\n\n\t\tassert.strictEqual(\n\t\t\te.$schema,\n\t\t\t'/analytics/legacy/eruption/1.0.0',\n\t\t\t'logEvent builds the $schema url from revision in config'\n\t\t);\n\n\t\tassert.ok( e.meta, 'meta field should be set' );\n\t\tassert.notOk( e.dt, 'dt should not be set' );\n\t\tassert.ok( e.client_dt, 'client_dt should be set' );\n\t\tassert.strictEqual( e.meta.domain, e.webHost, 'meta.domain should match webHost field' );\n\t\tassert.strictEqual( e.revision, undefined, 'revision field should be unset' );\n\t} );\n} );\n\nQUnit.test.each( 'checkUrlSize()', {\n\t'URL size is ok': {\n\t\tsize: mw.eventLog.maxUrlSize,\n\t\texpected: undefined\n\t},\n\t'URL size is not ok': {\n\t\tsize: mw.eventLog.maxUrlSize + 1,\n\t\texpected: 'Url exceeds maximum length'\n\t}\n}, function ( assert, data ) {\n\tvar url = new Array( data.size + 1 ).join( 'x' );\n\tvar result = mw.eventLog.checkUrlSize( 'earthquake', url );\n\tassert.deepEqual( result, data.expected );\n} );\n\nQUnit.test( 'logEvent() - reject large event data', function ( assert ) {\n\tvar event = {\n\t\tepicenter: 'Valdivia',\n\t\tmagnitude: 9.5,\n\t\tarticle: new Array( mw.eventLog.maxUrlSize + 1 ).join( 'x' )\n\t};\n\n\tmw.eventLog.logEvent( 'earthquake', event )\n\t\t.done( function () {\n\t\t\tassert.ok( false, 'Expected an error' );\n\t\t} )\n\t\t.fail( function ( e, error ) {\n\t\t\tassert.deepEqual( error, 'Url exceeds maximum length',\n\t\t\t\t'logEvent promise resolves with error' );\n\t\t} )\n\t\t.always( assert.async() );\n} );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/stream.test.js","messages":[{"ruleId":"compat/compat","severity":1,"message":"navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11","line":51,"column":22,"nodeType":"MemberExpression","endLine":51,"endColumn":42},{"ruleId":"compat/compat","severity":1,"message":"navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11","line":52,"column":15,"nodeType":"MemberExpression","endLine":52,"endColumn":35}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nQUnit.module( 'ext.eventLogging/stream', {\n\tbeforeEach: function () {\n\t\tthis.clock = this.sandbox.useFakeTimers();\n\t\tthis.originalOptions = mw.eventLog.setOptionsForTest( {} );\n\t},\n\tafterEach: function () {\n\t\tmw.eventLog.setOptionsForTest( this.originalOptions );\n\t}\n} );\n\nQUnit.test( 'submit() - warn for event without schema', function ( assert ) {\n\tvar seen = [];\n\tthis.sandbox.stub( mw.eventLog, 'enqueue' );\n\tthis.sandbox.stub( mw.log, 'warn', function () {\n\t\tseen.push( 'warn' );\n\t} );\n\n\tmw.eventLog.setOptionsForTest( {\n\t\tstreamConfigs: {\n\t\t\t'test.stream': { some: 'config' }\n\t\t}\n\t} );\n\tmw.eventLog.submit( 'test.stream', {} );\n\tassert.deepEqual( [ 'warn' ], seen );\n\tassert.strictEqual( mw.eventLog.enqueue.callCount, 0, 'enqueue() calls' );\n} );\n\nQUnit.test( 'submit() - produce an event correctly', function ( assert ) {\n\tvar t1, jsonString, data;\n\tthis.sandbox.stub( mw.eventLog, 'enqueue', function ( callback ) {\n\t\t// Stub BackgroundQueue, regardless of intervalSecs config.\n\t\tcallback();\n\t} );\n\tthis.sandbox.stub( mw.log, 'warn' );\n\tthis.sandbox.stub( navigator, 'sendBeacon' );\n\n\tthis.clock.tick( 1000 );\n\tt1 = new Date().toISOString();\n\tmw.eventLog.setOptionsForTest( {\n\t\tserviceUri: 'testUri',\n\t\tstreamConfigs: {\n\t\t\t'test.stream': { some: 'config' }\n\t\t}\n\t} );\n\tmw.eventLog.submit( 'test.stream', { $schema: 'test/schema' } );\n\tthis.clock.tick( 1000 );\n\n\tassert.strictEqual( mw.log.warn.callCount, 0, 'warn() calls' );\n\tassert.strictEqual( navigator.sendBeacon.callCount, 1, 'sendBeacon() calls' );\n\tjsonString = navigator.sendBeacon.args[ 0 ][ 1 ];\n\tdata = JSON.parse( jsonString );\n\tassert.strictEqual( data.dt, t1, 'client-side dt is valid' );\n\tassert.strictEqual( data.meta.stream, 'test.stream', 'stream is valid' );\n} );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/ext.eventLogging/utils.test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]}]

--- end ---
$ ./node_modules/.bin/grunt stylelint
--- stdout ---
Running "stylelint:all" (stylelint) task

modules/ext.eventLogging.jsonSchema.styles/jsonSchema.css
 30:29  ✖  Expected double colon pseudo-element notation  selector-pseudo-element-colon-notation
 31:29  ✖  Expected double colon pseudo-element notation  selector-pseudo-element-colon-notation

2 problems (2 errors, 0 warnings)


⚠ 2 warnings

Warning: Task "stylelint:all" failed. Use --force to continue.

Aborted due to warnings.

--- end ---
$ ./node_modules/.bin/stylelint modules/ext.eventLogging.jsonSchema.styles/jsonSchema.css -f json
--- stdout ---
[{"source":"/src/repo/modules/ext.eventLogging.jsonSchema.styles/jsonSchema.css","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":true,"warnings":[{"line":30,"column":29,"endLine":30,"endColumn":30,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"},{"line":31,"column":29,"endLine":31,"endColumn":30,"rule":"selector-pseudo-element-colon-notation","severity":"error","text":"Expected double colon pseudo-element notation (selector-pseudo-element-colon-notation)"}]}]
--- end ---
$ /usr/bin/npm ci --legacy-peer-deps
--- stdout ---

added 407 packages, and audited 408 packages in 4s

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

found 0 vulnerabilities

--- end ---
$ /usr/bin/npm test
--- stdout ---

> test
> grunt test

Running "eslint:all" (eslint) task

/src/repo/.eslintrc.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/.stylelintrc.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/Gruntfile.js
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/composer.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/devserver/eventgate.config.yaml
   1:1   error    Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  61:54  warning  Irregular whitespace not allowed                               yml/no-irregular-whitespace

/src/repo/devserver/package.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/extension.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ar.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ast.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ba.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/be-tarask.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/be.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/bn.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/br.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ce.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/cs.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/da.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/de.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/dsb.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/el.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/en.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/eo.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/es.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/et.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/fa.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/fr.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/frp.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/gl.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/he.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/hi.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/hsb.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/hu.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ia.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/id.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ilo.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/io.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/is.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/it.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ja.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ka.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/kk-cyrl.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ko.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ksh.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/lb.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/li.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/lij.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/lt.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/mk.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ml.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ms.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/mt.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/nap.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/nb.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/nl.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/oc.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/pl.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/pms.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/pt-br.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/pt.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/qqq.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ro.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/roa-tara.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/ru.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/sa.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/scn.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/sh.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/si.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/sk.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/sl.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/sms.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/sv.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/szy.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/tr.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/uk.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/vi.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/zh-hans.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/core/zh-hant.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/ar.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/ast.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/ba.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/be-tarask.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/bg.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/br.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/cs.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/de.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/dsb.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/el.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/en.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/es.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/fa.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/fr.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/frp.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/gl.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/he.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/hsb.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/ia.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/id.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/it.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/ja.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/ko.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/ksh.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/lb.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/mk.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/ms.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/nb.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/nl.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/pms.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/pt-br.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/pt.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/qqq.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/roa-tara.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/ru.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/si.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/sl.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/sv.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/tr.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/uk.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/vi.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/zh-hans.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/i18n/jsonschema/zh-hant.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/jsduck.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/modules/.eslintrc.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/modules/ext.eventLogging.debug/debug.js
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/modules/ext.eventLogging.jsonSchema/jsonSchema.js
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/modules/ext.eventLogging/BackgroundQueue.js
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/modules/ext.eventLogging/MediaWikiMetricsClientIntegration.js
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/modules/ext.eventLogging/Schema.js
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/modules/ext.eventLogging/core.js
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/modules/ext.eventLogging/subscriber.js
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/modules/lib/foreign-resources.yaml
   1:1  error    Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  15:5  warning  Empty mapping values are forbidden                             yml/no-empty-mapping-value
  16:5  warning  Empty mapping values are forbidden                             yml/no-empty-mapping-value

/src/repo/package-lock.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/package.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/schemas/schemaschema.json
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions

/src/repo/tests/qunit/ext.eventLogging.debug/debug.test.js
  84:4  warning  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/ext.eventLogging/log.test.js
  59:3  warning  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  60:3  warning  Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  61:3  warning  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  91:4  warning  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions

/src/repo/tests/qunit/ext.eventLogging/stream.test.js
  51:22  warning  navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11  compat/compat
  52:15  warning  navigator.sendBeacon() is not supported in Safari 9.1, iOS Safari 9.0-9.2, IE 11  compat/compat

✖ 143 problems (133 errors, 10 warnings)

Warning: Task "eslint:all" failed. Use --force to continue.

Aborted due to warnings.

--- end ---
Traceback (most recent call last):
  File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 1400, in main
    libup.run(args.repo, args.output, args.branch)
  File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 1338, in run
    self.npm_upgrade(plan)
  File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 1049, in npm_upgrade
    self.npm_test()
  File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/__init__.py", line 287, in npm_test
    self.check_call(['npm', 'test'])
  File "/venv/lib/python3.9/site-packages/runner-0.1.0-py3.9.egg/runner/shell2.py", line 54, in check_call
    res.check_returncode()
  File "/usr/lib/python3.9/subprocess.py", line 460, in check_returncode
    raise CalledProcessError(self.returncode, self.args, self.stdout,
subprocess.CalledProcessError: Command '['/usr/bin/npm', 'test']' returned non-zero exit status 3.
Source code is licensed under the AGPL.