mediawiki/extensions/WikibaseLexeme: main (log #975625)

sourcepatches

This run took 81 seconds.

$ date
--- stdout ---
Mon Mar 27 05:15:17 UTC 2023

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-WikibaseLexeme.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
--- stderr ---
Submodule 'resources/special/new-lexeme' (https://phabricator.wikimedia.org/diffusion/NLSP/new-lexeme-special-page.git) registered for path 'resources/special/new-lexeme'
Cloning into '/src/repo/resources/special/new-lexeme'...
--- stdout ---
Submodule path 'resources/special/new-lexeme': checked out 'eac2ddd12d75210f3d24b1adac467a9732deb518'

--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.

--- end ---
$ git show-ref refs/heads/master
--- stdout ---
a4cac6f15ba876ce7aed90b74de2154a77fcd738 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json --legacy-peer-deps
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "@xmldom/xmldom": {
      "name": "@xmldom/xmldom",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1090178,
          "name": "@xmldom/xmldom",
          "dependency": "@xmldom/xmldom",
          "title": "xmldom allows multiple root nodes in a DOM",
          "url": "https://github.com/advisories/GHSA-crh6-fp67-6883",
          "severity": "critical",
          "cwe": [
            "CWE-20",
            "CWE-1288"
          ],
          "cvss": {
            "score": 9.8,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": "<0.7.7"
        }
      ],
      "effects": [],
      "range": "<0.7.7",
      "nodes": [
        "node_modules/@xmldom/xmldom"
      ],
      "fixAvailable": true
    },
    "diff": {
      "name": "diff",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1085700,
          "name": "diff",
          "dependency": "diff",
          "title": "Regular Expression Denial of Service (ReDoS)",
          "url": "https://github.com/advisories/GHSA-h6ch-v84p-w6p9",
          "severity": "high",
          "cwe": [
            "CWE-400"
          ],
          "cvss": {
            "score": 0,
            "vectorString": null
          },
          "range": "<3.5.0"
        }
      ],
      "effects": [
        "unexpected"
      ],
      "range": "<3.5.0",
      "nodes": [
        "node_modules/unexpected/node_modules/diff"
      ],
      "fixAvailable": {
        "name": "unexpected",
        "version": "13.1.0",
        "isSemVerMajor": true
      }
    },
    "ejs": {
      "name": "ejs",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1089270,
          "name": "ejs",
          "dependency": "ejs",
          "title": "ejs template injection vulnerability",
          "url": "https://github.com/advisories/GHSA-phwq-j96m-2c2q",
          "severity": "critical",
          "cwe": [
            "CWE-74"
          ],
          "cvss": {
            "score": 9.8,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": "<3.1.7"
        }
      ],
      "effects": [],
      "range": "<3.1.7",
      "nodes": [
        "node_modules/ejs"
      ],
      "fixAvailable": true
    },
    "got": {
      "name": "got",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1088948,
          "name": "got",
          "dependency": "got",
          "title": "Got allows a redirect to a UNIX socket",
          "url": "https://github.com/advisories/GHSA-pfrx-2q88-qq97",
          "severity": "moderate",
          "cwe": [],
          "cvss": {
            "score": 5.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N"
          },
          "range": "<11.8.5"
        }
      ],
      "effects": [],
      "range": "<11.8.5",
      "nodes": [
        "node_modules/got"
      ],
      "fixAvailable": true
    },
    "grunt": {
      "name": "grunt",
      "severity": "high",
      "isDirect": true,
      "via": [
        {
          "source": 1088711,
          "name": "grunt",
          "dependency": "grunt",
          "title": "Path Traversal in Grunt",
          "url": "https://github.com/advisories/GHSA-j383-35pm-c5h4",
          "severity": "moderate",
          "cwe": [
            "CWE-22"
          ],
          "cvss": {
            "score": 5.5,
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N"
          },
          "range": "<1.5.2"
        },
        {
          "source": 1089539,
          "name": "grunt",
          "dependency": "grunt",
          "title": "Race Condition in Grunt",
          "url": "https://github.com/advisories/GHSA-rm36-94g8-835r",
          "severity": "high",
          "cwe": [
            "CWE-367"
          ],
          "cvss": {
            "score": 7,
            "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": "<1.5.3"
        }
      ],
      "effects": [],
      "range": "<=1.5.2",
      "nodes": [
        "node_modules/grunt"
      ],
      "fixAvailable": {
        "name": "grunt",
        "version": "1.6.1",
        "isSemVerMajor": false
      }
    },
    "http-cache-semantics": {
      "name": "http-cache-semantics",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1090532,
          "name": "http-cache-semantics",
          "dependency": "http-cache-semantics",
          "title": "http-cache-semantics vulnerable to Regular Expression Denial of Service",
          "url": "https://github.com/advisories/GHSA-rc47-6667-2j5j",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "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": "<4.1.1"
        }
      ],
      "effects": [],
      "range": "<4.1.1",
      "nodes": [
        "node_modules/http-cache-semantics"
      ],
      "fixAvailable": true
    },
    "minimatch": {
      "name": "minimatch",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1091174,
          "name": "minimatch",
          "dependency": "minimatch",
          "title": "minimatch ReDoS vulnerability",
          "url": "https://github.com/advisories/GHSA-f8q6-p94x-37v3",
          "severity": "high",
          "cwe": [
            "CWE-400"
          ],
          "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": "<3.0.5"
        }
      ],
      "effects": [
        "mocha",
        "recursive-readdir"
      ],
      "range": "<3.0.5",
      "nodes": [
        "node_modules/minimatch"
      ],
      "fixAvailable": true
    },
    "minimist": {
      "name": "minimist",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1091173,
          "name": "minimist",
          "dependency": "minimist",
          "title": "Prototype Pollution in minimist",
          "url": "https://github.com/advisories/GHSA-xvch-5gv4-984h",
          "severity": "critical",
          "cwe": [
            "CWE-1321"
          ],
          "cvss": {
            "score": 9.8,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": ">=1.0.0 <1.2.6"
        }
      ],
      "effects": [],
      "range": "1.0.0 - 1.2.5",
      "nodes": [
        "node_modules/minimist"
      ],
      "fixAvailable": true
    },
    "mocha": {
      "name": "mocha",
      "severity": "high",
      "isDirect": false,
      "via": [
        "minimatch",
        "nanoid"
      ],
      "effects": [],
      "range": "5.1.0 - 9.2.1",
      "nodes": [
        "node_modules/mocha"
      ],
      "fixAvailable": true
    },
    "mwbot": {
      "name": "mwbot",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        "request"
      ],
      "effects": [
        "wdio-mediawiki"
      ],
      "range": ">=0.1.6",
      "nodes": [
        "node_modules/mwbot"
      ],
      "fixAvailable": false
    },
    "nanoid": {
      "name": "nanoid",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1089011,
          "name": "nanoid",
          "dependency": "nanoid",
          "title": "Exposure of Sensitive Information to an Unauthorized Actor in nanoid",
          "url": "https://github.com/advisories/GHSA-qrpm-p2h7-hrv2",
          "severity": "moderate",
          "cwe": [
            "CWE-200"
          ],
          "cvss": {
            "score": 5.5,
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N"
          },
          "range": ">=3.0.0 <3.1.31"
        }
      ],
      "effects": [
        "mocha"
      ],
      "range": "3.0.0 - 3.1.30",
      "nodes": [
        "node_modules/nanoid"
      ],
      "fixAvailable": true
    },
    "prismjs": {
      "name": "prismjs",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1090424,
          "name": "prismjs",
          "dependency": "prismjs",
          "title": "Cross-site Scripting in Prism",
          "url": "https://github.com/advisories/GHSA-3949-f494-cm99",
          "severity": "high",
          "cwe": [
            "CWE-79"
          ],
          "cvss": {
            "score": 7.5,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:L"
          },
          "range": ">=1.14.0 <1.27.0"
        }
      ],
      "effects": [],
      "range": "1.14.0 - 1.26.0",
      "nodes": [
        "node_modules/prismjs"
      ],
      "fixAvailable": true
    },
    "recursive-readdir": {
      "name": "recursive-readdir",
      "severity": "high",
      "isDirect": false,
      "via": [
        "minimatch"
      ],
      "effects": [],
      "range": "1.2.0 - 2.2.2",
      "nodes": [
        "node_modules/recursive-readdir"
      ],
      "fixAvailable": true
    },
    "request": {
      "name": "request",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        {
          "source": 1091459,
          "name": "request",
          "dependency": "request",
          "title": "Server-Side Request Forgery in Request",
          "url": "https://github.com/advisories/GHSA-p8p7-x288-28g6",
          "severity": "moderate",
          "cwe": [
            "CWE-918"
          ],
          "cvss": {
            "score": 6.1,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
          },
          "range": "<=2.88.2"
        }
      ],
      "effects": [
        "mwbot"
      ],
      "range": "*",
      "nodes": [
        "node_modules/request"
      ],
      "fixAvailable": false
    },
    "ua-parser-js": {
      "name": "ua-parser-js",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1088696,
          "name": "ua-parser-js",
          "dependency": "ua-parser-js",
          "title": "ReDoS Vulnerability in ua-parser-js version ",
          "url": "https://github.com/advisories/GHSA-fhg7-m89q-25r3",
          "severity": "high",
          "cwe": [
            "CWE-400",
            "CWE-1333"
          ],
          "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": ">=0.8.0 <1.0.33"
        }
      ],
      "effects": [],
      "range": "0.8.1 - 1.0.32",
      "nodes": [
        "node_modules/ua-parser-js"
      ],
      "fixAvailable": true
    },
    "unexpected": {
      "name": "unexpected",
      "severity": "high",
      "isDirect": true,
      "via": [
        "diff"
      ],
      "effects": [],
      "range": "5.0.0-beta1 - 11.0.0",
      "nodes": [
        "node_modules/unexpected"
      ],
      "fixAvailable": {
        "name": "unexpected",
        "version": "13.1.0",
        "isSemVerMajor": true
      }
    },
    "wdio-mediawiki": {
      "name": "wdio-mediawiki",
      "severity": "moderate",
      "isDirect": true,
      "via": [
        "mwbot"
      ],
      "effects": [],
      "range": "*",
      "nodes": [
        "node_modules/wdio-mediawiki"
      ],
      "fixAvailable": false
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 5,
      "high": 9,
      "critical": 3,
      "total": 17
    },
    "dependencies": {
      "prod": 1,
      "dev": 939,
      "optional": 2,
      "peer": 0,
      "peerOptional": 0,
      "total": 939
    }
  }
}

--- 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: 54 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 davidrjonas/composer-lock-diff (1.7.0)
  - Locking doctrine/annotations (1.14.3)
  - Locking doctrine/cache (1.13.0)
  - Locking doctrine/collections (1.8.0)
  - Locking doctrine/common (2.13.3)
  - Locking doctrine/deprecations (v1.0.0)
  - Locking doctrine/event-manager (1.2.0)
  - Locking doctrine/inflector (1.4.4)
  - Locking doctrine/lexer (1.2.3)
  - Locking doctrine/persistence (1.3.8)
  - Locking doctrine/reflection (1.2.3)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking giorgiosironi/eris (0.13.0)
  - Locking hamcrest/hamcrest-php (v2.0.1)
  - Locking icomefromthenet/reverse-regex (v0.0.6.3)
  - 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 patchwork/utf8 (v1.3.3)
  - 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/cache (1.0.1)
  - Locking psr/container (1.1.2)
  - Locking psr/log (1.1.4)
  - Locking sabre/event (5.1.4)
  - Locking serialization/serialization (4.0.0)
  - 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/assert (v0.5.1)
  - Locking wmde/php-vuejs-templating (2.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 54 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]    0 [--->------------------------]  - Installing composer/pcre (3.1.0): Extracting archive
  - Installing davidrjonas/composer-lock-diff (1.7.0): Extracting archive
  - Installing doctrine/inflector (1.4.4): Extracting archive
  - Installing doctrine/lexer (1.2.3): Extracting archive
  - Installing psr/cache (1.0.1): Extracting archive
  - Installing doctrine/annotations (1.14.3): Extracting archive
  - Installing doctrine/reflection (1.2.3): Extracting archive
  - Installing doctrine/deprecations (v1.0.0): Extracting archive
  - Installing doctrine/event-manager (1.2.0): Extracting archive
  - Installing doctrine/collections (1.8.0): Extracting archive
  - Installing doctrine/cache (1.13.0): Extracting archive
  - Installing doctrine/persistence (1.3.8): Extracting archive
  - Installing giorgiosironi/eris (0.13.0): Extracting archive
  - Installing hamcrest/hamcrest-php (v2.0.1): Extracting archive
  - Installing patchwork/utf8 (v1.3.3): Extracting archive
  - Installing doctrine/common (2.13.3): Extracting archive
  - Installing icomefromthenet/reverse-regex (v0.0.6.3): 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 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 serialization/serialization (4.0.0): Extracting archive
  - Installing wikimedia/assert (v0.5.1): Extracting archive
  - Installing wmde/php-vuejs-templating (2.0.0): Extracting archive
  0/44 [>---------------------------]   0%
  9/44 [=====>----------------------]  20%
 19/44 [============>---------------]  43%
 29/44 [==================>---------]  65%
 37/44 [=======================>----]  84%
 44/44 [============================] 100%7 package suggestions were added by new dependencies, use `composer suggest` to see details.
Package doctrine/reflection is abandoned, you should avoid using it. Use roave/better-reflection instead.
Package patchwork/utf8 is abandoned, you should avoid using it. Use symfony/polyfill-mbstring or symfony/string instead.
Generating autoload files
21 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.4.1 -> 1.6.1
Upgrading n:grunt-banana-checker from 0.9.0 -> 0.10.0
$ /usr/bin/npm install
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wdio/sync@7.16.14',
npm WARN EBADENGINE   required: { node: '>=12.0.0 <16' },
npm WARN EBADENGINE   current: { node: 'v16.17.1', npm: '8.15.0' }
npm WARN EBADENGINE }
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated grunt-jasmine-nodejs@1.6.1: Deprecated in favor of npm scripts.
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated core-js@2.6.12: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
--- stdout ---

added 946 packages, and audited 947 packages in 12s

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

17 vulnerabilities (6 moderate, 8 high, 3 critical)

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 package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
$ /usr/bin/npm install grunt-eslint@24.0.0 --save-exact
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wdio/sync@7.16.14',
npm WARN EBADENGINE   required: { node: '>=12.0.0 <16' },
npm WARN EBADENGINE   current: { node: 'v16.17.1', npm: '8.15.0' }
npm WARN EBADENGINE }
--- stdout ---

up to date, audited 947 packages in 2s

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

17 vulnerabilities (6 moderate, 8 high, 3 critical)

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 package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
$ ./node_modules/.bin/eslint i18n/api/cs.json i18n/be.json i18n/lt.json tests/selenium/specs/nonexistinglexeme.js i18n/api/be.json tests/jasmine/InvalidLanguageIndicator.spec.js i18n/api/da.json tests/selenium/pageobjects/newlexeme.page.js i18n/api/mk.json i18n/sd.json tests/jasmine/LanguageAndLexicalCategoryWidget.spec.js i18n/api/scn.json i18n/pt.json tests/qunit/datamodel/Sense.tests.js tests/jasmine/store/mutationTypes.spec.js tests/selenium/replication.js tests/selenium/specs/special/new.js tests/qunit/jquery.wikibase.lexemeformlistview.tests.js i18n/sr-el.json i18n/language-names/fr.json tests/qunit/experts/Form.tests.js i18n/api/qqq.json i18n/ta.json i18n/api/ru.json tests/qunit/entityChangers/LexemeRevisionStore.tests.js i18n/language-names/cy.json i18n/language-names/sms.json i18n/smn.json i18n/zgh.json i18n/tg-cyrl.json i18n/language-names/fa.json i18n/uk.json i18n/language-names/guw.json i18n/api/bn.json i18n/language-names/hyw.json i18n/fa.json i18n/en-gb.json resources/datamodel/Lemma.js tests/jasmine/store/actions.spec.js i18n/pa.json resources/widgets/LemmaWidget.newLemmaWidget.js resources/jquery.wikibase.senselistview.js i18n/language-names/dag.json tests/qunit/jquery.wikibase.lexemeformview.tests.js i18n/language-names/qqq.json tests/selenium/specs/special/recentchanges.js i18n/language-names/da.json package-lock.json tests/qunit/jquery.wikibase.senselistview.tests.js i18n/language-names/cs.json i18n/language-names/ar.json resources/datamodel/Lexeme.js i18n/language-names/nb.json i18n/se.json i18n/de.json i18n/language-names/pcd.json i18n/qqq.json i18n/id.json resources/view/ControllerViewFactory.js i18n/language-names/sr-ec.json i18n/sk.json i18n/ru.json i18n/lrc.json i18n/api/ia.json i18n/api/el.json i18n/api/hi.json i18n/language-names/tk.json i18n/api/lt.json resources/serialization/LexemeDeserializer.js i18n/language-names/io.json i18n/api/lv.json i18n/api/nl.json resources/entityChangers/LexemeRevisionStore.js tests/qunit/jquery.wikibase.senseview.tests.js tests/selenium/specs/sense.js i18n/language-names/eo.json i18n/api/sl.json i18n/language-names/nn.json tests/selenium/specs/form.section.js i18n/da.json i18n/ks-arab.json i18n/gu.json i18n/api/be-tarask.json resources/hooks/lexeme.viewhook.js i18n/language-names/mk.json i18n/pnb.json tests/selenium/specs/lemma.edit.js i18n/ilo.json i18n/language-names/tr.json i18n/es.json i18n/language-names/en.json i18n/language-names/wuu.json i18n/language-names/be.json tests/jasmine/helpers/template-loader.js i18n/api/zh-hans.json i18n/ar.json tests/selenium/wdio.conf.js tests/selenium/pageobjects/undo.page.js tests/selenium/specs/form.remove.js resources/widgets/LexemeHeader.js resources/widgets/RedundantLanguageIndicator.js i18n/btm.json i18n/hr.json i18n/tw.json i18n/nah.json i18n/he.json i18n/language-names/lb.json i18n/tok.json i18n/language-names/nl.json i18n/nl.json i18n/api/nn.json i18n/api/mr.json i18n/pl.json i18n/kcg.json i18n/language-names/hr.json tests/selenium/pageobjects/watchlist.page.js tests/qunit/experts/Lexeme.tests.js tests/phpunit/data/rdf/entities/L2.json i18n/sl.json resources/__namespace.js i18n/language-names/ks-arab.json i18n/sv.json resources/store/mutations.js tests/jasmine/LexemeHeaderWidget.spec.js i18n/vec.json tests/qunit/entityChangers/SenseChanger.tests.js resources/mediawiki.template.vue.js i18n/sa.json tests/jasmine/LexemeHeaderStore.spec.js i18n/api/ast.json i18n/api/lb.json i18n/ko.json i18n/api/es.json i18n/api/tw.json i18n/language-names/ug-arab.json i18n/language-names/bn.json i18n/ku-latn.json i18n/language-names/ojb.json tests/jasmine/store/actionTypes.spec.js resources/widgets/LanguageSelectorWrapper.js resources/widgets/LexemeHeader.newLexemeHeader.js i18n/nyn.json i18n/api/fi.json i18n/language-names/bcl.json tests/jasmine/LemmaList.spec.js i18n/bar.json i18n/language-names/ca.json resources/services/__namespace.js i18n/api/ms.json i18n/el.json i18n/mrh.json resources/store/actionTypes.js i18n/api/nb.json tests/qunit/widgets/GrammaticalFeatureListWidget.tests.js tests/selenium/specs/special/merge.js resources/datamodel/Sense.js resources/view/config.json i18n/api/tl.json i18n/language-names/roa-tara.json resources/experts/Lexeme.js i18n/mk.json i18n/language-names/pl.json i18n/sh.json resources/jquery.wikibase.lexemeview.js i18n/api/eo.json i18n/language-names/hu.json i18n/language-names/sv.json composer.json i18n/ja.json i18n/scn.json i18n/language-names/tly.json i18n/mr.json resources/view/ReadModeViewFactory.js resources/store/mutationTypes.js i18n/language-names/hi.json resources/datatransfer/LemmaList.js resources/widgets/ItemSelectorWrapper.js tests/qunit/view/ControllerViewFactory.tests.js i18n/api/dag.json tests/qunit/entityChangers/FormChanger.tests.js tests/qunit/serialization/SenseSerializer.tests.js tests/selenium/specs/header.edit.js i18n/api/pnb.json i18n/language-names/tg-cyrl.json i18n/crh-latn.json i18n/api/roa-tara.json tests/selenium/pageobjects/history.page.js resources/widgets/RepresentationWidget.js resources/datamodel/__namespace.js i18n/api/tr.json resources/jquery.wikibase.lexemeformview.js i18n/diq.json i18n/krc.json i18n/ca.json i18n/api/zh-hant.json i18n/api/fr.json i18n/be-tarask.json i18n/api/sv.json i18n/language-names/de.json tests/selenium/pageobjects/specialmergelexemes.page.js i18n/language-names/et.json i18n/pt-br.json tests/selenium/pageobjects/sense.page.js i18n/language-names/ms.json resources/serialization/SenseSerializer.js resources/special/NewLexeme.js tests/selenium/specs/header.js i18n/et.json i18n/ast.json i18n/language-names/vi.json i18n/language-names/he.json i18n/language-names/ja.json tests/selenium/specs/statement.add.js tests/selenium/lexeme.api.js i18n/language-names/tok.json i18n/ur.json resources/focusElement.js Gruntfile.js i18n/api/it.json i18n/eu.json resources/widgets/LexemeHeader.newLexemeHeaderStore.js i18n/api/pt.json resources/experts/Sense.js tests/selenium/specs/form.edit.js i18n/language-names/pt.json i18n/lb.json i18n/zh-hans.json tests/jasmine/RepresentationWidget.spec.js i18n/api/ja.json i18n/language-names/kcg.json package.json tests/selenium/specs/special/watchlist.js tests/qunit/view/ViewFactoryFactory.tests.js i18n/rsk.json i18n/language-names/pt-br.json i18n/nb.json i18n/hy.json i18n/language-names/diq.json tests/selenium/specs/sense.edit.js i18n/language-names/ia.json i18n/language-names/sl.json resources/entityChangers/SenseChanger.js i18n/language-names/sq.json tests/selenium/pageobjects/recentchanges.page.js tests/jasmine/store/mutations.spec.js i18n/roa-tara.json i18n/language-names/ko.json i18n/api/sms.json i18n/language-names/skr-arab.json i18n/api/en.json i18n/language-names/my.json resources/widgets/__namespace.js tests/qunit/jquery.wikibase.grammaticalfeatureview.tests.js i18n/fr.json i18n/api/pl.json i18n/language-names/uk.json tests/jasmine/focusElement.spec.js i18n/ne.json i18n/api/vi.json resources/jquery.wikibase.senseview.js i18n/gl.json i18n/syl.json resources/widgets/GlossWidget.js i18n/wa.json i18n/api/pt-br.json resources/serialization/FormSerializer.js i18n/api/et.json i18n/ms-arab.json i18n/language-names/fi.json i18n/cs.json tests/qunit/datamodel/Form.tests.js i18n/api/gl.json resources/getDeserializer.js tests/selenium/pageobjects/lexeme.page.js resources/widgets/GrammaticalFeatureListWidget.js i18n/tl.json i18n/api/tcy.json tests/selenium/pageobjects/watchable.page.js resources/entityChangers/FormChanger.js i18n/language-names/zh-hant.json i18n/yi.json i18n/api/ar.json i18n/api/ha.json i18n/ms.json extension.json i18n/vi.json i18n/api/bg.json i18n/my.json i18n/fi.json tests/selenium/specs/form.add.js i18n/api/ca.json tests/jasmine/store/index.spec.js tests/jasmine/helpers/jsdom.js i18n/ce.json i18n/hu.json i18n/th.json i18n/bg.json i18n/api/ojb.json i18n/eo.json i18n/api/de.json resources/datamodel/LexemeSubEntityId.js resources/widgets/InvalidLanguageIndicator.js i18n/it.json i18n/language-names/ms-arab.json i18n/nn.json i18n/kjp.json i18n/te.json resources/experts/Form.js i18n/sr-ec.json i18n/language-names/sw.json resources/store/index.js resources/datamodel/Form.js i18n/api/ko.json tests/jasmine/ItemSelectorWrapper.spec.js i18n/zh-hant.json resources/view/ViewFactoryFactory.js tests/qunit/serialization/LexemeDeserializer.tests.js i18n/language-names/lv.json i18n/api/sr-ec.json resources/special/NewLexemeFallback.js tests/qunit/datamodel/Lexeme.tests.js tests/jasmine/datamodel/LexemeSubEntityId.spec.js i18n/lv.json resources/widgets/languages.json tests/qunit/serialization/FormSerializer.tests.js i18n/tr.json i18n/ban.json tests/jasmine/LemmaWidget.spec.js i18n/api/fa.json i18n/br.json i18n/io.json i18n/api/uk.json i18n/sq.json i18n/language-names/pnb.json i18n/tcy.json i18n/sms.json i18n/api/sr-el.json i18n/hi.json resources/store/actions.js i18n/kaa.json resources/jquery.wikibase.lexemeformlistview.js i18n/language-names/hy.json i18n/cy.json i18n/ia.json i18n/api/he.json i18n/ig.json tests/jasmine/helpers/vue.js i18n/en.json tests/jasmine/RedundantLanguageIndicator.spec.js i18n/language-names/zh-hans.json i18n/rki.json tests/selenium/pageobjects/logout.page.js i18n/bn.json i18n/language-names/es.json tests/selenium/specs/helloworld.js tests/selenium/pageobjects/specialversion.page.js resources/jquery.wikibase.grammaticalfeatureview.js i18n/rn.json resources/widgets/LanguageAndLexicalCategoryWidget.js tests/qunit/index.js i18n/language-names/it.json i18n/api/hu.json i18n/skr-arab.json i18n/lfn.json i18n/language-names/ru.json tests/jasmine/GlossWidget.spec.js i18n/language-names/sr-el.json tests/selenium/pageobjects/nonexistinglexeme.page.js i18n/language-names/scn.json i18n/language-names/fy.json i18n/language-names/mrh.json i18n/language-names/ast.json i18n/language-names/id.json --fix
--- stdout ---

/src/repo/Gruntfile.js
  39:3   error  Definition for rule 'es/no-object-assign' was not found  es/no-object-assign
  40:11  error  ES2015 'Object.assign' method is forbidden               es-x/no-object-assign

/src/repo/resources/entityChangers/FormChanger.js
  2:0  warning  Missing JSDoc @param "wb" type  jsdoc/require-param-type

/src/repo/resources/entityChangers/SenseChanger.js
  2:0  warning  Missing JSDoc @param "wb" type  jsdoc/require-param-type

/src/repo/resources/jquery.wikibase.lexemeformview.js
  287:0  warning  Missing JSDoc @param "lemmas" type           jsdoc/require-param-type
  288:0  warning  Missing JSDoc @param "formIndex" type        jsdoc/require-param-type
  289:0  warning  Missing JSDoc @param "formId" type           jsdoc/require-param-type
  290:0  warning  Missing JSDoc @param "representations" type  jsdoc/require-param-type

/src/repo/resources/special/NewLexemeFallback.js
  8:3  error  NodeList.forEach not supported by Chrome<51, Firefox<50, Safari<10, IE & others. Use Array.prototype.forEach.call instead  mediawiki/no-nodelist-unsupported-methods

/src/repo/resources/view/ViewFactoryFactory.js
  17:0  warning  Syntax error in type: []  jsdoc/valid-types

/src/repo/resources/widgets/GlossWidget.js
  34:0  warning  Syntax error in type: [{ value: string, language: string }]  jsdoc/valid-types

/src/repo/tests/qunit/datamodel/Form.tests.js
   2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
  33:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  39:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  46:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  51: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
  65:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  69:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  99:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/datamodel/Lexeme.tests.js
  17:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  25:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  33:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  42:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  49:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/datamodel/Sense.tests.js
   2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
  20:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  25:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  34:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  72:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/entityChangers/FormChanger.tests.js
    2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
   47:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   48:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   49:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   50:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   51:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   52:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   92:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   93:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  140:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  172:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  176:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  180:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  225:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  226:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  227:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  228:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  229:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  273:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  313:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  350:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  395:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  396:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  437:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  441:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  445:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  474:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  479:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  480:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  481:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  482:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  483:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  502:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  503:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  504:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  505:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/entityChangers/LexemeRevisionStore.tests.js
   17:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   25:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   33:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   41:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   49:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   60:3  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   68:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   76:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   84:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   90:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   96:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  102:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  108:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/entityChangers/SenseChanger.tests.js
    2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
   47:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   48:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   49:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   50:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   51:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   52:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   86:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   87:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  129:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  161:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  165:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  169:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  214:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  215:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  216:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  217:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  218:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  256:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  295:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  331:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  373:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  374:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  410:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  414:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  418:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  447:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  452:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  453:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  454:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  455:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  456:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  475:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  476:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  477:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  478:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/jquery.wikibase.grammaticalfeatureview.tests.js
   34:3  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   53:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   67:3  error  Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   71:3  error  Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  103:4  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  124:4  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  139:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/jquery.wikibase.lexemeformlistview.tests.js
   2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
  38:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  45:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  49:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  64:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  65:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  71:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  75:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/jquery.wikibase.lexemeformview.tests.js
    2:0  warning  Missing JSDoc @param "require" type                                                                            jsdoc/require-param-type
    3:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
   58:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   64:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   66:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   76:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   87:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  100:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  105:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  124:6  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  132:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  151:6  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  159:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  179:6  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  187:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  192:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  203:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  208:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  224:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  229:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  243:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  259:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  281:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  285:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  306:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  307:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  309:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/jquery.wikibase.senselistview.tests.js
   2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
  41:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  47:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  51:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  64:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/jquery.wikibase.senseview.tests.js
    2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
   42:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   49:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   58:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   71:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   87:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  106:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  110:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions

/src/repo/tests/qunit/serialization/FormSerializer.tests.js
  81:4  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/serialization/LexemeDeserializer.tests.js
    2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
   64:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   65:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   95:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   98:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  102:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  103:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  117:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  142:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  168:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  171:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  175:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  176:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  185:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  210:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions

/src/repo/tests/qunit/serialization/SenseSerializer.tests.js
  71:4  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/view/ViewFactoryFactory.tests.js
  32:3  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  41:3  error  Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/widgets/GrammaticalFeatureListWidget.tests.js
   2:0  warning  Missing JSDoc @param "QUnit" type                                                                              jsdoc/require-param-type
   3:0  warning  Missing JSDoc @param "require" type                                                                            jsdoc/require-param-type
   4:0  warning  Missing JSDoc @param "sinon" type                                                                              jsdoc/require-param-type
  88:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  89:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  90:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  91:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  92:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  93:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions

/src/repo/tests/selenium/pageobjects/lexeme.page.js
  236:0  warning  Missing JSDoc @param "input" type       jsdoc/require-param-type
  237:0  warning  Missing JSDoc @param "value" type       jsdoc/require-param-type
  439:3  error    Unexpected browser.pause() not allowed  wdio/no-pause
  441:3  error    Unexpected browser.pause() not allowed  wdio/no-pause
  448:3  error    Unexpected browser.pause() not allowed  wdio/no-pause
  450:3  error    Unexpected browser.pause() not allowed  wdio/no-pause

/src/repo/tests/selenium/replication.js
  10:5  error  Unexpected browser.pause() not allowed  wdio/no-pause

/src/repo/tests/selenium/specs/header.edit.js
  12:25  warning  "../../../../Wikibase/repo/tests/selenium/wdio-wikibase/wikibase.api" is not found  node/no-missing-require

/src/repo/tests/selenium/specs/special/recentchanges.js
  27:3  error  Unexpected browser.pause() not allowed  wdio/no-pause

✖ 207 problems (183 errors, 24 warnings)


--- end ---
$ ./node_modules/.bin/eslint i18n/api/cs.json i18n/be.json i18n/lt.json tests/selenium/specs/nonexistinglexeme.js i18n/api/be.json tests/jasmine/InvalidLanguageIndicator.spec.js i18n/api/da.json tests/selenium/pageobjects/newlexeme.page.js i18n/api/mk.json i18n/sd.json tests/jasmine/LanguageAndLexicalCategoryWidget.spec.js i18n/api/scn.json i18n/pt.json tests/qunit/datamodel/Sense.tests.js tests/jasmine/store/mutationTypes.spec.js tests/selenium/replication.js tests/selenium/specs/special/new.js tests/qunit/jquery.wikibase.lexemeformlistview.tests.js i18n/sr-el.json i18n/language-names/fr.json tests/qunit/experts/Form.tests.js i18n/api/qqq.json i18n/ta.json i18n/api/ru.json tests/qunit/entityChangers/LexemeRevisionStore.tests.js i18n/language-names/cy.json i18n/language-names/sms.json i18n/smn.json i18n/zgh.json i18n/tg-cyrl.json i18n/language-names/fa.json i18n/uk.json i18n/language-names/guw.json i18n/api/bn.json i18n/language-names/hyw.json i18n/fa.json i18n/en-gb.json resources/datamodel/Lemma.js tests/jasmine/store/actions.spec.js i18n/pa.json resources/widgets/LemmaWidget.newLemmaWidget.js resources/jquery.wikibase.senselistview.js i18n/language-names/dag.json tests/qunit/jquery.wikibase.lexemeformview.tests.js i18n/language-names/qqq.json tests/selenium/specs/special/recentchanges.js i18n/language-names/da.json package-lock.json tests/qunit/jquery.wikibase.senselistview.tests.js i18n/language-names/cs.json i18n/language-names/ar.json resources/datamodel/Lexeme.js i18n/language-names/nb.json i18n/se.json i18n/de.json i18n/language-names/pcd.json i18n/qqq.json i18n/id.json resources/view/ControllerViewFactory.js i18n/language-names/sr-ec.json i18n/sk.json i18n/ru.json i18n/lrc.json i18n/api/ia.json i18n/api/el.json i18n/api/hi.json i18n/language-names/tk.json i18n/api/lt.json resources/serialization/LexemeDeserializer.js i18n/language-names/io.json i18n/api/lv.json i18n/api/nl.json resources/entityChangers/LexemeRevisionStore.js tests/qunit/jquery.wikibase.senseview.tests.js tests/selenium/specs/sense.js i18n/language-names/eo.json i18n/api/sl.json i18n/language-names/nn.json tests/selenium/specs/form.section.js i18n/da.json i18n/ks-arab.json i18n/gu.json i18n/api/be-tarask.json resources/hooks/lexeme.viewhook.js i18n/language-names/mk.json i18n/pnb.json tests/selenium/specs/lemma.edit.js i18n/ilo.json i18n/language-names/tr.json i18n/es.json i18n/language-names/en.json i18n/language-names/wuu.json i18n/language-names/be.json tests/jasmine/helpers/template-loader.js i18n/api/zh-hans.json i18n/ar.json tests/selenium/wdio.conf.js tests/selenium/pageobjects/undo.page.js tests/selenium/specs/form.remove.js resources/widgets/LexemeHeader.js resources/widgets/RedundantLanguageIndicator.js i18n/btm.json i18n/hr.json i18n/tw.json i18n/nah.json i18n/he.json i18n/language-names/lb.json i18n/tok.json i18n/language-names/nl.json i18n/nl.json i18n/api/nn.json i18n/api/mr.json i18n/pl.json i18n/kcg.json i18n/language-names/hr.json tests/selenium/pageobjects/watchlist.page.js tests/qunit/experts/Lexeme.tests.js tests/phpunit/data/rdf/entities/L2.json i18n/sl.json resources/__namespace.js i18n/language-names/ks-arab.json i18n/sv.json resources/store/mutations.js tests/jasmine/LexemeHeaderWidget.spec.js i18n/vec.json tests/qunit/entityChangers/SenseChanger.tests.js resources/mediawiki.template.vue.js i18n/sa.json tests/jasmine/LexemeHeaderStore.spec.js i18n/api/ast.json i18n/api/lb.json i18n/ko.json i18n/api/es.json i18n/api/tw.json i18n/language-names/ug-arab.json i18n/language-names/bn.json i18n/ku-latn.json i18n/language-names/ojb.json tests/jasmine/store/actionTypes.spec.js resources/widgets/LanguageSelectorWrapper.js resources/widgets/LexemeHeader.newLexemeHeader.js i18n/nyn.json i18n/api/fi.json i18n/language-names/bcl.json tests/jasmine/LemmaList.spec.js i18n/bar.json i18n/language-names/ca.json resources/services/__namespace.js i18n/api/ms.json i18n/el.json i18n/mrh.json resources/store/actionTypes.js i18n/api/nb.json tests/qunit/widgets/GrammaticalFeatureListWidget.tests.js tests/selenium/specs/special/merge.js resources/datamodel/Sense.js resources/view/config.json i18n/api/tl.json i18n/language-names/roa-tara.json resources/experts/Lexeme.js i18n/mk.json i18n/language-names/pl.json i18n/sh.json resources/jquery.wikibase.lexemeview.js i18n/api/eo.json i18n/language-names/hu.json i18n/language-names/sv.json composer.json i18n/ja.json i18n/scn.json i18n/language-names/tly.json i18n/mr.json resources/view/ReadModeViewFactory.js resources/store/mutationTypes.js i18n/language-names/hi.json resources/datatransfer/LemmaList.js resources/widgets/ItemSelectorWrapper.js tests/qunit/view/ControllerViewFactory.tests.js i18n/api/dag.json tests/qunit/entityChangers/FormChanger.tests.js tests/qunit/serialization/SenseSerializer.tests.js tests/selenium/specs/header.edit.js i18n/api/pnb.json i18n/language-names/tg-cyrl.json i18n/crh-latn.json i18n/api/roa-tara.json tests/selenium/pageobjects/history.page.js resources/widgets/RepresentationWidget.js resources/datamodel/__namespace.js i18n/api/tr.json resources/jquery.wikibase.lexemeformview.js i18n/diq.json i18n/krc.json i18n/ca.json i18n/api/zh-hant.json i18n/api/fr.json i18n/be-tarask.json i18n/api/sv.json i18n/language-names/de.json tests/selenium/pageobjects/specialmergelexemes.page.js i18n/language-names/et.json i18n/pt-br.json tests/selenium/pageobjects/sense.page.js i18n/language-names/ms.json resources/serialization/SenseSerializer.js resources/special/NewLexeme.js tests/selenium/specs/header.js i18n/et.json i18n/ast.json i18n/language-names/vi.json i18n/language-names/he.json i18n/language-names/ja.json tests/selenium/specs/statement.add.js tests/selenium/lexeme.api.js i18n/language-names/tok.json i18n/ur.json resources/focusElement.js Gruntfile.js i18n/api/it.json i18n/eu.json resources/widgets/LexemeHeader.newLexemeHeaderStore.js i18n/api/pt.json resources/experts/Sense.js tests/selenium/specs/form.edit.js i18n/language-names/pt.json i18n/lb.json i18n/zh-hans.json tests/jasmine/RepresentationWidget.spec.js i18n/api/ja.json i18n/language-names/kcg.json package.json tests/selenium/specs/special/watchlist.js tests/qunit/view/ViewFactoryFactory.tests.js i18n/rsk.json i18n/language-names/pt-br.json i18n/nb.json i18n/hy.json i18n/language-names/diq.json tests/selenium/specs/sense.edit.js i18n/language-names/ia.json i18n/language-names/sl.json resources/entityChangers/SenseChanger.js i18n/language-names/sq.json tests/selenium/pageobjects/recentchanges.page.js tests/jasmine/store/mutations.spec.js i18n/roa-tara.json i18n/language-names/ko.json i18n/api/sms.json i18n/language-names/skr-arab.json i18n/api/en.json i18n/language-names/my.json resources/widgets/__namespace.js tests/qunit/jquery.wikibase.grammaticalfeatureview.tests.js i18n/fr.json i18n/api/pl.json i18n/language-names/uk.json tests/jasmine/focusElement.spec.js i18n/ne.json i18n/api/vi.json resources/jquery.wikibase.senseview.js i18n/gl.json i18n/syl.json resources/widgets/GlossWidget.js i18n/wa.json i18n/api/pt-br.json resources/serialization/FormSerializer.js i18n/api/et.json i18n/ms-arab.json i18n/language-names/fi.json i18n/cs.json tests/qunit/datamodel/Form.tests.js i18n/api/gl.json resources/getDeserializer.js tests/selenium/pageobjects/lexeme.page.js resources/widgets/GrammaticalFeatureListWidget.js i18n/tl.json i18n/api/tcy.json tests/selenium/pageobjects/watchable.page.js resources/entityChangers/FormChanger.js i18n/language-names/zh-hant.json i18n/yi.json i18n/api/ar.json i18n/api/ha.json i18n/ms.json extension.json i18n/vi.json i18n/api/bg.json i18n/my.json i18n/fi.json tests/selenium/specs/form.add.js i18n/api/ca.json tests/jasmine/store/index.spec.js tests/jasmine/helpers/jsdom.js i18n/ce.json i18n/hu.json i18n/th.json i18n/bg.json i18n/api/ojb.json i18n/eo.json i18n/api/de.json resources/datamodel/LexemeSubEntityId.js resources/widgets/InvalidLanguageIndicator.js i18n/it.json i18n/language-names/ms-arab.json i18n/nn.json i18n/kjp.json i18n/te.json resources/experts/Form.js i18n/sr-ec.json i18n/language-names/sw.json resources/store/index.js resources/datamodel/Form.js i18n/api/ko.json tests/jasmine/ItemSelectorWrapper.spec.js i18n/zh-hant.json resources/view/ViewFactoryFactory.js tests/qunit/serialization/LexemeDeserializer.tests.js i18n/language-names/lv.json i18n/api/sr-ec.json resources/special/NewLexemeFallback.js tests/qunit/datamodel/Lexeme.tests.js tests/jasmine/datamodel/LexemeSubEntityId.spec.js i18n/lv.json resources/widgets/languages.json tests/qunit/serialization/FormSerializer.tests.js i18n/tr.json i18n/ban.json tests/jasmine/LemmaWidget.spec.js i18n/api/fa.json i18n/br.json i18n/io.json i18n/api/uk.json i18n/sq.json i18n/language-names/pnb.json i18n/tcy.json i18n/sms.json i18n/api/sr-el.json i18n/hi.json resources/store/actions.js i18n/kaa.json resources/jquery.wikibase.lexemeformlistview.js i18n/language-names/hy.json i18n/cy.json i18n/ia.json i18n/api/he.json i18n/ig.json tests/jasmine/helpers/vue.js i18n/en.json tests/jasmine/RedundantLanguageIndicator.spec.js i18n/language-names/zh-hans.json i18n/rki.json tests/selenium/pageobjects/logout.page.js i18n/bn.json i18n/language-names/es.json tests/selenium/specs/helloworld.js tests/selenium/pageobjects/specialversion.page.js resources/jquery.wikibase.grammaticalfeatureview.js i18n/rn.json resources/widgets/LanguageAndLexicalCategoryWidget.js tests/qunit/index.js i18n/language-names/it.json i18n/api/hu.json i18n/skr-arab.json i18n/lfn.json i18n/language-names/ru.json tests/jasmine/GlossWidget.spec.js i18n/language-names/sr-el.json tests/selenium/pageobjects/nonexistinglexeme.page.js i18n/language-names/scn.json i18n/language-names/fy.json i18n/language-names/mrh.json i18n/language-names/ast.json i18n/language-names/id.json -f json
--- stdout ---
[{"filePath":"/src/repo/Gruntfile.js","messages":[{"ruleId":"es/no-object-assign","message":"Definition for rule 'es/no-object-assign' was not found.","line":39,"column":3,"endLine":39,"endColumn":65,"severity":2,"nodeType":null},{"ruleId":"es-x/no-object-assign","severity":2,"message":"ES2015 'Object.assign' method is forbidden.","line":40,"column":11,"nodeType":"MemberExpression","messageId":"forbidden","endLine":40,"endColumn":24}],"suppressedMessages":[{"ruleId":"compat/compat","severity":2,"message":"Object.assign() is not supported in IE 11","line":40,"column":11,"nodeType":"MemberExpression","endLine":40,"endColumn":24,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'jasmine_nodejs' is not in camel case.","line":49,"column":3,"nodeType":"Identifier","messageId":"notCamelCase","endLine":49,"endColumn":17,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint-env node */\n\nmodule.exports = function ( grunt ) {\n\tvar conf = grunt.file.readJSON( 'extension.json' );\n\n\tgrunt.loadNpmTasks( 'grunt-eslint' );\n\tgrunt.loadNpmTasks( 'grunt-banana-checker' );\n\tgrunt.loadNpmTasks( 'grunt-jasmine-nodejs' );\n\tgrunt.loadNpmTasks( 'grunt-stylelint' );\n\n\trequire( 'module-alias/register' );\n\n\tgrunt.initConfig( {\n\t\teslint: {\n\t\t\toptions: {\n\t\t\t\tcache: true,\n\t\t\t\tfix: grunt.option( 'fix' )\n\t\t\t},\n\t\t\tall: [\n\t\t\t\t'**/*.{js,json}',\n\t\t\t\t'!node_modules/**',\n\t\t\t\t'!resources/special/new-lexeme/**',\n\t\t\t\t'!resources/special/new-lexeme-dist/**',\n\t\t\t\t'!vendor/**'\n\t\t\t]\n\t\t},\n\t\tstylelint: {\n\t\t\toptions: {\n\t\t\t\tfix: grunt.option( 'fix' )\n\t\t\t},\n\t\t\tall: [\n\t\t\t\t'**/*.less',\n\t\t\t\t'!node_modules/**',\n\t\t\t\t'!resources/special/new-lexeme/**',\n\t\t\t\t'!resources/special/new-lexeme-dist/**',\n\t\t\t\t'!vendor/**'\n\t\t\t]\n\t\t},\n\t\t// eslint-disable-next-line es/no-object-assign, compat/compat\n\t\tbanana: Object.assign(\n\t\t\tconf.MessagesDirs,\n\t\t\t{\n\t\t\t\toptions: {\n\t\t\t\t\trequireLowerCase: 'initial'\n\t\t\t\t}\n\t\t\t}\n\t\t),\n\t\t// eslint-disable-next-line camelcase\n\t\tjasmine_nodejs: {\n\t\t\tall: {\n\t\t\t\toptions: {\n\t\t\t\t\trandom: true\n\t\t\t\t},\n\t\t\t\tspecs: [\n\t\t\t\t\t'tests/jasmine/**/*.spec.js'\n\t\t\t\t],\n\t\t\t\thelpers: [\n\t\t\t\t\t'tests/jasmine/helpers/*.js'\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t} );\n\n\tgrunt.registerTask( 'test', [ 'eslint:all', 'banana', 'jasmine_nodejs', 'stylelint' ] );\n\tgrunt.registerTask( 'fix', function () {\n\t\tgrunt.config.set( 'eslint.options.fix', true );\n\t\tgrunt.task.run( 'eslint' );\n\t\tgrunt.config.set( 'stylelint.options.fix', true );\n\t\tgrunt.task.run( 'stylelint' );\n\t} );\n\tgrunt.registerTask( 'default', 'test' );\n};\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/composer.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/api/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/ast.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/be-tarask.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/be.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/bg.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/bn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/ca.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/cs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/da.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/dag.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/eo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/et.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/fi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/gl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/ha.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/hi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/hu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/ja.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/lt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/lv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/mr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/nb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/nn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/ojb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/pl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/pnb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/pt-br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/pt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/roa-tara.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/ru.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/scn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/sms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/sr-ec.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/sr-el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/sv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/tcy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/tl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/tw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/uk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/vi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/api/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ast.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ban.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/bar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/be-tarask.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/be.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/bg.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/bn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/btm.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ca.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ce.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/crh-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/cs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/cy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/da.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/diq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/en-gb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/eo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/et.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/eu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/fi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/gl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/gu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/hi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/hr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/hu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/hy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/id.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ig.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ilo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/io.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ja.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/kaa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/kcg.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/kjp.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/krc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ks-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ku-latn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ar.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ast.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/bcl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/be.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/bn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ca.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/cs.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/cy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/da.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/dag.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/diq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/eo.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/es.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/et.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/fa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/fi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/fr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/fy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/guw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/he.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/hi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/hr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/hu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/hy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/hyw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ia.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/id.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/io.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/it.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ja.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/kcg.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ko.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ks-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/lv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/mrh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ms-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/my.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/nb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/nn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ojb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/pcd.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/pl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/pnb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/pt-br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/pt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/roa-tara.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ru.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/scn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/skr-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/sms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/sq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/sr-ec.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/sr-el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/sv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/sw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/tg-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/tk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/tly.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/tok.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/ug-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/uk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/vi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/wuu.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/language-names/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/lb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/lfn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/lrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/lt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/lv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/mk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/mr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/mrh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ms-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/my.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/nah.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/nb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ne.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/nl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/nn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/nyn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/pa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/pl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/pnb.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/pt-br.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/pt.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/rki.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/rn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/roa-tara.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/rsk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ru.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/scn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sd.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/se.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/skr-arab.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/smn.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sms.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sr-ec.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sr-el.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/sv.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/syl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ta.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/tcy.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/te.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/tg-cyrl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/th.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/tl.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/tok.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/tr.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/tw.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/uk.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/ur.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/vec.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/vi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/wa.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/yi.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/zgh.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/zh-hans.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/i18n/zh-hant.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/__namespace.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/datamodel/Form.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/datamodel/Lemma.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/datamodel/Lexeme.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/datamodel/LexemeSubEntityId.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/datamodel/Sense.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/datamodel/__namespace.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/datatransfer/LemmaList.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/entityChangers/FormChanger.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wb\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param wb\n * @license GPL-2.0-or-later\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar FormSerializer = require( '../serialization/FormSerializer.js' ),\n\t\tgetDeserializer = require( 'wikibase.lexeme.getDeserializer' );\n\n\t/**\n\t * @constructor\n\t *\n\t * @param {wikibase.api.RepoApi} api\n\t * @param {wikibase.lexeme.RevisionStore} revisionStore\n\t * @param {string} lexemeId\n\t * @param {Object} formData\n\t * @param {Array} tags\n\t */\n\tvar SELF = function WbLexemeFormChanger(\n\t\tapi,\n\t\trevisionStore,\n\t\tlexemeId,\n\t\tformData,\n\t\ttags\n\t) {\n\t\tthis.api = api;\n\t\tthis.revisionStore = revisionStore;\n\t\tthis.lexemeId = lexemeId;\n\t\tthis.formData = formData;\n\t\tthis.lexemeDeserializer = getDeserializer();\n\t\tthis.formSerializer = new FormSerializer();\n\t\tthis._tags = tags;\n\t};\n\n\t/**\n\t * A service to save changes to a form.\n\t * Note that statements are not supported, only changes to the form elements.\n\t * A FormChanger should only be used for changes to the same form,\n\t * not shared between several forms.\n\t *\n\t * @class wikibase.lexeme.entityChangers.FormChanger\n\t */\n\t$.extend( SELF.prototype, {\n\n\t\t/**\n\t\t * @type {wikibase.api.RepoApi}\n\t\t * @private\n\t\t */\n\t\tapi: null,\n\n\t\t/**\n\t\t * @type {wikibase.lexeme.RevisionStore}\n\t\t * @private\n\t\t */\n\t\trevisionStore: null,\n\n\t\t/**\n\t\t * @type {string}\n\t\t * @private\n\t\t */\n\t\tlexemeId: null,\n\n\t\t/**\n\t\t * @type {Object}\n\t\t * @private\n\t\t */\n\t\tformData: null,\n\n\t\t/**\n\t\t * @type {LexemeDeserializer}\n\t\t * @private\n\t\t */\n\t\tlexemeDeserializer: null,\n\n\t\t/**\n\t\t * @property {string[]}\n\t\t * @private\n\t\t */\n\t\t_tags: null,\n\n\t\t/**\n\t\t * Returns tags used for edits\n\t\t *\n\t\t * @return {string|Array}\n\t\t */\n\t\tgetTags: function () {\n\t\t\tif ( this._tags && this._tags.length ) {\n\t\t\t\treturn this.api.normalizeMultiValue( this._tags );\n\t\t\t}\n\n\t\t\treturn [];\n\t\t},\n\n\t\t/**\n\t\t * Save the changes for the given form.\n\t\t * Statements are ignored.\n\t\t *\n\t\t * @param {wikibase.lexeme.datamodel.Form} form\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\tsave: function ( form ) {\n\t\t\tvar formSerializer = new FormSerializer();\n\n\t\t\tvar serializedForm = formSerializer.serialize( form );\n\n\t\t\tif ( form.getId() ) {\n\t\t\t\treturn this.saveChangedFormData( form.getId(), serializedForm.representations, serializedForm.grammaticalFeatures );\n\t\t\t}\n\n\t\t\treturn this.saveNewFormData( serializedForm.representations, serializedForm.grammaticalFeatures );\n\t\t},\n\n\t\tsaveChangedFormData: function ( formId, representations, grammaticalFeatures ) {\n\t\t\tvar self = this;\n\n\t\t\tvar requestRepresentations =\n\t\t\t\tthis.getRepresentationDataForApiRequest( this.formData.representations, representations );\n\n\t\t\treturn this.api.post( {\n\t\t\t\taction: 'wbleditformelements',\n\t\t\t\tformId: formId,\n\t\t\t\tbaserevid: this.revisionStore.getBaseRevision(),\n\t\t\t\tdata: JSON.stringify( {\n\t\t\t\t\trepresentations: requestRepresentations,\n\t\t\t\t\tgrammaticalFeatures: grammaticalFeatures\n\t\t\t\t} ),\n\t\t\t\terrorformat: 'plaintext',\n\t\t\t\tbot: 0,\n\t\t\t\ttags: this.getTags()\n\t\t\t} ).then( function ( data ) {\n\t\t\t\tvar form = self.lexemeDeserializer.deserializeForm( data.form );\n\t\t\t\tself.formData = self.formSerializer.serialize( form );\n\t\t\t\treturn form;\n\t\t\t} ).catch( function ( code, response ) {\n\t\t\t\tthrow convertPlainTextErrorsToRepoApiError( response.errors, 'save' );\n\t\t\t} );\n\t\t},\n\n\t\tsaveNewFormData: function ( representations, grammaticalFeatures ) {\n\t\t\tvar self = this;\n\n\t\t\treturn this.api.post( {\n\t\t\t\taction: 'wbladdform',\n\t\t\t\tlexemeId: this.lexemeId,\n\t\t\t\tdata: JSON.stringify( {\n\t\t\t\t\trepresentations: representations,\n\t\t\t\t\tgrammaticalFeatures: grammaticalFeatures\n\t\t\t\t} ),\n\t\t\t\terrorformat: 'plaintext',\n\t\t\t\tbot: 0,\n\t\t\t\ttags: this.getTags()\n\t\t\t} ).then( function ( data ) {\n\t\t\t\tvar form = self.lexemeDeserializer.deserializeForm( data.form );\n\t\t\t\tself.revisionStore.setFormRevision( data.lastrevid, form.getId() );\n\t\t\t\tself.formData = self.formSerializer.serialize( form );\n\t\t\t\treturn form;\n\t\t\t} ).catch( function ( code, response ) {\n\t\t\t\tthrow convertPlainTextErrorsToRepoApiError( response.errors, 'save' );\n\t\t\t} );\n\t\t},\n\n\t\tremove: function ( form ) {\n\t\t\tvar deferred = $.Deferred();\n\n\t\t\tthis.api.post( {\n\t\t\t\taction: 'wblremoveform',\n\t\t\t\tbaserevid: this.revisionStore.getBaseRevision(),\n\t\t\t\tid: form.getId(),\n\t\t\t\terrorformat: 'plaintext',\n\t\t\t\tbot: 0,\n\t\t\t\ttags: this.getTags()\n\t\t\t} )\n\t\t\t\t.then( deferred.resolve )\n\t\t\t\t.fail( function ( code, response ) {\n\t\t\t\t\tdeferred.reject( convertPlainTextErrorsToRepoApiError( response.errors, 'remove' ) );\n\t\t\t\t} );\n\n\t\t\treturn deferred;\n\t\t},\n\n\t\tgetRepresentationDataForApiRequest: function ( oldRepresentations, newRepresentations ) {\n\t\t\tvar result = {};\n\t\t\tvar language;\n\n\t\t\tfor ( language in newRepresentations ) {\n\t\t\t\tvar newRepresentation = newRepresentations[ language ].value;\n\n\t\t\t\tif ( ( !( language in oldRepresentations ) )\n\t\t\t\t\t|| ( oldRepresentations[ language ].value !== newRepresentation )\n\t\t\t\t) {\n\t\t\t\t\tresult[ language ] = {\n\t\t\t\t\t\tlanguage: language,\n\t\t\t\t\t\tvalue: newRepresentation\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor ( language in oldRepresentations ) {\n\t\t\t\tif ( !( language in newRepresentations ) ) {\n\t\t\t\t\tresult[ language ] = {\n\t\t\t\t\t\tlanguage: language,\n\t\t\t\t\t\tremove: ''\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t} );\n\n\tfunction convertPlainTextErrorsToRepoApiError( errors, action ) {\n\t\tvar $ul = $( '<ul>' );\n\n\t\tvar code = '';\n\t\terrors.forEach( function ( e ) {\n\t\t\tif ( !code ) {\n\t\t\t\tcode = e.code;\n\t\t\t}\n\n\t\t\tvar $li = $( '<li>' ).text( e[ '*' ] );\n\t\t\t$ul.append( $li );\n\t\t} );\n\n\t\treturn new wb.api.RepoApiError(\n\t\t\tcode,\n\t\t\t$ul.html(),\n\t\t\t[],\n\t\t\taction\n\t\t);\n\t}\n\n\tmodule.exports = SELF;\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/entityChangers/LexemeRevisionStore.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/entityChangers/SenseChanger.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wb\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param wb\n * @license GPL-2.0-or-later\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar SenseSerializer = require( '../serialization/SenseSerializer.js' ),\n\t\tgetDeserializer = require( 'wikibase.lexeme.getDeserializer' );\n\n\t/**\n\t * @constructor\n\t *\n\t * @param {wikibase.api.RepoApi} api\n\t * @param {wikibase.lexeme.RevisionStore} revisionStore\n\t * @param {string} lexemeId\n\t * @param {Object} senseData\n\t * @param {Array} tags\n\t */\n\tvar SELF = function WbLexemeSenseChanger(\n\t\tapi,\n\t\trevisionStore,\n\t\tlexemeId,\n\t\tsenseData,\n\t\ttags\n\t) {\n\t\tthis.api = api;\n\t\tthis.revisionStore = revisionStore;\n\t\tthis.lexemeId = lexemeId;\n\t\tthis.senseData = senseData;\n\t\tthis.lexemeDeserializer = getDeserializer();\n\t\tthis.senseSerializer = new SenseSerializer();\n\t\tthis._tags = tags;\n\t};\n\n\t/**\n\t * @class wikibase.lexeme.entityChangers.SenseChanger\n\t */\n\t$.extend( SELF.prototype, {\n\n\t\t/**\n\t\t * @type {wikibase.api.RepoApi}\n\t\t * @private\n\t\t */\n\t\tapi: null,\n\n\t\t/**\n\t\t * @type {wikibase.lexeme.RevisionStore}\n\t\t * @private\n\t\t */\n\t\trevisionStore: null,\n\n\t\t/**\n\t\t * @type {string}\n\t\t * @private\n\t\t */\n\t\tlexemeId: null,\n\n\t\t/**\n\t\t * @type {Object}\n\t\t * @private\n\t\t */\n\t\tsenseData: null,\n\n\t\t/**\n\t\t * @type {wikibase.lexeme.serialization.LexemeDeserializer}\n\t\t * @private\n\t\t */\n\t\tlexemeDeserializer: null,\n\n\t\t/**\n\t\t * @property {string[]}\n\t\t * @private\n\t\t */\n\t\t_tags: null,\n\n\t\t/**\n\t\t * Returns tags used for edits\n\t\t *\n\t\t * @return {string|Array}\n\t\t */\n\t\tgetTags: function () {\n\t\t\tif ( this._tags && this._tags.length ) {\n\t\t\t\treturn this.api.normalizeMultiValue( this._tags );\n\t\t\t}\n\n\t\t\treturn [];\n\t\t},\n\n\t\t/**\n\t\t * @param {wikibase.lexeme.datamodel.Sense} sense\n\t\t * @return {jQuery.Promise}\n\t\t */\n\t\tsave: function ( sense ) {\n\t\t\tvar senseSerializer = new SenseSerializer();\n\n\t\t\tvar serializedSense = senseSerializer.serialize( sense );\n\n\t\t\tif ( sense.getId() ) {\n\t\t\t\treturn this.saveChangedSenseData( sense.getId(), serializedSense.glosses );\n\t\t\t}\n\n\t\t\treturn this.saveNewSenseData( serializedSense.glosses );\n\t\t},\n\n\t\tsaveChangedSenseData: function ( senseId, glosses ) {\n\t\t\tvar self = this;\n\n\t\t\tvar requestGlosses =\n\t\t\t\tthis.getGlossDataForApiRequest( this.senseData.glosses, glosses );\n\n\t\t\treturn this.api.post( {\n\t\t\t\taction: 'wbleditsenseelements',\n\t\t\t\tsenseId: senseId,\n\t\t\t\tbaserevid: this.revisionStore.getBaseRevision(),\n\t\t\t\tdata: JSON.stringify( {\n\t\t\t\t\tglosses: requestGlosses\n\t\t\t\t} ),\n\t\t\t\terrorformat: 'plaintext',\n\t\t\t\tbot: 0,\n\t\t\t\ttags: this.getTags()\n\t\t\t} ).then( function ( data ) {\n\t\t\t\tvar sense = self.lexemeDeserializer.deserializeSense( data.sense );\n\t\t\t\tself.senseData = self.senseSerializer.serialize( sense );\n\t\t\t\treturn sense;\n\t\t\t} ).catch( function ( code, response ) {\n\t\t\t\tthrow convertPlainTextErrorsToRepoApiError( response.errors, 'save' );\n\t\t\t} );\n\t\t},\n\n\t\tsaveNewSenseData: function ( glosses ) {\n\t\t\tvar self = this;\n\n\t\t\treturn this.api.post( {\n\t\t\t\taction: 'wbladdsense',\n\t\t\t\tlexemeId: this.lexemeId,\n\t\t\t\tdata: JSON.stringify( { glosses: glosses } ),\n\t\t\t\terrorformat: 'plaintext',\n\t\t\t\tbot: 0,\n\t\t\t\ttags: this.getTags()\n\t\t\t} ).then( function ( data ) {\n\t\t\t\tvar sense = self.lexemeDeserializer.deserializeSense( data.sense );\n\t\t\t\tself.revisionStore.setSenseRevision( data.lastrevid, sense.getId() );\n\t\t\t\tself.senseData = self.senseSerializer.serialize( sense );\n\t\t\t\treturn sense;\n\t\t\t} ).catch( function ( code, response ) {\n\t\t\t\tthrow convertPlainTextErrorsToRepoApiError( response.errors, 'save' );\n\t\t\t} );\n\t\t},\n\n\t\tremove: function ( sense ) {\n\t\t\tvar deferred = $.Deferred();\n\n\t\t\tthis.api.post( {\n\t\t\t\taction: 'wblremovesense',\n\t\t\t\tbaserevid: this.revisionStore.getBaseRevision(),\n\t\t\t\tid: sense.getId(),\n\t\t\t\terrorformat: 'plaintext',\n\t\t\t\tbot: 0,\n\t\t\t\ttags: this.getTags()\n\t\t\t} )\n\t\t\t\t.then( deferred.resolve )\n\t\t\t\t.fail( function ( code, response ) {\n\t\t\t\t\tdeferred.reject( convertPlainTextErrorsToRepoApiError( response.errors, 'remove' ) );\n\t\t\t\t} );\n\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// TODO same as FormChanger's getRepresentationDataForApiRequest, extract somewhere\n\t\tgetGlossDataForApiRequest: function ( oldGlosses, newGlosses ) {\n\t\t\tvar result = {};\n\t\t\tvar language;\n\n\t\t\tfor ( language in newGlosses ) {\n\t\t\t\tvar newGloss = newGlosses[ language ].value;\n\n\t\t\t\tif ( ( !( language in oldGlosses ) )\n\t\t\t\t\t|| ( oldGlosses[ language ].value !== newGloss )\n\t\t\t\t) {\n\t\t\t\t\tresult[ language ] = {\n\t\t\t\t\t\tlanguage: language,\n\t\t\t\t\t\tvalue: newGloss\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor ( language in oldGlosses ) {\n\t\t\t\tif ( !( language in newGlosses ) ) {\n\t\t\t\t\tresult[ language ] = {\n\t\t\t\t\t\tlanguage: language,\n\t\t\t\t\t\tremove: ''\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t} );\n\n\tfunction convertPlainTextErrorsToRepoApiError( errors, action ) {\n\t\tvar $ul = $( '<ul>' );\n\n\t\tvar code = '';\n\t\terrors.forEach( function ( e ) {\n\t\t\tif ( !code ) {\n\t\t\t\tcode = e.code;\n\t\t\t}\n\n\t\t\tvar $li = $( '<li>' ).text( e[ '*' ] );\n\t\t\t$ul.append( $li );\n\t\t} );\n\n\t\treturn new wb.api.RepoApiError(\n\t\t\tcode,\n\t\t\t$ul.html(),\n\t\t\t[],\n\t\t\taction\n\t\t);\n\t}\n\n\tmodule.exports = SELF;\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/experts/Form.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/experts/Lexeme.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/experts/Sense.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/focusElement.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/getDeserializer.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/hooks/lexeme.viewhook.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/jquery.wikibase.grammaticalfeatureview.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/jquery.wikibase.lexemeformlistview.js","messages":[],"suppressedMessages":[{"ruleId":"new-cap","severity":2,"message":"A constructor name should not start with a lowercase letter.","line":70,"column":36,"nodeType":"NewExpression","messageId":"lower","endLine":70,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/jquery.wikibase.lexemeformview.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"lemmas\" type.","line":287,"column":null,"nodeType":"Block","endLine":287,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"formIndex\" type.","line":288,"column":null,"nodeType":"Block","endLine":288,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"formId\" type.","line":289,"column":null,"nodeType":"Block","endLine":289,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"representations\" type.","line":290,"column":null,"nodeType":"Block","endLine":290,"endColumn":null}],"suppressedMessages":[{"ruleId":"mediawiki/msg-doc","severity":2,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":59,"column":9,"nodeType":"CallExpression","endLine":59,"endColumn":47,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function ( wb ) {\n\t'use strict';\n\n\tvar PARENT = $.ui.EditableTemplatedWidget;\n\n\tvar RepresentationWidget = require( './widgets/RepresentationWidget.js' ),\n\t\tLexemeStore = require( './store/index.js' ),\n\t\tLexemeSubEntityId = require( './datamodel/LexemeSubEntityId.js' ),\n\t\tdatamodel = require( 'wikibase.datamodel' );\n\n\trequire( './jquery.wikibase.grammaticalfeatureview.js' );\n\n\t/**\n\t * Initializes StatementGroupListView on given DOM element\n\t *\n\t * @callback buildStatementGroupListView\n\t * @param {wikibase.lexeme.datamodel.Form}\n\t * @param {jQuery} JQuery DOM element\n\t */\n\n\t/**\n\t * @class jQuery.wikibase.lexemeformview\n\t * @extends jQuery.ui.EditableTemplatedWidget\n\t * @license GPL-2.0-or-later\n\t *\n\t * @constructor\n\t *\n\t * @param {Object} options\n\t * @param {wikibase.lexeme.datamodel.Form} options.value\n\t * @param {Function} options.buildStatementGroupListView\n\t * @param {wikibase.LabelFormattingService} options.labelFormattingService\n\t * @param {mw.Api} options.api\n\t * @param {string} options.inputNodeName\n\t */\n\t$.widget( 'wikibase.lexemeformview', PARENT, {\n\t\toptions: {\n\t\t\ttemplate: 'wikibase-lexeme-form',\n\t\t\ttemplateParams: [\n\t\t\t\tfunction () {\n\t\t\t\t\tvar $container = $( '<span>' );\n\t\t\t\t\tthis.deferredFormWithId.promise().then( function ( form ) {\n\t\t\t\t\t\t$container.text( form.getId() );\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn $container;\n\t\t\t\t},\n\t\t\t\t'',\n\t\t\t\tfunction () {\n\t\t\t\t\treturn mw.wbTemplate( 'wikibase-lexeme-form-grammatical-features', '' );\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\tvar $container = $( '<div>' );\n\t\t\t\t\tthis.deferredFormWithId.promise().then( function ( form ) {\n\t\t\t\t\t\tvar messageKey = 'wikibaselexeme-statementsection-statements-about-form';\n\t\t\t\t\t\tvar $header = $( '<h2>' ).applyTemplate(\n\t\t\t\t\t\t\t'wb-section-heading',\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t// eslint-disable-next-line mediawiki/msg-doc\n\t\t\t\t\t\t\t\tmw.message( messageKey, form.getId() ).escaped(),\n\t\t\t\t\t\t\t\t'',\n\t\t\t\t\t\t\t\t'wikibase-statements'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t);\n\t\t\t\t\t\t$container.append( $header );\n\n\t\t\t\t\t\tvar $statements = $( '<div>' );\n\t\t\t\t\t\tthis.options.buildStatementGroupListView(\n\t\t\t\t\t\t\tform,\n\t\t\t\t\t\t\t$statements,\n\t\t\t\t\t\t\tLexemeSubEntityId.getIdSuffix( form.getId() )\n\t\t\t\t\t\t);\n\t\t\t\t\t\t$container.append( $statements );\n\t\t\t\t\t}.bind( this ) );\n\n\t\t\t\t\treturn $container;\n\t\t\t\t},\n\t\t\t\tfunction () { // Anchor\n\t\t\t\t\tthis.deferredFormWithId.promise().then( function ( form ) {\n\t\t\t\t\t\tthis.element.attr( 'id', LexemeSubEntityId.getIdSuffix( form.getId() ) );\n\t\t\t\t\t}.bind( this ) );\n\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t],\n\t\t\ttemplateShortCuts: {\n\t\t\t\t$id: '.wikibase-lexeme-form-id',\n\t\t\t\t$grammaticalFeatures: '.wikibase-lexeme-form-grammatical-features',\n\t\t\t\t$representations: '.form-representations'\n\t\t\t},\n\t\t\tinputNodeName: 'TEXTAREA',\n\t\t\tapi: null,\n\n\t\t\t/**\n\t\t\t * @type {buildStatementGroupListView}\n\t\t\t */\n\t\t\tbuildStatementGroupListView: null\n\t\t},\n\t\t_inEditMode: false,\n\n\t\t_grammaticalFeatureView: null,\n\n\t\t_representationsWidget: null,\n\n\t\t/**\n\t\t * This method acts as a setter if it is given a Form object.\n\t\t * Otherwise it returns its value if it is not in edit mode and returns a new Form from its\n\t\t * input value otherwise.\n\t\t *\n\t\t * @param {wikibase.lexeme.datamodel.Form} form\n\t\t * @return {wikibase.lexeme.datamodel.Form|undefined|null}\n\t\t */\n\t\tvalue: function ( form ) {\n\t\t\tif ( form instanceof wb.lexeme.datamodel.Form ) {\n\t\t\t\tthis.option( 'value', form );\n\t\t\t\tthis._grammaticalFeatureView.value( form.getGrammaticalFeatures() );\n\t\t\t\tthis._representationsWidget.replaceAllRepresentations( termMapToArray( form.getRepresentations() ) );\n\t\t\t\tif ( this.deferredFormWithId && form.getId() ) {\n\t\t\t\t\tthis.deferredFormWithId.resolve( form );\n\t\t\t\t\tthis.deferredFormWithId = null;\n\t\t\t\t}\n\t\t\t\tthis.draw();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !this.isInEditMode() ) {\n\t\t\t\treturn this.options.value;\n\t\t\t}\n\n\t\t\tif ( this._representationsWidget.hasRedundantLanguage ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn new wb.lexeme.datamodel.Form(\n\t\t\t\tthis.options.value ? this.options.value.getId() : null,\n\t\t\t\tarrayToTermMap( this._representationsWidget.representations ),\n\t\t\t\tthis._grammaticalFeatureView ? this._grammaticalFeatureView.value() : []\n\t\t\t);\n\t\t},\n\n\t\t_create: function () {\n\t\t\tthis.deferredFormWithId = $.Deferred();\n\n\t\t\tPARENT.prototype._create.call( this );\n\n\t\t\tthis._grammaticalFeatureView = this._buildGrammaticalFeatureView();\n\t\t\tthis.options.buildStatementGroupListView(\n\t\t\t\tthis.value(),\n\t\t\t\t$( '.wikibase-statementgrouplistview', this.element ),\n\t\t\t\tthis.value().getId() === undefined ? '' : LexemeSubEntityId.getIdSuffix( this.value().getId() )\n\t\t\t);\n\n\t\t\tthis._buildRepresentations( this.value() );\n\t\t},\n\n\t\t_buildGrammaticalFeatureView: function buildGrammaticalFeatureView() {\n\t\t\tvar self = this;\n\n\t\t\tvar value = this.value() ? this.value().getGrammaticalFeatures() : [];\n\t\t\tvar labelFormattingService = this.options.labelFormattingService;\n\t\t\tthis.$grammaticalFeatures.grammaticalfeatureview( {\n\t\t\t\tvalue: value,\n\t\t\t\tlabelFormattingService: labelFormattingService,\n\t\t\t\tapi: self.options.api\n\t\t\t} );\n\n\t\t\tthis.$grammaticalFeatures.on( 'grammaticalfeatureviewchange', function () {\n\t\t\t\tself._trigger( 'change' );\n\t\t\t} );\n\n\t\t\treturn this.$grammaticalFeatures.data( 'grammaticalfeatureview' );\n\t\t},\n\n\t\t_startEditing: function () {\n\t\t\tthis._inEditMode = true;\n\t\t\tthis._grammaticalFeatureView.startEditing();\n\t\t\tthis._representationsWidget.edit();\n\t\t\treturn this.draw();\n\t\t},\n\n\t\t_stopEditing: function ( dropValue ) {\n\t\t\tthis._inEditMode = false;\n\t\t\tif ( dropValue ) {\n\t\t\t\tthis._representationsWidget.representations = termMapToArray( this.value().getRepresentations() );\n\t\t\t}\n\t\t\tthis._grammaticalFeatureView.stopEditing( dropValue );\n\t\t\tthis._representationsWidget.stopEditing();\n\n\t\t\treturn this.draw();\n\t\t},\n\n\t\tisInEditMode: function () {\n\t\t\treturn this._inEditMode;\n\t\t},\n\n\t\t_buildRepresentations: function ( form ) {\n\t\t\tvar representations = termMapToArray( form.getRepresentations() ),\n\t\t\t\tlemmas = termMapToArray( this.options.lexeme.getLemmas() );\n\n\t\t\tvar template = mw.template.get( 'wikibase.lexeme.lexemeview', 'representations.vue' ).getSource();\n\n\t\t\tthis._representationsWidget = RepresentationWidget.create(\n\t\t\t\tgetStore(\n\t\t\t\t\tlemmas,\n\t\t\t\t\tgetFormIndex(),\n\t\t\t\t\tform.getId(),\n\t\t\t\t\trepresentations\n\t\t\t\t),\n\t\t\t\tgetFormIndex(),\n\t\t\t\tthis.$representations[ 0 ],\n\t\t\t\ttemplate,\n\t\t\t\tfunction () {\n\t\t\t\t\tthis._trigger( 'change' );\n\t\t\t\t}.bind( this ),\n\t\t\t\tmw\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * @inheritdoc\n\t\t */\n\t\tdraw: function () {\n\t\t\tvar deferred = $.Deferred(),\n\t\t\t\tvalue = this.options.value;\n\t\t\tif ( !value || value.getRepresentations().isEmpty() ) {\n\t\t\t\tvalue = null;\n\t\t\t}\n\n\t\t\tif ( !this.isInEditMode() && !value ) {\n\t\t\t\t// Apply lang and dir of UI language\n\t\t\t\t// instead language of that row\n\t\t\t\tvar userLanguage = mw.config.get( 'wgUserLanguage' );\n\t\t\t\tthis.element\n\t\t\t\t\t.attr( 'lang', userLanguage )\n\t\t\t\t\t.attr( 'dir', $.util.getDirectionality( userLanguage ) );\n\t\t\t\treturn deferred.resolve().promise();\n\t\t\t}\n\n\t\t\treturn deferred.resolve().promise();\n\t\t}\n\t} );\n\n\t/**\n\t * @param {{language:string, value: string}[]} termArray\n\t * @return {datamodel.TermMap}\n\t */\n\tfunction arrayToTermMap( termArray ) {\n\t\tvar result = new datamodel.TermMap();\n\n\t\ttermArray.forEach( function ( representation ) {\n\t\t\ttry {\n\t\t\t\tresult.setItem(\n\t\t\t\t\trepresentation.language,\n\t\t\t\t\tnew datamodel.Term( representation.language, representation.value )\n\t\t\t\t);\n\t\t\t} catch ( e ) {\n\t\t\t\t// ignore\n\t\t\t}\n\t\t} );\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * @param {datamodel.TermMap} termMap\n\t * @return {Array}\n\t */\n\tfunction termMapToArray( termMap ) {\n\t\tvar result = [];\n\n\t\ttermMap.each( function ( language, term ) {\n\t\t\tresult.push( { language: term.getLanguageCode(), value: term.getText() } );\n\t\t} );\n\n\t\treturn result;\n\t}\n\n\t// TODO If multiple lexemeformview shared one store:\n\t// Recompute when forms are removed/added, so child components do not emit wrong formIndex!\n\tfunction getFormIndex() {\n\t\treturn 0;\n\t}\n\n\t/**\n\t * Creates a separate store per form - with all resulting limitations\n\t * TODO Continue refactoring by moving store creation upstream (ControllerViewFactory)\n\t *\n\t * @param lemmas\n\t * @param formIndex\n\t * @param formId\n\t * @param representations\n\t * @return {Vuex.Store}\n\t */\n\tfunction getStore( lemmas, formIndex, formId, representations ) {\n\t\tvar forms = {};\n\t\tforms[ formIndex ] = {\n\t\t\tid: formId,\n\t\t\trepresentations: representations\n\t\t};\n\n\t\treturn LexemeStore.create( lemmas, forms );\n\t}\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/jquery.wikibase.lexemeview.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/jquery.wikibase.senselistview.js","messages":[],"suppressedMessages":[{"ruleId":"new-cap","severity":2,"message":"A constructor name should not start with a lowercase letter.","line":71,"column":26,"nodeType":"NewExpression","messageId":"lower","endLine":71,"endColumn":34,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/jquery.wikibase.senseview.js","messages":[],"suppressedMessages":[{"ruleId":"mediawiki/msg-doc","severity":2,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":50,"column":9,"nodeType":"CallExpression","endLine":50,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/mediawiki.template.vue.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/serialization/FormSerializer.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/serialization/LexemeDeserializer.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/serialization/SenseSerializer.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/services/__namespace.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/special/NewLexeme.js","messages":[],"suppressedMessages":[{"ruleId":"no-undef","severity":2,"message":"'Map' is not defined.","line":7,"column":29,"nodeType":"Identifier","messageId":"undef","endLine":7,"endColumn":32,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/special/NewLexemeFallback.js","messages":[{"ruleId":"mediawiki/no-nodelist-unsupported-methods","severity":2,"message":"NodeList.forEach not supported by Chrome<51, Firefox<50, Safari<10, IE & others. Use Array.prototype.forEach.call instead.","line":8,"column":3,"nodeType":"CallExpression","messageId":"nodelistMethod","endLine":10,"endColumn":6}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Fallback code for browsers that support some js, but not es6, to at least get the no-js experience.\n */\n\n( function () {\n\tvar moduleState = mw.loader.getState( 'wikibase.lexeme.special.NewLexeme' );\n\tif ( moduleState === 'error' || moduleState === 'missing' || moduleState === null ) {\n\t\tdocument.querySelectorAll( '#mw-content-text noscript' ).forEach( function ( noscriptNode ) {\n\t\t\tnoscriptNode.outerHTML = noscriptNode.textContent;\n\t\t} );\n\t}\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/store/actionTypes.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/store/actions.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/store/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/store/mutationTypes.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/store/mutations.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/view/ControllerViewFactory.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/view/ReadModeViewFactory.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/view/ViewFactoryFactory.js","messages":[{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in type: []","line":17,"column":null,"nodeType":"Block","endLine":17,"endColumn":null}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"// Temporary, until merging this with jquery.wikibase.lexemeview\nwikibase.lexeme.view = {};\n\nwikibase.lexeme.view.ViewFactoryFactory = ( function () {\n\t'use strict';\n\n\tvar ViewFactoryFactory = function () {},\n\t\tControllerViewFactory = require( './ControllerViewFactory.js' ),\n\t\tReadModeViewFactory = require( './ReadModeViewFactory.js' );\n\n\t$.extend( ViewFactoryFactory.prototype, {\n\n\t\t/**\n\t\t * @see wikibase.view.ViewFactoryFactory\n\t\t *\n\t\t * @param {boolean} isEditable\n\t\t * @param {[]} factoryArguments\n\t\t *\n\t\t * @return {ControllerViewFactory|ReadModeViewFactory}\n\t\t */\n\t\tgetViewFactory: function ( isEditable, factoryArguments ) {\n\t\t\tif ( isEditable ) {\n\t\t\t\treturn this._getControllerViewFactory( factoryArguments );\n\t\t\t}\n\n\t\t\treturn this._getReadModeViewFactory( factoryArguments );\n\t\t},\n\n\t\t_getControllerViewFactory: function ( factoryArguments ) {\n\t\t\treturn this._getInstance(\n\t\t\t\tControllerViewFactory,\n\t\t\t\tfactoryArguments\n\t\t\t);\n\t\t},\n\n\t\t_getReadModeViewFactory: function ( factoryArguments ) {\n\t\t\tfactoryArguments.shift();\n\t\t\tfactoryArguments.shift();\n\n\t\t\treturn this._getInstance(\n\t\t\t\tReadModeViewFactory,\n\t\t\t\tfactoryArguments\n\t\t\t);\n\t\t},\n\n\t\t_getInstance: function ( clazz, args ) {\n\t\t\targs.unshift( null );\n\n\t\t\treturn new ( Function.prototype.bind.apply(\n\t\t\t\tclazz,\n\t\t\t\targs\n\t\t\t) )();\n\t\t}\n\n\t} );\n\n\treturn ViewFactoryFactory;\n}() );\n\nmodule.exports = wikibase.lexeme.view.ViewFactoryFactory;\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/view/config.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/GlossWidget.js","messages":[{"ruleId":"jsdoc/valid-types","severity":1,"message":"Syntax error in type: [{ value: string, language: string }]","line":34,"column":null,"nodeType":"Block","endLine":34,"endColumn":null}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"module.exports = ( function ( require, wb ) {\n\t'use strict';\n\n\tvar Vue = require( 'vue' ),\n\t\tRedundantLanguageIndicator = require( './RedundantLanguageIndicator.js' ),\n\t\tInvalidLanguageIndicator = require( './InvalidLanguageIndicator.js' ),\n\t\tLanguageSelectorWrapper = require( './LanguageSelectorWrapper.js' ),\n\t\tfocusElement = require( '../focusElement.js' ),\n\t\t// languages.json is a dynamic ResourceLoader source file\n\t\tlexemeTermLanguages = require( './languages.json' ).lexemeTermLanguages;\n\n\tfunction deepClone( object ) {\n\t\treturn JSON.parse( JSON.stringify( object ) ).sort( function ( a, b ) {\n\t\t\treturn a.language > b.language;\n\t\t} );\n\t}\n\n\tfunction applyGlossWidget( widgetElement, glosses, beforeUpdate, mw, getDirectionality ) {\n\t\tvar template = mw.template.get( 'wikibase.lexeme.lexemeview', 'glossWidget.vue' ).getSource();\n\t\tvar messages = mw.messages;\n\t\tvar fragment = document.createDocumentFragment();\n\n\t\t// make the app replace the widgetElement (like in Vue 2) instead of appending to it (Vue 3 mount behavior)\n\t\tvar app = Vue.createMwApp( newGlossWidget( messages, template, glosses, beforeUpdate, getDirectionality ) )\n\t\t\t.mount( fragment );\n\t\twidgetElement.replaceWith( fragment );\n\n\t\treturn app;\n\t}\n\n\t/**\n\t * @param {mw.messages} messages\n\t * @param {string} template\n\t * @param {[{ value: string, language: string }]} glosses\n\t * @param {Function} beforeUpdate\n\t * @param {Function} getDirectionality\n\t * @return {Object}\n\t */\n\tfunction newGlossWidget( messages, template, glosses, beforeUpdate, getDirectionality ) {\n\t\treturn {\n\t\t\tcompatConfig: { MODE: 3 },\n\t\t\ttemplate: template,\n\n\t\t\tmixins: [\n\t\t\t\tRedundantLanguageIndicator( 'glosses' ),\n\t\t\t\tInvalidLanguageIndicator( 'glosses', lexemeTermLanguages )\n\t\t\t],\n\n\t\t\tcomponents: {\n\t\t\t\t'language-selector': LanguageSelectorWrapper( lexemeTermLanguages )\n\t\t\t},\n\n\t\t\tbeforeUpdate: beforeUpdate,\n\n\t\t\tdata: function () {\n\t\t\t\treturn {\n\t\t\t\t\tinEditMode: false,\n\t\t\t\t\tglosses: deepClone( glosses )\n\t\t\t\t};\n\t\t\t},\n\t\t\tmethods: {\n\t\t\t\tadd: function () {\n\t\t\t\t\tthis.glosses.push( { value: '', language: '' } );\n\t\t\t\t\tthis.$nextTick( focusElement( 'tr:last-child input' ) );\n\t\t\t\t},\n\t\t\t\tremove: function ( gloss ) {\n\t\t\t\t\tvar index = this.glosses.indexOf( gloss );\n\t\t\t\t\tthis.glosses.splice( index, 1 );\n\t\t\t\t},\n\t\t\t\tedit: function () {\n\t\t\t\t\tthis.inEditMode = true;\n\t\t\t\t\tif ( this.glosses.length === 0 ) {\n\t\t\t\t\t\tthis.add();\n\t\t\t\t\t}\n\t\t\t\t\tthis.$nextTick( focusElement( 'input' ) );\n\t\t\t\t},\n\t\t\t\tstopEditing: function () {\n\t\t\t\t\tthis.inEditMode = false;\n\t\t\t\t\tthis.glosses = this.glosses.filter( function ( gloss ) {\n\t\t\t\t\t\treturn gloss.value.trim() !== '' && gloss.language.trim() !== '';\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t\tmessage: function ( key ) {\n\t\t\t\t\treturn messages.get( key );\n\t\t\t\t},\n\t\t\t\tdirectionality: function ( languageCode ) {\n\t\t\t\t\treturn getDirectionality( languageCode );\n\t\t\t\t},\n\t\t\t\tlanguageName: function ( languageCode ) {\n\t\t\t\t\treturn wb.getLanguageNameByCode( languageCode );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\treturn {\n\t\tapplyGlossWidget: applyGlossWidget,\n\t\tnewGlossWidget: newGlossWidget\n\t};\n\n}( require, wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/GrammaticalFeatureListWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/InvalidLanguageIndicator.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/ItemSelectorWrapper.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/LanguageAndLexicalCategoryWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/LanguageSelectorWrapper.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/LemmaWidget.newLemmaWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/LexemeHeader.js","messages":[],"suppressedMessages":[{"ruleId":"no-jquery/no-each-util","severity":2,"message":"Prefer Array#forEach to $.each","line":35,"column":3,"nodeType":"CallExpression","endLine":37,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/LexemeHeader.newLexemeHeader.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/LexemeHeader.newLexemeHeaderStore.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/RedundantLanguageIndicator.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/RepresentationWidget.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/__namespace.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/resources/widgets/languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/GlossWidget.spec.js","messages":[],"suppressedMessages":[{"ruleId":"no-restricted-globals","severity":2,"message":"Unexpected use of 'global'.","line":5,"column":2,"nodeType":"Identifier","messageId":"defaultMessage","endLine":5,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-restricted-globals","severity":2,"message":"Unexpected use of 'global'.","line":6,"column":2,"nodeType":"Identifier","messageId":"defaultMessage","endLine":6,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-restricted-globals","severity":2,"message":"Unexpected use of 'global'.","line":36,"column":2,"nodeType":"Identifier","messageId":"defaultMessage","endLine":36,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/InvalidLanguageIndicator.spec.js","messages":[],"suppressedMessages":[{"ruleId":"no-restricted-globals","severity":2,"message":"Unexpected use of 'global'.","line":5,"column":2,"nodeType":"Identifier","messageId":"defaultMessage","endLine":5,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/ItemSelectorWrapper.spec.js","messages":[],"suppressedMessages":[{"ruleId":"no-restricted-globals","severity":2,"message":"Unexpected use of 'global'.","line":5,"column":2,"nodeType":"Identifier","messageId":"defaultMessage","endLine":5,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-restricted-globals","severity":2,"message":"Unexpected use of 'global'.","line":6,"column":2,"nodeType":"Identifier","messageId":"defaultMessage","endLine":6,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/LanguageAndLexicalCategoryWidget.spec.js","messages":[],"suppressedMessages":[{"ruleId":"no-restricted-globals","severity":2,"message":"Unexpected use of 'global'.","line":5,"column":2,"nodeType":"Identifier","messageId":"defaultMessage","endLine":5,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-restricted-globals","severity":2,"message":"Unexpected use of 'global'.","line":6,"column":2,"nodeType":"Identifier","messageId":"defaultMessage","endLine":6,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/LemmaList.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/LemmaWidget.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/LexemeHeaderStore.spec.js","messages":[],"suppressedMessages":[{"ruleId":"no-restricted-globals","severity":2,"message":"Unexpected use of 'global'.","line":8,"column":2,"nodeType":"Identifier","messageId":"defaultMessage","endLine":8,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/LexemeHeaderWidget.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/RedundantLanguageIndicator.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/RepresentationWidget.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/datamodel/LexemeSubEntityId.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/focusElement.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/helpers/jsdom.js","messages":[],"suppressedMessages":[{"ruleId":"no-restricted-globals","severity":2,"message":"Unexpected use of 'global'.","line":5,"column":1,"nodeType":"Identifier","messageId":"defaultMessage","endLine":5,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/helpers/template-loader.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/helpers/vue.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/store/actionTypes.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/store/actions.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/store/index.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/store/mutationTypes.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/jasmine/store/mutations.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/phpunit/data/rdf/entities/L2.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/datamodel/Form.tests.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wb\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":33,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":33,"endColumn":43},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":39,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":39,"endColumn":65},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":46,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":49,"endColumn":4},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":51,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":54,"endColumn":4},{"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":64,"endColumn":4},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":65,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":68,"endColumn":4},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":69,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":72,"endColumn":4},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":99,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":103,"endColumn":5}],"suppressedMessages":[],"errorCount":8,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param wb\n * @license GPL-2.0-or-later\n */\n( function ( wb ) {\n\t'use strict';\n\n\tQUnit.module( 'wikibase.lexeme.datamodel.Form' );\n\n\tvar Form = wb.lexeme.datamodel.Form;\n\tvar datamodel = require( 'wikibase.datamodel' );\n\tvar TermMap = datamodel.TermMap;\n\tvar Term = datamodel.Term;\n\n\tvar someRepresentations = new TermMap( { en: new Term( 'en', 'text' ) } );\n\n\tQUnit.test(\n\t\t'When constructed with representations not of type TermMap throws error',\n\t\tfunction ( assert ) {\n\t\t\tassert.throws( function () {\n\t\t\t\tnew Form( 'F1', {} );\n\t\t\t} );\n\t\t\tassert.throws( function () {\n\t\t\t\tnew Form( 'F1', 'something' );\n\t\t\t} );\n\t\t}\n\t);\n\n\tQUnit.test( 'getId()', function ( assert ) {\n\t\tvar expectedId = 'L123',\n\t\t\tform = new Form( expectedId );\n\n\t\tassert.equal( form.getId(), expectedId );\n\t} );\n\n\tQUnit.test( 'getRepresentations()', function ( assert ) {\n\t\tvar form = new Form( 'L123', someRepresentations );\n\n\t\tassert.equal( form.getRepresentations(), someRepresentations );\n\t} );\n\n\tQUnit.test( 'equals() respects representations', function ( assert ) {\n\t\tvar id = 'L123',\n\t\t\tform = new Form( id, new TermMap( { en: new Term( 'en', 'text' ) } ) );\n\n\t\tassert.ok(\n\t\t\tform.equals( new Form( id, new TermMap( { en: new Term( 'en', 'text' ) } ) ) ),\n\t\t\t'Equal representations'\n\t\t);\n\n\t\tassert.notOk(\n\t\t\tform.equals( new Form( id, new TermMap( { en: new Term( 'en', 'text1' ) } ) ) ),\n\t\t\t'Different representations'\n\t\t);\n\t} );\n\n\tQUnit.test( 'equals() also checks grammatical features', function ( assert ) {\n\t\tvar id = 'L123',\n\t\t\tform = new Form( id, someRepresentations, [ 'Q1' ] );\n\n\t\tassert.ok(\n\t\t\tform.equals( new Form( id, someRepresentations, [ 'Q1' ] ) ),\n\t\t\t'same grammatical features'\n\t\t);\n\t\tassert.notOk(\n\t\t\tform.equals( new Form( id, someRepresentations, [] ) ),\n\t\t\t'one form has grammatical features, another doesn`t'\n\t\t);\n\t\tassert.notOk(\n\t\t\tform.equals( new Form( id, someRepresentations, [ 'Q2' ] ) ),\n\t\t\t'different grammatical features'\n\t\t);\n\t} );\n\n\tQUnit.test( 'not equals()', function ( assert ) {\n\t\tvar id = 'L123',\n\t\t\trepresentation = new TermMap( { en: new Term( 'en', 'foo' ) } ),\n\t\t\tform = new Form( id, representation ),\n\t\t\tequalsDataProvider = [\n\t\t\t\t{\n\t\t\t\t\tcomparison: new Form( id, new TermMap( { en: new Term( 'en', 'bar' ) } ) ),\n\t\t\t\t\tmessage: 'same id, different representation'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcomparison: new Form( 'L234', representation ),\n\t\t\t\t\tmessage: 'different id, same representation'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcomparison: new Form( 'L234', new TermMap( { en: new Term( 'en', 'bar' ) } ) ),\n\t\t\t\t\tmessage: 'different id, different representation'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcomparison: null,\n\t\t\t\t\tmessage: 'not a Form object'\n\t\t\t\t}\n\t\t\t];\n\n\t\tequalsDataProvider.forEach( function ( testData ) {\n\t\t\tassert.equal(\n\t\t\t\tform.equals( testData.comparison ),\n\t\t\t\tfalse,\n\t\t\t\ttestData.message\n\t\t\t);\n\t\t} );\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/datamodel/Lexeme.tests.js","messages":[{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":17,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":17,"endColumn":39},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":25,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":25,"endColumn":45},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":33,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":33,"endColumn":60},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":42,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":42,"endColumn":43},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":49,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":49,"endColumn":45}],"suppressedMessages":[],"errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function ( wb ) {\n\t'use strict';\n\n\tQUnit.module( 'wikibase.lexeme.datamodel.Lexeme' );\n\n\tvar Lexeme = require( '../../../resources/datamodel/Lexeme.js' );\n\tvar datamodel = require( 'wikibase.datamodel' );\n\t/** @type {wikibase.lexeme.datamodel.Form} */\n\tvar Form = wb.lexeme.datamodel.Form;\n\t/** @type {wikibase.lexeme.datamodel.Sense} */\n\tvar Sense = wb.lexeme.datamodel.Sense;\n\n\tQUnit.test( 'Can create with ID and get it', function ( assert ) {\n\t\tvar lemmas = createTermMapWithTerm();\n\t\tvar lexeme = new Lexeme( 'L1', lemmas );\n\n\t\tassert.equal( lexeme.getId(), 'L1' );\n\t} );\n\n\tQUnit.test( 'Can set lemmas and get them back', function ( assert ) {\n\t\tvar lexemeId = 'L1';\n\t\tvar lemmas = createTermMapWithTerm();\n\t\tvar lexeme = new Lexeme( lexemeId, lemmas );\n\n\t\tassert.equal( lexeme.getLemmas(), lemmas );\n\t} );\n\n\tQUnit.test( 'Can set statements and get them back', function ( assert ) {\n\t\tvar lemmas = createTermMapWithTerm();\n\t\tvar statementGroupSet = createStatementGroupWithSingleStatement( 'P1', 'L1$1' );\n\t\tvar lexeme = new Lexeme( 'L1', lemmas, statementGroupSet );\n\n\t\tassert.equal( lexeme.getStatements(), statementGroupSet );\n\t} );\n\n\tQUnit.test( 'Can set forms and get them back', function ( assert ) {\n\t\tvar lemmas = createTermMapWithTerm();\n\t\tvar forms = [ new Form( 'L1-F1' ) ];\n\t\tvar statements = null;\n\t\tvar lexeme = new Lexeme( 'L1', lemmas, statements, forms );\n\n\t\tassert.equal( lexeme.getForms(), forms );\n\t} );\n\n\tQUnit.test( 'Can set senses and get them back', function ( assert ) {\n\t\tvar senses = [ new Sense( 'L1-S1' ), new Sense( 'L1-S2' ) ];\n\t\tvar lexeme = new Lexeme( 'L1', createTermMapWithTerm(), null, [], senses );\n\n\t\tassert.equal( lexeme.getSenses(), senses );\n\t} );\n\n\tQUnit.test( 'getSubEntityIds returns all respective ids', function ( assert ) {\n\t\tvar lexeme = new Lexeme(\n\t\t\t'L1',\n\t\t\tcreateTermMapWithTerm(),\n\t\t\tnull,\n\t\t\t[ new Form( 'L1-F123' ), new Form( 'L1-F124' ) ],\n\t\t\t[ new Sense( 'L1-S3' ), new Sense( 'L1-S4' ) ]\n\t\t);\n\n\t\tassert.deepEqual( lexeme.getSubEntityIds(), [ 'L1-F123', 'L1-F124', 'L1-S3', 'L1-S4' ] );\n\t} );\n\n\tQUnit.test( 'getSubEntityIds omits unsaved sub entities with undefined ids', function ( assert ) {\n\t\tvar lexeme = new Lexeme(\n\t\t\t'L1',\n\t\t\tcreateTermMapWithTerm(),\n\t\t\tnull,\n\t\t\t[ new Form( 'L1-F123' ), new Form() ],\n\t\t\t[ new Sense( 'L1-S3' ), new Sense( 'L1-S4' ) ]\n\t\t);\n\n\t\tassert.deepEqual( lexeme.getSubEntityIds(), [ 'L1-F123', 'L1-S3', 'L1-S4' ] );\n\t} );\n\n\tfunction createStatementGroupWithSingleStatement( propertyId, guid ) {\n\t\treturn new datamodel.StatementGroupSet( [\n\t\t\tnew datamodel.StatementGroup( propertyId, new datamodel.StatementList( [\n\t\t\t\tnew datamodel.Statement( new datamodel.Claim(\n\t\t\t\t\tnew datamodel.PropertyNoValueSnak( propertyId ), null, guid\n\t\t\t\t) )\n\t\t\t] ) )\n\t\t] );\n\t}\n\n\tfunction createTermMapWithTerm() {\n\t\treturn new datamodel.TermMap( { en: new datamodel.Term( 'en', 'foo' ) } );\n\t}\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/datamodel/Sense.tests.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wb\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":20,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":20,"endColumn":44},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":25,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":25,"endColumn":50},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":34,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":34,"endColumn":51},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":72,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":76,"endColumn":5}],"suppressedMessages":[],"errorCount":4,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param wb\n * @license GPL-2.0-or-later\n */\n( function ( wb ) {\n\t'use strict';\n\n\tQUnit.module( 'wikibase.lexeme.datamodel.Sense' );\n\n\tvar Sense = wb.lexeme.datamodel.Sense;\n\tvar datamodel = require( 'wikibase.datamodel' );\n\tvar TermMap = datamodel.TermMap;\n\tvar Term = datamodel.Term;\n\tvar someGlosses = new TermMap( { en: new Term( 'en', 'A very important gloss' ) } );\n\n\tQUnit.test( 'getId()', function ( assert ) {\n\t\tvar expectedId = 'S123',\n\t\t\tsense = new Sense( expectedId, someGlosses );\n\n\t\tassert.equal( sense.getId(), expectedId );\n\t} );\n\n\tQUnit.test( 'getGlosses()', function ( assert ) {\n\t\tvar sense = new Sense( 'S123', someGlosses );\n\t\tassert.equal( sense.getGlosses(), someGlosses );\n\t} );\n\n\tQUnit.test( 'equals()', function ( assert ) {\n\t\tvar id = 'S123',\n\t\t\tglosses = someGlosses,\n\t\t\tsense = new Sense( id, glosses ),\n\t\t\tcomparison = new Sense( id, glosses );\n\n\t\tassert.equal( sense.equals( comparison ), true );\n\t} );\n\n\tQUnit.test( 'not equals()', function ( assert ) {\n\t\tvar id = 'S123',\n\t\t\tglosses = new TermMap( { en: new Term( 'en', 'A very important gloss' ) } ),\n\t\t\temptyGlosses = new TermMap(),\n\t\t\tdifferentGloss = new TermMap( { en: new Term( 'en', 'another gloss' ) } ),\n\t\t\tanotherLanguageGlosses = new TermMap( { de: new Term( 'de', 'ein gloss' ) } ),\n\t\t\tsense = new Sense( id, glosses ),\n\t\t\tequalsDataProvider = [\n\t\t\t\t{\n\t\t\t\t\tcomparison: new Sense( id, differentGloss ),\n\t\t\t\t\tmessage: 'same id, different gloss in the same language'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcomparison: new Sense( id, anotherLanguageGlosses ),\n\t\t\t\t\tmessage: 'same id, different glosses'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcomparison: new Sense( id, emptyGlosses ),\n\t\t\t\t\tmessage: 'same id, no glosses'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcomparison: new Sense( 'S234', glosses ),\n\t\t\t\t\tmessage: 'different id, same glosses'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcomparison: new Sense( 'S234', emptyGlosses ),\n\t\t\t\t\tmessage: 'different id, different glosses'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcomparison: null,\n\t\t\t\t\tmessage: 'not a Sense object'\n\t\t\t\t}\n\t\t\t];\n\n\t\tequalsDataProvider.forEach( function ( testData ) {\n\t\t\tassert.equal(\n\t\t\t\tsense.equals( testData.comparison ),\n\t\t\t\tfalse,\n\t\t\t\ttestData.message\n\t\t\t);\n\t\t} );\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/entityChangers/FormChanger.tests.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wb\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":47,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":47,"endColumn":76},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":48,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":48,"endColumn":84},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":49,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":49,"endColumn":51},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":50,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":50,"endColumn":92},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":51,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":51,"endColumn":73},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":52,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":52,"endColumn":65},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":92,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":92,"endColumn":64},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":93,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":97,"endColumn":5},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":140,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":140,"endColumn":68},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":172,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":175,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":176,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":179,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":180,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":183,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":225,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":225,"endColumn":95},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":226,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":226,"endColumn":84},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":227,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":227,"endColumn":51},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":228,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":228,"endColumn":67},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":229,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":229,"endColumn":67},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":273,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":273,"endColumn":95},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":313,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":313,"endColumn":95},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":350,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":350,"endColumn":95},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":395,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":395,"endColumn":64},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":396,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":400,"endColumn":5},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":437,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":440,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":441,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":444,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":445,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":448,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":474,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":474,"endColumn":59},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":479,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":479,"endColumn":82},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":480,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":480,"endColumn":70},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":481,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":481,"endColumn":93},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":482,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":482,"endColumn":67},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":483,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":483,"endColumn":60},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":502,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":502,"endColumn":79},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":503,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":503,"endColumn":66},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":504,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":504,"endColumn":103},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":505,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":505,"endColumn":76}],"suppressedMessages":[],"errorCount":35,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param wb\n * @license GPL-2.0-or-later\n */\n( function ( wb ) {\n\t'use strict';\n\n\tQUnit.module( 'wikibase.lexeme.entityChangers.FormChanger' );\n\n\tvar FormChanger = require( '../../../resources/entityChangers/FormChanger.js' );\n\tvar Form = wb.lexeme.datamodel.Form;\n\tvar datamodel = require( 'wikibase.datamodel' );\n\tvar TermMap = datamodel.TermMap;\n\tvar Term = datamodel.Term;\n\tvar revisionStore = {\n\t\tsetFormRevision: function () {},\n\t\tgetBaseRevision: function () {\n\t\t\treturn 123;\n\t\t}\n\t};\n\n\tQUnit.test( 'New Form - makes the expected API call', function ( assert ) {\n\t\tvar post = sinon.spy( function () {\n\t\t\treturn $.Deferred().resolve( {\n\t\t\t\tform: {}\n\t\t\t} ).promise();\n\t\t} );\n\t\tvar api = {\n\t\t\tpost: post,\n\t\t\tnormalizeMultiValue: function ( stuff ) {\n\t\t\t\treturn stuff;\n\t\t\t}\n\t\t};\n\n\t\tvar tags = [ 'asdf' ];\n\t\tvar lexemeId = 'L11';\n\t\tvar changer = new FormChanger( api, revisionStore, lexemeId, {}, tags );\n\t\tvar representations = new TermMap( { en: new Term( 'en', 'test representation' ) } );\n\t\tvar form = new Form( null, representations, [ 'Q1', 'Q2' ] );\n\n\t\tchanger.save( form );\n\n\t\tvar callArguments = post.args[ 0 ];\n\t\tvar gotParameters = callArguments[ 0 ];\n\t\tvar gotData = JSON.parse( gotParameters.data );\n\n\t\tassert.equal( gotParameters.action, 'wbladdform', 'Add form API action' );\n\t\tassert.equal( gotParameters.errorformat, 'plaintext', 'Plain text error format' );\n\t\tassert.equal( gotParameters.bot, 0, 'BOT flag' );\n\t\tassert.equal( gotParameters.baserevid, undefined, 'Base revision Id should not be sent' );\n\t\tassert.equal( gotParameters.lexemeId, lexemeId, 'lexemeId parameter' );\n\t\tassert.equal( gotParameters.tags, tags, 'Tags should be set' );\n\t\tassert.deepEqual(\n\t\t\tgotData.representations,\n\t\t\t{ en: { language: 'en', value: 'test representation' } },\n\t\t\t'Representation list'\n\t\t);\n\t\tassert.deepEqual(\n\t\t\tgotData.grammaticalFeatures,\n\t\t\t[ 'Q1', 'Q2' ],\n\t\t\t'Grammatical feature set'\n\t\t);\n\t} );\n\n\tQUnit.test( 'New form - save - returns deserialized Form from API result', function ( assert ) {\n\t\tvar done = assert.async();\n\n\t\tvar api = {\n\t\t\tpost: function () {\n\t\t\t\treturn $.Deferred().resolve( {\n\t\t\t\t\tform: {\n\t\t\t\t\t\tid: 'L1-F100',\n\t\t\t\t\t\trepresentations: {\n\t\t\t\t\t\t\ten: {\n\t\t\t\t\t\t\t\tlanguage: 'en',\n\t\t\t\t\t\t\t\tvalue: 'some representation'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgrammaticalFeatures: [ 'Q1', 'Q2' ]\n\t\t\t\t\t}\n\t\t\t\t} ).promise();\n\t\t\t}\n\t\t};\n\n\t\tvar changer = new FormChanger( api, revisionStore, 'L1', {} );\n\n\t\tvar form = new Form( null, null, [] );\n\n\t\tassert.expect( 3 );\n\n\t\tchanger.save( form ).then( function ( saveForm ) {\n\t\t\tassert.equal( saveForm.getId(), 'L1-F100', 'Saved Form ID' );\n\t\t\tassert.equal(\n\t\t\t\tsaveForm.getRepresentations().getItemByKey( 'en' ).getText(),\n\t\t\t\t'some representation',\n\t\t\t\t'Saved representation'\n\t\t\t);\n\t\t\tassert.deepEqual(\n\t\t\t\tsaveForm.getGrammaticalFeatures(),\n\t\t\t\t[ 'Q1', 'Q2' ],\n\t\t\t\t'Saved grammatical features'\n\t\t\t);\n\t\t\tdone();\n\t\t} ).catch( done );\n\t} );\n\n\tQUnit.test( 'New form - save - sets the base revision to the one from API result', function ( assert ) {\n\t\tvar done = assert.async();\n\n\t\tvar api = {\n\t\t\tpost: function () {\n\t\t\t\treturn $.Deferred().resolve( {\n\t\t\t\t\tform: { id: 'L1-F100' },\n\t\t\t\t\tlastrevid: 303\n\t\t\t\t} ).promise();\n\t\t\t}\n\t\t};\n\t\tvar revisionStore2 = {\n\t\t\tformBaseRevisions: {\n\t\t\t},\n\t\t\tgetFormRevision: function ( formId ) {\n\t\t\t\treturn this.formBaseRevisions[ formId ];\n\t\t\t},\n\t\t\tsetFormRevision: function ( revision, formId ) {\n\t\t\t\tthis.formBaseRevisions[ formId ] = revision;\n\n\t\t\t},\n\t\t\tgetBaseRevision: function () {\n\t\t\t\treturn 123;\n\t\t\t}\n\t\t};\n\n\t\tvar changer = new FormChanger( api, revisionStore2, 'L1', {} );\n\n\t\tvar form = new Form( null, null, [] );\n\n\t\tassert.expect( 1 );\n\n\t\tchanger.save( form ).then( function () {\n\t\t\tassert.equal( revisionStore2.getFormRevision( 'L1-F100' ), 303 );\n\t\t\tdone();\n\t\t} ).catch( done );\n\t} );\n\n\tQUnit.test(\n\t\t'New form - save fails with errors - converts errors to single RepoApiError',\n\t\tfunction ( assert ) {\n\t\t\tvar done = assert.async();\n\n\t\t\tvar api = {\n\t\t\t\tpost: function () {\n\t\t\t\t\treturn $.Deferred().reject(\n\t\t\t\t\t\t'some-generic-error-code',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terrors: [\n\t\t\t\t\t\t\t\tcreateError( 'error-code-1', 'Some text 1' ),\n\t\t\t\t\t\t\t\tcreateError( 'error-code-1', 'Some text 2' )\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t'*': 'Some info'\n\t\t\t\t\t\t}\n\t\t\t\t\t).promise();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar changer = new FormChanger( api, revisionStore, 'L1', {} );\n\n\t\t\tvar form = new Form( null, null, [] );\n\n\t\t\tassert.expect( 3 );\n\n\t\t\tchanger.save( form ).catch( function ( error ) {\n\t\t\t\tassert.ok(\n\t\t\t\t\terror instanceof wb.api.RepoApiError,\n\t\t\t\t\t'Error is instance of RepoApiError'\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\terror.detailedMessage.indexOf( 'Some text 1' ) > -1,\n\t\t\t\t\t'Detailed message contains text of the first error'\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\terror.detailedMessage.indexOf( 'Some text 2' ) > -1,\n\t\t\t\t\t'Detailed message contains text of the second error'\n\t\t\t\t);\n\t\t\t\tdone();\n\t\t\t} );\n\n\t\t\tfunction createError( code, text ) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: code,\n\t\t\t\t\tdata: {},\n\t\t\t\t\tmodule: 'wbladdform',\n\t\t\t\t\t'*': text\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\tQUnit.test( 'Existing Form data changed - makes the expected API call', function ( assert ) {\n\t\tvar post = sinon.spy( function () {\n\t\t\treturn $.Deferred().resolve( {\n\t\t\t\tform: {}\n\t\t\t} ).promise();\n\t\t} );\n\t\tvar api = {\n\t\t\tpost: post\n\t\t};\n\n\t\tvar formId = 'L11-F2';\n\t\tvar oldFormData = {\n\t\t\trepresentations: {\n\t\t\t\ten: { language: 'en', value: 'old representation' }\n\t\t\t},\n\t\t\tgrammaticalFeatures: [ 'Q1' ]\n\t\t};\n\n\t\tvar changer = new FormChanger( api, revisionStore, 'L11', oldFormData );\n\t\tvar representations = new TermMap( { en: new Term( 'en', 'test representation' ) } );\n\t\tvar form = new Form( formId, representations, [ 'Q1', 'Q2' ] );\n\n\t\tchanger.save( form );\n\n\t\tvar callArguments = post.args[ 0 ];\n\t\tvar gotParameters = callArguments[ 0 ];\n\t\tvar gotData = JSON.parse( gotParameters.data );\n\n\t\tassert.equal( gotParameters.action, 'wbleditformelements', 'Edit form elements API action' );\n\t\tassert.equal( gotParameters.errorformat, 'plaintext', 'Plain text error format' );\n\t\tassert.equal( gotParameters.bot, 0, 'BOT flag' );\n\t\tassert.equal( gotParameters.baserevid, 123, 'Base revision Id' );\n\t\tassert.equal( gotParameters.formId, formId, 'formId parameter' );\n\t\tassert.deepEqual(\n\t\t\tgotData.representations,\n\t\t\t{ en: { language: 'en', value: 'test representation' } },\n\t\t\t'Representation list'\n\t\t);\n\t\tassert.deepEqual(\n\t\t\tgotData.grammaticalFeatures,\n\t\t\t[ 'Q1', 'Q2' ],\n\t\t\t'Grammatical feature set'\n\t\t);\n\t} );\n\n\tQUnit.test( 'Representation added - only new representation passed to API', function ( assert ) {\n\t\tvar post = sinon.spy( function () {\n\t\t\treturn $.Deferred().resolve( {\n\t\t\t\tform: {}\n\t\t\t} ).promise();\n\t\t} );\n\t\tvar api = {\n\t\t\tpost: post\n\t\t};\n\n\t\tvar formId = 'L11-F2';\n\t\tvar oldFormData = {\n\t\t\trepresentations: {\n\t\t\t\ten: { language: 'en', value: 'test representation' }\n\t\t\t},\n\t\t\tgrammaticalFeatures: [ 'Q1' ]\n\t\t};\n\n\t\tvar changer = new FormChanger( api, revisionStore, 'L11', oldFormData );\n\t\tvar representations = new TermMap( {\n\t\t\ten: new Term( 'en', 'test representation' ),\n\t\t\t'en-gb': new Term( 'en-gb', 'test representation gb' )\n\t\t} );\n\t\tvar form = new Form( formId, representations, [ 'Q1' ] );\n\n\t\tchanger.save( form );\n\n\t\tvar callArguments = post.args[ 0 ];\n\t\tvar gotParameters = callArguments[ 0 ];\n\t\tvar gotData = JSON.parse( gotParameters.data );\n\n\t\tassert.equal( gotParameters.action, 'wbleditformelements', 'Edit form elements API action' );\n\t\tassert.deepEqual(\n\t\t\tgotData.representations,\n\t\t\t{ 'en-gb': { language: 'en-gb', value: 'test representation gb' } },\n\t\t\t'Representation list'\n\t\t);\n\t} );\n\n\tQUnit.test( 'One of many representations changed - only changed representation passed to API', function ( assert ) {\n\t\tvar post = sinon.spy( function () {\n\t\t\treturn $.Deferred().resolve( {\n\t\t\t\tform: {}\n\t\t\t} ).promise();\n\t\t} );\n\t\tvar api = {\n\t\t\tpost: post\n\t\t};\n\n\t\tvar formId = 'L11-F2';\n\t\tvar oldFormData = {\n\t\t\trepresentations: {\n\t\t\t\ten: { language: 'en', value: 'old representation' },\n\t\t\t\t'en-gb': { language: 'en-gb', value: 'old representation gb' }\n\t\t\t},\n\t\t\tgrammaticalFeatures: [ 'Q1' ]\n\t\t};\n\n\t\tvar changer = new FormChanger( api, revisionStore, 'L11', oldFormData );\n\t\tvar representations = new TermMap( {\n\t\t\ten: new Term( 'en', 'new representation' ),\n\t\t\t'en-gb': new Term( 'en-gb', 'old representation gb' )\n\t\t} );\n\t\tvar form = new Form( formId, representations, [ 'Q1' ] );\n\n\t\tchanger.save( form );\n\n\t\tvar callArguments = post.args[ 0 ];\n\t\tvar gotParameters = callArguments[ 0 ];\n\t\tvar gotData = JSON.parse( gotParameters.data );\n\n\t\tassert.equal( gotParameters.action, 'wbleditformelements', 'Edit form elements API action' );\n\t\tassert.deepEqual(\n\t\t\tgotData.representations,\n\t\t\t{ en: { language: 'en', value: 'new representation' } },\n\t\t\t'Representation list'\n\t\t);\n\t} );\n\n\tQUnit.test( 'Representation removed - remove request passed to API', function ( assert ) {\n\t\tvar post = sinon.spy( function () {\n\t\t\treturn $.Deferred().resolve( {\n\t\t\t\tform: {}\n\t\t\t} ).promise();\n\t\t} );\n\t\tvar api = {\n\t\t\tpost: post\n\t\t};\n\n\t\tvar formId = 'L11-F2';\n\t\tvar oldFormData = {\n\t\t\trepresentations: {\n\t\t\t\ten: { language: 'en', value: 'test representation' },\n\t\t\t\t'en-gb': { language: 'en-gb', value: 'test representation gb' }\n\t\t\t},\n\t\t\tgrammaticalFeatures: [ 'Q1' ]\n\t\t};\n\n\t\tvar changer = new FormChanger( api, revisionStore, 'L11', oldFormData );\n\t\tvar representations = new TermMap( { en: new Term( 'en', 'test representation' ) } );\n\t\tvar form = new Form( formId, representations, [ 'Q1' ] );\n\n\t\tchanger.save( form );\n\n\t\tvar callArguments = post.args[ 0 ];\n\t\tvar gotParameters = callArguments[ 0 ];\n\t\tvar gotData = JSON.parse( gotParameters.data );\n\n\t\tassert.equal( gotParameters.action, 'wbleditformelements', 'Edit form elements API action' );\n\t\tassert.deepEqual(\n\t\t\tgotData.representations,\n\t\t\t{ 'en-gb': { language: 'en-gb', remove: '' } },\n\t\t\t'Remove representation'\n\t\t);\n\t} );\n\n\tQUnit.test( 'Existing Form data changed - save - returns deserialized Form from API result', function ( assert ) {\n\t\tvar done = assert.async();\n\n\t\tvar formId = 'L1-F100';\n\t\tvar oldFormData = {\n\t\t\trepresentations: {\n\t\t\t\ten: { language: 'en', value: 'old representation' }\n\t\t\t},\n\t\t\tgrammaticalFeatures: [ 'Q1' ]\n\t\t};\n\t\tvar representations = new TermMap( { en: new Term( 'en', 'test representation' ) } );\n\t\tvar grammaticalFeatures = [ 'Q1', 'Q2' ];\n\n\t\tvar api = {\n\t\t\tpost: function () {\n\t\t\t\treturn $.Deferred().resolve( {\n\t\t\t\t\tform: {\n\t\t\t\t\t\tid: formId,\n\t\t\t\t\t\trepresentations: {\n\t\t\t\t\t\t\ten: {\n\t\t\t\t\t\t\t\tlanguage: 'en',\n\t\t\t\t\t\t\t\tvalue: 'test representation'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgrammaticalFeatures: grammaticalFeatures\n\t\t\t\t\t}\n\t\t\t\t} ).promise();\n\t\t\t}\n\t\t};\n\n\t\tvar form = new Form( formId, representations, grammaticalFeatures );\n\n\t\tvar changer = new FormChanger( api, revisionStore, 'L1', oldFormData );\n\n\t\tassert.expect( 3 );\n\n\t\tchanger.save( form ).then( function ( saveForm ) {\n\t\t\tassert.equal( saveForm.getId(), 'L1-F100', 'Saved Form ID' );\n\t\t\tassert.equal(\n\t\t\t\tsaveForm.getRepresentations().getItemByKey( 'en' ).getText(),\n\t\t\t\t'test representation',\n\t\t\t\t'Saved representation'\n\t\t\t);\n\t\t\tassert.deepEqual(\n\t\t\t\tsaveForm.getGrammaticalFeatures(),\n\t\t\t\t[ 'Q1', 'Q2' ],\n\t\t\t\t'Saved grammatical features'\n\t\t\t);\n\t\t\tdone();\n\t\t} ).catch( done );\n\t} );\n\n\tQUnit.test(\n\t\t'Existing Form data changed - save fails with errors - converts errors to single RepoApiError',\n\t\tfunction ( assert ) {\n\t\t\tvar done = assert.async();\n\n\t\t\tvar api = {\n\t\t\t\tpost: function () {\n\t\t\t\t\treturn $.Deferred().reject(\n\t\t\t\t\t\t'some-generic-error-code',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terrors: [\n\t\t\t\t\t\t\t\tcreateError( 'error-code-1', 'Some text 1' ),\n\t\t\t\t\t\t\t\tcreateError( 'error-code-1', 'Some text 2' )\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t'*': 'Some info'\n\t\t\t\t\t\t}\n\t\t\t\t\t).promise();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar changer = new FormChanger( api, revisionStore, 'L1', {} );\n\n\t\t\tvar form = new Form( 'L1-F1', null, [] );\n\n\t\t\tassert.expect( 3 );\n\n\t\t\tchanger.save( form ).catch( function ( error ) {\n\t\t\t\tassert.ok(\n\t\t\t\t\terror instanceof wb.api.RepoApiError,\n\t\t\t\t\t'Error is instance of RepoApiError'\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\terror.detailedMessage.indexOf( 'Some text 1' ) > -1,\n\t\t\t\t\t'Detailed message contains text of the first error'\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\terror.detailedMessage.indexOf( 'Some text 2' ) > -1,\n\t\t\t\t\t'Detailed message contains text of the second error'\n\t\t\t\t);\n\t\t\t\tdone();\n\t\t\t} );\n\n\t\t\tfunction createError( code, text ) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: code,\n\t\t\t\t\tdata: {},\n\t\t\t\t\tmodule: 'wbleditformelements',\n\t\t\t\t\t'*': text\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\tQUnit.test( 'Existing Form removed - makes the expected API call', function ( assert ) {\n\t\tvar api = {\n\t\t\tpost: sinon.stub().returns( $.Deferred().resolve( {} ) )\n\t\t};\n\n\t\tvar formId = 'L11-F2';\n\t\tvar changer = new FormChanger( api, revisionStore, 'L11', {} );\n\t\tvar representations = new TermMap( { en: new Term( 'en', 'test representation' ) } );\n\t\tvar form = new Form( formId, representations, [ 'Q1', 'Q2' ] );\n\n\t\tchanger.remove( form );\n\n\t\tassert.ok( api.post.calledOnce, 'API gets called once' );\n\n\t\tvar callArguments = api.post.firstCall.args;\n\t\tvar gotParameters = callArguments[ 0 ];\n\n\t\tassert.equal( gotParameters.action, 'wblremoveform', 'Picks right API action' );\n\t\tassert.equal( gotParameters.id, formId, 'Sends form id parameter' );\n\t\tassert.equal( gotParameters.errorformat, 'plaintext', 'Requests plain text error format' );\n\t\tassert.equal( gotParameters.baserevid, 123, 'Base revision Id' );\n\t\tassert.equal( gotParameters.bot, 0, 'Disables bot flag' );\n\t} );\n\n\tQUnit.test( 'Existing Form removal fails - formats and passes API errors', function ( assert ) {\n\t\tvar api = {\n\t\t\tpost: sinon.stub().returns(\n\t\t\t\t$.Deferred().reject( 'irrelevant', { errors: [ { code: 'bad', '*': 'foo' } ] } )\n\t\t\t)\n\t\t};\n\n\t\tvar changer = new FormChanger( api, revisionStore, 'L11', {} );\n\t\tvar representations = new TermMap( { en: new Term( 'en', 'test representation' ) } );\n\t\tvar form = new Form( 'L11-F300', representations, [ 'Q1', 'Q2' ] );\n\n\t\tvar testPromise = $.Deferred();\n\n\t\tassert.expect( 4 );\n\n\t\tchanger.remove( form ).fail( function ( apiError ) {\n\t\t\tassert.ok( apiError instanceof wb.api.RepoApiError, 'Is custom API error' );\n\t\t\tassert.equal( apiError.code, 'bad', 'Code from API gets set' );\n\t\t\tassert.equal( apiError.detailedMessage, '<li>foo</li>', 'Message from API gets set and decorated' );\n\t\t\tassert.equal( apiError.action, 'remove', 'Action that failed gets set' );\n\n\t\t\ttestPromise.resolve();\n\t\t} );\n\n\t\treturn testPromise;\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/entityChangers/LexemeRevisionStore.tests.js","messages":[{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":17,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":17,"endColumn":66},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":25,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":25,"endColumn":69},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":33,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":33,"endColumn":68},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":41,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":41,"endColumn":69},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":49,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":49,"endColumn":68},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":60,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":60,"endColumn":65},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":68,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":68,"endColumn":67},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":76,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":76,"endColumn":67},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":84,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":84,"endColumn":47},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":90,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":90,"endColumn":57},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":96,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":96,"endColumn":57},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":102,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":102,"endColumn":58},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":108,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":108,"endColumn":58}],"suppressedMessages":[],"errorCount":13,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n */\n( function () {\n\t'use strict';\n\n\tQUnit.module( 'wikibase.lexeme.entityChangers.LexemeRevisionStore' );\n\n\tvar RevisionStore = require( '../../../resources/entityChangers/LexemeRevisionStore.js' );\n\n\tQUnit.test( 'getClaimRevision: given a GUID of a lexeme returns correct claimRevision', function ( assert ) {\n\t\tvar mockBaseStore = {\n\t\t\t\tgetClaimRevision: sinon.stub().withArgs( 'L123$some-GUID' ).returns( 234 )\n\t\t\t},\n\t\t\tstore = new RevisionStore( mockBaseStore );\n\n\t\tassert.equal( store.getClaimRevision( 'L123$some-GUID' ), 234 );\n\t} );\n\n\tQUnit.test( 'getClaimRevision: given a known GUID of a form returns form claimRevision', function ( assert ) {\n\t\tvar store = new RevisionStore( null );\n\n\t\tstore.setClaimRevision( 321, 'L123-F2$some-GUID' );\n\n\t\tassert.equal( store.getClaimRevision( 'L123-F2$some-GUID' ), 321 );\n\t} );\n\n\tQUnit.test( 'getClaimRevision: given an unknown GUID of a form returns form revision', function ( assert ) {\n\t\tvar store = new RevisionStore( null );\n\n\t\tstore.setFormRevision( 23, 'L123-F2' );\n\n\t\tassert.equal( store.getClaimRevision( 'L123-F2$some-GUID' ), 23 );\n\t} );\n\n\tQUnit.test( 'getClaimRevision: given a known GUID of a sense returns sense claimRevision', function ( assert ) {\n\t\tvar store = new RevisionStore( null );\n\n\t\tstore.setClaimRevision( 321, 'L123-S2$some-GUID' );\n\n\t\tassert.equal( store.getClaimRevision( 'L123-S2$some-GUID' ), 321 );\n\t} );\n\n\tQUnit.test( 'getClaimRevision: given an unknown GUID of a sense returns sense revision', function ( assert ) {\n\t\tvar store = new RevisionStore( null );\n\n\t\tstore.setSenseRevision( 23, 'L123-S2' );\n\n\t\tassert.equal( store.getClaimRevision( 'L123-S2$some-GUID' ), 23 );\n\t} );\n\n\tQUnit.test( 'setClaimRevision: given a GUID of a lexeme, sets claimRevision in base store', function ( assert ) {\n\t\tvar setClaimRevSpy = sinon.spy(),\n\t\t\tstore = new RevisionStore(\n\t\t\t\t{ setClaimRevision: setClaimRevSpy }\n\t\t\t);\n\n\t\tstore.setClaimRevision( 42, 'L789$some-GUID' );\n\n\t\tassert.ok( setClaimRevSpy.calledWith( 42, 'L789$some-GUID' ) );\n\t} );\n\n\tQUnit.test( 'setClaimRevision: given a GUID of a form sets claimRevision for form', function ( assert ) {\n\t\tvar store = new RevisionStore( null );\n\n\t\tstore.setClaimRevision( 666, 'L3-F1$some-GUID' );\n\n\t\tassert.equal( store.getClaimRevision( 'L3-F1$some-GUID' ), 666 );\n\t} );\n\n\tQUnit.test( 'setClaimRevision: given a GUID of a sense sets claimRevision for sense', function ( assert ) {\n\t\tvar store = new RevisionStore( null );\n\n\t\tstore.setClaimRevision( 666, 'L3-S1$some-GUID' );\n\n\t\tassert.equal( store.getClaimRevision( 'L3-S1$some-GUID' ), 666 );\n\t} );\n\n\tQUnit.test( 'getBaseRevision returns the base revision', function ( assert ) {\n\t\tvar store = new RevisionStore( {\n\t\t\tgetBaseRevision: sinon.stub().returns( 777 )\n\t\t} );\n\n\t\tassert.equal( store.getBaseRevision(), 777 );\n\t} );\n\n\tQUnit.test( 'setFormRevision sets the revision for a form id', function ( assert ) {\n\t\tvar store = new RevisionStore( null );\n\t\tstore.setFormRevision( 1234, 'L1-F1' );\n\t\tassert.equal( store.getFormRevision( 'L1-F1' ), 1234 );\n\t} );\n\n\tQUnit.test( 'getFormRevision gets the revision of a form', function ( assert ) {\n\t\tvar store = new RevisionStore( null );\n\t\tstore.setFormRevision( 4321, 'L1-F1' );\n\t\tassert.equal( store.getFormRevision( 'L1-F1' ), 4321 );\n\t} );\n\n\tQUnit.test( 'setSenseRevision sets the revision for a sense id', function ( assert ) {\n\t\tvar store = new RevisionStore( null );\n\t\tstore.setSenseRevision( 1234, 'L1-S1' );\n\t\tassert.equal( store.getSenseRevision( 'L1-S1' ), 1234 );\n\t} );\n\n\tQUnit.test( 'getSenseRevision gets the revision of a sense', function ( assert ) {\n\t\tvar store = new RevisionStore( null );\n\t\tstore.setSenseRevision( 4321, 'L1-S1' );\n\t\tassert.equal( store.getSenseRevision( 'L1-S1' ), 4321 );\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/entityChangers/SenseChanger.tests.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wb\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":47,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":47,"endColumn":78},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":48,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":48,"endColumn":84},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":49,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":49,"endColumn":51},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":50,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":50,"endColumn":92},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":51,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":51,"endColumn":73},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":52,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":52,"endColumn":65},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":86,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":86,"endColumn":66},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":87,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":91,"endColumn":5},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":129,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":129,"endColumn":69},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":161,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":164,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":165,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":168,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":169,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":172,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":214,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":214,"endColumn":97},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":215,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":215,"endColumn":84},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":216,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":216,"endColumn":51},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":217,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":217,"endColumn":67},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":218,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":218,"endColumn":70},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":256,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":256,"endColumn":97},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":295,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":295,"endColumn":97},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":331,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":331,"endColumn":97},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":373,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":373,"endColumn":66},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":374,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":378,"endColumn":5},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":410,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":413,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":414,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":417,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":418,"column":5,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":421,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":447,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":447,"endColumn":59},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":452,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":452,"endColumn":83},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":453,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":453,"endColumn":71},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":454,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":454,"endColumn":93},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":455,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":455,"endColumn":60},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":456,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":456,"endColumn":67},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":475,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":475,"endColumn":79},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":476,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":476,"endColumn":66},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":477,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":477,"endColumn":103},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":478,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":478,"endColumn":76}],"suppressedMessages":[],"errorCount":35,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param wb\n * @license GPL-2.0-or-later\n */\n( function ( wb ) {\n\t'use strict';\n\n\tQUnit.module( 'wikibase.lexeme.entityChangers.SenseChanger' );\n\n\tvar SenseChanger = require( '../../../resources/entityChangers/SenseChanger.js' );\n\tvar Sense = wb.lexeme.datamodel.Sense;\n\tvar datamodel = require( 'wikibase.datamodel' );\n\tvar TermMap = datamodel.TermMap;\n\tvar Term = datamodel.Term;\n\tvar revisionStore = {\n\t\tsetSenseRevision: function () {},\n\t\tgetBaseRevision: function () {\n\t\t\treturn 123;\n\t\t}\n\t};\n\n\tQUnit.test( 'New Sense - makes the expected API call', function ( assert ) {\n\t\tvar post = sinon.spy( function () {\n\t\t\treturn $.Deferred().resolve( {\n\t\t\t\tsense: {}\n\t\t\t} ).promise();\n\t\t} );\n\t\tvar api = {\n\t\t\tpost: post,\n\t\t\tnormalizeMultiValue: function ( stuff ) {\n\t\t\t\treturn stuff;\n\t\t\t}\n\t\t};\n\n\t\tvar tags = [ 'asdf' ];\n\t\tvar lexemeId = 'L11';\n\t\tvar changer = new SenseChanger( api, revisionStore, lexemeId, {}, tags );\n\t\tvar glosses = new TermMap( { en: new Term( 'en', 'test gloss' ) } );\n\t\tvar sense = new Sense( null, glosses );\n\n\t\tchanger.save( sense );\n\n\t\tvar callArguments = post.args[ 0 ];\n\t\tvar gotParameters = callArguments[ 0 ];\n\t\tvar gotData = JSON.parse( gotParameters.data );\n\n\t\tassert.equal( gotParameters.action, 'wbladdsense', 'Add sense API action' );\n\t\tassert.equal( gotParameters.errorformat, 'plaintext', 'Plain text error format' );\n\t\tassert.equal( gotParameters.bot, 0, 'BOT flag' );\n\t\tassert.equal( gotParameters.baserevid, undefined, 'Base revision Id should not be sent' );\n\t\tassert.equal( gotParameters.lexemeId, lexemeId, 'lexemeId parameter' );\n\t\tassert.equal( gotParameters.tags, tags, 'Tags should be set' );\n\t\tassert.deepEqual(\n\t\t\tgotData.glosses,\n\t\t\t{ en: { language: 'en', value: 'test gloss' } },\n\t\t\t'Glosses list'\n\t\t);\n\t} );\n\n\tQUnit.test( 'New sense - save - returns deserialized Sense from API result', function ( assert ) {\n\t\tvar done = assert.async();\n\n\t\tvar api = {\n\t\t\tpost: function () {\n\t\t\t\treturn $.Deferred().resolve( {\n\t\t\t\t\tsense: {\n\t\t\t\t\t\tid: 'L1-S100',\n\t\t\t\t\t\tglosses: {\n\t\t\t\t\t\t\ten: {\n\t\t\t\t\t\t\t\tlanguage: 'en',\n\t\t\t\t\t\t\t\tvalue: 'some gloss'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ).promise();\n\t\t\t}\n\t\t};\n\n\t\tvar changer = new SenseChanger( api, revisionStore, 'L1', {} );\n\n\t\tvar sense = new Sense( null, null );\n\n\t\tassert.expect( 2 );\n\n\t\tchanger.save( sense ).then( function ( saveSense ) {\n\t\t\tassert.equal( saveSense.getId(), 'L1-S100', 'Saved Sense ID' );\n\t\t\tassert.equal(\n\t\t\t\tsaveSense.getGlosses().getItemByKey( 'en' ).getText(),\n\t\t\t\t'some gloss',\n\t\t\t\t'Saved gloss'\n\t\t\t);\n\t\t\tdone();\n\t\t} ).catch( done );\n\t} );\n\n\tQUnit.test( 'New sense - save - sets the base revision to the one from API result', function ( assert ) {\n\t\tvar done = assert.async();\n\n\t\tvar api = {\n\t\t\tpost: function () {\n\t\t\t\treturn $.Deferred().resolve( {\n\t\t\t\t\tsense: { id: 'L1-S100' },\n\t\t\t\t\tlastrevid: 303\n\t\t\t\t} ).promise();\n\t\t\t}\n\t\t};\n\t\tvar revisionStore2 = {\n\t\t\tsenseBaseRevisions: {\n\t\t\t},\n\t\t\tgetSenseRevision: function ( senseId ) {\n\t\t\t\treturn this.senseBaseRevisions[ senseId ];\n\t\t\t},\n\t\t\tsetSenseRevision: function ( revision, senseId ) {\n\t\t\t\tthis.senseBaseRevisions[ senseId ] = revision;\n\n\t\t\t},\n\t\t\tgetBaseRevision: function () {\n\t\t\t\treturn 123;\n\t\t\t}\n\t\t};\n\n\t\tvar changer = new SenseChanger( api, revisionStore2, 'L1', {} );\n\n\t\tvar sense = new Sense( null, null );\n\n\t\tassert.expect( 1 );\n\n\t\tchanger.save( sense ).then( function () {\n\t\t\tassert.equal( revisionStore2.getSenseRevision( 'L1-S100' ), 303 );\n\t\t\tdone();\n\t\t} ).catch( done );\n\t} );\n\n\tQUnit.test(\n\t\t'New sense - save fails with errors - converts errors to single RepoApiError',\n\t\tfunction ( assert ) {\n\t\t\tvar done = assert.async();\n\n\t\t\tvar api = {\n\t\t\t\tpost: function () {\n\t\t\t\t\treturn $.Deferred().reject(\n\t\t\t\t\t\t'some-generic-error-code',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terrors: [\n\t\t\t\t\t\t\t\tcreateError( 'error-code-1', 'Some text 1' ),\n\t\t\t\t\t\t\t\tcreateError( 'error-code-1', 'Some text 2' )\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t'*': 'Some info'\n\t\t\t\t\t\t}\n\t\t\t\t\t).promise();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar changer = new SenseChanger( api, revisionStore, 'L1', {} );\n\n\t\t\tvar sense = new Sense( null, null );\n\n\t\t\tassert.expect( 3 );\n\n\t\t\tchanger.save( sense ).catch( function ( error ) {\n\t\t\t\tassert.ok(\n\t\t\t\t\terror instanceof wb.api.RepoApiError,\n\t\t\t\t\t'Error is instance of RepoApiError'\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\terror.detailedMessage.indexOf( 'Some text 1' ) > -1,\n\t\t\t\t\t'Detailed message contains text of the first error'\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\terror.detailedMessage.indexOf( 'Some text 2' ) > -1,\n\t\t\t\t\t'Detailed message contains text of the second error'\n\t\t\t\t);\n\t\t\t\tdone();\n\t\t\t} );\n\n\t\t\tfunction createError( code, text ) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: code,\n\t\t\t\t\tdata: {},\n\t\t\t\t\tmodule: 'wbladdsense',\n\t\t\t\t\t'*': text\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\tQUnit.test( 'Existing Sense data changed - makes the expected API call', function ( assert ) {\n\t\tvar post = sinon.spy( function () {\n\t\t\treturn $.Deferred().resolve( {\n\t\t\t\tsense: {}\n\t\t\t} ).promise();\n\t\t} );\n\n\t\tvar api = {\n\t\t\tpost: post\n\t\t};\n\n\t\tvar senseId = 'L11-S2';\n\t\tvar oldSenseData = {\n\t\t\tglosses: {\n\t\t\t\ten: { language: 'en', value: 'old gloss' }\n\t\t\t}\n\t\t};\n\n\t\tvar changer = new SenseChanger( api, revisionStore, 'L11', oldSenseData );\n\t\tvar glosses = new TermMap( { en: new Term( 'en', 'test gloss' ) } );\n\t\tvar sense = new Sense( senseId, glosses );\n\n\t\tchanger.save( sense );\n\n\t\tvar callArguments = post.args[ 0 ];\n\t\tvar gotParameters = callArguments[ 0 ];\n\t\tvar gotData = JSON.parse( gotParameters.data );\n\n\t\tassert.equal( gotParameters.action, 'wbleditsenseelements', 'Edit sense elements API action' );\n\t\tassert.equal( gotParameters.errorformat, 'plaintext', 'Plain text error format' );\n\t\tassert.equal( gotParameters.bot, 0, 'BOT flag' );\n\t\tassert.equal( gotParameters.baserevid, 123, 'Base revision Id' );\n\t\tassert.equal( gotParameters.senseId, senseId, 'senseId parameter' );\n\t\tassert.deepEqual(\n\t\t\tgotData.glosses,\n\t\t\t{ en: { language: 'en', value: 'test gloss' } },\n\t\t\t'Gloss list'\n\t\t);\n\t} );\n\n\tQUnit.test( 'Gloss added - only new gloss passed to API', function ( assert ) {\n\t\tvar post = sinon.spy( function () {\n\t\t\treturn $.Deferred().resolve( {\n\t\t\t\tsense: {}\n\t\t\t} ).promise();\n\t\t} );\n\t\tvar api = {\n\t\t\tpost: post\n\t\t};\n\n\t\tvar senseId = 'L11-S2';\n\t\tvar oldSenseData = {\n\t\t\tglosses: {\n\t\t\t\ten: { language: 'en', value: 'test gloss' }\n\t\t\t}\n\t\t};\n\n\t\tvar changer = new SenseChanger( api, revisionStore, 'L11', oldSenseData );\n\t\tvar glosses = new TermMap( {\n\t\t\ten: new Term( 'en', 'test gloss' ),\n\t\t\t'en-gb': new Term( 'en-gb', 'test gloss gb' )\n\t\t} );\n\t\tvar sense = new Sense( senseId, glosses );\n\n\t\tchanger.save( sense );\n\n\t\tvar callArguments = post.args[ 0 ];\n\t\tvar gotParameters = callArguments[ 0 ];\n\t\tvar gotData = JSON.parse( gotParameters.data );\n\n\t\tassert.equal( gotParameters.action, 'wbleditsenseelements', 'Edit sense elements API action' );\n\t\tassert.deepEqual(\n\t\t\tgotData.glosses,\n\t\t\t{ 'en-gb': { language: 'en-gb', value: 'test gloss gb' } },\n\t\t\t'Gloss list'\n\t\t);\n\t} );\n\n\tQUnit.test( 'One of many glosses changed - only changed gloss passed to API', function ( assert ) {\n\t\tvar post = sinon.spy( function () {\n\t\t\treturn $.Deferred().resolve( {\n\t\t\t\tsense: {}\n\t\t\t} ).promise();\n\t\t} );\n\t\tvar api = {\n\t\t\tpost: post\n\t\t};\n\n\t\tvar senseId = 'L11-S2';\n\t\tvar oldSenseData = {\n\t\t\tglosses: {\n\t\t\t\ten: { language: 'en', value: 'old gloss' },\n\t\t\t\t'en-gb': { language: 'en-gb', value: 'old gloss gb' }\n\t\t\t}\n\t\t};\n\n\t\tvar changer = new SenseChanger( api, revisionStore, 'L11', oldSenseData );\n\t\tvar glosses = new TermMap( {\n\t\t\ten: new Term( 'en', 'new gloss' ),\n\t\t\t'en-gb': new Term( 'en-gb', 'old gloss gb' )\n\t\t} );\n\t\tvar sense = new Sense( senseId, glosses );\n\n\t\tchanger.save( sense );\n\n\t\tvar callArguments = post.args[ 0 ];\n\t\tvar gotParameters = callArguments[ 0 ];\n\t\tvar gotData = JSON.parse( gotParameters.data );\n\n\t\tassert.equal( gotParameters.action, 'wbleditsenseelements', 'Edit sense elements API action' );\n\t\tassert.deepEqual(\n\t\t\tgotData.glosses,\n\t\t\t{ en: { language: 'en', value: 'new gloss' } },\n\t\t\t'Gloss list'\n\t\t);\n\t} );\n\n\tQUnit.test( 'Gloss removed - remove request passed to API', function ( assert ) {\n\t\tvar post = sinon.spy( function () {\n\t\t\treturn $.Deferred().resolve( {\n\t\t\t\tsense: {}\n\t\t\t} ).promise();\n\t\t} );\n\t\tvar api = {\n\t\t\tpost: post\n\t\t};\n\n\t\tvar senseId = 'L11-S2';\n\t\tvar oldSenseData = {\n\t\t\tglosses: {\n\t\t\t\ten: { language: 'en', value: 'test gloss' },\n\t\t\t\t'en-gb': { language: 'en-gb', value: 'test gloss gb' }\n\t\t\t}\n\t\t};\n\n\t\tvar changer = new SenseChanger( api, revisionStore, 'L11', oldSenseData );\n\t\tvar glosses = new TermMap( { en: new Term( 'en', 'test gloss' ) } );\n\t\tvar sense = new Sense( senseId, glosses );\n\n\t\tchanger.save( sense );\n\n\t\tvar callArguments = post.args[ 0 ];\n\t\tvar gotParameters = callArguments[ 0 ];\n\t\tvar gotData = JSON.parse( gotParameters.data );\n\n\t\tassert.equal( gotParameters.action, 'wbleditsenseelements', 'Edit sense elements API action' );\n\t\tassert.deepEqual(\n\t\t\tgotData.glosses,\n\t\t\t{ 'en-gb': { language: 'en-gb', remove: '' } },\n\t\t\t'Remove gloss'\n\t\t);\n\t} );\n\n\tQUnit.test( 'Existing Sense data changed - save - returns deserialized Sense from API result', function ( assert ) {\n\t\tvar done = assert.async();\n\n\t\tvar senseId = 'L1-S100';\n\t\tvar oldSenseData = {\n\t\t\tglosses: {\n\t\t\t\ten: { language: 'en', value: 'old gloss' }\n\t\t\t}\n\t\t};\n\t\tvar glosses = new TermMap( { en: new Term( 'en', 'test gloss' ) } );\n\n\t\tvar api = {\n\t\t\tpost: function () {\n\t\t\t\treturn $.Deferred().resolve( {\n\t\t\t\t\tsense: {\n\t\t\t\t\t\tid: senseId,\n\t\t\t\t\t\tglosses: {\n\t\t\t\t\t\t\ten: {\n\t\t\t\t\t\t\t\tlanguage: 'en',\n\t\t\t\t\t\t\t\tvalue: 'test gloss'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ).promise();\n\t\t\t}\n\t\t};\n\n\t\tvar sense = new Sense( senseId, glosses );\n\n\t\tvar changer = new SenseChanger( api, revisionStore, 'L1', oldSenseData );\n\n\t\tassert.expect( 2 );\n\n\t\tchanger.save( sense ).then( function ( saveSense ) {\n\t\t\tassert.equal( saveSense.getId(), 'L1-S100', 'Saved Sense ID' );\n\t\t\tassert.equal(\n\t\t\t\tsaveSense.getGlosses().getItemByKey( 'en' ).getText(),\n\t\t\t\t'test gloss',\n\t\t\t\t'Saved gloss'\n\t\t\t);\n\t\t\tdone();\n\t\t} ).catch( done );\n\t} );\n\n\tQUnit.test(\n\t\t'Existing Sense data changed - save fails with errors - converts errors to single RepoApiError',\n\t\tfunction ( assert ) {\n\t\t\tvar done = assert.async();\n\n\t\t\tvar api = {\n\t\t\t\tpost: function () {\n\t\t\t\t\treturn $.Deferred().reject(\n\t\t\t\t\t\t'some-generic-error-code',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terrors: [\n\t\t\t\t\t\t\t\tcreateError( 'error-code-1', 'Some text 1' ),\n\t\t\t\t\t\t\t\tcreateError( 'error-code-1', 'Some text 2' )\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t'*': 'Some info'\n\t\t\t\t\t\t}\n\t\t\t\t\t).promise();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar changer = new SenseChanger( api, revisionStore, 'L1', {} );\n\n\t\t\tvar sense = new Sense( 'L1-S1', null );\n\n\t\t\tassert.expect( 3 );\n\n\t\t\tchanger.save( sense ).catch( function ( error ) {\n\t\t\t\tassert.ok(\n\t\t\t\t\terror instanceof wb.api.RepoApiError,\n\t\t\t\t\t'Error is instance of RepoApiError'\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\terror.detailedMessage.indexOf( 'Some text 1' ) > -1,\n\t\t\t\t\t'Detailed message contains text of the first error'\n\t\t\t\t);\n\t\t\t\tassert.ok(\n\t\t\t\t\terror.detailedMessage.indexOf( 'Some text 2' ) > -1,\n\t\t\t\t\t'Detailed message contains text of the second error'\n\t\t\t\t);\n\t\t\t\tdone();\n\t\t\t} );\n\n\t\t\tfunction createError( code, text ) {\n\t\t\t\treturn {\n\t\t\t\t\tcode: code,\n\t\t\t\t\tdata: {},\n\t\t\t\t\tmodule: 'wbleditsenseelements',\n\t\t\t\t\t'*': text\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\tQUnit.test( 'Existing Sense removed - makes the expected API call', function ( assert ) {\n\t\tvar api = {\n\t\t\tpost: sinon.stub().returns( $.Deferred().resolve( {} ) )\n\t\t};\n\n\t\tvar senseId = 'L11-S2';\n\t\tvar changer = new SenseChanger( api, revisionStore, 'L11', {} );\n\t\tvar glosses = new TermMap( { en: new Term( 'en', 'test gloss' ) } );\n\t\tvar sense = new Sense( senseId, glosses );\n\n\t\tchanger.remove( sense );\n\n\t\tassert.ok( api.post.calledOnce, 'API gets called once' );\n\n\t\tvar callArguments = api.post.firstCall.args;\n\t\tvar gotParameters = callArguments[ 0 ];\n\n\t\tassert.equal( gotParameters.action, 'wblremovesense', 'Picks right API action' );\n\t\tassert.equal( gotParameters.id, senseId, 'Sends form id parameter' );\n\t\tassert.equal( gotParameters.errorformat, 'plaintext', 'Requests plain text error format' );\n\t\tassert.equal( gotParameters.bot, 0, 'Disables bot flag' );\n\t\tassert.equal( gotParameters.baserevid, 123, 'Base revision Id' );\n\t} );\n\n\tQUnit.test( 'Existing Sense removal fails - formats and passes API errors', function ( assert ) {\n\t\tvar api = {\n\t\t\tpost: sinon.stub().returns(\n\t\t\t\t$.Deferred().reject( 'irrelevant', { errors: [ { code: 'bad', '*': 'foo' } ] } )\n\t\t\t)\n\t\t};\n\n\t\tvar changer = new SenseChanger( api, revisionStore, 'L11', {} );\n\t\tvar glosses = new TermMap( { en: new Term( 'en', 'test gloss' ) } );\n\t\tvar sense = new Sense( 'L11-S300', glosses );\n\n\t\tvar testPromise = $.Deferred();\n\n\t\tassert.expect( 4 );\n\n\t\tchanger.remove( sense ).fail( function ( apiError ) {\n\t\t\tassert.ok( apiError instanceof wb.api.RepoApiError, 'Is custom API error' );\n\t\t\tassert.equal( apiError.code, 'bad', 'Code from API gets set' );\n\t\t\tassert.equal( apiError.detailedMessage, '<li>foo</li>', 'Message from API gets set and decorated' );\n\t\t\tassert.equal( apiError.action, 'remove', 'Action that failed gets set' );\n\n\t\t\ttestPromise.resolve();\n\t\t} );\n\n\t\treturn testPromise;\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/experts/Form.tests.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/experts/Lexeme.tests.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/jquery.wikibase.grammaticalfeatureview.tests.js","messages":[{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":34,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":34,"endColumn":88},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":53,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":53,"endColumn":39},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":67,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":67,"endColumn":61},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":71,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":71,"endColumn":82},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":103,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":103,"endColumn":51},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":124,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":124,"endColumn":61},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":139,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":142,"endColumn":4}],"suppressedMessages":[{"ruleId":"mediawiki/class-doc","severity":2,"message":"All possible CSS classes should be documented. See https://w.wiki/PS2 for details.","line":20,"column":3,"nodeType":"CallExpression","endLine":20,"endColumn":39,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":7,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n */\n( function () {\n\t'use strict';\n\n\tvar TEST_ELEMENT_CLASS = 'test_grammaticalfeatureview';\n\n\tQUnit.module( 'jquery.wikibase.grammaticalfeatureview', QUnit.newMwEnvironment( {\n\t\tafterEach: function () {\n\t\t\t$( '.' + TEST_ELEMENT_CLASS ).remove();\n\t\t}\n\t} ) );\n\n\tvar newGrammaticalFeatureView = function ( options ) {\n\t\toptions = options || {};\n\t\tvar $node = $( '<div>' ).appendTo( 'body' );\n\n\t\t// eslint-disable-next-line mediawiki/class-doc\n\t\t$node.addClass( TEST_ELEMENT_CLASS );\n\n\t\toptions.api = options.api || {};\n\t\toptions.language = options.language || 'en';\n\t\toptions.labelFormattingService = options.labelFormattingService || {\n\t\t\tgetHtml: function ( id ) {\n\t\t\t\treturn $.Deferred().resolve( id ).promise();\n\t\t\t}\n\t\t};\n\n\t\treturn $node.grammaticalfeatureview( options || {} ).data( 'grammaticalfeatureview' );\n\t};\n\n\tQUnit.test( 'can be created', function ( assert ) {\n\t\tassert.ok( newGrammaticalFeatureView() instanceof $.wikibase.grammaticalfeatureview );\n\t} );\n\n\tQUnit.test( 'value can be injected as option.value', function ( assert ) {\n\t\tvar view = newGrammaticalFeatureView( {\n\t\t\tvalue: [ 'Q1' ]\n\t\t} );\n\n\t\tassert.deepEqual( view.value(), [ 'Q1' ] );\n\t} );\n\n\tQUnit.test( 'value() sets internal value', function ( assert ) {\n\t\tvar value1 = [ 'Q1' ],\n\t\t\tvalue2 = [ 'Q2' ],\n\t\t\tview = newGrammaticalFeatureView( {\n\t\t\t\tvalue: value1\n\t\t\t} );\n\n\t\tview.value( value2 );\n\t\tassert.equal( view.value(), value2 );\n\t} );\n\n\tQUnit.test( 'value() creates value from input if it is in edit mode', function ( assert ) {\n\t\tvar view = newGrammaticalFeatureView();\n\n\t\tview.startEditing();\n\t\tview._grammaticalFeatureListWidget.allowedValues.push( 'Q1' );\n\t\tview._grammaticalFeatureListWidget.addTag( 'Q1', 'Q1-label' );\n\n\t\tassert.deepEqual( view.value(), [ 'Q1' ] );\n\t} );\n\n\tQUnit.test( 'should not be in edit mode when initialized without a value', function ( assert ) {\n\t\tassert.notOk( newGrammaticalFeatureView().isInEditMode() );\n\t} );\n\n\tQUnit.test( 'should not be in edit mode by default when initialized with a value', function ( assert ) {\n\t\tassert.notOk( newGrammaticalFeatureView( { value: [ 'Q1' ] } ).isInEditMode() );\n\t} );\n\n\tQUnit.test( 'draws value in input node after startEditing()', function ( assert ) {\n\t\tvar view = newGrammaticalFeatureView( {\n\t\t\tvalue: [ 'Q1' ]\n\t\t} );\n\n\t\tview.startEditing();\n\n\t\tassert.deepEqual(\n\t\t\tview._grammaticalFeatureListWidget.getValue(),\n\t\t\t[ 'Q1' ]\n\t\t);\n\t} );\n\n\tQUnit.test( 'draws value in text node after stopEditing()', function ( assert ) {\n\t\tvar done = assert.async();\n\t\tvar labelFormattingService = {\n\t\t\tgetHtml: function ( id ) {\n\t\t\t\treturn $.Deferred().resolve( id + '-label' ).promise();\n\t\t\t}\n\t\t};\n\t\tvar view = newGrammaticalFeatureView( {\n\t\t\tvalue: [ 'Q1' ],\n\t\t\tlabelFormattingService: labelFormattingService\n\t\t} );\n\n\t\tview.startEditing();\n\t\tview.stopEditing();\n\n\t\twindow.setTimeout( function () {\n\t\t\tassert.equal( view.$values.text(), 'Q1-label' );\n\t\t\tdone();\n\t\t} );\n\t} );\n\n\tQUnit.test( 'draws multiple values in text node after stopEditing()', function ( assert ) {\n\t\tvar done = assert.async();\n\t\tvar labelFormattingService = {\n\t\t\tgetHtml: function ( id ) {\n\t\t\t\treturn $.Deferred().resolve( id + '-label' ).promise();\n\t\t\t}\n\t\t};\n\t\tvar view = newGrammaticalFeatureView( {\n\t\t\tvalue: [ 'Q1', 'Q2' ],\n\t\t\tlabelFormattingService: labelFormattingService\n\t\t} );\n\n\t\tview.startEditing();\n\t\tview.stopEditing();\n\n\t\twindow.setTimeout( function () {\n\t\t\tassert.equal( view.$values.text(), 'Q1-label, Q2-label' );\n\t\t\tdone();\n\t\t} );\n\t} );\n\n\tQUnit.test( 'should contain label connected to input through input id', function ( assert ) {\n\t\tvar view = newGrammaticalFeatureView( {\n\t\t\tvalue: [ 'Q1' ]\n\t\t} );\n\n\t\tview.startEditing();\n\n\t\tvar inputId = view.element.find( 'input' )[ 0 ].id;\n\t\tvar labelsFound = view.element.find( 'label[for=\"' + inputId + '\"]' );\n\n\t\tassert.equal(\n\t\t\tlabelsFound.length,\n\t\t\t1\n\t\t);\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/jquery.wikibase.lexemeformlistview.tests.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wb\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":38,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":38,"endColumn":61},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":45,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":45,"endColumn":44},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":49,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":49,"endColumn":41},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":64,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":64,"endColumn":35},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":65,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":65,"endColumn":64},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":71,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":71,"endColumn":43},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":75,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":75,"endColumn":46}],"suppressedMessages":[],"errorCount":7,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param wb\n * @license GPL-2.0-or-later\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar formViewListItemAdapter = wb.tests.getMockListItemAdapter(\n\t\t'lexemeformview',\n\t\tfunction () {\n\t\t}\n\t);\n\n\tvar createViewElement = function ( getAdder, message ) {\n\t\tvar $node = $( '<div><div class=\"wikibase-lexeme-forms\"/></div>' );\n\t\treturn $node.lexemeformlistview( {\n\t\t\tgetListItemAdapter: function () {\n\t\t\t\treturn formViewListItemAdapter;\n\t\t\t},\n\t\t\tgetAdder: getAdder || function () {},\n\t\t\tgetMessage: message || function () { return 'localize me'; }\n\t\t} );\n\t};\n\n\tvar getViewFromElement = function ( $view ) {\n\t\treturn $view.data( 'lexemeformlistview' );\n\t};\n\n\tvar newView = function () {\n\t\treturn getViewFromElement( createViewElement() );\n\t};\n\n\tQUnit.module( 'jquery.wikibase.lexemeformlistview' );\n\n\tQUnit.test( 'Can be created', function ( assert ) {\n\t\tvar view = newView();\n\n\t\tassert.ok( view instanceof $.wikibase.lexemeformlistview );\n\t} );\n\n\tQUnit.test( 'enterNewItem adds new list item', function ( assert ) {\n\t\tvar view = newView(),\n\t\t\tlistItemAdapterSpy = sinon.spy( formViewListItemAdapter, 'newListItem' );\n\n\t\tassert.notOk( listItemAdapterSpy.called );\n\n\t\tview.enterNewItem();\n\n\t\tassert.ok( listItemAdapterSpy.called );\n\t\tlistItemAdapterSpy.restore();\n\t} );\n\n\tQUnit.test( 'renders a localized add toolbar to add a form', function ( assert ) {\n\t\tvar messageKey = 'wikibaselexeme-add-form';\n\t\tvar localizedMessage = 'some message';\n\t\tvar getAdder = sinon.spy();\n\t\tvar message = sinon.stub();\n\n\t\tmessage.withArgs( messageKey ).returns( localizedMessage );\n\t\tmessage.throws( 'Wrong argument to message()' );\n\n\t\tcreateViewElement( getAdder, message );\n\n\t\tassert.ok( getAdder.calledOnce );\n\t\tassert.equal( localizedMessage, getAdder.lastCall.args[ 2 ] );\n\t} );\n\n\tQUnit.test( 'Can be destroyed', function ( assert ) {\n\t\tvar $view = createViewElement();\n\n\t\tassert.ok( getViewFromElement( $view ) );\n\n\t\t$view.data( 'lexemeformlistview' ).destroy();\n\n\t\tassert.notOk( getViewFromElement( $view ) );\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/jquery.wikibase.lexemeformview.tests.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"require\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wb\" type.","line":3,"column":null,"nodeType":"Block","endLine":3,"endColumn":null},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":58,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":58,"endColumn":83},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":64,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":64,"endColumn":90},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":66,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":66,"endColumn":18},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":76,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":76,"endColumn":37},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":87,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":87,"endColumn":38},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":100,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":103,"endColumn":5},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":105,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":105,"endColumn":27},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":124,"column":6,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":127,"endColumn":7},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":132,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":132,"endColumn":27},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":151,"column":6,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":154,"endColumn":7},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":159,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":159,"endColumn":27},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":179,"column":6,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":182,"endColumn":7},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":187,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":187,"endColumn":27},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":192,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":192,"endColumn":84},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":203,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":206,"endColumn":5},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":208,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":208,"endColumn":27},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":224,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":227,"endColumn":5},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":229,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":229,"endColumn":27},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":243,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":247,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":259,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":263,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":281,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":284,"endColumn":5},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":285,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":289,"endColumn":7},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":306,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":306,"endColumn":46},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":307,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":307,"endColumn":42},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":309,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":309,"endColumn":27}],"suppressedMessages":[],"errorCount":25,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param require\n * @param wb\n * @license GPL-2.0-or-later\n */\n( function ( require, wb ) {\n\t'use strict';\n\n\tvar Vue = require( 'vue' );\n\tvar datamodel = require( 'wikibase.datamodel' );\n\n\t/** @type {wikibase.datamodel.TermMap} */\n\tvar TermMap = datamodel.TermMap;\n\t/** @type {wikibase.datamodel.Term} */\n\tvar Term = datamodel.Term;\n\n\tvar selector = {\n\t\trepresentationTextInput: '.representation-widget_representation-value-input',\n\t\trepresentationLanguageInput: '.representation-widget_representation-language-input',\n\t\trepresentationText: '.representation-widget_representation-value',\n\t\tlanguageRedundantWarning: '.representation-widget_redundant-language-warning',\n\t\trepresentationLanguageRedundant: '.representation-widget_representation-language-input_redundant-language'\n\t};\n\n\tQUnit.module( 'jquery.wikibase.lexemeformview', QUnit.newMwEnvironment() );\n\n\tvar newFormView = function ( options ) {\n\t\tvar $node = $( '<div>' ).appendTo( '#qunit-fixture' );\n\n\t\toptions = options || {};\n\n\t\toptions.api = options.api || {};\n\t\toptions.language = options.language || 'en';\n\t\toptions.labelFormattingService = options.labelFormattingService || {\n\t\t\tgetHtml: function ( id ) {\n\t\t\t\treturn $.Deferred().resolve( id ).promise();\n\t\t\t}\n\t\t};\n\t\toptions.buildStatementGroupListView = options.buildStatementGroupListView || function () {};\n\t\toptions.lexeme = {\n\t\t\tgetLemmas: function () {\n\t\t\t\treturn new TermMap( { en: new Term( 'en', 'color' ) } );\n\t\t\t}\n\t\t};\n\n\t\treturn $node.lexemeformview( options ).data( 'lexemeformview' );\n\t};\n\n\tvar newForm = function ( id, defaultRepresentation ) {\n\t\tvar representations = new TermMap( { en: new Term( 'en', defaultRepresentation ) } );\n\n\t\treturn new wb.lexeme.datamodel.Form( id, representations );\n\t};\n\n\tQUnit.test( 'can be created', function ( assert ) {\n\t\tvar form = newForm( 'F123', 'foo' );\n\n\t\tassert.ok( newFormView( { value: form } ) instanceof $.wikibase.lexemeformview );\n\t} );\n\n\tQUnit.test( 'creation without injected option.value fails', function ( assert ) {\n\t\ttry {\n\t\t\tnewFormView();\n\t\t\tassert.notOk( true, 'Expecting construction to fail without form value to work with' );\n\t\t} catch ( e ) {\n\t\t\tassert.ok( e );\n\t\t}\n\t} );\n\n\tQUnit.test( 'value can be injected as option.value', function ( assert ) {\n\t\tvar form = newForm( 'F123', 'foo' ),\n\t\t\tview = newFormView( {\n\t\t\t\tvalue: form\n\t\t\t} );\n\n\t\tassert.equal( view.value(), form );\n\t} );\n\n\tQUnit.test( 'value() sets internal value', function ( assert ) {\n\t\tvar form1 = newForm( 'F123', 'foo' ),\n\t\t\tform2 = newForm( 'F234', 'bar' ),\n\t\t\tview = newFormView( {\n\t\t\t\tvalue: form1\n\t\t\t} );\n\n\t\tview.value( form2 );\n\t\tassert.equal( view.value(), form2 );\n\t} );\n\n\tQUnit.test( 'value() creates value from input if it is in edit mode', function ( assert ) {\n\t\tvar done = assert.async(),\n\t\t\tform1 = newForm( 'F123', 'foo' ), // creates 'en' representation 'foo'\n\t\t\tview = newFormView( { value: form1 } ),\n\t\t\ttextInput = 'foobar';\n\n\t\tview.startEditing().then( function () {\n\t\t\tchangeInputValue( view.element.find( selector.representationLanguageInput ), 'en-gb' );\n\t\t\tchangeInputValue( view.element.find( selector.representationTextInput ), textInput );\n\n\t\t\tassert.equal(\n\t\t\t\tview.value().getRepresentations().getItemByKey( 'en-gb' ).getText(),\n\t\t\t\ttextInput\n\t\t\t);\n\t\t} ).catch( function ( e ) {\n\t\t\tassert.notOk( e.stack );\n\t\t} ).then( done );\n\t} );\n\n\tQUnit.test( 'value() creates null value when in edit mode with redundant languages', function ( assert ) {\n\t\tvar done = assert.async(),\n\t\t\tform1 = newForm( 'F123', 'foo' ), // creates 'en' representation 'foo'\n\t\t\tview = newFormView( {\n\t\t\t\tvalue: form1\n\t\t\t} );\n\n\t\tview.startEditing().then( function () {\n\t\t\tview._representationsWidget.add();\n\n\t\t\tVue.nextTick( function () {\n\t\t\t\tchangeInputValue( view.element.find( selector.representationLanguageInput ).last(), 'en' );\n\t\t\t\tchangeInputValue( view.element.find( selector.representationTextInput ).last(), 'conflicting' );\n\n\t\t\t\tVue.nextTick( function () {\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tview.value(),\n\t\t\t\t\t\tnull\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t} ).catch( function ( e ) {\n\t\t\tassert.notOk( e.stack );\n\t\t} ).then( done );\n\t} );\n\n\tQUnit.test( 'shows warning when in edit mode with redundant languages', function ( assert ) {\n\t\tvar done = assert.async(),\n\t\t\tform1 = newForm( 'F123', 'foo' ), // creates 'en' representation 'foo'\n\t\t\tview = newFormView( {\n\t\t\t\tvalue: form1\n\t\t\t} );\n\n\t\tview.startEditing().then( function () {\n\t\t\tview._representationsWidget.add();\n\n\t\t\tVue.nextTick( function () {\n\t\t\t\tchangeInputValue( view.element.find( selector.representationLanguageInput ).last(), 'en' );\n\t\t\t\tchangeInputValue( view.element.find( selector.representationTextInput ).last(), 'conflicting' );\n\n\t\t\t\tVue.nextTick( function () {\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tview.element.find( selector.languageRedundantWarning ).length,\n\t\t\t\t\t\t1\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t} ).catch( function ( e ) {\n\t\t\tassert.notOk( e.stack );\n\t\t} ).then( done );\n\t} );\n\n\tQUnit.test( 'marks redundant languages when in edit mode with redundant languages', function ( assert ) {\n\n\t\tvar done = assert.async(),\n\t\t\tform1 = newForm( 'F123', 'foo' ), // creates 'en' representation 'foo'\n\t\t\tview = newFormView( {\n\t\t\t\tvalue: form1\n\t\t\t} );\n\n\t\tview.startEditing().then( function () {\n\t\t\tview._representationsWidget.add();\n\n\t\t\tVue.nextTick( function () {\n\t\t\t\tchangeInputValue( view.element.find( selector.representationLanguageInput ).last(), 'en' );\n\t\t\t\tchangeInputValue( view.element.find( selector.representationTextInput ).last(), 'conflicting' );\n\n\t\t\t\tVue.nextTick( function () {\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tview.element.find( selector.representationLanguageRedundant ).length,\n\t\t\t\t\t\t2\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t} ).catch( function ( e ) {\n\t\t\tassert.notOk( e.stack );\n\t\t} ).then( done );\n\t} );\n\n\tQUnit.test( 'should not be in edit mode by default when initialized with a value', function ( assert ) {\n\t\tassert.notOk( newFormView( { value: newForm( 'F123', 'foo' ) } ).isInEditMode() );\n\t} );\n\n\tQUnit.test( 'draws value in input node after startEditing()', function ( assert ) {\n\t\tvar done = assert.async();\n\t\tvar form = newForm( 'F123', 'foobar' ),\n\t\t\tview = newFormView( {\n\t\t\t\tvalue: form\n\t\t\t} );\n\n\t\tview.startEditing().then( function () {\n\t\t\tassert.equal(\n\t\t\t\tview.element.find( selector.representationTextInput ).val(),\n\t\t\t\tform.getRepresentations().getItemByKey( 'en' ).getText()\n\t\t\t);\n\t\t} ).catch( function ( e ) {\n\t\t\tassert.notOk( e.stack );\n\t\t} ).then( done );\n\n\t} );\n\n\tQUnit.test( 'draws value in text node after stopEditing()', function ( assert ) {\n\t\tvar done = assert.async();\n\n\t\tvar form = newForm( 'F123', 'foobar' ),\n\t\t\tview = newFormView( {\n\t\t\t\tvalue: form\n\t\t\t} );\n\n\t\tview.startEditing().then( function () {\n\t\t\treturn view.stopEditing();\n\t\t} ).then( function () {\n\t\t\tassert.equal(\n\t\t\t\tview.element.find( selector.representationText ).text().trim(),\n\t\t\t\tform.getRepresentations().getItemByKey( 'en' ).getText()\n\t\t\t);\n\t\t} ).catch( function ( e ) {\n\t\t\tassert.notOk( e.stack );\n\t\t} ).then( done );\n\t} );\n\n\tQUnit.test( 'Given a value, creates StatementGroupListView with Form id prefix', function ( assert ) {\n\t\tvar formId = 'L1-F123',\n\t\t\tform = newForm( formId, 'potatoes' ),\n\t\t\tstatementGroupListViewSpy = sinon.spy();\n\n\t\tnewFormView( {\n\t\t\tvalue: form,\n\t\t\tbuildStatementGroupListView: statementGroupListViewSpy\n\t\t} );\n\n\t\tassert.ok( statementGroupListViewSpy.calledWith(\n\t\t\tform,\n\t\t\tsinon.match.any,\n\t\t\t'F123'\n\t\t) );\n\t} );\n\n\tQUnit.test( 'Given a new form, creates StatementGroupListView with empty prefix', function ( assert ) {\n\t\tvar form = new wb.lexeme.datamodel.Form(), // i.e. default 'undefined' id\n\t\t\tstatementGroupListViewSpy = sinon.spy();\n\n\t\tnewFormView( {\n\t\t\tvalue: form,\n\t\t\tbuildStatementGroupListView: statementGroupListViewSpy\n\t\t} );\n\n\t\tassert.ok( statementGroupListViewSpy.calledWith(\n\t\t\tform,\n\t\t\tsinon.match.any,\n\t\t\t''\n\t\t) );\n\t} );\n\n\tQUnit.test( 'sets id after form save', function ( assert ) {\n\t\tvar emptyForm = new wikibase.lexeme.datamodel.Form(\n\t\t\t\t'',\n\t\t\t\tnew TermMap()\n\t\t\t),\n\t\t\tstatementGroupListViewSpy = sinon.spy(),\n\t\t\tview = newFormView( {\n\t\t\t\tvalue: emptyForm,\n\t\t\t\tbuildStatementGroupListView: statementGroupListViewSpy\n\t\t\t} ),\n\t\t\tdone = assert.async();\n\n\t\tview.deferredFormWithId.resolve( newForm( 'L321-F123', 'meow' ) );\n\n\t\tview.deferredFormWithId.promise().then( function () {\n\t\t\tassert.equal(\n\t\t\t\tview.element.attr( 'id' ),\n\t\t\t\t'F123'\n\t\t\t);\n\t\t\tassert.ok( statementGroupListViewSpy.calledWith(\n\t\t\t\tsinon.match.any,\n\t\t\t\tsinon.match.any,\n\t\t\t\t'F123'\n\t\t\t) );\n\t\t\tdone();\n\t\t} );\n\t} );\n\n\tQUnit.test( 'form inputs should have connected labels', function ( assert ) {\n\t\tvar done = assert.async(),\n\t\t\tform1 = newForm( 'F123', 'foo' ),\n\t\t\tview = newFormView( { value: form1 } );\n\n\t\tview.startEditing().then( function () {\n\t\t\tvar languageId = view.element.find( selector.representationLanguageInput )[ 0 ].id;\n\t\t\tvar languageLabelsFound = ( view.element.find( 'label[for=' + languageId + ']' ) );\n\n\t\t\tvar textId = view.element.find( selector.representationTextInput )[ 0 ].id;\n\t\t\tvar textLabelsFound = ( view.element.find( 'label[for=' + textId + ']' ) );\n\n\t\t\tassert.ok( languageLabelsFound.length, 1 );\n\t\t\tassert.ok( textLabelsFound.length, 1 );\n\t\t} ).catch( function ( e ) {\n\t\t\tassert.notOk( e.stack );\n\t\t} ).then( done );\n\t} );\n\n\t/**\n\t * Sets input value and triggers 'input'\n\t *\n\t * @param {jQuery} $element\n\t * @param {string} newValue\n\t */\n\tfunction changeInputValue( $element, newValue ) {\n\t\t$element.val( newValue );\n\t\tvar event = document.createEvent( 'Event' );\n\t\tevent.initEvent( 'input', true, true );\n\t\t$element[ 0 ].dispatchEvent( event );\n\t}\n\n}( require, wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/jquery.wikibase.senselistview.tests.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wb\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":41,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":41,"endColumn":56},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":47,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":47,"endColumn":43},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":51,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":51,"endColumn":46},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":64,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":64,"endColumn":89}],"suppressedMessages":[],"errorCount":4,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param wb\n * @license GPL-2.0-or-later\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar senseviewListItemAdapter = wb.tests.getMockListItemAdapter(\n\t\t'senseview',\n\t\tfunction () {\n\t\t}\n\t);\n\n\tvar createViewElement = function ( messageStub ) {\n\t\tvar $node = $( '<div><div class=\"wikibase-lexeme-senses\"/></div>' );\n\t\treturn $node.senselistview( {\n\t\t\tgetListItemAdapter: function () {\n\t\t\t\treturn senseviewListItemAdapter;\n\t\t\t},\n\t\t\tgetAdder: function ( add, $dom, label, title ) {\n\t\t\t\tvar options = { label: label, title: title };\n\t\t\t\treturn new wb.view.ToolbarFactory().getAddToolbar( options, $dom );\n\t\t\t},\n\t\t\tgetMessage: messageStub || function () {}\n\t\t} );\n\t};\n\n\tvar getViewFromElement = function ( $view ) {\n\t\treturn $view.data( 'senselistview' );\n\t};\n\n\tvar newView = function () {\n\t\treturn getViewFromElement( createViewElement() );\n\t};\n\n\tQUnit.module( 'jquery.wikibase.senselistview' );\n\n\tQUnit.test( 'Can be created', function ( assert ) {\n\t\tvar view = newView();\n\n\t\tassert.ok( view instanceof $.wikibase.senselistview );\n\t} );\n\n\tQUnit.test( 'Can be destroyed', function ( assert ) {\n\t\tvar $view = createViewElement();\n\n\t\tassert.ok( getViewFromElement( $view ) );\n\n\t\t$view.data( 'senselistview' ).destroy();\n\n\t\tassert.notOk( getViewFromElement( $view ) );\n\t} );\n\n\tQUnit.test( 'includes a button to \"add sense\"', function ( assert ) {\n\t\tvar translatedMessage = 'adde the lexeme!';\n\t\tvar messageStub = function ( key ) {\n\t\t\tif ( key === 'wikibaselexeme-add-sense' ) {\n\t\t\t\treturn translatedMessage;\n\t\t\t}\n\t\t};\n\n\t\tvar $view = createViewElement( messageStub );\n\n\t\tassert.equal( $view.find( '.wikibase-toolbar-button-add' ).text(), translatedMessage );\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/jquery.wikibase.senseview.tests.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wb\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":42,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":42,"endColumn":80},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":49,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":49,"endColumn":38},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":58,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":58,"endColumn":39},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":71,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":75,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":87,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":91,"endColumn":6},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":106,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":109,"endColumn":5},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":110,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":114,"endColumn":7}],"suppressedMessages":[{"ruleId":"mediawiki/class-doc","severity":2,"message":"All possible CSS classes should be documented. See https://w.wiki/PS2 for details.","line":26,"column":3,"nodeType":"CallExpression","endLine":26,"endColumn":45,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":7,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param wb\n * @license GPL-2.0-or-later\n */\n( function ( wb ) {\n\t'use strict';\n\n\tvar TEST_LEXMEFORMVIEW_CLASS = 'test_senseview';\n\tvar datamodel = require( 'wikibase.datamodel' );\n\t/** @type {wikibase.datamodel.TermMap} */\n\tvar TermMap = datamodel.TermMap;\n\t/** @type {wikibase.datamodel.Term} */\n\tvar Term = datamodel.Term;\n\n\tQUnit.module( 'jquery.wikibase.senseview', QUnit.newMwEnvironment( {\n\t\tafterEach: function () {\n\t\t\t$( '.' + TEST_LEXMEFORMVIEW_CLASS ).remove();\n\t\t}\n\t} ) );\n\n\tvar newSenseView = function ( options ) {\n\t\tvar $node = $( '<div>' ).appendTo( 'body' );\n\t\toptions = options || {};\n\n\t\t// eslint-disable-next-line mediawiki/class-doc\n\t\t$node.addClass( TEST_LEXMEFORMVIEW_CLASS );\n\n\t\toptions.buildStatementGroupListView = options.buildStatementGroupListView || function () {};\n\n\t\treturn $node.senseview( options || {} ).data( 'senseview' );\n\t};\n\n\tvar newSense = function ( id, enGloss ) {\n\t\tvar glosses = new TermMap( { en: new Term( 'en', enGloss ) } );\n\n\t\treturn new wb.lexeme.datamodel.Sense( id, glosses );\n\t};\n\n\tQUnit.test( 'can be created', function ( assert ) {\n\t\tvar sense = newSense( 'S123', 'foo' );\n\n\t\tassert.ok( newSenseView( { value: sense } ) instanceof $.wikibase.senseview );\n\t} );\n\n\tQUnit.test( 'value can be injected as option.value', function ( assert ) {\n\t\tvar sense = newSense( 'S123', 'foo' ),\n\t\t\tview = newSenseView( { value: sense } );\n\n\t\tassert.equal( view.value(), sense );\n\t} );\n\n\tQUnit.test( 'value() sets internal value', function ( assert ) {\n\t\tvar sense1 = newSense( 'S123', 'foo' ),\n\t\t\tsense2 = newSense( 'S234', 'bar' ),\n\t\t\tview = newSenseView( { value: sense1 } );\n\n\t\tview.value( sense2 );\n\t\tassert.equal( view.value(), sense2 );\n\t} );\n\n\tQUnit.test( 'Given a value, creates StatementGroupListView with Sense id prefix', function ( assert ) {\n\t\tvar senseId = 'L1-S123',\n\t\t\tsense = newSense( senseId, 'potatoes' ),\n\t\t\tstatementGroupListViewSpy = sinon.spy();\n\n\t\tnewSenseView( {\n\t\t\tvalue: sense,\n\t\t\tbuildStatementGroupListView: statementGroupListViewSpy\n\t\t} );\n\n\t\tassert.ok( statementGroupListViewSpy.calledWith(\n\t\t\tsense,\n\t\t\tsinon.match.any,\n\t\t\t'S123'\n\t\t) );\n\t} );\n\n\tQUnit.test( 'Given a new sense, creates StatementGroupListView with empty prefix', function ( assert ) {\n\t\tvar sense = new wb.lexeme.datamodel.Sense(), // i.e. default 'undefined' id\n\t\t\tstatementGroupListViewSpy = sinon.spy();\n\n\t\tnewSenseView( {\n\t\t\tvalue: sense,\n\t\t\tbuildStatementGroupListView: statementGroupListViewSpy\n\t\t} );\n\n\t\tassert.ok( statementGroupListViewSpy.calledWith(\n\t\t\tsense,\n\t\t\tsinon.match.any,\n\t\t\t''\n\t\t) );\n\t} );\n\n\tQUnit.test( 'sets id after saving sense', function ( assert ) {\n\t\tvar emptySense = new wikibase.lexeme.datamodel.Sense( '' ),\n\t\t\tstatementGroupListViewSpy = sinon.spy(),\n\t\t\tview = newSenseView( {\n\t\t\t\tvalue: emptySense,\n\t\t\t\tbuildStatementGroupListView: statementGroupListViewSpy\n\t\t\t} ),\n\t\t\tdone = assert.async();\n\n\t\tview.deferredSenseWithId.resolve( newSense( 'L321-S123', 'meow' ) );\n\n\t\tview.deferredSenseWithId.promise().then( function () {\n\t\t\tassert.equal(\n\t\t\t\tview.element.attr( 'id' ),\n\t\t\t\t'S123'\n\t\t\t);\n\t\t\tassert.ok( statementGroupListViewSpy.calledWith(\n\t\t\t\tsinon.match.any,\n\t\t\t\tsinon.match.any,\n\t\t\t\t'S123'\n\t\t\t) );\n\t\t\tdone();\n\t\t} );\n\t} );\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/serialization/FormSerializer.tests.js","messages":[{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":81,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":81,"endColumn":44}],"suppressedMessages":[{"ruleId":"no-jquery/no-each-util","severity":2,"message":"Prefer Array#forEach to $.each","line":78,"column":2,"nodeType":"CallExpression","endLine":85,"endColumn":5,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n * @author Jonas Kress\n */\n( function () {\n\t'use strict';\n\n\tQUnit.module( 'wikibase.lexeme.serialization.FormSerializer' );\n\n\tvar Form = wikibase.lexeme.datamodel.Form,\n\t\tdatamodel = require( 'wikibase.datamodel' ),\n\t\tTermMap = datamodel.TermMap,\n\t\tTerm = datamodel.Term,\n\t\tSerializer = require( '../../../resources/serialization/FormSerializer.js' ),\n\t\ttestCases = {\n\t\t\t'Empty Form': {\n\t\t\t\tform: new Form(),\n\t\t\t\texpected: { id: undefined, representations: {}, grammaticalFeatures: [] } },\n\t\t\t'Form with ID': {\n\t\t\t\tform: new Form( '[ID]' ),\n\t\t\t\texpected: { id: '[ID]', representations: {}, grammaticalFeatures: [] } },\n\t\t\t'Form with representations': {\n\t\t\t\tform: new Form(\n\t\t\t\t\tnull,\n\t\t\t\t\tnew TermMap( {\n\t\t\t\t\t\t'[LANG1]': new Term( '[LANG1]', '[TEXT1]' ),\n\t\t\t\t\t\t'[LANG2]': new Term( '[LANG2]', '[TEXT2]' ),\n\t\t\t\t\t\t'[LANG3]': new Term( '[LANG3]', '[TEXT3]' )\n\t\t\t\t\t} ) ),\n\t\t\t\texpected: {\n\t\t\t\t\tid: null,\n\t\t\t\t\trepresentations: {\n\t\t\t\t\t\t'[LANG1]': { language: '[LANG1]', value: '[TEXT1]' },\n\t\t\t\t\t\t'[LANG2]': { language: '[LANG2]', value: '[TEXT2]' },\n\t\t\t\t\t\t'[LANG3]': { language: '[LANG3]', value: '[TEXT3]' }\n\t\t\t\t\t},\n\t\t\t\t\tgrammaticalFeatures: []\n\t\t\t\t}\n\t\t\t},\n\t\t\t'Form with grammatical features': {\n\t\t\t\tform: new Form( null, null, [ '[FEATURE1]', '[FEATURE2]', '[FEATURE3]' ] ),\n\t\t\t\texpected: { id: null, representations: {}, grammaticalFeatures: [ '[FEATURE1]', '[FEATURE2]', '[FEATURE3]' ] }\n\t\t\t},\n\t\t\t'Form with ID, representation, grammatical feature': {\n\t\t\t\tform: new Form( '[ID]', new TermMap( { '[LANG]': new Term( '[LANG]', '[TEXT]' ) } ), '[FEATURE]' ),\n\t\t\t\texpected: { id: '[ID]', representations: { '[LANG]': { language: '[LANG]', value: '[TEXT]' } }, grammaticalFeatures: '[FEATURE]' }\n\t\t\t}\n\t\t};\n\n\tfunction serialize( data ) {\n\t\tvar s = new Serializer();\n\t\treturn s.serialize( data );\n\t}\n\n\tQUnit.test( 'Serializing null', function ( assert ) {\n\t\tassert.throws(\n\t\t\tfunction () {\n\t\t\t\tserialize( null );\n\t\t\t},\n\t\t\tnew Error( 'Not an instance of wikibase.lexeme.datamodel.Form' ),\n\t\t\t'Should throw an errror'\n\t\t);\n\n\t} );\n\n\tQUnit.test( 'Serializing empty object', function ( assert ) {\n\t\tassert.throws(\n\t\t\tfunction () {\n\t\t\t\tserialize( {} );\n\t\t\t},\n\t\t\tnew Error( 'Not an instance of wikibase.lexeme.datamodel.Form' ),\n\t\t\t'Should throw an errror'\n\t\t);\n\n\t} );\n\n\t// eslint-disable-next-line no-jquery/no-each-util\n\t$.each( testCases, function ( testCase, data ) {\n\t\tQUnit.test( 'Serializing  \"' + testCase + '\" form object', function ( assert ) {\n\t\t\tvar s = serialize( data.form );\n\t\t\tassert.ok( 'Should no throw an errror' );\n\t\t\tassert.deepEqual( s, data.expected, 'Should equal \"' + testCase + '\"' );\n\t\t} );\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/serialization/LexemeDeserializer.tests.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"wb\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":64,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":64,"endColumn":60},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":65,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":65,"endColumn":64},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":95,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":95,"endColumn":81},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":98,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":101,"endColumn":4},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":102,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":102,"endColumn":74},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":103,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":111,"endColumn":4},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":117,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":120,"endColumn":4},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":142,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":142,"endColumn":82},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":168,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":168,"endColumn":83},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":171,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":174,"endColumn":4},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":175,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":175,"endColumn":79},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":176,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":184,"endColumn":4},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":185,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":188,"endColumn":4},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":210,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":210,"endColumn":84}],"suppressedMessages":[],"errorCount":14,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param wb\n * @license GPL-2.0-or-later\n * @author Jonas Kress\n */\n( function ( wb ) {\n\t'use strict';\n\n\tQUnit.module( 'wikibase.lexeme.serialization.LexemeDeserializer' );\n\n\tvar datamodel = require( 'wikibase.datamodel' ),\n\t\tTermMap = datamodel.TermMap,\n\t\tTerm = datamodel.Term,\n\t\tLexemeDeserializer = require( '../../../resources/serialization/LexemeDeserializer.js' ),\n\t\tLexeme = require( '../../../resources/datamodel/Lexeme.js' );\n\n\tvar claimsSerialization = {\n\t\tP1: [\n\t\t\t{\n\t\t\t\tid: 'L1$1',\n\t\t\t\tmainsnak: {\n\t\t\t\t\tsnaktype: 'novalue',\n\t\t\t\t\tproperty: 'P1'\n\t\t\t\t},\n\t\t\t\ttype: 'statement',\n\t\t\t\trank: 'normal'\n\t\t\t}\n\t\t]\n\t};\n\tvar serialization = {\n\t\ttype: 'lexeme',\n\t\tid: 'L1',\n\t\tlemmas: {\n\t\t\tde: {\n\t\t\t\tlanguage: 'de',\n\t\t\t\tvalue: 'blah'\n\t\t\t}\n\t\t},\n\t\tlexicalCategory: 'Q2',\n\t\tlanguage: 'Q2',\n\t\tclaims: claimsSerialization,\n\t\tforms: [],\n\t\tsenses: []\n\t};\n\n\tvar expectedStatementGroupSet = new datamodel.StatementGroupSet( [\n\t\tnew datamodel.StatementGroup( 'P1', new datamodel.StatementList( [\n\t\t\tnew datamodel.Statement( new datamodel.Claim(\n\t\t\t\tnew datamodel.PropertyNoValueSnak( 'P1' ), null, 'L1$1' ) )\n\t\t] ) )\n\t] );\n\tvar expectedDataModel = new Lexeme(\n\t\t'L1',\n\t\tnew datamodel.TermMap( { de: new datamodel.Term( 'de', 'blah' ) } ),\n\t\texpectedStatementGroupSet,\n\t\t[],\n\t\t[]\n\t);\n\n\tQUnit.test( 'deserialize()', function ( assert ) {\n\t\tvar ds = new LexemeDeserializer(),\n\t\t\tlexeme = ds.deserialize( serialization );\n\n\t\tassert.equal( lexeme.getId(), expectedDataModel.getId() );\n\t\tassert.equal( lexeme.getType(), expectedDataModel.getType() );\n\t\tassert.deepEqual( lexeme.getLemmas(), expectedDataModel.getLemmas() );\n\t\tassert.deepEqual( lexeme.getStatements(), expectedDataModel.getStatements() );\n\t\tassert.deepEqual( lexeme.getForms(), expectedDataModel.getForms() );\n\t\tassert.deepEqual( lexeme.getSenses(), expectedDataModel.getSenses() );\n\t} );\n\n\tQUnit.test( 'deserialize() deserializes forms', function ( assert ) {\n\t\tvar ds = new LexemeDeserializer();\n\n\t\tvar result = ds.deserialize( {\n\t\t\ttype: 'lexeme',\n\t\t\tid: 'L1',\n\t\t\tlemmas: {\n\t\t\t\tde: {\n\t\t\t\t\tlanguage: 'de',\n\t\t\t\t\tvalue: 'foo'\n\t\t\t\t}\n\t\t\t},\n\t\t\tlexicalCategory: 'Q2',\n\t\t\tlanguage: 'Q1',\n\t\t\tforms: [ {\n\t\t\t\tid: 'F1',\n\t\t\t\trepresentations: { en: { language: 'en', value: 'some representation' } },\n\t\t\t\tgrammaticalFeatures: [ 'Q1' ],\n\t\t\t\tclaims: claimsSerialization\n\t\t\t} ],\n\t\t\tsenses: []\n\t\t} );\n\n\t\tassert.ok( result.getForms(), 'Deserialized data model should contain forms' );\n\n\t\tvar form = result.getForms()[ 0 ];\n\t\tassert.ok(\n\t\t\tform instanceof wb.lexeme.datamodel.Form,\n\t\t\t'Data model should contain instance of Form'\n\t\t);\n\t\tassert.equal( form.getId(), 'F1', 'Data model should contain form id' );\n\t\tassert.ok(\n\t\t\tform.getRepresentations().equals( new TermMap( {\n\t\t\t\ten: new Term(\n\t\t\t\t\t'en',\n\t\t\t\t\t'some representation'\n\t\t\t\t)\n\t\t\t} ) ),\n\t\t\t'Data model should contain form representation'\n\t\t);\n\t\tassert.deepEqual(\n\t\t\tform.getGrammaticalFeatures(),\n\t\t\t[ 'Q1' ],\n\t\t\t'Data model should contain form grammatical features'\n\t\t);\n\t\tassert.ok(\n\t\t\tform.getStatements().equals( expectedStatementGroupSet ),\n\t\t\t'Data model should have statements on form'\n\t\t);\n\t} );\n\n\tQUnit.test(\n\t\t'deserialize() deserializes forms when `forms` key is not present',\n\t\tfunction ( assert ) {\n\t\t\tvar ds = new LexemeDeserializer();\n\n\t\t\tvar result = ds.deserialize( {\n\t\t\t\ttype: 'lexeme',\n\t\t\t\tid: 'L1',\n\t\t\t\tlemmas: {\n\t\t\t\t\tde: {\n\t\t\t\t\t\tlanguage: 'de',\n\t\t\t\t\t\tvalue: 'foo'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlexicalCategory: 'Q2',\n\t\t\t\tlanguage: 'Q1',\n\t\t\t\tsenses: []\n\t\t\t} );\n\n\t\t\tassert.ok( result.getForms(), 'Deserialized data model should contain forms' );\n\t\t}\n\t);\n\n\tQUnit.test( 'deserialize() deserializes senses', function ( assert ) {\n\t\tvar ds = new LexemeDeserializer();\n\n\t\tvar result = ds.deserialize( {\n\t\t\ttype: 'lexeme',\n\t\t\tid: 'L1',\n\t\t\tlemmas: {\n\t\t\t\tde: {\n\t\t\t\t\tlanguage: 'de',\n\t\t\t\t\tvalue: 'foo'\n\t\t\t\t}\n\t\t\t},\n\t\t\tlexicalCategory: 'Q2',\n\t\t\tlanguage: 'Q1',\n\t\t\tforms: [],\n\t\t\tsenses: [ {\n\t\t\t\tid: 'L1-S1',\n\t\t\t\tglosses: { en: { language: 'en', value: 'Some English gloss' } },\n\t\t\t\tclaims: claimsSerialization\n\t\t\t} ]\n\t\t} );\n\n\t\tassert.ok( result.getSenses(), 'Deserialized data model should contain senses' );\n\n\t\tvar sense = result.getSenses()[ 0 ];\n\t\tassert.ok(\n\t\t\tsense instanceof wb.lexeme.datamodel.Sense,\n\t\t\t'Data model should contain instance of Sense'\n\t\t);\n\t\tassert.equal( sense.getId(), 'L1-S1', 'Data model should contain sense id' );\n\t\tassert.ok(\n\t\t\tsense.getGlosses().equals( new TermMap( {\n\t\t\t\ten: new Term(\n\t\t\t\t\t'en',\n\t\t\t\t\t'Some English gloss'\n\t\t\t\t)\n\t\t\t} ) ),\n\t\t\t'Data model should contain sense glosses'\n\t\t);\n\t\tassert.ok(\n\t\t\tsense.getStatements().equals( expectedStatementGroupSet ),\n\t\t\t'Data model should have statements on sense'\n\t\t);\n\t} );\n\n\tQUnit.test(\n\t\t'deserialize() deserializes senses when `senses` key is not present',\n\t\tfunction ( assert ) {\n\t\t\tvar ds = new LexemeDeserializer();\n\n\t\t\tvar result = ds.deserialize( {\n\t\t\t\ttype: 'lexeme',\n\t\t\t\tid: 'L1',\n\t\t\t\tlemmas: {\n\t\t\t\t\tde: {\n\t\t\t\t\t\tlanguage: 'de',\n\t\t\t\t\t\tvalue: 'foo'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlexicalCategory: 'Q2',\n\t\t\t\tlanguage: 'Q1',\n\t\t\t\tforms: []\n\t\t\t} );\n\n\t\t\tassert.ok( result.getSenses(), 'Deserialized data model should contain senses' );\n\t\t}\n\t);\n\n}( wikibase ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/serialization/SenseSerializer.tests.js","messages":[{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":71,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":71,"endColumn":44}],"suppressedMessages":[{"ruleId":"no-jquery/no-each-util","severity":2,"message":"Prefer Array#forEach to $.each","line":68,"column":2,"nodeType":"CallExpression","endLine":75,"endColumn":5,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @license GPL-2.0-or-later\n */\n( function () {\n\t'use strict';\n\n\tQUnit.module( 'wikibase.lexeme.serialization.SenseSerializer' );\n\n\tvar Sense = wikibase.lexeme.datamodel.Sense,\n\t\tdatamodel = require( 'wikibase.datamodel' ),\n\t\tTermMap = datamodel.TermMap,\n\t\tTerm = datamodel.Term,\n\t\tSerializer = require( '../../../resources/serialization/SenseSerializer.js' ),\n\t\ttestCases = {\n\t\t\t'Empty Sense': {\n\t\t\t\tsense: new Sense(),\n\t\t\t\texpected: { id: undefined, glosses: {} } },\n\t\t\t'Sense with ID': {\n\t\t\t\tsense: new Sense( '[ID]' ),\n\t\t\t\texpected: { id: '[ID]', glosses: {} } },\n\t\t\t'Sense with glosses': {\n\t\t\t\tsense: new Sense(\n\t\t\t\t\tnull,\n\t\t\t\t\tnew TermMap( {\n\t\t\t\t\t\t'[LANG1]': new Term( '[LANG1]', '[TEXT1]' ),\n\t\t\t\t\t\t'[LANG2]': new Term( '[LANG2]', '[TEXT2]' ),\n\t\t\t\t\t\t'[LANG3]': new Term( '[LANG3]', '[TEXT3]' )\n\t\t\t\t\t} ) ),\n\t\t\t\texpected: {\n\t\t\t\t\tid: null,\n\t\t\t\t\tglosses: {\n\t\t\t\t\t\t'[LANG1]': { language: '[LANG1]', value: '[TEXT1]' },\n\t\t\t\t\t\t'[LANG2]': { language: '[LANG2]', value: '[TEXT2]' },\n\t\t\t\t\t\t'[LANG3]': { language: '[LANG3]', value: '[TEXT3]' }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\tfunction serialize( data ) {\n\t\tvar s = new Serializer();\n\t\treturn s.serialize( data );\n\t}\n\n\tQUnit.test( 'Serializing null', function ( assert ) {\n\t\tassert.throws(\n\t\t\tfunction () {\n\t\t\t\tserialize( null );\n\t\t\t},\n\t\t\tnew Error( 'Not an instance of wikibase.lexeme.datamodel.Sense' ),\n\t\t\t'Should throw an errror'\n\t\t);\n\n\t} );\n\n\tQUnit.test( 'Serializing empty object', function ( assert ) {\n\t\tassert.throws(\n\t\t\tfunction () {\n\t\t\t\tserialize( {} );\n\t\t\t},\n\t\t\tnew Error( 'Not an instance of wikibase.lexeme.datamodel.Sense' ),\n\t\t\t'Should throw an errror'\n\t\t);\n\n\t} );\n\n\t// eslint-disable-next-line no-jquery/no-each-util\n\t$.each( testCases, function ( testCase, data ) {\n\t\tQUnit.test( 'Serializing  \"' + testCase + '\" sense object', function ( assert ) {\n\t\t\tvar s = serialize( data.sense );\n\t\t\tassert.ok( 'Should no throw an errror' );\n\t\t\tassert.deepEqual( s, data.expected, 'Should equal \"' + testCase + '\"' );\n\t\t} );\n\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/view/ControllerViewFactory.tests.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/view/ViewFactoryFactory.tests.js","messages":[{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":32,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":32,"endColumn":55},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":41,"column":3,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":41,"endColumn":41}],"suppressedMessages":[],"errorCount":2,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"( function () {\n\t'use strict';\n\n\tvar ViewFactoryFactory = require( '../../../resources/view/ViewFactoryFactory.js' ),\n\t\tControllerViewFactory = require( '../../../resources/view/ControllerViewFactory.js' );\n\tfunction getFactoryArgs() {\n\t\treturn [\n\t\t\tsinon.stub(),\n\t\t\t{ getRevisionStore: sinon.stub(), getEntity: sinon.stub() },\n\t\t\t{ getAdder: sinon.stub() },\n\t\t\tsinon.stub(),\n\t\t\tsinon.stub(),\n\t\t\tsinon.stub(),\n\t\t\tsinon.stub(),\n\t\t\tsinon.stub(),\n\t\t\tsinon.stub(),\n\t\t\tsinon.stub(),\n\t\t\t{ getMessage: sinon.stub() },\n\t\t\tsinon.stub(),\n\t\t\t[],\n\t\t\t'http://some-uri',\n\t\t\t'http://commons/api.php'\n\t\t];\n\t}\n\n\tQUnit.module( 'wikibase.lexeme.ViewFactoryFactory' );\n\n\tQUnit.test( 'returns ControllerViewFactory when editable', function ( assert ) {\n\t\tvar factory = new ViewFactoryFactory(),\n\t\t\tresult = factory.getViewFactory( true, getFactoryArgs() );\n\n\t\tassert.ok( result instanceof ControllerViewFactory );\n\t} );\n\n\tQUnit.test( 'returns ReadModeViewFactory when not editable', function ( assert ) {\n\t\tvar factory = new ViewFactoryFactory(),\n\t\t\tresult = factory.getViewFactory( false, getFactoryArgs() );\n\n\t\t// instanceof check across package module doesn't work\n\t\t// assert.ok( result instanceof ReadModeViewFactory );\n\t\tassert.notOk( result.getFormListView );\n\t} );\n\n}() );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/qunit/widgets/GrammaticalFeatureListWidget.tests.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"QUnit\" type.","line":2,"column":null,"nodeType":"Block","endLine":2,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"require\" type.","line":3,"column":null,"nodeType":"Block","endLine":3,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"sinon\" type.","line":4,"column":null,"nodeType":"Block","endLine":4,"endColumn":null},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":88,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":88,"endColumn":46},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":89,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":89,"endColumn":63},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":90,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":90,"endColumn":69},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":91,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":91,"endColumn":46},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":92,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":92,"endColumn":63},{"ruleId":"qunit/no-loose-assertions","severity":2,"message":"Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual.","line":93,"column":4,"nodeType":"CallExpression","messageId":"unexpectedLocalLooseAssertion","endLine":93,"endColumn":69}],"suppressedMessages":[],"errorCount":6,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * @param QUnit\n * @param require\n * @param sinon\n * @license GPL-2.0-or-later\n */\n( function ( QUnit, require, sinon ) {\n\t'use strict';\n\n\tvar INTERNAL_DEBOUNCE_TIMEOUT = 150;\n\n\tvar GrammaticalFeatureListWidget = require( '../../../resources/widgets/GrammaticalFeatureListWidget.js' );\n\n\tvar dummyLabelFormattingService = {\n\t\tgetHtml: function ( itemId ) {\n\t\t\treturn $.Deferred().resolve( itemId ).promise();\n\t\t}\n\t};\n\n\tQUnit.module( 'GrammaticalFeatureListWidget' );\n\n\tQUnit.test( 'throws an error if no api provided', function ( assert ) {\n\t\tassert.throws( function () {\n\t\t\tnew GrammaticalFeatureListWidget( { language: 'en' } );\n\t\t} );\n\t} );\n\n\tQUnit.test( 'throws an error if no formatting service provided', function ( assert ) {\n\t\tassert.throws( function () {\n\t\t\tnew GrammaticalFeatureListWidget( { language: 'en', api: {} } );\n\t\t} );\n\t} );\n\n\tQUnit.test( 'throws an error if no language provided', function ( assert ) {\n\t\tassert.throws( function () {\n\t\t\tnew GrammaticalFeatureListWidget( { api: {} } );\n\t\t} );\n\t} );\n\n\tQUnit.test( 'some string entered in the input - calls api with this string as search argument', function ( assert ) {\n\t\tvar done = assert.async();\n\t\tvar apiCallback = function () {\n\t\t\treturn $.Deferred().resolve( { search: [] } ).promise();\n\t\t};\n\t\tvar api = { get: sinon.spy( apiCallback ) };\n\t\tvar widget = new GrammaticalFeatureListWidget( { api: api, language: 'en', debounceInterval: 0, labelFormattingService: {} } );\n\n\t\twidget.input.setValue( 'some input value' );\n\n\t\tsetTimeout( function () {\n\t\t\tsinon.assert.calledWith(\n\t\t\t\tapi.get,\n\t\t\t\t{\n\t\t\t\t\taction: 'wbsearchentities',\n\t\t\t\t\tformat: 'json',\n\t\t\t\t\terrorformat: 'plaintext',\n\t\t\t\t\tlanguage: 'en',\n\t\t\t\t\tsearch: 'some input value',\n\t\t\t\t\ttype: 'item',\n\t\t\t\t\tuselang: 'en'\n\t\t\t\t}\n\t\t\t);\n\t\t\tdone();\n\t\t}, 0 );\n\t} );\n\n\tQUnit.test( 'api returns list of results - menu with these results is displayed', function ( assert ) {\n\t\tvar done = assert.async();\n\t\tvar api = {\n\t\t\tget: function () {\n\t\t\t\tvar results = [\n\t\t\t\t\t{ id: 'Q1', label: 'q1-label', description: 'q1-description' },\n\t\t\t\t\t{ id: 'Q2', label: 'q2-label', description: 'q2-description' }\n\t\t\t\t];\n\n\t\t\t\treturn $.Deferred().resolve( { search: results } ).promise();\n\t\t\t}\n\t\t};\n\n\t\tvar widget = new GrammaticalFeatureListWidget( { api: api, language: 'en', debounceInterval: 0, labelFormattingService: {} } );\n\n\t\twidget.input.setValue( 'anything' );\n\n\t\tsetTimeout( function () {\n\t\t\t/** @type {OO.ui.MenuOptionWidget[]} */\n\t\t\tvar items = widget.menu.getItems();\n\n\t\t\tassert.equal( items[ 0 ].getData(), 'Q1' );\n\t\t\tassert.ok( items[ 0 ].$element.text().match( 'q1-label' ) );\n\t\t\tassert.ok( items[ 0 ].$element.text().match( 'q1-description' ) );\n\t\t\tassert.equal( items[ 1 ].getData(), 'Q2' );\n\t\t\tassert.ok( items[ 1 ].$element.text().match( 'q2-label' ) );\n\t\t\tassert.ok( items[ 1 ].$element.text().match( 'q2-description' ) );\n\t\t\tdone();\n\t\t}, INTERNAL_DEBOUNCE_TIMEOUT );\n\t} );\n\n\tQUnit.skip( 'I select item in menu - the item is added to the widget', function ( assert ) {\n\t\tvar done = assert.async();\n\t\tvar api = {\n\t\t\tget: function () {\n\t\t\t\tvar results = [\n\t\t\t\t\t{ id: 'Q1', label: 'q1-label', description: 'q1-description' }\n\t\t\t\t];\n\n\t\t\t\treturn $.Deferred().resolve( { search: results } ).promise();\n\t\t\t}\n\t\t};\n\n\t\tvar widget = new GrammaticalFeatureListWidget( {\n\t\t\tapi: api,\n\t\t\tlabelFormattingService: dummyLabelFormattingService,\n\t\t\tlanguage: 'en',\n\t\t\tdebounceInterval: 0\n\t\t} );\n\n\t\twidget.input.setValue( 'anything' );\n\n\t\tsetTimeout( function () {\n\t\t\tvar item = widget.menu.getItems()[ 0 ];\n\t\t\twidget.menu.chooseItem( item );\n\n\t\t\tassert.equal( widget.getValue()[ 0 ], 'Q1' );\n\t\t\tdone();\n\t\t}, INTERNAL_DEBOUNCE_TIMEOUT );\n\t} );\n\n\tQUnit.test( 'I can preset selected values', function ( assert ) {\n\t\tvar widget = new GrammaticalFeatureListWidget( {\n\t\t\tapi: {},\n\t\t\tlabelFormattingService: {},\n\t\t\tlanguage: 'en',\n\t\t\tdebounceInterval: 0,\n\t\t\tselected: [ 'Q1' ],\n\t\t\toptions: [ { id: 'Q1' } ]\n\t\t} );\n\n\t\tassert.deepEqual( widget.getValue(), [ 'Q1' ] );\n\t} );\n\n\tQUnit.test( 'I can preset selected values with labels', function ( assert ) {\n\t\tvar widget = new GrammaticalFeatureListWidget( {\n\t\t\tapi: {},\n\t\t\tlabelFormattingService: dummyLabelFormattingService,\n\t\t\tlanguage: 'en',\n\t\t\tdebounceInterval: 0,\n\t\t\toptions: [ { id: 'Q1', label: 'Q1-label' } ],\n\t\t\tselected: [ 'Q1' ]\n\t\t} );\n\n\t\tassert.deepEqual( widget.getValue(), [ 'Q1' ] );\n\t} );\n\n}( QUnit, require, sinon ) );\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/tests/selenium/lexeme.api.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/history.page.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/lexeme.page.js","messages":[{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"input\" type.","line":236,"column":null,"nodeType":"Block","endLine":236,"endColumn":null},{"ruleId":"jsdoc/require-param-type","severity":1,"message":"Missing JSDoc @param \"value\" type.","line":237,"column":null,"nodeType":"Block","endLine":237,"endColumn":null},{"ruleId":"wdio/no-pause","severity":2,"message":"Unexpected browser.pause() not allowed","line":439,"column":3,"nodeType":"CallExpression","messageId":"unexpectedPause","endLine":439,"endColumn":24},{"ruleId":"wdio/no-pause","severity":2,"message":"Unexpected browser.pause() not allowed","line":441,"column":3,"nodeType":"CallExpression","messageId":"unexpectedPause","endLine":441,"endColumn":24},{"ruleId":"wdio/no-pause","severity":2,"message":"Unexpected browser.pause() not allowed","line":448,"column":3,"nodeType":"CallExpression","messageId":"unexpectedPause","endLine":448,"endColumn":24},{"ruleId":"wdio/no-pause","severity":2,"message":"Unexpected browser.pause() not allowed","line":450,"column":3,"nodeType":"CallExpression","messageId":"unexpectedPause","endLine":450,"endColumn":24}],"suppressedMessages":[],"errorCount":4,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst Page = require( 'wdio-mediawiki/Page' ),\n\t_ = require( 'lodash' ),\n\tMixinBuilder = require( 'wdio-wikibase/pagesections/mixinbuilder' ),\n\tMainStatementSection = require( 'wdio-wikibase/pagesections/main.statement.section' ),\n\tComponentInteraction = require( 'wdio-wikibase/pagesections/ComponentInteraction' );\n\nclass LexemePage extends MixinBuilder.mix( Page ).with( MainStatementSection, ComponentInteraction ) {\n\n\tstatic get LEMMA_WIDGET_SELECTORS() {\n\t\treturn {\n\t\t\tEDIT_BUTTON: '.lemma-widget_edit',\n\t\t\tSAVE_BUTTON: '.lemma-widget_save',\n\t\t\tADD_BUTTON: '.lemma-widget_add',\n\t\t\tEDIT_INPUT_VALUE: '.lemma-widget_lemma-value-input',\n\t\t\tEDIT_INPUT_LANGUAGE: '.lemma-widget_lemma-language-input',\n\t\t\tEDIT_INPUT_LEXEME_LANGUAGE: '#lexeme-language',\n\t\t\tEDIT_INPUT_LEXEME_LEXICAL_CATEGORY: '#lexeme-lexical-category'\n\t\t};\n\t}\n\n\tstatic get FORM_WIDGET_SELECTORS() {\n\t\treturn {\n\t\t\tREPRESENTATIONS: '.wikibase-lexeme-form-header .representation-widget .representation-widget_representation-list li',\n\t\t\tREPRESENTATION_VALUE: '.wikibase-lexeme-form-header .representation-widget_representation-value',\n\t\t\tREPRESENTATION_LANGUAGE: '.wikibase-lexeme-form-header .representation-widget_representation-language',\n\t\t\tEDIT_INPUT_VALUE: '.representation-widget_representation-value-input',\n\t\t\tEDIT_INPUT_LANGUAGE: '.representation-widget_representation-language-input',\n\t\t\tGRAMMATICAL_FEATURES: '.wikibase-lexeme-form-grammatical-features-values',\n\t\t\tADD_REPRESENTATION_BUTTON: '.representation-widget_add',\n\t\t\tADD_STATEMENT_TO_FORM: '.wikibase-statementgrouplistview .wikibase-toolbar-button-add a',\n\t\t\tREMOVE_REPRESENTATION_BUTTON: '.representation-widget_representation-remove',\n\t\t\tFORM_STATEMENT_LIST: '.wikibase-lexeme-form-body .wikibase-statementgrouplistview .wikibase-listview'\n\t\t};\n\t}\n\n\tstatic get GENERIC_TOOLBAR_SELECTORS() {\n\t\treturn {\n\t\t\tEDIT_BUTTON: '.wikibase-toolbar-button-edit',\n\t\t\tREMOVE_BUTTON: '.wikibase-toolbar-button-remove',\n\t\t\tSAVE_BUTTON: '.wikibase-toolbar-button-save',\n\t\t\tCANCEL_BUTTON: '.wikibase-toolbar-button-cancel'\n\t\t};\n\t}\n\n\tstatic get PERSONAL_BAR() {\n\t\treturn {\n\t\t\tUSER_NOT_LOGIN_ICON: '#pt-anonuserpage',\n\t\t\tUSER_TOOLBAR: '#p-personal'\n\t\t};\n\t}\n\n\tget lemmaContainer() {\n\t\treturn $( '.lemma-widget_lemma-list' );\n\t}\n\n\tget lemmas() {\n\t\treturn this.lemmaContainer.$$( '.lemma-widget_lemma-edit-box' );\n\t}\n\n\tget formsContainer() {\n\t\treturn $( '.wikibase-lexeme-forms' );\n\t}\n\n\tget forms() {\n\t\treturn this.formsContainer.$$( '.wikibase-lexeme-form' );\n\t}\n\n\tget formClaimValueInputField() {\n\t\treturn $( '.wikibase-listview #new .wikibase-snakview-value-container .valueview-value .valueview-input' );\n\t}\n\n\tget viewHistoryLink() {\n\t\treturn $( '#right-navigation #p-views #ca-history a' );\n\t}\n\n\tget restoreRevisionLink() {\n\t\treturn $( 'a[href*=restore]' ); // This link doesn't have any css identifier\n\t}\n\n\tget undoRevisionLink() {\n\t\treturn $( '#mw-content-text #pagehistory li .mw-history-undo a' );\n\t}\n\n\tget undoOrRestoreSavePageButton() {\n\t\treturn $( '#bodyContent #mw-content-text .editOptions .editButtons button' ); // submit undo on the Undoing edit page\n\t}\n\n\tget addFormCancelLink() {\n\t\treturn $( this.constructor.GENERIC_TOOLBAR_SELECTORS.CANCEL_BUTTON );\n\t}\n\n\tget headerId() {\n\t\treturn $( '.wb-lexeme-header_id' ).getText().replace( /[^L0-9]/g, '' ); // remove non-marked-up styling text \"(L123)\"\n\t}\n\n\tget formId() {\n\t\treturn $( '.wikibase-lexeme-form-header > .wikibase-lexeme-form-id' );\n\t}\n\n\tget hasFormHeader() {\n\t\treturn $( '.wikibase-lexeme-forms-section h2#forms' ).isExisting();\n\t}\n\n\tget addFormLink() {\n\t\treturn $( '.wikibase-lexeme-forms-section > .wikibase-addtoolbar .wikibase-toolbar-button-add a' );\n\t}\n\n\tget hasGramaticalFeatureList() {\n\t\treturn $( this.constructor.FORM_WIDGET_SELECTORS.GRAMMATICAL_FEATURES ).isExisting();\n\t}\n\n\tget hasRepresentation() {\n\t\treturn $( '.wikibase-lexeme-form-header .representation-widget' ).isExisting();\n\t}\n\n\tget formStatementList() {\n\t\treturn $( this.constructor.FORM_WIDGET_SELECTORS.FORM_STATEMENT_LIST );\n\t}\n\n\tget headerSaveButton() {\n\t\treturn $( this.constructor.LEMMA_WIDGET_SELECTORS.SAVE_BUTTON );\n\t}\n\n\tget lexemeLanguageInput() {\n\t\treturn $( this.constructor.LEMMA_WIDGET_SELECTORS.EDIT_INPUT_LEXEME_LANGUAGE );\n\t}\n\n\tget lexemeLexicalCategoryInput() {\n\t\treturn $( this.constructor.LEMMA_WIDGET_SELECTORS.EDIT_INPUT_LEXEME_LEXICAL_CATEGORY );\n\t}\n\n\t/**\n\t * Open the given Lexeme page\n\t *\n\t * @param {string} lexemeId\n\t */\n\topen( lexemeId ) {\n\t\tconst title = 'Lexeme:' + lexemeId;\n\t\tsuper.openTitle( title );\n\t\ttry {\n\t\t\t$( this.constructor.LEMMA_WIDGET_SELECTORS.EDIT_BUTTON ).waitForDisplayed( { timeout: browser.config.nonApiTimeout } );\n\t\t} catch ( e ) {\n\t\t\t// reload and try again once, in case the lexeme is new\n\t\t\t// and the first load hit a lagged replica (T232364)\n\t\t\tsuper.openTitle( title );\n\t\t\t$( this.constructor.LEMMA_WIDGET_SELECTORS.EDIT_BUTTON ).waitForDisplayed( { timeout: browser.config.nonApiTimeout } );\n\t\t}\n\t\tthis.addFormLink.waitForDisplayed( { timeout: browser.config.nonApiTimeout } ); // last button on page, probably the last\n\t}\n\n\t/**\n\t * @param {string} lemmaText\n\t * @param {string} languageCode\n\t */\n\tsetFirstLemma( lemmaText, languageCode ) {\n\t\tthis.startHeaderEditMode();\n\n\t\tthis.fillNthLemma( 0, lemmaText, languageCode );\n\n\t\tthis.headerSaveButton.click();\n\t\tthis.headerSaveButton.waitForExist( { reverse: true } );\n\t}\n\n\tstartHeaderEditMode() {\n\t\t$( this.constructor.LEMMA_WIDGET_SELECTORS.EDIT_BUTTON ).click();\n\t\tbrowser.waitUntil( () => {\n\t\t\treturn this.lexemeLanguageInput.getValue();\n\t\t} );\n\t}\n\n\tfillNthLemma( position, lemmaText, languageCode ) {\n\t\tfor ( let i = this.lemmas.length; i <= position; i++ ) {\n\t\t\tconst addButton = $( this.constructor.LEMMA_WIDGET_SELECTORS.ADD_BUTTON );\n\t\t\taddButton.waitForClickable( { timeout: browser.config.nonApiTimeout } );\n\t\t\taddButton.click();\n\t\t}\n\n\t\tconst lemma = this.lemmas[ position ];\n\t\tlemma.$( this.constructor.LEMMA_WIDGET_SELECTORS.EDIT_INPUT_VALUE ).setValue( lemmaText );\n\t\tlemma.$( this.constructor.LEMMA_WIDGET_SELECTORS.EDIT_INPUT_LANGUAGE ).setValue( languageCode );\n\t}\n\n\t/**\n\t * Set the language for the lexeme\n\t *\n\t * This will retry entering the id if it isn't found immeadietly, because cirrus and database replicas might be slow\n\t * to update.\n\t *\n\t * @param {string} item Item ID to enter into the field\n\t */\n\tsetLexemeLanguageItem( item ) {\n\t\tthis.lexemeLanguageInput.setValue( item );\n\t\tthis.selectFirstSuggestedEntityOnEntitySelector();\n\n\t\tbrowser.waitUntil( () => {\n\t\t\tif ( this.waitTillHeaderIsSaveableOrError() ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tthis.waitAndRetryInput( this.lexemeLanguageInput, item );\n\t\t\treturn false;\n\t\t} );\n\n\t\tthis.headerSaveButton.click();\n\t\tthis.headerSaveButton.waitForExist( { reverse: true } );\n\t}\n\n\t/**\n\t * Set the lexical category for the lexeme\n\t *\n\t * This will retry entering the id if it isn't found immeadietly, because cirrus and database replicas might be slow\n\t * to update.\n\t *\n\t * @param {string} item Item ID to enter into the field\n\t */\n\tsetLexicalCategoryItem( item ) {\n\t\tthis.lexemeLexicalCategoryInput.setValue( item );\n\t\tthis.selectFirstSuggestedEntityOnEntitySelector();\n\n\t\tbrowser.waitUntil( () => {\n\t\t\tif ( this.waitTillHeaderIsSaveableOrError() ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tthis.waitAndRetryInput( this.lexemeLexicalCategoryInput, item );\n\t\t\treturn false;\n\t\t} );\n\n\t\tthis.headerSaveButton.click();\n\t\tthis.headerSaveButton.waitForExist( { reverse: true } );\n\t}\n\n\t/**\n\t * Wait for a period of time and then enter a value into an input\n\t *\n\t * @param input the wdio input element into which to enter the value\n\t * @param value value to be entered into the element\n\t * @param {number} [timeoutMS] duration to wait in ms, default 1000 ms\n\t * @private\n\t */\n\twaitAndRetryInput( input, value, timeoutMS ) {\n\t\tbrowser.call( () =>\n\t\t\tnew Promise( ( resolve ) => {\n\t\t\t\tsetTimeout( resolve, timeoutMS || 1000 );\n\t\t\t} ).then( () => {\n\t\t\t\tinput.setValue( value );\n\t\t\t} )\n\t\t);\n\t}\n\n\t/**\n\t * Wait until the Lexeme header is saveable or there is an error message\n\t *\n\t * @return {boolean} true if saveable, false if there is an error message\n\t * @private\n\t */\n\twaitTillHeaderIsSaveableOrError() {\n\t\tlet isSaveable = false;\n\t\tbrowser.waitUntil( () => {\n\t\t\tif ( this.isHeaderSubmittable() ) {\n\t\t\t\tisSaveable = true;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst errorMsg = $( 'body > ul.ui-entityselector-list > .ui-entityselector-notfound' );\n\t\t\treturn errorMsg.isDisplayed();\n\t\t} );\n\t\treturn isSaveable;\n\t}\n\n\tisHeaderSubmittable() {\n\t\treturn this.headerSaveButton.isEnabled();\n\t}\n\n\t/**\n\t * Add a form\n\t *\n\t * @param {string} value\n\t * @param {string} language\n\t */\n\taddForm( value, language ) {\n\t\tbrowser.clickTillItExists(\n\t\t\tthis.addFormLink,\n\t\t\tthis.formsContainer.$( this.constructor.FORM_WIDGET_SELECTORS.EDIT_INPUT_VALUE ),\n\t\t\t'Failed to make the \"Add Form\" inputs exist by clicking the addForm link'\n\t\t);\n\n\t\tthis.formsContainer.$( this.constructor.FORM_WIDGET_SELECTORS.EDIT_INPUT_VALUE ).setValue( value );\n\t\tthis.formsContainer.$( this.constructor.FORM_WIDGET_SELECTORS.EDIT_INPUT_LANGUAGE ).setValue( language );\n\n\t\tthis.formsContainer.$( this.constructor.GENERIC_TOOLBAR_SELECTORS.SAVE_BUTTON ).click();\n\n\t\tthis.formsContainer.$( this.constructor.FORM_WIDGET_SELECTORS.EDIT_INPUT_VALUE )\n\t\t\t.waitForExist( { reverse: true } );\n\t}\n\n\t/**\n\t * Remove the nth for on the page\n\t *\n\t * @param {number} index\n\t */\n\tremoveNthForm( index ) {\n\t\tthis.startEditingNthForm( index );\n\n\t\tconst form = this.forms[ index ];\n\t\tconst removeButton = form.$( this.constructor.GENERIC_TOOLBAR_SELECTORS.REMOVE_BUTTON );\n\n\t\tremoveButton.waitForClickable();\n\t\tremoveButton.click();\n\t\tform.waitForExist( { reverse: true } );\n\t}\n\n\t/**\n\t * Get data of the nth form on the page\n\t * Gets only the first form representation value\n\t *\n\t * @param {number} index\n\t * @return {{value, language, grammaticalFeatures}}\n\t */\n\tgetNthFormData( index ) {\n\t\tconst form = this.forms[ index ];\n\n\t\treturn {\n\t\t\tvalue: form.$( this.constructor.FORM_WIDGET_SELECTORS.REPRESENTATION_VALUE ).getText(),\n\t\t\tlanguage: form.$( this.constructor.FORM_WIDGET_SELECTORS.REPRESENTATION_LANGUAGE ).getText(),\n\t\t\tgrammaticalFeatures: form.$( this.constructor.FORM_WIDGET_SELECTORS.GRAMMATICAL_FEATURES ).getText()\n\t\t};\n\t}\n\n\t/**\n\t * Get data of the nth form on the page\n\t *\n\t * @param {number} index\n\t * @return {{value, language}}\n\t */\n\tgetNthFormFormValues( index ) {\n\t\tconst form = this.forms[ index ],\n\t\t\tlanguageFields = form.$$( this.constructor.FORM_WIDGET_SELECTORS.EDIT_INPUT_LANGUAGE ),\n\t\t\trepresentationInputs = [];\n\n\t\t_.each( form.$$( this.constructor.FORM_WIDGET_SELECTORS.EDIT_INPUT_VALUE ), function ( element, key ) {\n\t\t\trepresentationInputs.push( {\n\t\t\t\tvalue: element.getValue(),\n\t\t\t\tlanguage: languageFields[ key ].getValue()\n\t\t\t} );\n\t\t} );\n\n\t\treturn {\n\t\t\trepresentations: representationInputs\n\t\t};\n\t}\n\n\tgetNthFormFormValuesAfterSave( index ) {\n\t\tconst form = this.forms[ index ],\n\t\t\tlanguageFields = form.$$( this.constructor.FORM_WIDGET_SELECTORS.REPRESENTATIONS ),\n\t\t\trepresentationValues = [];\n\n\t\t_.each( languageFields, function ( element, key ) {\n\t\t\trepresentationValues.push( {\n\t\t\t\tvalue: languageFields[ key ].$( '.representation-widget_representation-value' ).getText(),\n\t\t\t\tlanguage: languageFields[ key ].$( '.representation-widget_representation-language' ).getText()\n\t\t\t} );\n\t\t} );\n\n\t\treturn {\n\t\t\trepresentations: representationValues\n\t\t};\n\t}\n\n\tgetNthFormStatement( index ) {\n\t\tconst form = this.forms[ index ];\n\n\t\tform.$( '.wikibase-snakview-body .wikibase-snakview-variation-valuesnak  .valueview-instaticmode' ).waitForDisplayed( { timeout: browser.config.nonApiTimeout } );\n\t\tform.$( '.wikibase-statementgroupview-property-label a' ).waitForDisplayed( { timeout: browser.config.nonApiTimeout } );\n\n\t\tconst property = form.$( '.wikibase-statementgroupview' ),\n\t\t\tvalue = form.$( '.wikibase-snakview-body .wikibase-snakview-variation-valuesnak  .valueview-instaticmode' );\n\n\t\treturn {\n\t\t\tpropertyId: property.getAttribute( 'id' ).split( '-' ), value: value.getText()\n\t\t};\n\t}\n\n\taddStatementToNthForm( index, statementPropertyId, statementValue, submitImmediately ) {\n\t\tconst form = this.forms[ index ],\n\t\t\taddStatementLink = form.$( this.constructor.FORM_WIDGET_SELECTORS.ADD_STATEMENT_TO_FORM );\n\n\t\taddStatementLink.click();\n\n\t\tconst propertyInputfield = form.$( '.wikibase-statementgroupview .wikibase-snakview-property input' );\n\n\t\tpropertyInputfield.setValue( statementPropertyId );\n\t\tthis.selectFirstSuggestedEntityOnEntitySelector();\n\t\tthis.formClaimValueInputField.waitForDisplayed( { timeout: browser.config.nonApiTimeout } );\n\t\tthis.formClaimValueInputField.setValue( statementValue );\n\n\t\tif ( submitImmediately !== false ) {\n\t\t\tthis.submitNthFormStatement( index );\n\t\t}\n\t}\n\n\tsubmitNthFormStatement( index ) {\n\t\tconst form = this.forms[ index ],\n\t\t\tsaveLink = form.$( this.constructor.GENERIC_TOOLBAR_SELECTORS.SAVE_BUTTON );\n\n\t\tbrowser.waitUntil( () => {\n\t\t\treturn saveLink.getAttribute( 'aria-disabled' ) === 'false';\n\t\t} );\n\n\t\tsaveLink.click();\n\t\tsaveLink.waitForExist( { reverse: true } );\n\t}\n\n\taddRepresentationToNthForm( index, representation, language, submitImmediately ) {\n\t\tconst form = this.forms[ index ];\n\n\t\tthis.startEditingNthForm( index );\n\n\t\tconst addRepresentationButton = form.$( this.constructor.FORM_WIDGET_SELECTORS.ADD_REPRESENTATION_BUTTON );\n\n\t\taddRepresentationButton.waitForDisplayed( { timeout: browser.config.nonApiTimeout } );\n\t\taddRepresentationButton.click();\n\n\t\tconst representationContainer = form.$( '.representation-widget_representation-list' );\n\t\tconst representations = representationContainer.$$( '.representation-widget_representation-edit-box' );\n\n\t\tconst newRepresentationIndex = representations.length - 1;\n\t\tconst newRepresentation = representations[ newRepresentationIndex ];\n\n\t\tnewRepresentation.$( this.constructor.FORM_WIDGET_SELECTORS.EDIT_INPUT_VALUE ).setValue( representation );\n\t\tnewRepresentation.$( this.constructor.FORM_WIDGET_SELECTORS.EDIT_INPUT_LANGUAGE ).setValue( language );\n\n\t\tif ( submitImmediately !== false ) {\n\t\t\tthis.submitNthForm( index );\n\t\t}\n\t}\n\n\trestorePreviousRevision() {\n\t\tthis.viewHistoryLink.click();\n\t\tbrowser.pause( 1000 );\n\t\tthis.restoreRevisionLink.click();\n\t\tbrowser.pause( 1000 );\n\t\tthis.undoOrRestoreSavePageButton.click();\n\t\tthis.addFormLink.waitForDisplayed();\n\t}\n\n\tundoLatestRevision() {\n\t\tthis.viewHistoryLink.click();\n\t\tbrowser.pause( 1000 );\n\t\tthis.undoRevisionLink.click();\n\t\tbrowser.pause( 1000 );\n\t\tthis.undoOrRestoreSavePageButton.click();\n\t\tthis.addFormLink.waitForDisplayed();\n\t}\n\n\teditRepresentationOfNthForm( index, representation, language, submitImmediately ) {\n\t\tconst form = this.forms[ index ];\n\n\t\tthis.startEditingNthForm( index );\n\n\t\tform.$( this.constructor.FORM_WIDGET_SELECTORS.EDIT_INPUT_VALUE ).setValue( representation );\n\t\tform.$( this.constructor.FORM_WIDGET_SELECTORS.EDIT_INPUT_LANGUAGE ).setValue( language );\n\n\t\tif ( submitImmediately !== false ) {\n\t\t\tthis.submitNthForm( index );\n\t\t}\n\t}\n\n\tremoveLastRepresentationOfNthForm( index, submitImmediately ) {\n\t\tconst form = this.forms[ index ];\n\n\t\tthis.startEditingNthForm( index );\n\n\t\tconst representationContainer = form.$( '.representation-widget_representation-list' );\n\t\tconst representations = representationContainer.$$( '.representation-widget_representation-edit-box' );\n\n\t\tconst lastRepresentationIndex = representations.length - 1;\n\t\tconst lastRepresentation = representations[ lastRepresentationIndex ];\n\n\t\tlastRepresentation.$( this.constructor.FORM_WIDGET_SELECTORS.REMOVE_REPRESENTATION_BUTTON ).click();\n\n\t\tif ( submitImmediately !== false ) {\n\t\t\tthis.submitNthForm( index );\n\t\t}\n\t}\n\n\tstartEditingNthForm( index ) {\n\t\tthis.forms[ index ].waitForClickable( { timeout: browser.config.nonApiTimeout } );\n\t\tthis.forms[ index ].$( this.constructor.GENERIC_TOOLBAR_SELECTORS.EDIT_BUTTON ).click();\n\t}\n\n\tisNthFormSubmittable( index ) {\n\t\tconst form = this.forms[ index ],\n\t\t\tsaveButton = form.$( this.constructor.GENERIC_TOOLBAR_SELECTORS.SAVE_BUTTON );\n\n\t\treturn saveButton.getAttribute( 'aria-disabled' ) !== 'true';\n\t}\n\n\tsubmitNthForm( index ) {\n\t\tconst form = this.forms[ index ];\n\n\t\tconst saveButton = form.$( this.constructor.GENERIC_TOOLBAR_SELECTORS.SAVE_BUTTON );\n\n\t\tsaveButton.waitForClickable( { timeout: browser.config.nonApiTimeout } );\n\t\tsaveButton.click();\n\t\tsaveButton.waitForExist( { reverse: true } );\n\t}\n\n\taddGrammaticalFeatureToNthForm( index, grammaticalFeatureId, submitImmediately ) {\n\t\tconst form = this.forms[ index ];\n\t\tconst editButton = form.$( this.constructor.GENERIC_TOOLBAR_SELECTORS.EDIT_BUTTON );\n\n\t\teditButton.waitForClickable( { timeout: browser.config.nonApiTimeout } );\n\t\teditButton.click();\n\n\t\tthis.setSingleValueOnMultiselectElement(\n\t\t\tform.$( this.constructor.FORM_WIDGET_SELECTORS.GRAMMATICAL_FEATURES ),\n\t\t\tgrammaticalFeatureId\n\t\t);\n\n\t\tif ( submitImmediately !== false ) {\n\t\t\tthis.submitNthForm( index );\n\t\t}\n\t}\n\n\tremoveGrammaticalFeatureFromNthForm( index, submitImmediately ) {\n\t\tconst form = this.forms[ index ];\n\n\t\tthis.startEditingNthForm( index );\n\t\tconst gramFeaturesValues = form.$( '.wikibase-lexeme-form-grammatical-features-values' );\n\t\tconst gramFeatureToDelete = gramFeaturesValues.$$( '.oo-ui-tagItemWidget' );\n\t\tconst gramFeatureRemove = gramFeatureToDelete[ 0 ].$( '.oo-ui-buttonElement-button' );\n\n\t\tgramFeatureRemove.click();\n\n\t\tif ( submitImmediately !== false ) {\n\t\t\tthis.submitNthForm( index );\n\t\t}\n\t}\n\n\tgetFormAnchor( index ) {\n\t\tconst form = this.forms[ index ];\n\n\t\treturn form.getAttribute( 'id' );\n\t}\n\n\tisUserLoggedIn() {\n\t\t$( this.constructor.PERSONAL_BAR.USER_TOOLBAR ).waitForExist( { reverse: true, timeout: browser.config.nonApiTimeout } );\n\t\treturn !$( this.constructor.PERSONAL_BAR.USER_NOT_LOGIN_ICON ).isExisting();\n\t}\n\n}\n\nmodule.exports = new LexemePage();\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/logout.page.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/newlexeme.page.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/nonexistinglexeme.page.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/recentchanges.page.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/sense.page.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/specialmergelexemes.page.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/specialversion.page.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/undo.page.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/watchable.page.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/pageobjects/watchlist.page.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/replication.js","messages":[{"ruleId":"wdio/no-pause","severity":2,"message":"Unexpected browser.pause() not allowed","line":10,"column":5,"nodeType":"CallExpression","messageId":"unexpectedPause","endLine":10,"endColumn":35}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nclass Replication {\n\t// Wait for 120% of the current replication lag to increase the chance we\n\t// get up to date entity data, even if reading from a replica.\n\twaitForReplicationLag( botPromise ) {\n\t\tbrowser.call( () => this.getReplicationLag( botPromise )\n\t\t\t.then( ( replag ) => {\n\t\t\t\tbrowser.log( `Waiting ${replag * 1200} ms for replication lag of ${replag} s` );\n\t\t\t\tbrowser.pause( replag * 1200 );\n\t\t\t} )\n\t\t);\n\t}\n\n\t/**\n\t * Get the current replication lag.\n\t *\n\t * @param {Promise} botPromise resolving to MWBot\n\t *\n\t * @return {Promise}\n\t */\n\tgetReplicationLag( botPromise ) {\n\t\treturn botPromise.then( ( bot ) => bot.request( {\n\t\t\taction: 'query',\n\t\t\tmeta: 'siteinfo',\n\t\t\tsiprop: 'dbrepllag'\n\t\t} ) ).then( ( response ) => {\n\t\t\treturn Math.max( 0, response.query.dbrepllag[ 0 ].lag );\n\t\t} );\n\t}\n\n}\n\nmodule.exports = new Replication();\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/form.add.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/form.edit.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/form.remove.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/form.section.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/header.edit.js","messages":[{"ruleId":"node/no-missing-require","severity":1,"message":"\"../../../../Wikibase/repo/tests/selenium/wdio-wikibase/wikibase.api\" is not found.","line":12,"column":25,"nodeType":"Literal","endLine":12,"endColumn":94}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst assert = require( 'assert' ),\n\tLexemeApi = require( '../lexeme.api' ),\n\tLexemePage = require( '../pageobjects/lexeme.page' ),\n\tReplication = require( '../replication' );\n\nlet WikibaseApi;\ntry {\n\tWikibaseApi = require( 'wdio-wikibase/wikibase.api' );\n} catch ( e ) {\n\tWikibaseApi = require( '../../../../Wikibase/repo/tests/selenium/wdio-wikibase/wikibase.api' );\n}\n\ndescribe( 'Lexeme:Header', () => {\n\n\tit( 'can edit the language of a Lexeme', () => {\n\t\tconst id = browser.call( () => LexemeApi.create().then( ( lexeme ) => lexeme.id ) );\n\t\tconst languageItem = browser.call( () => WikibaseApi.createItem() );\n\n\t\tLexemePage.open( id );\n\t\tLexemePage.startHeaderEditMode();\n\n\t\tLexemePage.setLexemeLanguageItem( languageItem );\n\n\t\tReplication.waitForReplicationLag( LexemeApi.getBot() );\n\t\tbrowser.call( () => LexemeApi.get( id )\n\t\t\t.then( ( lexeme ) => {\n\t\t\t\tassert.equal( languageItem, lexeme.language, 'Unexpected Language value' );\n\t\t\t} ).catch( assert.fail )\n\t\t);\n\n\t} );\n\n\tit.skip( 'can edit the lexical category of a Lexeme', () => {\n\t\tconst id = browser.call( () => LexemeApi.create().then( ( lexeme ) => lexeme.id ) );\n\t\tconst categoryItem = browser.call( () => WikibaseApi.createItem() );\n\n\t\tLexemePage.open( id );\n\t\tLexemePage.startHeaderEditMode();\n\n\t\tLexemePage.setLexicalCategoryItem( categoryItem );\n\n\t\tReplication.waitForReplicationLag( LexemeApi.getBot() );\n\t\tbrowser.call( () => LexemeApi.get( id )\n\t\t\t.then( ( lexeme ) => {\n\t\t\t\tassert.equal( categoryItem, lexeme.lexicalCategory, 'Unexpected lexical category value' );\n\t\t\t} ).catch( assert.fail )\n\t\t);\n\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/header.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/helloworld.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/lemma.edit.js","messages":[],"suppressedMessages":[{"ruleId":"dot-notation","severity":2,"message":"[\"en\"] is better written in dot notation.","line":21,"column":48,"nodeType":"Literal","messageId":"useDot","endLine":21,"endColumn":52,"fix":{"range":[716,724],"text":".en"},"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/nonexistinglexeme.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/sense.edit.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/sense.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/special/merge.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/special/new.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/special/recentchanges.js","messages":[{"ruleId":"wdio/no-pause","severity":2,"message":"Unexpected browser.pause() not allowed","line":27,"column":3,"nodeType":"CallExpression","messageId":"unexpectedPause","endLine":27,"endColumn":24}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"'use strict';\n\nconst assert = require( 'assert' ),\n\tLexemeApi = require( '../../lexeme.api' ),\n\tRecentChangesPage = require( '../../pageobjects/recentchanges.page' );\n\ndescribe( 'Special:RecentChanges', () => {\n\n\tit( 'shows lemmas in title links to lexemes on Special:RecentChanges', () => {\n\t\tconst id = browser.call( () => LexemeApi.create( {\n\t\t\tlemmas: {\n\t\t\t\truq: {\n\t\t\t\t\tvalue: 'entrôpi',\n\t\t\t\t\tlanguage: 'ruq'\n\t\t\t\t},\n\t\t\t\t'ruq-latn': {\n\t\t\t\t\tvalue: 'entropy',\n\t\t\t\t\tlanguage: 'ruq-latn'\n\t\t\t\t},\n\t\t\t\t'ruq-cyrl': {\n\t\t\t\t\tvalue: 'ентропы',\n\t\t\t\t\tlanguage: 'ruq-cyrl'\n\t\t\t\t}\n\t\t\t}\n\t\t} ).then( ( lexeme ) => lexeme.id ) );\n\n\t\tbrowser.pause( 2000 );\n\n\t\tRecentChangesPage.open();\n\n\t\tconst title = RecentChangesPage.lastLexeme.getText();\n\n\t\tassert( title.includes( 'entrôpi' ) );\n\t\tassert( title.includes( 'entropy' ) );\n\t\tassert( title.includes( 'ентропы' ) );\n\t\tassert( title.includes( id ) );\n\t} );\n\n} );\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/special/watchlist.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/specs/statement.add.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]},{"filePath":"/src/repo/tests/selenium/wdio.conf.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"no-process-exit","replacedBy":[]}]}]

--- end ---
$ /usr/bin/npm ci --legacy-peer-deps
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wdio/sync@7.16.14',
npm WARN EBADENGINE   required: { node: '>=12.0.0 <16' },
npm WARN EBADENGINE   current: { node: 'v16.17.1', npm: '8.15.0' }
npm WARN EBADENGINE }
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated grunt-jasmine-nodejs@1.6.1: Deprecated in favor of npm scripts.
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated core-js@2.6.12: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
--- stdout ---

added 946 packages, and audited 947 packages in 10s

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

16 vulnerabilities (5 moderate, 8 high, 3 critical)

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
--- stderr ---
ERROR: "test:grunt" exited with 3.
--- stdout ---

> test
> run-s test:*


> test:grunt
> grunt test

Running "eslint:all" (eslint) task

/src/repo/Gruntfile.js
   1:1   error    Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
   1:1   error    Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
   1:1   error    Definition for rule 'wdio/no-pause' was not found              wdio/no-pause
  39:3   error    Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  40:11  warning  ES2015 'Object.assign' method is forbidden                     es-x/no-object-assign

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

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

/src/repo/i18n/api/ar.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/ast.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/be-tarask.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/be.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/bg.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/bn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/ca.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/cs.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/da.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/dag.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/de.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/el.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/en.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/eo.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/es.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/et.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/fa.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/fi.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/fr.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/gl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/ha.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/he.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/hi.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/hu.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/ia.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/it.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/ja.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/ko.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/lb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/lt.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/lv.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/mk.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/mr.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/ms.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/nb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/nl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/nn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/ojb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/pl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/pnb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/pt-br.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/pt.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/qqq.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/roa-tara.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/ru.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/scn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/sl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/sms.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/sr-ec.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/sr-el.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/sv.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/tcy.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/tl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/tr.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/tw.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/uk.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/vi.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/zh-hans.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/api/zh-hant.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ar.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ast.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ban.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/bar.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/be-tarask.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/be.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/bg.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/bn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/br.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/btm.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ca.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ce.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/crh-latn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/cs.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/cy.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/da.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/de.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/diq.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/el.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/en-gb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/en.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/eo.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

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

/src/repo/i18n/et.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/eu.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/fa.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/fi.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/fr.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/gl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/gu.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/he.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/hi.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/hr.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/hu.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/hy.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ia.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/id.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ig.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ilo.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/io.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/it.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ja.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/kaa.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/kcg.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/kjp.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ko.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/krc.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ks-arab.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ku-latn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ar.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ast.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/bcl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/be.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/bn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ca.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/cs.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/cy.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/da.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/dag.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/de.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/diq.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/en.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/eo.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/es.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/et.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/fa.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/fi.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/fr.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/fy.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/guw.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/he.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/hi.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/hr.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/hu.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/hy.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/hyw.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ia.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/id.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/io.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/it.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ja.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/kcg.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ko.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ks-arab.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/lb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/lv.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/mk.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/mrh.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ms-arab.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ms.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/my.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/nb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/nl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/nn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ojb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/pcd.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/pl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/pnb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/pt-br.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/pt.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/qqq.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/roa-tara.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ru.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/scn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/skr-arab.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/sl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/sms.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/sq.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/sr-ec.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/sr-el.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/sv.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/sw.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/tg-cyrl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/tk.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/tly.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/tok.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/tr.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/ug-arab.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/uk.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/vi.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/wuu.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/zh-hans.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/language-names/zh-hant.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/lb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/lfn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/lrc.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/lt.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/lv.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/mk.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/mr.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/mrh.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ms-arab.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ms.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/my.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/nah.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/nb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ne.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/nl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/nn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/nyn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/pa.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/pl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/pnb.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/pt-br.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/pt.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/qqq.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/rki.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/rn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/roa-tara.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/rsk.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ru.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/sa.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/scn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/sd.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/se.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/sh.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/sk.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/skr-arab.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/sl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/smn.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/sms.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/sq.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/sr-ec.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/sr-el.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/sv.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/syl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ta.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/tcy.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/te.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/tg-cyrl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/th.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/tl.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/tok.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/tr.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/tw.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/uk.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/ur.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/vec.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/vi.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/wa.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/yi.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/zgh.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/zh-hans.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/i18n/zh-hant.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

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

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

/src/repo/resources/__namespace.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/datamodel/Form.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/datamodel/Lemma.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/datamodel/Lexeme.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/datamodel/LexemeSubEntityId.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/datamodel/Sense.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/datamodel/__namespace.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/datatransfer/LemmaList.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/entityChangers/FormChanger.js
  1:1  error    Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error    Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error    Definition for rule 'wdio/no-pause' was not found              wdio/no-pause
  2:0  warning  Missing JSDoc @param "wb" type                                 jsdoc/require-param-type

/src/repo/resources/entityChangers/LexemeRevisionStore.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/entityChangers/SenseChanger.js
  1:1  error    Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error    Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error    Definition for rule 'wdio/no-pause' was not found              wdio/no-pause
  2:0  warning  Missing JSDoc @param "wb" type                                 jsdoc/require-param-type

/src/repo/resources/experts/Form.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/experts/Lexeme.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/experts/Sense.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/focusElement.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/getDeserializer.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/hooks/lexeme.viewhook.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/jquery.wikibase.grammaticalfeatureview.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/jquery.wikibase.lexemeformlistview.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/jquery.wikibase.lexemeformview.js
    1:1  error    Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
    1:1  error    Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
    1:1  error    Definition for rule 'wdio/no-pause' was not found              wdio/no-pause
  287:0  warning  Missing JSDoc @param "lemmas" type                             jsdoc/require-param-type
  288:0  warning  Missing JSDoc @param "formIndex" type                          jsdoc/require-param-type
  289:0  warning  Missing JSDoc @param "formId" type                             jsdoc/require-param-type
  290:0  warning  Missing JSDoc @param "representations" type                    jsdoc/require-param-type

/src/repo/resources/jquery.wikibase.lexemeview.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/jquery.wikibase.senselistview.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/jquery.wikibase.senseview.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/mediawiki.template.vue.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/serialization/FormSerializer.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/serialization/LexemeDeserializer.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/serialization/SenseSerializer.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/services/__namespace.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/special/NewLexeme.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/special/NewLexemeFallback.js
  1:1  error    Definition for rule 'es/no-object-assign' was not found                                                                    es/no-object-assign
  1:1  error    Definition for rule 'qunit/no-loose-assertions' was not found                                                              qunit/no-loose-assertions
  1:1  error    Definition for rule 'wdio/no-pause' was not found                                                                          wdio/no-pause
  8:3  warning  NodeList.forEach not supported by Chrome<51, Firefox<50, Safari<10, IE & others. Use Array.prototype.forEach.call instead  mediawiki/no-nodelist-unsupported-methods

/src/repo/resources/store/actionTypes.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/store/actions.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/store/index.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/store/mutationTypes.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/store/mutations.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/view/ControllerViewFactory.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/view/ReadModeViewFactory.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/view/ViewFactoryFactory.js
   1:1  error    Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
   1:1  error    Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
   1:1  error    Definition for rule 'wdio/no-pause' was not found              wdio/no-pause
  17:0  warning  Syntax error in type: []                                       jsdoc/valid-types

/src/repo/resources/view/config.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/GlossWidget.js
   1:1  error    Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
   1:1  error    Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
   1:1  error    Definition for rule 'wdio/no-pause' was not found              wdio/no-pause
  34:0  warning  Syntax error in type: [{ value: string, language: string }]    jsdoc/valid-types

/src/repo/resources/widgets/GrammaticalFeatureListWidget.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/InvalidLanguageIndicator.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/ItemSelectorWrapper.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/LanguageAndLexicalCategoryWidget.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/LanguageSelectorWrapper.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/LemmaWidget.newLemmaWidget.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/LexemeHeader.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/LexemeHeader.newLexemeHeader.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/LexemeHeader.newLexemeHeaderStore.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/RedundantLanguageIndicator.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/RepresentationWidget.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/__namespace.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/resources/widgets/languages.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/tests/phpunit/data/rdf/entities/L2.json
  1:1  error  Definition for rule 'es/no-object-assign' was not found        es/no-object-assign
  1:1  error  Definition for rule 'qunit/no-loose-assertions' was not found  qunit/no-loose-assertions
  1:1  error  Definition for rule 'wdio/no-pause' was not found              wdio/no-pause

/src/repo/tests/qunit/datamodel/Form.tests.js
   1:1  error    Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
   1:1  error    Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
   2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
  33:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  39:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  46:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  51: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
  65:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  69:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  99:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/datamodel/Lexeme.tests.js
   1:1  error  Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
   1:1  error  Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
  17:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  25:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  33:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  42:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  49:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/datamodel/Sense.tests.js
   1:1  error    Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
   1:1  error    Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
   2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
  20:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  25:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  34:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  72:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/entityChangers/FormChanger.tests.js
    1:1  error    Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
    1:1  error    Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
    2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
   47:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   48:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   49:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   50:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   51:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   52:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   92:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   93:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  140:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  172:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  176:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  180:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  225:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  226:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  227:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  228:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  229:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  273:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  313:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  350:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  395:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  396:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  437:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  441:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  445:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  474:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  479:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  480:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  481:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  482:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  483:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  502:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  503:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  504:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  505:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/entityChangers/LexemeRevisionStore.tests.js
    1:1  error  Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
    1:1  error  Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
   17:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   25:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   33:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   41:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   49:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   60:3  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   68:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   76:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   84:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   90:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   96:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  102:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  108:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/entityChangers/SenseChanger.tests.js
    1:1  error    Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
    1:1  error    Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
    2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
   47:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   48:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   49:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   50:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   51:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   52:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   86:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   87:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  129:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  161:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  165:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  169:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  214:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  215:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  216:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  217:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  218:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  256:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  295:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  331:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  373:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  374:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  410:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  414:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  418:5  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  447:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  452:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  453:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  454:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  455:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  456:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  475:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  476:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  477:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  478:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/experts/Form.tests.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found  es/no-object-assign
  1:1  error  Definition for rule 'wdio/no-pause' was not found        wdio/no-pause

/src/repo/tests/qunit/experts/Lexeme.tests.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found  es/no-object-assign
  1:1  error  Definition for rule 'wdio/no-pause' was not found        wdio/no-pause

/src/repo/tests/qunit/index.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found  es/no-object-assign
  1:1  error  Definition for rule 'wdio/no-pause' was not found        wdio/no-pause

/src/repo/tests/qunit/jquery.wikibase.grammaticalfeatureview.tests.js
    1:1  error  Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
    1:1  error  Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
   34:3  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   53:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   67:3  error  Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   71:3  error  Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  103:4  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  124:4  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  139:3  error  Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/jquery.wikibase.lexemeformlistview.tests.js
   1:1  error    Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
   1:1  error    Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
   2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
  38:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  45:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  49:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  64:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  65:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  71:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  75:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/jquery.wikibase.lexemeformview.tests.js
    1:1  error    Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
    1:1  error    Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
    2:0  warning  Missing JSDoc @param "require" type                                                                            jsdoc/require-param-type
    3:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
   58:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   64:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   66:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   76:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   87:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  100:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  105:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  124:6  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  132:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  151:6  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  159:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  179:6  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  187:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  192:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  203:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  208:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  224:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  229:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  243:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  259:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  281:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  285:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  306:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  307:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  309:4  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/jquery.wikibase.senselistview.tests.js
   1:1  error    Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
   1:1  error    Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
   2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
  41:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  47:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  51:3  error    Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  64:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/jquery.wikibase.senseview.tests.js
    1:1  error    Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
    1:1  error    Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
    2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
   42:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   49:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   58:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   71:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   87:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  106:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  110:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions

/src/repo/tests/qunit/serialization/FormSerializer.tests.js
   1:1  error  Definition for rule 'es/no-object-assign' was not found                                                     es/no-object-assign
   1:1  error  Definition for rule 'wdio/no-pause' was not found                                                           wdio/no-pause
  81:4  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/serialization/LexemeDeserializer.tests.js
    1:1  error    Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
    1:1  error    Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
    2:0  warning  Missing JSDoc @param "wb" type                                                                                 jsdoc/require-param-type
   64:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   65:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
   95:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
   98:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  102:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  103:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  117:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  142:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  168:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  171:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  175:3  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  176:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  185:3  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  210:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions

/src/repo/tests/qunit/serialization/SenseSerializer.tests.js
   1:1  error  Definition for rule 'es/no-object-assign' was not found                                                     es/no-object-assign
   1:1  error  Definition for rule 'wdio/no-pause' was not found                                                           wdio/no-pause
  71:4  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/view/ControllerViewFactory.tests.js
  1:1  error  Definition for rule 'es/no-object-assign' was not found  es/no-object-assign
  1:1  error  Definition for rule 'wdio/no-pause' was not found        wdio/no-pause

/src/repo/tests/qunit/view/ViewFactoryFactory.tests.js
   1:1  error  Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
   1:1  error  Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
  32:3  error  Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  41:3  error  Unexpected assert.notOk. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions

/src/repo/tests/qunit/widgets/GrammaticalFeatureListWidget.tests.js
   1:1  error    Definition for rule 'es/no-object-assign' was not found                                                        es/no-object-assign
   1:1  error    Definition for rule 'wdio/no-pause' was not found                                                              wdio/no-pause
   2:0  warning  Missing JSDoc @param "QUnit" type                                                                              jsdoc/require-param-type
   3:0  warning  Missing JSDoc @param "require" type                                                                            jsdoc/require-param-type
   4:0  warning  Missing JSDoc @param "sinon" type                                                                              jsdoc/require-param-type
  88:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  89:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  90:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  91:4  error    Unexpected assert.equal. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual  qunit/no-loose-assertions
  92:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions
  93:4  error    Unexpected assert.ok. Use assert.strictEqual, assert.notStrictEqual, assert.deepEqual, or assert.propEqual     qunit/no-loose-assertions

/src/repo/tests/selenium/pageobjects/lexeme.page.js
  236:0  warning  Missing JSDoc @param "input" type       jsdoc/require-param-type
  237:0  warning  Missing JSDoc @param "value" type       jsdoc/require-param-type
  439:3  error    Unexpected browser.pause() not allowed  wdio/no-pause
  441:3  error    Unexpected browser.pause() not allowed  wdio/no-pause
  448:3  error    Unexpected browser.pause() not allowed  wdio/no-pause
  450:3  error    Unexpected browser.pause() not allowed  wdio/no-pause

/src/repo/tests/selenium/replication.js
  10:5  error  Unexpected browser.pause() not allowed  wdio/no-pause

/src/repo/tests/selenium/specs/header.edit.js
  12:25  warning  "../../../../Wikibase/repo/tests/selenium/wdio-wikibase/wikibase.api" is not found  node/no-missing-require

/src/repo/tests/selenium/specs/special/recentchanges.js
  27:3  error  Unexpected browser.pause() not allowed  wdio/no-pause

✖ 1153 problems (1127 errors, 26 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 1.
Source code is licensed under the AGPL.