$ date
--- stdout ---
Fri Jun 2 13:47:58 UTC 2023
--- end ---
$ git clone file:///srv/git/wikimedia-portals.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 'prod' (https://gerrit.wikimedia.org/r/wikimedia/portals/deploy) registered for path 'prod'
Cloning into '/src/repo/prod'...
--- stdout ---
Submodule path 'prod': checked out 'ae1009042ab69b0ea76ce04463cb917416567f94'
--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.
--- end ---
$ git show-ref refs/heads/master
--- stdout ---
7aee67327574282e58774ce0a34b4fad41a7233d refs/heads/master
--- end ---
$ /usr/bin/npm audit --json --legacy-peer-deps
--- stdout ---
{
"auditReportVersion": 2,
"vulnerabilities": {
"autoprefixer": {
"name": "autoprefixer",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "1.0.20131222 - 8.6.5",
"nodes": [
"node_modules/autoprefixer"
],
"fixAvailable": true
},
"cheerio": {
"name": "cheerio",
"severity": "high",
"isDirect": false,
"via": [
"css-select"
],
"effects": [
"gulp-inline"
],
"range": "0.19.0 - 1.0.0-rc.3",
"nodes": [
"node_modules/cheerio"
],
"fixAvailable": false
},
"chokidar": {
"name": "chokidar",
"severity": "high",
"isDirect": false,
"via": [
"glob-parent"
],
"effects": [
"glob-watcher"
],
"range": "1.0.0-rc1 - 2.1.8",
"nodes": [
"node_modules/glob-watcher/node_modules/chokidar"
],
"fixAvailable": true
},
"color": {
"name": "color",
"severity": "moderate",
"isDirect": false,
"via": [
"color-string"
],
"effects": [
"css-color-function"
],
"range": "<=0.11.4",
"nodes": [
"node_modules/color"
],
"fixAvailable": true
},
"color-string": {
"name": "color-string",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1089718,
"name": "color-string",
"dependency": "color-string",
"title": "Regular Expression Denial of Service (ReDOS)",
"url": "https://github.com/advisories/GHSA-257v-vj4p-3w2h",
"severity": "moderate",
"cwe": [
"CWE-770"
],
"cvss": {
"score": 5.3,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
},
"range": "<1.5.5"
}
],
"effects": [
"color"
],
"range": "<1.5.5",
"nodes": [
"node_modules/color/node_modules/color-string"
],
"fixAvailable": true
},
"css-color-function": {
"name": "css-color-function",
"severity": "moderate",
"isDirect": false,
"via": [
"color"
],
"effects": [
"postcss-color-function"
],
"range": "*",
"nodes": [
"node_modules/css-color-function"
],
"fixAvailable": true
},
"css-select": {
"name": "css-select",
"severity": "high",
"isDirect": false,
"via": [
"nth-check"
],
"effects": [
"cheerio",
"svgo"
],
"range": "<=3.1.0",
"nodes": [
"node_modules/css-select",
"node_modules/svgo/node_modules/css-select"
],
"fixAvailable": {
"name": "gulp-svg-sprite",
"version": "2.0.3",
"isSemVerMajor": true
}
},
"cssnano": {
"name": "cssnano",
"severity": "high",
"isDirect": true,
"via": [
"cssnano-preset-default"
],
"effects": [],
"range": "4.0.0-nightly.2020.1.9 - 4.1.11",
"nodes": [
"node_modules/cssnano"
],
"fixAvailable": {
"name": "cssnano",
"version": "6.0.1",
"isSemVerMajor": true
}
},
"cssnano-preset-default": {
"name": "cssnano-preset-default",
"severity": "high",
"isDirect": false,
"via": [
"postcss-svgo"
],
"effects": [
"cssnano"
],
"range": "<=4.0.8",
"nodes": [
"node_modules/cssnano-preset-default"
],
"fixAvailable": {
"name": "cssnano",
"version": "6.0.1",
"isSemVerMajor": true
}
},
"glob-parent": {
"name": "glob-parent",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1091181,
"name": "glob-parent",
"dependency": "glob-parent",
"title": "glob-parent before 5.1.2 vulnerable to Regular Expression Denial of Service in enclosure regex",
"url": "https://github.com/advisories/GHSA-ww39-953v-wcq6",
"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": "<5.1.2"
}
],
"effects": [
"chokidar",
"glob-stream"
],
"range": "<5.1.2",
"nodes": [
"node_modules/glob-stream/node_modules/glob-parent",
"node_modules/glob-watcher/node_modules/glob-parent"
],
"fixAvailable": {
"name": "gulp",
"version": "3.9.1",
"isSemVerMajor": true
}
},
"glob-stream": {
"name": "glob-stream",
"severity": "high",
"isDirect": false,
"via": [
"glob-parent"
],
"effects": [
"vinyl-fs"
],
"range": "5.3.0 - 6.1.0",
"nodes": [
"node_modules/glob-stream"
],
"fixAvailable": {
"name": "gulp",
"version": "3.9.1",
"isSemVerMajor": true
}
},
"glob-watcher": {
"name": "glob-watcher",
"severity": "high",
"isDirect": false,
"via": [
"chokidar"
],
"effects": [],
"range": "3.0.0 - 5.0.5",
"nodes": [
"node_modules/glob-watcher"
],
"fixAvailable": true
},
"gulp": {
"name": "gulp",
"severity": "high",
"isDirect": true,
"via": [
"glob-watcher",
"vinyl-fs"
],
"effects": [],
"range": ">=4.0.0",
"nodes": [
"node_modules/gulp"
],
"fixAvailable": {
"name": "gulp",
"version": "3.9.1",
"isSemVerMajor": true
}
},
"gulp-compile-handlebars": {
"name": "gulp-compile-handlebars",
"severity": "critical",
"isDirect": true,
"via": [
"gulp-util"
],
"effects": [],
"range": "*",
"nodes": [
"node_modules/gulp-compile-handlebars"
],
"fixAvailable": false
},
"gulp-inline": {
"name": "gulp-inline",
"severity": "critical",
"isDirect": true,
"via": [
"cheerio",
"gulp-util"
],
"effects": [],
"range": "*",
"nodes": [
"node_modules/gulp-inline"
],
"fixAvailable": false
},
"gulp-svg-sprite": {
"name": "gulp-svg-sprite",
"severity": "moderate",
"isDirect": true,
"via": [
"svg-sprite"
],
"effects": [],
"range": "1.3.0 - 1.5.0",
"nodes": [
"node_modules/gulp-svg-sprite"
],
"fixAvailable": {
"name": "gulp-svg-sprite",
"version": "2.0.3",
"isSemVerMajor": true
}
},
"gulp-useref": {
"name": "gulp-useref",
"severity": "high",
"isDirect": true,
"via": [
"vinyl-fs"
],
"effects": [],
"range": ">=3.1.4",
"nodes": [
"node_modules/gulp-useref"
],
"fixAvailable": {
"name": "gulp-useref",
"version": "3.1.3",
"isSemVerMajor": true
}
},
"gulp-util": {
"name": "gulp-util",
"severity": "critical",
"isDirect": false,
"via": [
"lodash.template"
],
"effects": [
"gulp-compile-handlebars",
"gulp-inline"
],
"range": ">=1.1.0",
"nodes": [
"node_modules/gulp-util"
],
"fixAvailable": false
},
"lodash.template": {
"name": "lodash.template",
"severity": "critical",
"isDirect": false,
"via": [
{
"source": 1090114,
"name": "lodash.template",
"dependency": "lodash.template",
"title": "Prototype Pollution in lodash",
"url": "https://github.com/advisories/GHSA-jf85-cpcp-j695",
"severity": "critical",
"cwe": [
"CWE-20"
],
"cvss": {
"score": 9.1,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H"
},
"range": "<4.5.0"
}
],
"effects": [
"gulp-util"
],
"range": "<4.5.0",
"nodes": [
"node_modules/lodash.template"
],
"fixAvailable": false
},
"nth-check": {
"name": "nth-check",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1092100,
"name": "nth-check",
"dependency": "nth-check",
"title": "Inefficient Regular Expression Complexity in nth-check",
"url": "https://github.com/advisories/GHSA-rp65-9cf3-cjxr",
"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": "<2.0.1"
}
],
"effects": [
"css-select"
],
"range": "<2.0.1",
"nodes": [
"node_modules/nth-check"
],
"fixAvailable": {
"name": "gulp-svg-sprite",
"version": "2.0.3",
"isSemVerMajor": true
}
},
"phantomjs-prebuilt": {
"name": "phantomjs-prebuilt",
"severity": "moderate",
"isDirect": false,
"via": [
"request"
],
"effects": [
"svg-sprite"
],
"range": "*",
"nodes": [
"node_modules/phantomjs-prebuilt"
],
"fixAvailable": {
"name": "gulp-svg-sprite",
"version": "2.0.3",
"isSemVerMajor": true
}
},
"pixrem": {
"name": "pixrem",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "<=4.0.1",
"nodes": [
"node_modules/pixrem"
],
"fixAvailable": true
},
"pleeease-filters": {
"name": "pleeease-filters",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "*",
"nodes": [
"node_modules/pleeease-filters"
],
"fixAvailable": true
},
"postcss": {
"name": "postcss",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1089551,
"name": "postcss",
"dependency": "postcss",
"title": "Regular Expression Denial of Service in postcss",
"url": "https://github.com/advisories/GHSA-566m-qj78-rww5",
"severity": "moderate",
"cwe": [
"CWE-400"
],
"cvss": {
"score": 5.3,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
},
"range": "<7.0.36"
}
],
"effects": [
"autoprefixer",
"pixrem",
"pleeease-filters",
"postcss-apply",
"postcss-attribute-case-insensitive",
"postcss-color-function",
"postcss-color-gray",
"postcss-color-hex-alpha",
"postcss-color-hsl",
"postcss-color-hwb",
"postcss-color-rebeccapurple",
"postcss-color-rgb",
"postcss-color-rgba-fallback",
"postcss-cssnext",
"postcss-custom-media",
"postcss-custom-properties",
"postcss-custom-selectors",
"postcss-font-family-system-ui",
"postcss-font-variant",
"postcss-image-set-polyfill",
"postcss-initial",
"postcss-media-minmax",
"postcss-nesting",
"postcss-pseudo-class-any-link",
"postcss-pseudoelements",
"postcss-replace-overflow-wrap",
"postcss-selector-matches",
"postcss-selector-not"
],
"range": "<7.0.36",
"nodes": [
"node_modules/autoprefixer/node_modules/postcss",
"node_modules/pixrem/node_modules/postcss",
"node_modules/pleeease-filters/node_modules/postcss",
"node_modules/postcss-apply/node_modules/postcss",
"node_modules/postcss-attribute-case-insensitive/node_modules/postcss",
"node_modules/postcss-color-function/node_modules/postcss",
"node_modules/postcss-color-gray/node_modules/postcss",
"node_modules/postcss-color-hex-alpha/node_modules/postcss",
"node_modules/postcss-color-hsl/node_modules/postcss",
"node_modules/postcss-color-hwb/node_modules/postcss",
"node_modules/postcss-color-rebeccapurple/node_modules/postcss",
"node_modules/postcss-color-rgb/node_modules/postcss",
"node_modules/postcss-color-rgba-fallback/node_modules/postcss",
"node_modules/postcss-cssnext/node_modules/postcss",
"node_modules/postcss-custom-media/node_modules/postcss",
"node_modules/postcss-custom-properties/node_modules/postcss",
"node_modules/postcss-custom-selectors/node_modules/postcss",
"node_modules/postcss-font-family-system-ui/node_modules/postcss",
"node_modules/postcss-font-variant/node_modules/postcss",
"node_modules/postcss-image-set-polyfill/node_modules/postcss",
"node_modules/postcss-initial/node_modules/postcss",
"node_modules/postcss-media-minmax/node_modules/postcss",
"node_modules/postcss-nesting/node_modules/postcss",
"node_modules/postcss-pseudo-class-any-link/node_modules/postcss",
"node_modules/postcss-pseudoelements/node_modules/postcss",
"node_modules/postcss-replace-overflow-wrap/node_modules/postcss",
"node_modules/postcss-selector-matches/node_modules/postcss",
"node_modules/postcss-selector-not/node_modules/postcss"
],
"fixAvailable": false
},
"postcss-apply": {
"name": "postcss-apply",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [
"postcss-cssnext"
],
"range": "<=0.10.0",
"nodes": [
"node_modules/postcss-apply"
],
"fixAvailable": false
},
"postcss-attribute-case-insensitive": {
"name": "postcss-attribute-case-insensitive",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [
"postcss-cssnext"
],
"range": "<=3.0.1",
"nodes": [
"node_modules/postcss-attribute-case-insensitive"
],
"fixAvailable": false
},
"postcss-color-function": {
"name": "postcss-color-function",
"severity": "moderate",
"isDirect": false,
"via": [
"css-color-function",
"postcss"
],
"effects": [],
"range": "*",
"nodes": [
"node_modules/postcss-color-function"
],
"fixAvailable": true
},
"postcss-color-gray": {
"name": "postcss-color-gray",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "3.0.0 - 4.1.0",
"nodes": [
"node_modules/postcss-color-gray"
],
"fixAvailable": true
},
"postcss-color-hex-alpha": {
"name": "postcss-color-hex-alpha",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "1.3.0 - 3.0.0",
"nodes": [
"node_modules/postcss-color-hex-alpha"
],
"fixAvailable": true
},
"postcss-color-hsl": {
"name": "postcss-color-hsl",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [
"postcss-cssnext"
],
"range": "*",
"nodes": [
"node_modules/postcss-color-hsl"
],
"fixAvailable": false
},
"postcss-color-hwb": {
"name": "postcss-color-hwb",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": ">=1.2.0",
"nodes": [
"node_modules/postcss-color-hwb"
],
"fixAvailable": true
},
"postcss-color-rebeccapurple": {
"name": "postcss-color-rebeccapurple",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "1.2.0 - 3.1.0",
"nodes": [
"node_modules/postcss-color-rebeccapurple"
],
"fixAvailable": true
},
"postcss-color-rgb": {
"name": "postcss-color-rgb",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "*",
"nodes": [
"node_modules/postcss-color-rgb"
],
"fixAvailable": true
},
"postcss-color-rgba-fallback": {
"name": "postcss-color-rgba-fallback",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "<=3.0.0",
"nodes": [
"node_modules/postcss-color-rgba-fallback"
],
"fixAvailable": true
},
"postcss-cssnext": {
"name": "postcss-cssnext",
"severity": "moderate",
"isDirect": true,
"via": [
"autoprefixer",
"pixrem",
"pleeease-filters",
"postcss",
"postcss-apply",
"postcss-attribute-case-insensitive",
"postcss-color-function",
"postcss-color-gray",
"postcss-color-hex-alpha",
"postcss-color-hsl",
"postcss-color-hwb",
"postcss-color-rebeccapurple",
"postcss-color-rgb",
"postcss-color-rgba-fallback",
"postcss-custom-media",
"postcss-custom-properties",
"postcss-custom-selectors",
"postcss-font-family-system-ui",
"postcss-font-variant",
"postcss-image-set-polyfill",
"postcss-initial",
"postcss-media-minmax",
"postcss-nesting",
"postcss-pseudo-class-any-link",
"postcss-pseudoelements",
"postcss-replace-overflow-wrap",
"postcss-selector-matches",
"postcss-selector-not"
],
"effects": [],
"range": "*",
"nodes": [
"node_modules/postcss-cssnext"
],
"fixAvailable": false
},
"postcss-custom-media": {
"name": "postcss-custom-media",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "4.0.0 - 6.0.0",
"nodes": [
"node_modules/postcss-custom-media"
],
"fixAvailable": true
},
"postcss-custom-properties": {
"name": "postcss-custom-properties",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "3.3.0 - 7.0.0",
"nodes": [
"node_modules/postcss-custom-properties"
],
"fixAvailable": true
},
"postcss-custom-selectors": {
"name": "postcss-custom-selectors",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss",
"postcss-selector-matches"
],
"effects": [],
"range": "2.3.0 - 4.0.1",
"nodes": [
"node_modules/postcss-custom-selectors"
],
"fixAvailable": true
},
"postcss-font-family-system-ui": {
"name": "postcss-font-family-system-ui",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [
"postcss-cssnext"
],
"range": "<=3.0.0",
"nodes": [
"node_modules/postcss-font-family-system-ui"
],
"fixAvailable": false
},
"postcss-font-variant": {
"name": "postcss-font-variant",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "1.2.0 - 3.0.0",
"nodes": [
"node_modules/postcss-font-variant"
],
"fixAvailable": true
},
"postcss-image-set-polyfill": {
"name": "postcss-image-set-polyfill",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [
"postcss-cssnext"
],
"range": "<=0.4.4",
"nodes": [
"node_modules/postcss-image-set-polyfill"
],
"fixAvailable": false
},
"postcss-initial": {
"name": "postcss-initial",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [
"postcss-cssnext"
],
"range": "<=2.0.0",
"nodes": [
"node_modules/postcss-initial"
],
"fixAvailable": false
},
"postcss-media-minmax": {
"name": "postcss-media-minmax",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "1.2.0 - 3.0.0",
"nodes": [
"node_modules/postcss-media-minmax"
],
"fixAvailable": true
},
"postcss-nesting": {
"name": "postcss-nesting",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [
"postcss-cssnext"
],
"range": "<=6.0.0",
"nodes": [
"node_modules/postcss-nesting"
],
"fixAvailable": false
},
"postcss-pseudo-class-any-link": {
"name": "postcss-pseudo-class-any-link",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "<=5.0.0",
"nodes": [
"node_modules/postcss-pseudo-class-any-link"
],
"fixAvailable": true
},
"postcss-pseudoelements": {
"name": "postcss-pseudoelements",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": ">=2.2.0",
"nodes": [
"node_modules/postcss-pseudoelements"
],
"fixAvailable": true
},
"postcss-replace-overflow-wrap": {
"name": "postcss-replace-overflow-wrap",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [
"postcss-cssnext"
],
"range": "<=2.0.0",
"nodes": [
"node_modules/postcss-replace-overflow-wrap"
],
"fixAvailable": false
},
"postcss-selector-matches": {
"name": "postcss-selector-matches",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "<=3.0.1",
"nodes": [
"node_modules/postcss-selector-matches"
],
"fixAvailable": true
},
"postcss-selector-not": {
"name": "postcss-selector-not",
"severity": "moderate",
"isDirect": false,
"via": [
"postcss"
],
"effects": [],
"range": "<=3.0.1",
"nodes": [
"node_modules/postcss-selector-not"
],
"fixAvailable": true
},
"postcss-svgo": {
"name": "postcss-svgo",
"severity": "high",
"isDirect": false,
"via": [
"svgo"
],
"effects": [
"cssnano-preset-default"
],
"range": "4.0.0-nightly.2020.1.9 - 5.0.0-rc.2",
"nodes": [
"node_modules/postcss-svgo"
],
"fixAvailable": {
"name": "cssnano",
"version": "6.0.1",
"isSemVerMajor": true
}
},
"preq": {
"name": "preq",
"severity": "high",
"isDirect": true,
"via": [
"request",
"requestretry"
],
"effects": [],
"range": "*",
"nodes": [
"node_modules/preq"
],
"fixAvailable": false
},
"request": {
"name": "request",
"severity": "moderate",
"isDirect": false,
"via": [
{
"source": 1091725,
"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": [
"phantomjs-prebuilt",
"preq"
],
"range": "*",
"nodes": [
"node_modules/request"
],
"fixAvailable": {
"name": "gulp-svg-sprite",
"version": "2.0.3",
"isSemVerMajor": true
}
},
"requestretry": {
"name": "requestretry",
"severity": "high",
"isDirect": false,
"via": [
{
"source": 1090420,
"name": "requestretry",
"dependency": "requestretry",
"title": "Cookie exposure in requestretry",
"url": "https://github.com/advisories/GHSA-hjp8-2cm3-cc45",
"severity": "high",
"cwe": [
"CWE-200"
],
"cvss": {
"score": 7.5,
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"
},
"range": "<7.0.0"
}
],
"effects": [
"preq"
],
"range": "<7.0.0",
"nodes": [
"node_modules/requestretry"
],
"fixAvailable": false
},
"svg-sprite": {
"name": "svg-sprite",
"severity": "high",
"isDirect": false,
"via": [
"phantomjs-prebuilt",
"svgo"
],
"effects": [
"gulp-svg-sprite"
],
"range": "1.3.0 - 1.5.4",
"nodes": [
"node_modules/svg-sprite"
],
"fixAvailable": {
"name": "gulp-svg-sprite",
"version": "2.0.3",
"isSemVerMajor": true
}
},
"svgo": {
"name": "svgo",
"severity": "high",
"isDirect": false,
"via": [
"css-select"
],
"effects": [
"postcss-svgo",
"svg-sprite"
],
"range": "1.0.0 - 1.3.2",
"nodes": [
"node_modules/svgo"
],
"fixAvailable": {
"name": "gulp-svg-sprite",
"version": "2.0.3",
"isSemVerMajor": true
}
},
"vinyl-fs": {
"name": "vinyl-fs",
"severity": "high",
"isDirect": false,
"via": [
"glob-stream"
],
"effects": [
"gulp",
"gulp-useref"
],
"range": ">=2.4.2",
"nodes": [
"node_modules/vinyl-fs"
],
"fixAvailable": {
"name": "gulp",
"version": "3.9.1",
"isSemVerMajor": true
}
}
},
"metadata": {
"vulnerabilities": {
"info": 0,
"low": 0,
"moderate": 35,
"high": 17,
"critical": 4,
"total": 56
},
"dependencies": {
"prod": 1,
"dev": 1790,
"optional": 4,
"peer": 0,
"peerOptional": 0,
"total": 1790
}
}
}
--- end ---
$ /usr/bin/npm install
--- stderr ---
npm WARN deprecated @types/browserslist@4.15.0: This is a stub types definition. browserslist provides its own type definitions, so you do not need this installed.
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility
npm WARN deprecated flatten@1.0.3: flatten is deprecated in favor of utility frameworks such as lodash.
npm WARN deprecated @stylelint/postcss-markdown@0.36.2: Use the original unforked package instead: postcss-markdown
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated gulp-util@3.0.8: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated phantomjs-prebuilt@2.1.16: this package is now deprecated
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 @stylelint/postcss-css-in-js@0.37.3: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated postcss-cssnext@3.1.1: 'postcss-cssnext' has been deprecated in favor of 'postcss-preset-env'. Read more at https://moox.io/blog/deprecating-cssnext/
npm WARN deprecated svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated iltorb@2.4.5: The zlib module provides APIs for brotli compression/decompression starting with Node.js v10.16.0, please use it over iltorb
npm WARN deprecated core-js@2.6.12: core-js@<3.23.3 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. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
--- stdout ---
added 1727 packages, and audited 1728 packages in 1m
165 packages are looking for funding
run `npm fund` for details
56 vulnerabilities (35 moderate, 17 high, 4 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 ---
Upgrading n:eslint-config-wikimedia from 0.22.1 -> 0.25.0
Upgrading n:stylelint-config-wikimedia from 0.10.3 -> 0.15.0
$ /usr/bin/npm install
--- stdout ---
added 34 packages, removed 63 packages, changed 12 packages, and audited 1699 packages in 6s
143 packages are looking for funding
run `npm fund` for details
56 vulnerabilities (35 moderate, 17 high, 4 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 ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json
--- end ---
$ ./node_modules/.bin/eslint . --fix
--- stdout ---
/src/repo/gulpfile.js/config.js
47:17 warning Found non-literal argument in require security/detect-non-literal-require
/src/repo/hbs-helpers.global.js
90:36 warning Unsafe Regular Expression security/detect-unsafe-regex
/src/repo/src/common/assets/js/wm-portal.js
228:39 warning Unsafe Regular Expression security/detect-unsafe-regex
/src/repo/src/common/assets/js/wm-typeahead.js
217:18 warning Found non-literal argument to RegExp Constructor security/detect-non-literal-regexp
/src/repo/src/wikibooks.org/controller.js
119:3 warning Found writeFileSync from package "fs" with non literal argument at index 0 security/detect-non-literal-fs-filename
/src/repo/src/wikinews.org/controller.js
119:3 warning Found writeFileSync from package "fs" with non literal argument at index 0 security/detect-non-literal-fs-filename
/src/repo/src/wikipedia.org/controller.js
121:3 warning Found writeFileSync from package "fs" with non literal argument at index 0 security/detect-non-literal-fs-filename
/src/repo/src/wikiquote.org/controller.js
119:3 warning Found writeFileSync from package "fs" with non literal argument at index 0 security/detect-non-literal-fs-filename
/src/repo/src/wikiversity.org/controller.js
119:3 warning Found writeFileSync from package "fs" with non literal argument at index 0 security/detect-non-literal-fs-filename
/src/repo/src/wikivoyage.org/controller.js
119:3 warning Found writeFileSync from package "fs" with non literal argument at index 0 security/detect-non-literal-fs-filename
/src/repo/src/wiktionary.org/controller.js
119:3 warning Found writeFileSync from package "fs" with non literal argument at index 0 security/detect-non-literal-fs-filename
✖ 11 problems (0 errors, 11 warnings)
--- end ---
$ ./node_modules/.bin/eslint . -f json
--- stdout ---
[{"filePath":"/src/repo/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/.stylelintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/gulpfile.js/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/gulpfile.js/config.js","messages":[{"ruleId":"security/detect-non-literal-require","severity":1,"message":"Found non-literal argument in require","line":47,"column":17,"nodeType":"CallExpression","endLine":47,"endColumn":61}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"var argv = require( 'yargs' ).argv,\n\tportalParam = argv.portal,\n\tgetBaseDir, getProdDir, getConfig;\n\n/**\n * Preliminary task for tasks that require the portal param.\n * Also sets config for remaining tasks.\n */\n\nfunction requirePortalParam() {\n\tif ( !portalParam ) {\n\t\tconsole.log( '\\x1b[31m' );\n\t\tconsole.log( 'Error: please specify the portal you wish to build.' );\n\t\tconsole.log( 'Type gulp help for more information.' );\n\t\tconsole.log( '\\x1b[0m' );\n\t\tprocess.exit( 1 );\n\t}\n}\n\ngetBaseDir = function () {\n\trequirePortalParam();\n\n\tgetBaseDir = function () {\n\t\treturn 'src/' + portalParam + '/';\n\t};\n\treturn getBaseDir();\n};\n\ngetProdDir = function () {\n\trequirePortalParam();\n\n\tgetProdDir = function () {\n\t\treturn 'prod/' + portalParam + '/';\n\t};\n\treturn getProdDir();\n};\n\ngetConfig = function () {\n\tvar config = {},\n\t\tbaseDir, prodDir;\n\n\tbaseDir = getBaseDir();\n\tprodDir = getProdDir();\n\n\tconfig.hb = {\n\t\tsrc: baseDir + 'index.handlebars',\n\t\ttemplateData: require( '../' + baseDir + 'controller.js' ),\n\t\toptions: {\n\t\t\tbatch: [ './src/common/templates', './' + baseDir + '/templates' ],\n\t\t\thelpers: require( '../hbs-helpers.global' )\n\t\t}\n\t};\n\n\tconfig.htmlmin = {\n\t\tsrc: prodDir + 'index.html',\n\t\tdest: prodDir + 'index.html',\n\t\toptions: {\n\t\t\tpreventAttributesEscaping: true,\n\t\t\tcollapseWhitespace: true,\n\t\t\tpreserveLineBreaks: true,\n\t\t\tcollapseBooleanAttributes: false\n\t\t}\n\t};\n\n\tconfig.watch = {\n\t\tsprites: [ baseDir + 'assets/img/sprite_assets/**/*' ],\n\t\tpostcss: baseDir + 'assets/postcss/*.css',\n\t\thb: [ baseDir + '*.handlebars',\n\t\t\tbaseDir + '.json',\n\t\t\tbaseDir + 'controller.js',\n\t\t\tbaseDir + 'templates/**/*',\n\t\t\t'./src/common/templates'\n\t\t]\n\t};\n\n\tconfig.img = {\n\t\tsrc: [ baseDir + 'assets/img/*', '!' + baseDir + 'assets/img/sprite_assets' ],\n\t\tdest: prodDir + 'assets/img',\n\t\tsprite: {\n\t\t\tcssPrefix: 'sprite',\n\t\t\tassets: baseDir + 'assets/img/sprite_assets/*.svg',\n\t\t\toutputName: 'sprite',\n\t\t\toutputCSS: 'sprite.css',\n\t\t\toutputCSSPath: baseDir + 'assets/css/sprite.css',\n\t\t\toutputSVGGlob: baseDir + 'assets/img/sprite*.svg',\n\t\t\ttemplate: baseDir + 'assets/css/sprite-template.mustache'\n\t\t}\n\t};\n\n\tgetConfig = function () {\n\t\treturn config;\n\t};\n\treturn getConfig();\n};\n\nexports.requirePortalParam = requirePortalParam;\nexports.getBaseDir = getBaseDir;\nexports.getProdDir = getProdDir;\nexports.getConfig = getConfig;\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/gulpfile.js/dev.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/gulpfile.js/handlebar.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/gulpfile.js/help.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/gulpfile.js/index.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/gulpfile.js/postcss.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/gulpfile.js/prod.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/gulpfile.js/scap-urls.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/gulpfile.js/sprites.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/gulpfile.js/stats.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/hbs-helpers.global.js","messages":[{"ruleId":"security/detect-unsafe-regex","severity":1,"message":"Unsafe Regular Expression","line":90,"column":36,"nodeType":"Literal","endLine":90,"endColumn":61}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint-env node */\nvar Handlebars = require( 'handlebars' ),\n\thelpers = {};\n\n/**\n * If `attrs` is an object in the current context,\n * it will print out the properties and their values\n * as if they were element attributes.\n *\n * // if this is:\n * { 'id': 'elt_id', 'class': 'elt_class' }\n *\n * // it will output:\n * ' id=\"elt_id\" class=\"elt_class\"'\n *\n * For security reasons, we only support whitelisted attributes.\n * A warning message will be prompted (for review) when an attribute is\n * rejected.\n *\n * @param {string} attrs\n * @return {Handlebars.SafeString}\n */\nhelpers.printAttrs = function ( attrs ) {\n\tvar output = '',\n\t\twhiteList = [ 'id', 'class', 'lang', 'data-title-hans', 'data-title-hant', 'data-hans', 'data-hant' ],\n\t\tlowercase, attr;\n\n\tif ( this[ attrs ] ) {\n\t\tfor ( attr in this[ attrs ] ) {\n\t\t\tlowercase = attr.toLowerCase();\n\t\t\tif ( whiteList.indexOf( lowercase ) > -1 ) {\n\t\t\t\toutput += ' ' + Handlebars.escapeExpression( lowercase ) + '=\"' + Handlebars.escapeExpression( this[ attrs ][ attr ] ) + '\"';\n\t\t\t} else {\n\t\t\t\tconsole.log( '\\x1b[31m' );\n\t\t\t\tconsole.log( 'Warning: the attr \"' + lowercase + '\" was rejected by the printAttrs helper.' );\n\t\t\t\tconsole.log( '\\x1b[0m' );\n\t\t\t}\n\t\t}\n\t}\n\treturn new Handlebars.SafeString( output );\n};\n\n/**\n * If `classes` is an array in the current context,\n * it will print out its value by concatenating all of the elements in\n * it, separated by spaces.\n *\n * // if this is:\n * [ 'class1', 'class2' ]\n *\n * // it will output:\n * ' class1 class2'\n *\n * @param {string} classes\n * @return {Handlebars.SafeString}\n */\nhelpers.printClasses = function ( classes ) {\n\tvar output = '';\n\n\tif ( this[ classes ] && Array.isArray( this[ classes ] ) ) {\n\t\toutput = Handlebars.escapeExpression( ' ' + this[ classes ].join( ' ' ) );\n\t}\n\n\treturn new Handlebars.SafeString( output );\n};\n\n/**\n * Equal to helper\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @param {Object} options Handlebars options object.\n * @return {Function}\n */\nhelpers.eq = function ( a, b, options ) {\n\treturn ( a === b ) ? options.fn( this ) : options.inverse( this );\n};\n\n/**\n * Converts the number into a string and adds a space to separate each group of\n * 3 digits.\n *\n * Inspired from http://stackoverflow.com/a/2254896\n *\n * @param {number} number\n * @return {string}\n * @private\n */\nfunction thousandFloor( number ) {\n\treturn number.toString().replace( /(\\d)(?=(\\d{3})+(?!\\d))/g, '$1 ' );\n}\n\n/**\n *\n * @param {number} number\n * @param {Object} options Handlebars options object.\n * @param {Object} options.hash\n * @param {boolean} [options.hash.thousandSeparator=false] Numbers are run through\n * {@link #thousandFloor}.\n * @param {boolean} [options.hash.rounded=false] Rounds numbers downwards to\n * the nearest power of ten, up to a thousand.\n * @param {boolean} [options.hash.nbsp=false] The separating space is replaced by\n * a ` `.\n * @return {Handlebars.SafeString}\n */\nhelpers.formatNumber = function ( number, options ) {\n\tvar numberLength, powerOfTen;\n\n\tif ( options.hash.rounded ) {\n\t\tnumberLength = Math.min( number.toString().length - 1, 3 );\n\t\tpowerOfTen = Math.pow( 10, numberLength );\n\n\t\tnumber = Math.floor( number / powerOfTen ) * powerOfTen;\n\t}\n\tif ( options.hash.thousandSeparator ) {\n\t\tnumber = thousandFloor( number );\n\t}\n\tif ( options.hash.nbsp ) {\n\t\tnumber = number.toString().split( ' ' ).join( ' ' );\n\t}\n\treturn new Handlebars.SafeString( number );\n};\n\n/**\n * Wraps a block to allow you to put `~` on this helper\n * in order to clean whitespaces.\n *\n * @param {Object} options Handlebars options object.\n * @return {Function}\n */\nhelpers.trim = function ( options ) {\n\treturn options.fn( this );\n};\n\n/**\n * Checks if an array contains an element.\n *\n * @param {Mixed} list\n * @param {Array} elem\n * @param {Object} options Handlebars options object.\n * @return {Function}\n */\nhelpers.has = function ( list, elem, options ) {\n\tif ( list.indexOf( elem ) > -1 ) {\n\t\treturn options.fn( this );\n\t}\n\treturn options.inverse( this );\n};\n\nmodule.exports = helpers;\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/.eslintrc.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/common/assets/js/lang-dropdown.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/common/assets/js/mediawiki.lite.js","messages":[],"suppressedMessages":[{"ruleId":"no-redeclare","severity":2,"message":"'mw' is already defined as a built-in global variable.","line":2,"column":5,"nodeType":"Identifier","messageId":"redeclaredAsBuiltin","endLine":2,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-use-before-define","severity":2,"message":"'mw' was used before it was defined.","line":2,"column":10,"nodeType":"Identifier","messageId":"usedBeforeDefined","endLine":2,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/common/assets/js/page-localized.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/common/assets/js/polyfills.js","messages":[],"suppressedMessages":[{"ruleId":"no-shadow","severity":2,"message":"'matches' is already declared in the upper scope on line 15 column 39.","line":16,"column":7,"nodeType":"Identifier","messageId":"noShadow","endLine":16,"endColumn":14,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":18,"column":35,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":18,"endColumn":36,"fix":{"range":[588,588],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":18,"column":37,"nodeType":"Program","messageId":"missingClosingSpace","endLine":18,"endColumn":38,"fix":{"range":[589,589],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'while' condition.","line":18,"column":50,"nodeType":"WhileStatement","messageId":"missingCurlyAfterCondition","endLine":18,"endColumn":51,"fix":{"range":[602,603],"text":"{;}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multiple-empty-lines","severity":2,"message":"More than 1 blank line not allowed.","line":25,"column":1,"nodeType":"Program","messageId":"consecutiveBlank","endLine":26,"endColumn":1,"fix":{"range":[656,657],"text":""},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"fn\" declaration.","line":26,"column":1,"nodeType":"Block","endLine":30,"endColumn":4,"fix":{"range":[658,805],"text":"/**\n * Queues the given function to be called once the DOM has finished loading.\n *\n * Based on jquery/src/core/ready.js@825ac37 (MIT licensed)\n * @param fn\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-implicit-globals","severity":2,"message":"Unexpected function declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable.","line":31,"column":1,"nodeType":"FunctionDeclaration","messageId":"globalNonLexicalBinding","endLine":47,"endColumn":2,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'doWhenReady' is defined but never used.","line":31,"column":10,"nodeType":"Identifier","messageId":"unusedVar","endLine":31,"endColumn":21,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":36,"column":16,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":36,"endColumn":17,"fix":{"range":[993,993],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"lang\" declaration.","line":53,"column":1,"nodeType":"Block","endLine":56,"endColumn":4,"fix":{"range":[1361,1459],"text":"/**\n * Converts strings to iso639.\n * http://www.iso.org/iso/home/standards/language_codes.htm\n * @param lang\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":53,"column":1,"nodeType":"Block","endLine":56,"endColumn":4,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-implicit-globals","severity":2,"message":"Unexpected function declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable.","line":57,"column":1,"nodeType":"FunctionDeclaration","messageId":"globalNonLexicalBinding","endLine":69,"endColumn":2,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'getIso639' is defined but never used.","line":57,"column":10,"nodeType":"Identifier","messageId":"unusedVar","endLine":57,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":64,"column":2,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":64,"endColumn":47,"fix":{"range":[1626,1627],"text":"I"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":71,"column":1,"nodeType":"Block","endLine":80,"endColumn":4,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag (preference). Replace \"returns\" JSDoc tag with \"return\".","line":79,"column":null,"nodeType":"Block","endLine":79,"endColumn":null,"fix":{"range":[1729,2016],"text":"/**\n * Detects reported or approximate device pixel ratio.\n * * 1.0 means 1 CSS pixel is 1 hardware pixel\n * * 2.0 means 1 CSS pixel is 2 hardware pixels\n * * etc.\n *\n * Uses window.devicePixelRatio if available, or CSS media queries on IE.\n *\n * @return {number} Device pixel ratio\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-implicit-globals","severity":2,"message":"Unexpected function declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable.","line":81,"column":1,"nodeType":"FunctionDeclaration","messageId":"globalNonLexicalBinding","endLine":108,"endColumn":2,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'getDevicePixelRatio' is defined but never used.","line":81,"column":10,"nodeType":"Identifier","messageId":"unusedVar","endLine":81,"endColumn":29,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Unexpected space before function parentheses.","line":81,"column":29,"nodeType":"FunctionDeclaration","messageId":"unexpectedSpace","endLine":81,"endColumn":30,"fix":{"range":[2045,2046],"text":""},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":93,"column":3,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":93,"endColumn":69,"fix":{"range":[2431,2432],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":94,"column":3,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":94,"endColumn":68,"fix":{"range":[2500,2501],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":95,"column":3,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":95,"endColumn":57,"fix":{"range":[2568,2569],"text":"F"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":114,"column":4,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":114,"endColumn":5,"fix":{"range":[3010,3010],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":114,"column":31,"nodeType":"Program","messageId":"missingClosingSpace","endLine":114,"endColumn":32,"fix":{"range":[3036,3036],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":120,"column":4,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":120,"endColumn":5,"fix":{"range":[3160,3160],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":120,"column":31,"nodeType":"Program","messageId":"missingClosingSpace","endLine":120,"endColumn":32,"fix":{"range":[3186,3186],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":121,"column":38,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":121,"endColumn":39,"fix":{"range":[3228,3228],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":121,"column":38,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":121,"endColumn":39,"fix":{"range":[3227,3227],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":121,"column":40,"nodeType":"Program","messageId":"missingClosingSpace","endLine":121,"endColumn":41,"fix":{"range":[3229,3229],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 2 tabs but found 1.","line":124,"column":1,"nodeType":"Keyword","messageId":"wrongIndentation","endLine":124,"endColumn":2,"fix":{"range":[3251,3252],"text":"\t\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 3 tabs but found 2.","line":125,"column":1,"nodeType":"Keyword","messageId":"wrongIndentation","endLine":125,"endColumn":3,"fix":{"range":[3257,3259],"text":"\t\t\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":125,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":125,"endColumn":7,"fix":{"range":[3263,3263],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":125,"column":37,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":125,"endColumn":38,"fix":{"range":[3294,3294],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":125,"column":43,"nodeType":"Program","messageId":"missingClosingSpace","endLine":125,"endColumn":44,"fix":{"range":[3299,3299],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":125,"column":44,"nodeType":"Program","messageId":"missingClosingSpace","endLine":125,"endColumn":45,"fix":{"range":[3300,3300],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":125,"column":46,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":125,"endColumn":56,"fix":{"range":[3302,3312],"text":"{return el;}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 3 tabs but found 2.","line":126,"column":1,"nodeType":"Identifier","messageId":"wrongIndentation","endLine":126,"endColumn":3,"fix":{"range":[3313,3315],"text":"\t\t\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 2 tabs but found 1.","line":127,"column":1,"nodeType":"Punctuator","messageId":"wrongIndentation","endLine":127,"endColumn":2,"fix":{"range":[3355,3356],"text":"\t\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":127,"column":10,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":127,"endColumn":11,"fix":{"range":[3365,3365],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":127,"column":43,"nodeType":"Program","messageId":"missingClosingSpace","endLine":127,"endColumn":44,"fix":{"range":[3397,3397],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 2 tabs but found 1.","line":128,"column":1,"nodeType":"Keyword","messageId":"wrongIndentation","endLine":128,"endColumn":2,"fix":{"range":[3400,3401],"text":"\t\t"},"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/common/assets/js/search-language-picker.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/common/assets/js/seedrandom.js","messages":[],"suppressedMessages":[{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":7,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":7,"endColumn":30,"fix":{"range":[303,304],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":11,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":11,"endColumn":69,"fix":{"range":[435,436],"text":"A"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":12,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":12,"endColumn":72,"fix":{"range":[504,505],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":19,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":19,"endColumn":74,"fix":{"range":[771,772],"text":"I"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":22,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":22,"endColumn":73,"fix":{"range":[924,925],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":23,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":23,"endColumn":68,"fix":{"range":[997,998],"text":"A"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":28,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":28,"endColumn":66,"fix":{"range":[1248,1249],"text":"T"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":32,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":32,"endColumn":48,"fix":{"range":[1447,1448],"text":"F"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":36,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":36,"endColumn":64,"fix":{"range":[1658,1659],"text":"W"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":41,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":41,"endColumn":74,"fix":{"range":[1785,1786],"text":"C"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":42,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":42,"endColumn":75,"fix":{"range":[1859,1860],"text":"C"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":43,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":43,"endColumn":78,"fix":{"range":[1934,1935],"text":"V"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":45,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":45,"endColumn":78,"fix":{"range":[2015,2016],"text":"V"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":46,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":46,"endColumn":75,"fix":{"range":[2093,2094],"text":"C"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":49,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":49,"endColumn":73,"fix":{"range":[2254,2255],"text":"C"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":52,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":52,"endColumn":82,"fix":{"range":[2405,2406],"text":"C"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":57,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":57,"endColumn":66,"fix":{"range":[2572,2573],"text":"I"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":58,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":58,"endColumn":74,"fix":{"range":[2638,2639],"text":"Z"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":59,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":59,"endColumn":61,"fix":{"range":[2712,2713],"text":"T"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":63,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":63,"endColumn":79,"fix":{"range":[2926,2927],"text":"C"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":64,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":64,"endColumn":76,"fix":{"range":[3005,3006],"text":"E"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":67,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":67,"endColumn":74,"fix":{"range":[3160,3161],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":68,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":68,"endColumn":72,"fix":{"range":[3234,3235],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":69,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":69,"endColumn":69,"fix":{"range":[3306,3307],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":76,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":76,"endColumn":79,"fix":{"range":[3522,3523],"text":"M"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":79,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":79,"endColumn":70,"fix":{"range":[3680,3681],"text":"N"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":82,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":82,"endColumn":76,"fix":{"range":[3827,3828],"text":"N"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":83,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":83,"endColumn":77,"fix":{"range":[3903,3904],"text":"D"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":86,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":86,"endColumn":74,"fix":{"range":[4061,4062],"text":"B"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":87,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":87,"endColumn":51,"fix":{"range":[4135,4136],"text":"W"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"pool\" declaration.","line":101,"column":1,"nodeType":"Block","endLine":106,"endColumn":4,"fix":{"range":[4972,5117],"text":"/**\n * All code is in an anonymous closure to keep the global namespace clean.\n *\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param {number=} overflow\n * @param {number=} startdenom\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"math\" declaration.","line":101,"column":1,"nodeType":"Block","endLine":106,"endColumn":4,"fix":{"range":[4972,5117],"text":"/**\n * All code is in an anonymous closure to keep the global namespace clean.\n *\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param {number=} overflow\n * @param {number=} startdenom\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"width\" declaration.","line":101,"column":1,"nodeType":"Block","endLine":106,"endColumn":4,"fix":{"range":[4972,5117],"text":"/**\n * All code is in an anonymous closure to keep the global namespace clean.\n *\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param {number=} overflow\n * @param {number=} startdenom\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"chunks\" declaration.","line":101,"column":1,"nodeType":"Block","endLine":106,"endColumn":4,"fix":{"range":[4972,5117],"text":"/**\n * All code is in an anonymous closure to keep the global namespace clean.\n *\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param {number=} overflow\n * @param {number=} startdenom\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"significance\" declaration.","line":101,"column":1,"nodeType":"Block","endLine":106,"endColumn":4,"fix":{"range":[4972,5117],"text":"/**\n * All code is in an anonymous closure to keep the global namespace clean.\n *\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param pool\n * @param math\n * @param width\n * @param chunks\n * @param significance\n * @param {number=} overflow\n * @param {number=} startdenom\n */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/check-param-names","severity":1,"message":"Expected @param names to be \"pool, math, width, chunks, significance, overflow, startdenom\". Got \"overflow, startdenom\".","line":104,"column":null,"nodeType":"Block","endLine":104,"endColumn":null,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":107,"column":1,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":107,"endColumn":2,"fix":{"range":[5119,5119],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"wrap-iife","severity":2,"message":"Move the invocation into the parens that contain the function.","line":107,"column":1,"nodeType":"CallExpression","messageId":"moveInvocation","endLine":278,"endColumn":2,"fix":{"range":[10128,10413],"text":"(\n\t[], // pool: entropy pool starts empty\n\tMath, // math: package containing random, pow, and seedrandom\n\t256, // width: each RC4 output is 0 <= x < 256\n\t6, // chunks: at least six RC4 outputs for each double\n\t52 // significance: there are 52 significant digits in a double\n))"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":107,"column":11,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":107,"endColumn":12,"fix":{"range":[5129,5129],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":107,"column":73,"nodeType":"Program","messageId":"missingClosingSpace","endLine":107,"endColumn":74,"fix":{"range":[5190,5190],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":110,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":110,"endColumn":1,"fix":{"range":[5210,5210],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":111,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":111,"endColumn":16,"fix":{"range":[5216,5217],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":111,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":111,"endColumn":1,"fix":{"range":[5213,5213],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":112,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":112,"endColumn":1,"fix":{"range":[5229,5229],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":113,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":113,"endColumn":1,"fix":{"range":[5281,5281],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":114,"column":6,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":114,"endColumn":7,"fix":{"range":[5290,5290],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"dot-notation","severity":2,"message":"[\"seedrandom\"] is better written in dot notation.","line":114,"column":7,"nodeType":"Literal","messageId":"useDot","endLine":114,"endColumn":19,"fix":{"range":[5289,5303],"text":".seedrandom"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":114,"column":19,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":114,"endColumn":20,"fix":{"range":[5302,5302],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":114,"column":42,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":114,"endColumn":43,"fix":{"range":[5326,5326],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'use_entropy' is not in camel case.","line":114,"column":49,"nodeType":"Identifier","messageId":"notCamelCase","endLine":114,"endColumn":60,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":114,"column":60,"nodeType":"Program","messageId":"missingClosingSpace","endLine":114,"endColumn":61,"fix":{"range":[5343,5343],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":119,"column":16,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":119,"endColumn":17,"fix":{"range":[5464,5464],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'use_entropy' is not in camel case.","line":120,"column":4,"nodeType":"Identifier","messageId":"notCamelCase","endLine":120,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required after '['.","line":120,"column":18,"nodeType":"ArrayExpression","messageId":"missingSpaceAfter","endLine":120,"endColumn":19,"fix":{"range":[5491,5491],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required before ']'.","line":120,"column":29,"nodeType":"ArrayExpression","messageId":"missingSpaceBefore","endLine":120,"endColumn":30,"fix":{"range":[5501,5501],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required after '['.","line":122,"column":6,"nodeType":"ArrayExpression","messageId":"missingSpaceAfter","endLine":122,"endColumn":7,"fix":{"range":[5541,5541],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"unicorn/prefer-date-now","severity":2,"message":"Prefer `Date.now()` over `Date#getTime()`.","line":122,"column":18,"nodeType":"Identifier","messageId":"prefer-date-now-over-methods","endLine":122,"endColumn":25,"fix":{"range":[5541,5561],"text":"Date.now()"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required before ']'.","line":122,"column":41,"nodeType":"ArrayExpression","messageId":"missingSpaceBefore","endLine":122,"endColumn":42,"fix":{"range":[5575,5575],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":122,"column":45,"nodeType":"Program","messageId":"missingClosingSpace","endLine":122,"endColumn":46,"fix":{"range":[5579,5579],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":122,"column":51,"nodeType":"Program","messageId":"missingClosingSpace","endLine":122,"endColumn":52,"fix":{"range":[5585,5585],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":125,"column":18,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":125,"endColumn":19,"fix":{"range":[5658,5658],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":125,"column":22,"nodeType":"Program","messageId":"missingClosingSpace","endLine":125,"endColumn":23,"fix":{"range":[5661,5661],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":128,"column":9,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":128,"endColumn":10,"fix":{"range":[5724,5724],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":128,"column":22,"nodeType":"Program","messageId":"missingClosingSpace","endLine":128,"endColumn":23,"fix":{"range":[5736,5736],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":133,"column":3,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":133,"endColumn":68,"fix":{"range":[5846,5847],"text":"R"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":135,"column":7,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":135,"endColumn":8,"fix":{"range":[5917,5917],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"dot-notation","severity":2,"message":"[\"seededrandom\"] is better written in dot notation.","line":135,"column":8,"nodeType":"Literal","messageId":"useDot","endLine":135,"endColumn":22,"fix":{"range":[5916,5932],"text":".seededrandom"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":135,"column":22,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":135,"endColumn":23,"fix":{"range":[5931,5931],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Closure to ...'.","line":135,"column":45,"nodeType":"Line","messageId":"multipleSpaces","endLine":135,"endColumn":47,"fix":{"range":[5954,5956],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":136,"column":18,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":136,"endColumn":19,"fix":{"range":[6012,6012],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":136,"column":25,"nodeType":"Program","messageId":"missingClosingSpace","endLine":136,"endColumn":26,"fix":{"range":[6018,6018],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Start with ...'.","line":136,"column":27,"nodeType":"Line","messageId":"multipleSpaces","endLine":136,"endColumn":40,"fix":{"range":[6020,6033],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// and denom...'.","line":137,"column":23,"nodeType":"Line","messageId":"multipleSpaces","endLine":137,"endColumn":40,"fix":{"range":[6092,6109],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":137,"column":40,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":137,"endColumn":72,"fix":{"range":[6114,6115],"text":"A"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// and no 'e...'.","line":138,"column":14,"nodeType":"Line","messageId":"multipleSpaces","endLine":138,"endColumn":40,"fix":{"range":[6155,6181],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":138,"column":40,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":138,"endColumn":70,"fix":{"range":[6186,6187],"text":"A"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":139,"column":10,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":139,"endColumn":11,"fix":{"range":[6222,6222],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":139,"column":27,"nodeType":"Program","messageId":"missingClosingSpace","endLine":139,"endColumn":28,"fix":{"range":[6238,6238],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Fill up all...'.","line":139,"column":30,"nodeType":"Line","messageId":"multipleSpaces","endLine":139,"endColumn":40,"fix":{"range":[6241,6251],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":140,"column":9,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":140,"endColumn":10,"fix":{"range":[6297,6297],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":140,"column":15,"nodeType":"Program","messageId":"missingClosingSpace","endLine":140,"endColumn":16,"fix":{"range":[6302,6302],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// shifting ...'.","line":140,"column":25,"nodeType":"Line","messageId":"multipleSpaces","endLine":140,"endColumn":39,"fix":{"range":[6312,6326],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":140,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":140,"endColumn":66,"fix":{"range":[6331,6332],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// denominat...'.","line":141,"column":16,"nodeType":"Line","messageId":"multipleSpaces","endLine":141,"endColumn":39,"fix":{"range":[6369,6392],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":141,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":141,"endColumn":72,"fix":{"range":[6397,6398],"text":"D"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":142,"column":15,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":142,"endColumn":16,"fix":{"range":[6441,6441],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":142,"column":17,"nodeType":"Program","messageId":"missingClosingSpace","endLine":142,"endColumn":18,"fix":{"range":[6442,6442],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// new least...'.","line":142,"column":19,"nodeType":"Line","messageId":"multipleSpaces","endLine":142,"endColumn":39,"fix":{"range":[6444,6464],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":142,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":142,"endColumn":71,"fix":{"range":[6469,6470],"text":"N"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":144,"column":10,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":144,"endColumn":11,"fix":{"range":[6512,6512],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":144,"column":24,"nodeType":"Program","messageId":"missingClosingSpace","endLine":144,"endColumn":25,"fix":{"range":[6525,6525],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// To avoid ro...'.","line":144,"column":27,"nodeType":"Line","messageId":"multipleSpaces","endLine":144,"endColumn":40,"fix":{"range":[6528,6541],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// last byte...'.","line":145,"column":12,"nodeType":"Line","messageId":"multipleSpaces","endLine":145,"endColumn":39,"fix":{"range":[6591,6618],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":145,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":145,"endColumn":71,"fix":{"range":[6623,6624],"text":"L"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// right usi...'.","line":146,"column":12,"nodeType":"Line","messageId":"multipleSpaces","endLine":146,"endColumn":39,"fix":{"range":[6662,6689],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":146,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":146,"endColumn":74,"fix":{"range":[6694,6695],"text":"R"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '>>>='.","line":147,"column":5,"nodeType":"AssignmentExpression","messageId":"unexpected","endLine":147,"endColumn":13,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// we have e...'.","line":147,"column":14,"nodeType":"Line","messageId":"multipleSpaces","endLine":147,"endColumn":39,"fix":{"range":[6738,6763],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":147,"column":39,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":147,"endColumn":77,"fix":{"range":[6768,6769],"text":"W"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":149,"column":11,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":149,"endColumn":12,"fix":{"range":[6818,6818],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":149,"column":17,"nodeType":"Program","messageId":"missingClosingSpace","endLine":149,"endColumn":18,"fix":{"range":[6823,6823],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Form the nu...'.","line":149,"column":23,"nodeType":"Line","messageId":"multipleSpaces","endLine":149,"endColumn":40,"fix":{"range":[6829,6846],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":156,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":156,"endColumn":1,"fix":{"range":[6941,6941],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":157,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":157,"endColumn":1,"fix":{"range":[6944,6944],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":158,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":158,"endColumn":1,"fix":{"range":[6952,6952],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":159,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":159,"endColumn":1,"fix":{"range":[6955,6955],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":160,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":160,"endColumn":73,"fix":{"range":[7029,7030],"text":"A"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":160,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":160,"endColumn":1,"fix":{"range":[7026,7026],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":161,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":161,"endColumn":1,"fix":{"range":[7099,7099],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":162,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":162,"endColumn":1,"fix":{"range":[7102,7102],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":163,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":163,"endColumn":71,"fix":{"range":[7177,7178],"text":"T"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":163,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":163,"endColumn":1,"fix":{"range":[7174,7174],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":164,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":164,"endColumn":50,"fix":{"range":[7248,7249],"text":"T"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":164,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":164,"endColumn":1,"fix":{"range":[7245,7245],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":165,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":165,"endColumn":1,"fix":{"range":[7295,7295],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"key\" declaration.","line":166,"column":2,"nodeType":"Block","endLine":166,"endColumn":21,"fix":{"range":[7299,7318],"text":"/**\n\t * @param key\n\t * @constructor\n\t */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":167,"column":15,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":167,"endColumn":16,"fix":{"range":[7334,7334],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":167,"column":19,"nodeType":"Program","messageId":"missingClosingSpace","endLine":167,"endColumn":20,"fix":{"range":[7337,7337],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":174,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":174,"endColumn":7,"fix":{"range":[7500,7500],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":174,"column":14,"nodeType":"Program","messageId":"missingClosingSpace","endLine":174,"endColumn":15,"fix":{"range":[7507,7507],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":174,"column":18,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":174,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required after '['.","line":174,"column":24,"nodeType":"ArrayExpression","messageId":"missingSpaceAfter","endLine":174,"endColumn":25,"fix":{"range":[7518,7518],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-bracket-spacing","severity":2,"message":"A space is required before ']'.","line":174,"column":33,"nodeType":"ArrayExpression","messageId":"missingSpaceBefore","endLine":174,"endColumn":34,"fix":{"range":[7526,7526],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":177,"column":9,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":177,"endColumn":10,"fix":{"range":[7600,7600],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":177,"column":19,"nodeType":"Program","messageId":"missingClosingSpace","endLine":177,"endColumn":20,"fix":{"range":[7609,7609],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":177,"column":23,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":177,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":177,"column":27,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":177,"endColumn":28,"fix":{"range":[7618,7618],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":177,"column":29,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":177,"endColumn":30,"fix":{"range":[7619,7619],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":178,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":178,"endColumn":8,"fix":{"range":[7637,7637],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":178,"column":29,"nodeType":"Program","messageId":"missingClosingSpace","endLine":178,"endColumn":30,"fix":{"range":[7658,7658],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":179,"column":12,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":179,"endColumn":13,"fix":{"range":[7674,7674],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":179,"column":14,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":179,"endColumn":15,"fix":{"range":[7675,7675],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":180,"column":15,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":180,"endColumn":16,"fix":{"range":[7693,7693],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":180,"column":27,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":180,"endColumn":28,"fix":{"range":[7705,7705],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":180,"column":38,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":180,"endColumn":39,"fix":{"range":[7715,7715],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":180,"column":39,"nodeType":"Program","messageId":"missingClosingSpace","endLine":180,"endColumn":40,"fix":{"range":[7716,7716],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":181,"column":12,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":181,"endColumn":13,"fix":{"range":[7731,7731],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":181,"column":14,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":181,"endColumn":15,"fix":{"range":[7732,7732],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":182,"column":8,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":182,"endColumn":9,"fix":{"range":[7743,7743],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":182,"column":10,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":182,"endColumn":11,"fix":{"range":[7744,7744],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":183,"column":8,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":183,"endColumn":9,"fix":{"range":[7759,7759],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":183,"column":10,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":183,"endColumn":11,"fix":{"range":[7760,7760],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":187,"column":26,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":187,"endColumn":27,"fix":{"range":[7866,7866],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":187,"column":32,"nodeType":"Program","messageId":"missingClosingSpace","endLine":187,"endColumn":33,"fix":{"range":[7871,7871],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-shadow","severity":2,"message":"'i' is already declared in the upper scope on line 169 column 7.","line":189,"column":8,"nodeType":"Identifier","messageId":"noShadow","endLine":189,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":189,"column":19,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":189,"endColumn":20,"fix":{"range":[7911,7911],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":189,"column":28,"nodeType":"Program","messageId":"missingClosingSpace","endLine":189,"endColumn":29,"fix":{"range":[7919,7919],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":189,"column":31,"nodeType":"VariableDeclaration","messageId":"exceed","endLine":189,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-shadow","severity":2,"message":"'t' is already declared in the upper scope on line 168 column 7.","line":189,"column":35,"nodeType":"Identifier","messageId":"noShadow","endLine":189,"endColumn":36,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":189,"column":40,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":189,"endColumn":41,"fix":{"range":[7932,7932],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":189,"column":42,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":189,"endColumn":43,"fix":{"range":[7933,7933],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-shadow","severity":2,"message":"'j' is already declared in the upper scope on line 169 column 14.","line":190,"column":8,"nodeType":"Identifier","messageId":"noShadow","endLine":190,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":190,"column":19,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":190,"endColumn":20,"fix":{"range":[7955,7955],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":190,"column":28,"nodeType":"Program","messageId":"missingClosingSpace","endLine":190,"endColumn":29,"fix":{"range":[7963,7963],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":190,"column":31,"nodeType":"VariableDeclaration","messageId":"exceed","endLine":190,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-shadow","severity":2,"message":"'u' is already declared in the upper scope on line 168 column 10.","line":190,"column":35,"nodeType":"Identifier","messageId":"noShadow","endLine":190,"endColumn":36,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":190,"column":40,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":190,"endColumn":41,"fix":{"range":[7976,7976],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":190,"column":42,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":190,"endColumn":43,"fix":{"range":[7977,7977],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":191,"column":5,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":191,"endColumn":6,"fix":{"range":[7985,7985],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":191,"column":7,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":191,"endColumn":8,"fix":{"range":[7986,7986],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":192,"column":5,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":192,"endColumn":6,"fix":{"range":[7998,7998],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":192,"column":7,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":192,"endColumn":8,"fix":{"range":[7999,7999],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":193,"column":13,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":193,"endColumn":14,"fix":{"range":[8019,8019],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":193,"column":21,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":193,"endColumn":22,"fix":{"range":[8027,8027],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":193,"column":27,"nodeType":"Program","messageId":"missingClosingSpace","endLine":193,"endColumn":28,"fix":{"range":[8032,8032],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":193,"column":28,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":193,"endColumn":29,"fix":{"range":[8033,8033],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":194,"column":10,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":194,"endColumn":11,"fix":{"range":[8046,8046],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":194,"column":18,"nodeType":"Program","messageId":"missingClosingSpace","endLine":194,"endColumn":19,"fix":{"range":[8053,8053],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":195,"column":16,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":195,"endColumn":17,"fix":{"range":[8073,8073],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":195,"column":22,"nodeType":"Program","messageId":"missingClosingSpace","endLine":195,"endColumn":23,"fix":{"range":[8078,8078],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":195,"column":25,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":195,"endColumn":34,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":195,"column":30,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":195,"endColumn":31,"fix":{"range":[8087,8087],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":195,"column":32,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":195,"endColumn":33,"fix":{"range":[8088,8088],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":196,"column":16,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":196,"endColumn":17,"fix":{"range":[8107,8107],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":196,"column":22,"nodeType":"Program","messageId":"missingClosingSpace","endLine":196,"endColumn":23,"fix":{"range":[8112,8112],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":196,"column":25,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":196,"endColumn":34,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":196,"column":30,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":196,"endColumn":31,"fix":{"range":[8121,8121],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":196,"column":32,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":196,"endColumn":33,"fix":{"range":[8122,8122],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":197,"column":6,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":197,"endColumn":7,"fix":{"range":[8131,8131],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":197,"column":8,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":197,"endColumn":9,"fix":{"range":[8132,8132],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":198,"column":6,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":198,"endColumn":7,"fix":{"range":[8145,8145],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":198,"column":8,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":198,"endColumn":9,"fix":{"range":[8146,8146],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":199,"column":22,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":199,"endColumn":23,"fix":{"range":[8175,8175],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":199,"column":30,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":199,"endColumn":31,"fix":{"range":[8183,8183],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":199,"column":36,"nodeType":"Program","messageId":"missingClosingSpace","endLine":199,"endColumn":37,"fix":{"range":[8188,8188],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":199,"column":37,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":199,"endColumn":38,"fix":{"range":[8189,8189],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":207,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":207,"endColumn":8,"fix":{"range":[8370,8370],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":207,"column":13,"nodeType":"Program","messageId":"missingClosingSpace","endLine":207,"endColumn":14,"fix":{"range":[8375,8375],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":210,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":210,"endColumn":1,"fix":{"range":[8382,8382],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":211,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":211,"endColumn":13,"fix":{"range":[8388,8389],"text":"F"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":211,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":211,"endColumn":1,"fix":{"range":[8385,8385],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":212,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":212,"endColumn":1,"fix":{"range":[8398,8398],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":213,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":213,"endColumn":1,"fix":{"range":[8454,8454],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/multiline-blocks","severity":1,"message":"Should have no text on the \"0th\" line (after the `/**`).","line":214,"column":2,"nodeType":"Block","endLine":216,"endColumn":28,"fix":{"range":[8458,8539],"text":"/**\n\t * @param {Object=} result\n\t * @param {string=} prop\n\t * @param {string=} typ */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/check-param-names","severity":1,"message":"Expected @param names to be \"obj, depth, result, prop, typ\". Got \"result, prop, typ\".","line":214,"column":null,"nodeType":"Block","endLine":214,"endColumn":null,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"obj\" declaration.","line":214,"column":2,"nodeType":"Block","endLine":216,"endColumn":28,"fix":{"range":[8458,8539],"text":"* @param obj\n* @param depth\n/** @param {Object=} result\n\t * @param {string=} prop\n\t * @param {string=} typ */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"depth\" declaration.","line":214,"column":2,"nodeType":"Block","endLine":216,"endColumn":28,"fix":{"range":[8458,8539],"text":"* @param obj\n* @param depth\n* @param obj\n* @param depth\n/** @param {Object=} result\n\t * @param {string=} prop\n\t * @param {string=} typ */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":214,"column":2,"nodeType":"Block","endLine":216,"endColumn":28,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/no-multi-asterisks","severity":2,"message":"Should be no multiple asterisks on end lines.","line":216,"column":null,"nodeType":"Block","endLine":216,"endColumn":null,"fix":{"range":[8458,8539],"text":"/** @param {Object=} result\n\t * @param {string=} prop\n\t @param {string=} typ */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":217,"column":18,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":217,"endColumn":19,"fix":{"range":[8558,8558],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":217,"column":48,"nodeType":"Program","messageId":"missingClosingSpace","endLine":217,"endColumn":49,"fix":{"range":[8587,8587],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-unary-ops","severity":2,"message":"Unary word operator 'typeof' must be followed by whitespace.","line":219,"column":9,"nodeType":"UnaryExpression","messageId":"wordOperator","endLine":219,"endColumn":20,"fix":{"range":[8620,8620],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":219,"column":15,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":219,"endColumn":16,"fix":{"range":[8621,8621],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":219,"column":19,"nodeType":"Program","messageId":"missingClosingSpace","endLine":219,"endColumn":20,"fix":{"range":[8624,8624],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":220,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":220,"endColumn":7,"fix":{"range":[8633,8633],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"eqeqeq","severity":2,"message":"Expected '===' and instead saw '=='.","line":220,"column":20,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":220,"endColumn":22,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":220,"column":31,"nodeType":"Program","messageId":"missingClosingSpace","endLine":220,"endColumn":32,"fix":{"range":[8657,8657],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":221,"column":8,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":221,"endColumn":9,"fix":{"range":[8669,8669],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":221,"column":20,"nodeType":"Program","messageId":"missingClosingSpace","endLine":221,"endColumn":21,"fix":{"range":[8680,8680],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":222,"column":8,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":222,"endColumn":9,"fix":{"range":[8692,8692],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":222,"column":21,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":222,"endColumn":22,"fix":{"range":[8705,8705],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":222,"column":25,"nodeType":"Program","messageId":"missingClosingSpace","endLine":222,"endColumn":26,"fix":{"range":[8708,8708],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":222,"column":30,"nodeType":"Program","messageId":"missingClosingSpace","endLine":222,"endColumn":31,"fix":{"range":[8713,8713],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Avoid FF3 b...'.","line":222,"column":33,"nodeType":"Line","messageId":"multipleSpaces","endLine":222,"endColumn":37,"fix":{"range":[8716,8720],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":223,"column":12,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":223,"endColumn":55,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":223,"column":23,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":223,"endColumn":24,"fix":{"range":[8783,8783],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":223,"column":31,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":223,"endColumn":32,"fix":{"range":[8791,8791],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":223,"column":35,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":223,"endColumn":36,"fix":{"range":[8795,8795],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":223,"column":40,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":223,"endColumn":41,"fix":{"range":[8799,8799],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":223,"column":52,"nodeType":"Program","messageId":"missingClosingSpace","endLine":223,"endColumn":53,"fix":{"range":[8811,8811],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":223,"column":53,"nodeType":"Program","messageId":"missingClosingSpace","endLine":223,"endColumn":54,"fix":{"range":[8812,8812],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":223,"column":64,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":223,"endColumn":65,"fix":{"range":[8824,8824],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":223,"column":66,"nodeType":"Program","messageId":"missingClosingSpace","endLine":223,"endColumn":67,"fix":{"range":[8825,8825],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":227,"column":10,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":227,"endColumn":11,"fix":{"range":[8855,8855],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":227,"column":42,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":227,"endColumn":43,"fix":{"range":[8887,8887],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"eqeqeq","severity":2,"message":"Expected '!==' and instead saw '!='.","line":227,"column":47,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":227,"endColumn":49,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":227,"column":70,"nodeType":"Program","messageId":"missingClosingSpace","endLine":227,"endColumn":71,"fix":{"range":[8914,8914],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":227,"column":71,"nodeType":"Program","messageId":"missingClosingSpace","endLine":227,"endColumn":72,"fix":{"range":[8915,8915],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":230,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":230,"endColumn":1,"fix":{"range":[8922,8922],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":231,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":231,"endColumn":12,"fix":{"range":[8928,8929],"text":"M"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":231,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":231,"endColumn":1,"fix":{"range":[8925,8925],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":232,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":232,"endColumn":1,"fix":{"range":[8937,8937],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":233,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":233,"endColumn":73,"fix":{"range":[9008,9009],"text":"R"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":233,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":233,"endColumn":1,"fix":{"range":[9005,9005],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":234,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":234,"endColumn":1,"fix":{"range":[9078,9078],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/multiline-blocks","severity":1,"message":"Should have no text on the \"0th\" line (after the `/**`).","line":235,"column":2,"nodeType":"Block","endLine":236,"endColumn":26,"fix":{"range":[9082,9134],"text":"/**\n\t * @param {number=} smear\n\t * @param {number=} j */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/check-param-names","severity":1,"message":"Expected @param names to be \"seed, key, smear, j\". Got \"smear, j\".","line":235,"column":null,"nodeType":"Block","endLine":235,"endColumn":null,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"seed\" declaration.","line":235,"column":2,"nodeType":"Block","endLine":236,"endColumn":26,"fix":{"range":[9082,9134],"text":"* @param seed\n* @param key\n/** @param {number=} smear\n\t * @param {number=} j */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-param","severity":1,"message":"Missing JSDoc @param \"key\" declaration.","line":235,"column":2,"nodeType":"Block","endLine":236,"endColumn":26,"fix":{"range":[9082,9134],"text":"* @param seed\n* @param key\n* @param seed\n* @param key\n/** @param {number=} smear\n\t * @param {number=} j */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/require-returns","severity":1,"message":"Missing JSDoc @return declaration.","line":235,"column":2,"nodeType":"Block","endLine":236,"endColumn":26,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"jsdoc/no-multi-asterisks","severity":2,"message":"Should be no multiple asterisks on end lines.","line":236,"column":null,"nodeType":"Block","endLine":236,"endColumn":null,"fix":{"range":[9082,9134],"text":"/** @param {number=} smear\n\t @param {number=} j */"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":237,"column":17,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":237,"endColumn":18,"fix":{"range":[9152,9152],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":237,"column":37,"nodeType":"Program","messageId":"missingClosingSpace","endLine":237,"endColumn":38,"fix":{"range":[9171,9171],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-implicit-coercion","severity":2,"message":"use `seed = String(seed)` instead.","line":238,"column":3,"nodeType":"AssignmentExpression","messageId":"useRecommendation","endLine":238,"endColumn":13,"fix":{"range":[9177,9187],"text":"seed = String(seed)"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// Ensure the ...'.","line":238,"column":14,"nodeType":"Line","messageId":"multipleSpaces","endLine":238,"endColumn":39,"fix":{"range":[9188,9213],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":240,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":240,"endColumn":8,"fix":{"range":[9264,9264],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":240,"column":35,"nodeType":"Program","messageId":"missingClosingSpace","endLine":240,"endColumn":36,"fix":{"range":[9291,9291],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":241,"column":7,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":241,"endColumn":8,"fix":{"range":[9302,9302],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":241,"column":15,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":241,"endColumn":16,"fix":{"range":[9310,9310],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":241,"column":17,"nodeType":"Program","messageId":"missingClosingSpace","endLine":241,"endColumn":18,"fix":{"range":[9311,9311],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":241,"column":18,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":241,"endColumn":19,"fix":{"range":[9312,9312],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":242,"column":12,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":242,"endColumn":13,"fix":{"range":[9328,9328],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":242,"column":13,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":242,"endColumn":14,"fix":{"range":[9329,9329],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '^='.","line":242,"column":14,"nodeType":"AssignmentExpression","messageId":"unexpected","endLine":242,"endColumn":43,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":242,"column":26,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":242,"endColumn":27,"fix":{"range":[9342,9342],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":242,"column":34,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":242,"endColumn":35,"fix":{"range":[9350,9350],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":242,"column":36,"nodeType":"Program","messageId":"missingClosingSpace","endLine":242,"endColumn":37,"fix":{"range":[9351,9351],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":242,"column":37,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":242,"endColumn":38,"fix":{"range":[9352,9352],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":242,"column":43,"nodeType":"Program","messageId":"missingClosingSpace","endLine":242,"endColumn":44,"fix":{"range":[9358,9358],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":242,"column":62,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":242,"endColumn":63,"fix":{"range":[9378,9378],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":242,"column":64,"nodeType":"Program","messageId":"missingClosingSpace","endLine":242,"endColumn":65,"fix":{"range":[9379,9379],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":242,"column":65,"nodeType":"Program","messageId":"missingClosingSpace","endLine":242,"endColumn":66,"fix":{"range":[9380,9380],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":245,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":245,"endColumn":8,"fix":{"range":[9407,9407],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":245,"column":16,"nodeType":"Program","messageId":"missingClosingSpace","endLine":245,"endColumn":17,"fix":{"range":[9415,9415],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":245,"column":20,"nodeType":"ExpressionStatement","messageId":"exceed","endLine":245,"endColumn":56,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":245,"column":47,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":245,"endColumn":48,"fix":{"range":[9447,9447],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required after '['.","line":245,"column":51,"nodeType":"MemberExpression","messageId":"missingSpaceAfter","endLine":245,"endColumn":52,"fix":{"range":[9451,9451],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"computed-property-spacing","severity":2,"message":"A space is required before ']'.","line":245,"column":53,"nodeType":"MemberExpression","messageId":"missingSpaceBefore","endLine":245,"endColumn":54,"fix":{"range":[9452,9452],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":245,"column":54,"nodeType":"Program","messageId":"missingClosingSpace","endLine":245,"endColumn":55,"fix":{"range":[9453,9453],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":249,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":249,"endColumn":1,"fix":{"range":[9477,9477],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":250,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":250,"endColumn":13,"fix":{"range":[9483,9484],"text":"L"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":250,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":250,"endColumn":1,"fix":{"range":[9480,9480],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":251,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":251,"endColumn":1,"fix":{"range":[9493,9493],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":252,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":252,"endColumn":1,"fix":{"range":[9542,9542],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":253,"column":18,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":253,"endColumn":19,"fix":{"range":[9563,9563],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":253,"column":20,"nodeType":"Program","messageId":"missingClosingSpace","endLine":253,"endColumn":21,"fix":{"range":[9564,9564],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-statements-per-line","severity":2,"message":"This line has 2 statements. Maximum allowed is 1.","line":253,"column":24,"nodeType":"ReturnStatement","messageId":"exceed","endLine":253,"endColumn":47,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":253,"column":31,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":253,"endColumn":46,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":253,"column":35,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":253,"endColumn":36,"fix":{"range":[9580,9580],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":253,"column":45,"nodeType":"Program","messageId":"missingClosingSpace","endLine":253,"endColumn":46,"fix":{"range":[9589,9589],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":255,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":255,"endColumn":1,"fix":{"range":[9595,9595],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":256,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":256,"endColumn":1,"fix":{"range":[9598,9598],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":257,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":257,"endColumn":1,"fix":{"range":[9657,9657],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":258,"column":23,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":258,"endColumn":24,"fix":{"range":[9683,9683],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":258,"column":37,"nodeType":"Program","messageId":"missingClosingSpace","endLine":258,"endColumn":38,"fix":{"range":[9696,9696],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":259,"column":25,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":259,"endColumn":26,"fix":{"range":[9724,9724],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":259,"column":41,"nodeType":"Program","messageId":"missingClosingSpace","endLine":259,"endColumn":42,"fix":{"range":[9739,9739],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":262,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":262,"endColumn":1,"fix":{"range":[9773,9773],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":263,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":263,"endColumn":1,"fix":{"range":[9776,9776],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":264,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":264,"endColumn":63,"fix":{"range":[9842,9843],"text":"F"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":264,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":264,"endColumn":1,"fix":{"range":[9839,9839],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":265,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":265,"endColumn":60,"fix":{"range":[9905,9906],"text":"N"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":265,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":265,"endColumn":1,"fix":{"range":[9902,9902],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":266,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":266,"endColumn":63,"fix":{"range":[9965,9966],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":266,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":266,"endColumn":1,"fix":{"range":[9962,9962],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":267,"column":1,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":267,"endColumn":19,"fix":{"range":[10028,10029],"text":"I"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":267,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":267,"endColumn":1,"fix":{"range":[10025,10025],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 0.","line":268,"column":1,"nodeType":"Line","messageId":"wrongIndentation","endLine":268,"endColumn":1,"fix":{"range":[10044,10044],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":269,"column":8,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":269,"endColumn":9,"fix":{"range":[10055,10055],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":269,"column":28,"nodeType":"Program","messageId":"missingClosingSpace","endLine":269,"endColumn":29,"fix":{"range":[10074,10074],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":272,"column":2,"nodeType":"Program","messageId":"missingClosingSpace","endLine":272,"endColumn":3,"fix":{"range":[10128,10128],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// pool: entro...'.","line":273,"column":5,"nodeType":"Line","messageId":"multipleSpaces","endLine":273,"endColumn":8,"fix":{"range":[10135,10138],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":273,"column":8,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":273,"endColumn":42,"fix":{"range":[10141,10142],"text":"P"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":274,"column":8,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":274,"endColumn":63,"fix":{"range":[10183,10184],"text":"M"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// width: each...'.","line":275,"column":6,"nodeType":"Line","messageId":"multipleSpaces","endLine":275,"endColumn":8,"fix":{"range":[10241,10243],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":275,"column":8,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":275,"endColumn":49,"fix":{"range":[10246,10247],"text":"W"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// chunks: at ...'.","line":276,"column":4,"nodeType":"Line","messageId":"multipleSpaces","endLine":276,"endColumn":8,"fix":{"range":[10288,10292],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":276,"column":8,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":276,"endColumn":59,"fix":{"range":[10295,10296],"text":"C"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before '// significanc...'.","line":277,"column":4,"nodeType":"Line","messageId":"multipleSpaces","endLine":277,"endColumn":8,"fix":{"range":[10347,10351],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"capitalized-comments","severity":2,"message":"Comments should not begin with a lowercase character.","line":277,"column":8,"nodeType":null,"messageId":"unexpectedLowercaseComment","endLine":277,"endColumn":68,"fix":{"range":[10354,10355],"text":"S"},"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/common/assets/js/topten-localized.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/common/assets/js/typeahead-init.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/common/assets/js/underscore.partial.js","messages":[],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Unexpected 'var' declaration in the global scope, wrap in an IIFE for a local variable, assign as global property for a global variable.","line":31,"column":5,"nodeType":"VariableDeclarator","messageId":"globalNonLexicalBinding","endLine":31,"endColumn":16,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-use-before-define","severity":2,"message":"'_' was used before it was defined.","line":31,"column":9,"nodeType":"Identifier","messageId":"usedBeforeDefined","endLine":31,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":33,"column":29,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":33,"endColumn":30,"fix":{"range":[1306,1306],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 1 tab but found 2.","line":34,"column":1,"nodeType":"Keyword","messageId":"wrongIndentation","endLine":34,"endColumn":3,"fix":{"range":[1311,1313],"text":"\t"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"unicorn/prefer-date-now","severity":2,"message":"Prefer `Date.now()` over `Date#getTime()`.","line":34,"column":21,"nodeType":"Identifier","messageId":"prefer-date-now-over-methods","endLine":34,"endColumn":28,"fix":{"range":[1320,1340],"text":"Date.now()"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"indent","severity":2,"message":"Expected indentation of 0 tabs but found 1.","line":35,"column":1,"nodeType":"Punctuator","messageId":"wrongIndentation","endLine":35,"endColumn":2,"fix":{"range":[1342,1343],"text":""},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":37,"column":22,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":37,"endColumn":23,"fix":{"range":[1369,1369],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":37,"column":22,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":37,"endColumn":23,"fix":{"range":[1368,1368],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":37,"column":42,"nodeType":"Program","messageId":"missingClosingSpace","endLine":37,"endColumn":43,"fix":{"range":[1388,1388],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":41,"column":5,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":41,"endColumn":6,"fix":{"range":[1465,1465],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":41,"column":14,"nodeType":"Program","messageId":"missingClosingSpace","endLine":41,"endColumn":15,"fix":{"range":[1473,1473],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":41,"column":16,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":41,"endColumn":29,"fix":{"range":[1475,1488],"text":"{options = {};}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":42,"column":22,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":42,"endColumn":23,"fix":{"range":[1510,1510],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":45,"column":22,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":45,"endColumn":23,"fix":{"range":[1609,1609],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":45,"column":36,"nodeType":"Program","messageId":"missingClosingSpace","endLine":45,"endColumn":37,"fix":{"range":[1622,1622],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":46,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":46,"endColumn":7,"fix":{"range":[1631,1631],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":46,"column":15,"nodeType":"Program","messageId":"missingClosingSpace","endLine":46,"endColumn":16,"fix":{"range":[1639,1639],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":46,"column":17,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":46,"endColumn":39,"fix":{"range":[1641,1663],"text":"{context = args = null;}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":48,"column":17,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":48,"endColumn":18,"fix":{"range":[1684,1684],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":50,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":50,"endColumn":7,"fix":{"range":[1716,1716],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":50,"column":45,"nodeType":"Program","messageId":"missingClosingSpace","endLine":50,"endColumn":46,"fix":{"range":[1754,1754],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":50,"column":47,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":50,"endColumn":62,"fix":{"range":[1756,1771],"text":"{previous = now;}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":51,"column":26,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":51,"endColumn":27,"fix":{"range":[1798,1798],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":51,"column":41,"nodeType":"Program","messageId":"missingClosingSpace","endLine":51,"endColumn":42,"fix":{"range":[1812,1812],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":54,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":54,"endColumn":7,"fix":{"range":[1859,1859],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":54,"column":41,"nodeType":"Program","messageId":"missingClosingSpace","endLine":54,"endColumn":42,"fix":{"range":[1893,1893],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":55,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":55,"endColumn":8,"fix":{"range":[1904,1904],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":55,"column":15,"nodeType":"Program","messageId":"missingClosingSpace","endLine":55,"endColumn":16,"fix":{"range":[1911,1911],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":56,"column":17,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":56,"endColumn":18,"fix":{"range":[1932,1932],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":56,"column":25,"nodeType":"Program","messageId":"missingClosingSpace","endLine":56,"endColumn":26,"fix":{"range":[1939,1939],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":60,"column":23,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":60,"endColumn":24,"fix":{"range":[2009,2009],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":60,"column":37,"nodeType":"Program","messageId":"missingClosingSpace","endLine":60,"endColumn":38,"fix":{"range":[2022,2022],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":61,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":61,"endColumn":8,"fix":{"range":[2032,2032],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":61,"column":16,"nodeType":"Program","messageId":"missingClosingSpace","endLine":61,"endColumn":17,"fix":{"range":[2040,2040],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":61,"column":18,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":61,"endColumn":40,"fix":{"range":[2042,2064],"text":"{context = args = null;}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":62,"column":13,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":62,"endColumn":14,"fix":{"range":[2078,2078],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":62,"column":52,"nodeType":"Program","messageId":"missingClosingSpace","endLine":62,"endColumn":53,"fix":{"range":[2116,2116],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":63,"column":24,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":63,"endColumn":25,"fix":{"range":[2144,2144],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":63,"column":41,"nodeType":"Program","messageId":"missingClosingSpace","endLine":63,"endColumn":42,"fix":{"range":[2160,2160],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":69,"column":22,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":69,"endColumn":23,"fix":{"range":[2214,2214],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":69,"column":22,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":69,"endColumn":23,"fix":{"range":[2213,2213],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":69,"column":44,"nodeType":"Program","messageId":"missingClosingSpace","endLine":69,"endColumn":45,"fix":{"range":[2235,2235],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":72,"column":22,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":72,"endColumn":23,"fix":{"range":[2309,2309],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":75,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":75,"endColumn":7,"fix":{"range":[2355,2355],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":75,"column":31,"nodeType":"Program","messageId":"missingClosingSpace","endLine":75,"endColumn":32,"fix":{"range":[2379,2379],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":76,"column":24,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":76,"endColumn":25,"fix":{"range":[2407,2407],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":76,"column":43,"nodeType":"Program","messageId":"missingClosingSpace","endLine":76,"endColumn":44,"fix":{"range":[2425,2425],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":79,"column":7,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":79,"endColumn":8,"fix":{"range":[2465,2465],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":79,"column":18,"nodeType":"Program","messageId":"missingClosingSpace","endLine":79,"endColumn":19,"fix":{"range":[2475,2475],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":80,"column":24,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":80,"endColumn":25,"fix":{"range":[2503,2503],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":80,"column":38,"nodeType":"Program","messageId":"missingClosingSpace","endLine":80,"endColumn":39,"fix":{"range":[2516,2516],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":81,"column":8,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":81,"endColumn":9,"fix":{"range":[2527,2527],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":81,"column":17,"nodeType":"Program","messageId":"missingClosingSpace","endLine":81,"endColumn":18,"fix":{"range":[2535,2535],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":81,"column":19,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":81,"endColumn":41,"fix":{"range":[2537,2559],"text":"{context = args = null;}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-before-function-paren","severity":2,"message":"Missing space before function parentheses.","line":86,"column":17,"nodeType":"FunctionExpression","messageId":"missingSpace","endLine":86,"endColumn":18,"fix":{"range":[2590,2590],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":91,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":91,"endColumn":7,"fix":{"range":[2701,2701],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":91,"column":15,"nodeType":"Program","messageId":"missingClosingSpace","endLine":91,"endColumn":16,"fix":{"range":[2709,2709],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"curly","severity":2,"message":"Expected { after 'if' condition.","line":91,"column":17,"nodeType":"IfStatement","messageId":"missingCurlyAfterCondition","endLine":91,"endColumn":51,"fix":{"range":[2711,2745],"text":"{timeout = setTimeout(later, wait);}"},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":91,"column":37,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":91,"endColumn":38,"fix":{"range":[2732,2732],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":91,"column":49,"nodeType":"Program","messageId":"missingClosingSpace","endLine":91,"endColumn":50,"fix":{"range":[2743,2743],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":92,"column":6,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":92,"endColumn":7,"fix":{"range":[2752,2752],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":92,"column":14,"nodeType":"Program","messageId":"missingClosingSpace","endLine":92,"endColumn":15,"fix":{"range":[2759,2759],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space after this paren.","line":93,"column":23,"nodeType":"Program","messageId":"missingOpeningSpace","endLine":93,"endColumn":24,"fix":{"range":[2786,2786],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"space-in-parens","severity":2,"message":"There must be a space before this paren.","line":93,"column":37,"nodeType":"Program","messageId":"missingClosingSpace","endLine":93,"endColumn":38,"fix":{"range":[2799,2799],"text":" "},"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/common/assets/js/wm-portal.js","messages":[{"ruleId":"security/detect-unsafe-regex","severity":1,"message":"Unsafe Regular Expression","line":228,"column":39,"nodeType":"Literal","endLine":228,"endColumn":103}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This is the JavaScript module for the [[m:Project portals]] templates.\n *\n * Indention style: 1 tab\n *\n * Beware: This is used not only for www.wikipedia.org, but also for sister projects\n * like www.wiktionary.org and for portals without bookshelves like www.wikimedia.org.\n *\n * Warning: \"mediaWiki\" and \"jQuery\" are NOT available here. This is used outside\n * mediawiki-software output context, on the [[m:Project portals]] HTML pages.\n *\n * Don't be afraid to supplement code with comments, this script is loaded through\n * ResourceLoader on the portal pages and as such is minified and squeezed into a\n * tiny package served from load.php\n *\n * Validate with ESLint.\n *\n */\n/* global doWhenReady, getIso639, getDevicePixelRatio */\n\n( function () {\n\t'use strict';\n\n\t/**\n\t * Returns the DOM element with the given ID.\n\t *\n\t * @param {string} id\n\t * @return {HTMLElement}\n\t */\n\tfunction $( id ) {\n\t\treturn document.getElementById( id );\n\t}\n\n\t/**\n\t * Replaces the “hero graphic” with the given language edition’s logo.\n\t *\n\t * @param {string} lang\n\t */\n\tfunction updateBranding( lang ) {\n\t\tvar option, logo;\n\n\t\t// Only Wiktionary has such a mess of logos.\n\t\tif (\n\t\t\t!document.querySelector ||\n\t\t\tdocument.body.id !== 'www-wiktionary-org' ||\n\t\t\tlang.match( /\\W/ )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\toption = document.querySelector( 'option[lang|=\"' + lang + '\"]' );\n\t\tlogo = option && option.getAttribute( 'data-logo' );\n\t\tif ( logo ) {\n\t\t\tdocument.body.setAttribute( 'data-logo', logo );\n\t\t}\n\t}\n\n\t/**\n\t * Preconnects to the search target wiki\n\t *\n\t * @param {string} lang\n\t */\n\tfunction preconnect( lang ) {\n\t\tvar link = document.createElement( 'link' ),\n\t\t\tdomain = window.location.hostname.split( '.' ),\n\t\t\ttld = domain.pop(),\n\t\t\tsld = domain.pop();\n\t\tlink.rel = 'preconnect';\n\t\tlink.href = '//' + lang + '.' + sld + '.' + tld;\n\t\tdocument.head.appendChild( link );\n\t}\n\n\t/**\n\t * Returns the user's preferred language according to browser preferences.\n\t *\n\t * @return {string}\n\t */\n\tfunction getUALang() {\n\t\tvar uiLang = ( navigator.languages && navigator.languages[ 0 ] ) ||\n\t\tnavigator.language || navigator.userLanguage || '';\n\t\treturn uiLang.toLowerCase().split( '-' )[ 0 ];\n\t}\n\n\t/**\n\t * Returns the preferred language as stored in a cookie. Falls back on the\n\t * browser's language.\n\t *\n\t * @return {string}\n\t */\n\tfunction getSavedLang() {\n\t\tvar match = document.cookie.match( /(?:^|\\W)searchLang=([^;]+)/ );\n\t\treturn ( match ? match[ 1 ] : getUALang() ).toLowerCase();\n\t}\n\n\t/**\n\t * Selects the language from the dropdown according to the user's preference.\n\t */\n\tdoWhenReady( function () {\n\t\tvar iso639, select, options, i, len, matchingLang, matchingLink,\n\t\t\tcustomOption, customOptionText,\n\t\t\tlang = getSavedLang();\n\n\t\tif ( !lang ) {\n\t\t\treturn;\n\t\t}\n\n\t\tiso639 = getIso639( lang );\n\n\t\tselect = $( 'searchLanguage' );\n\t\t// Verify that an <option> exists for the langCode that was\n\t\t// In the cookie. If so, set the value to it.\n\t\tif ( select ) {\n\t\t\toptions = select.getElementsByTagName( 'option' );\n\t\t\tfor ( i = 0, len = options.length; !matchingLang && i < len; i += 1 ) {\n\t\t\t\tif ( options[ i ].value === iso639 ) {\n\t\t\t\t\tmatchingLang = iso639;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !matchingLang && document.querySelector ) {\n\t\t\t\tmatchingLink = document.querySelector( '.langlist a[lang|=\"' + iso639 + '\"]' );\n\t\t\t\tif ( matchingLink ) {\n\t\t\t\t\tmatchingLang = iso639;\n\t\t\t\t\tcustomOption = document.createElement( 'option' );\n\t\t\t\t\tcustomOption.setAttribute( 'lang', iso639 );\n\t\t\t\t\tcustomOption.setAttribute( 'value', iso639 );\n\t\t\t\t\tcustomOptionText = matchingLink.textContent || matchingLink.innerText || iso639;\n\t\t\t\t\tcustomOption.textContent = customOptionText;\n\t\t\t\t\tselect.appendChild( customOption );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( matchingLang ) {\n\t\t\t\tselect.value = matchingLang;\n\t\t\t\tupdateBranding( matchingLang );\n\t\t\t\tpreconnect( matchingLang );\n\t\t\t}\n\t\t}\n\t} );\n\n\t/**\n\t * Stores the user's preferred language in a cookie. This function is called\n\t * once a language other than the browser's default is selected from the\n\t * dropdown.\n\t *\n\t * @param {string} lang\n\t */\n\tfunction setLang( lang ) {\n\t\tvar uiLang,\n\t\t\tmatch,\n\t\t\tdate;\n\n\t\tif ( !lang ) {\n\t\t\treturn;\n\t\t}\n\n\t\tuiLang = getUALang();\n\t\tmatch = uiLang.match( /^\\w+/ );\n\t\tdate = new Date();\n\n\t\tupdateBranding( lang );\n\t\tif ( match && match[ 0 ] === lang ) {\n\t\t\tdate.setTime( date.getTime() - 1 );\n\t\t} else {\n\t\t\tdate.setFullYear( date.getFullYear() + 1 );\n\t\t}\n\n\t\tdocument.cookie = 'searchLang=' + lang + ';expires=' +\n\t\t\tdate.toUTCString() + ';domain=' + location.host + ';';\n\t}\n\n\tdoWhenReady( function () {\n\t\tvar params, i, param,\n\t\t\tsearch = $( 'searchInput' ),\n\t\t\tselect = $( 'searchLanguage' );\n\n\t\tif ( search ) {\n\t\t\tif ( search.autofocus === undefined ) {\n\t\t\t\t// Focus the search box.\n\t\t\t\tsearch.focus();\n\t\t\t} else {\n\t\t\t\t// Autofocus causes scrolling in most browsers that support it.\n\t\t\t\twindow.scroll( 0, 0 );\n\t\t\t}\n\n\t\t\t// Prefills the search box with the \"search\" URL parameter.\n\t\t\tparams = location.search && location.search.slice( 1 ).split( '&' );\n\t\t\tfor ( i = 0; i < params.length; i += 1 ) {\n\t\t\t\tparam = params[ i ].split( '=' );\n\t\t\t\tif ( param[ 0 ] === 'search' && param[ 1 ] ) {\n\t\t\t\t\tsearch.value = decodeURIComponent( param[ 1 ].replace( /\\+/g, ' ' ) );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tselect.addEventListener( 'change', function () {\n\t\t\tselect.blur();\n\t\t\tsetLang( select.value );\n\t\t} );\n\t} );\n\n\tdoWhenReady( function () {\n\t\tvar uselang = document.searchwiki && document.searchwiki.elements.uselang;\n\t\tif ( uselang ) {\n\t\t\t// Don't use getSavedLang() since that uses the cookie for the search form.\n\t\t\t// The searchwiki form should not be affected by the values in the searchpage form.\n\t\t\tuselang.value = getUALang();\n\t\t}\n\t} );\n\n\t// Based on jquery.hidpi module with jQuery removed & support for full srcset syntax added.\n\n\t/**\n\t * Matches a srcset entry for the given device pixel ratio.\n\t *\n\t * @param {number} devicePixelRatio\n\t * @param {string} srcset\n\t * @return {Mixed} null or the matching src string\n\t */\n\tfunction matchSrcSet( devicePixelRatio, srcset ) {\n\t\tvar candidates,\n\t\t\tcandidate,\n\t\t\ti,\n\t\t\tratio,\n\t\t\tselection = { ratio: 1 };\n\t\tcandidates = srcset.split( / *, */ );\n\t\tfor ( i = 0; i < candidates.length; i++ ) {\n\t\t\t// http://www.w3.org/html/wg/drafts/srcset/w3c-srcset/#additions-to-the-img-element\n\t\t\tcandidate = candidates[ i ].match( /\\s*(\\S+)(?:\\s*([\\d.]+)w)?(?:\\s*([\\d.]+)h)?(?:\\s*([\\d.]+)x)?\\s*/ );\n\t\t\tratio = candidate[ 4 ] && parseFloat( candidate[ 4 ] );\n\t\t\tif ( ratio <= devicePixelRatio && ratio > selection.ratio ) {\n\t\t\t\tselection.ratio = ratio;\n\t\t\t\tselection.src = candidate[ 1 ];\n\t\t\t\tselection.width = candidate[ 2 ] && parseFloat( candidate[ 2 ] );\n\t\t\t\tselection.height = candidate[ 3 ] && parseFloat( candidate[ 3 ] );\n\t\t\t}\n\t\t}\n\t\treturn selection;\n\t}\n\n\t/**\n\t * Implements responsive images based on srcset attributes, if browser has\n\t * no native srcset support.\n\t */\n\tfunction hidpi() {\n\t\tvar imgs,\n\t\t\timg,\n\t\t\tsrcset,\n\t\t\tmatch,\n\t\t\ti,\n\t\t\tratio = getDevicePixelRatio(),\n\t\t\ttestImage = new Image();\n\n\t\tif ( ratio > 1 && testImage.srcset === undefined ) {\n\t\t\t// No native srcset support.\n\t\t\timgs = document.getElementsByTagName( 'img' );\n\t\t\tfor ( i = 0; i < imgs.length; i++ ) {\n\t\t\t\timg = imgs[ i ];\n\t\t\t\tsrcset = img.getAttribute( 'srcset' );\n\t\t\t\tif ( typeof srcset === 'string' && srcset !== '' ) {\n\t\t\t\t\tmatch = matchSrcSet( ratio, srcset );\n\t\t\t\t\tif ( match.src !== undefined ) {\n\t\t\t\t\t\timg.setAttribute( 'src', match.src );\n\t\t\t\t\t\tif ( match.width !== undefined ) {\n\t\t\t\t\t\t\timg.setAttribute( 'width', match.width );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( match.height !== undefined ) {\n\t\t\t\t\t\t\timg.setAttribute( 'height', match.height );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdoWhenReady( hidpi );\n\n}() );\n\n/*\n * Depending on how this script is loaded, it may not have\n * the mediaWiki global object. Simulate if needed, for the\n * load.php?only=scripts response that calls mw.loader.state(.., ..);\n */\n\nif ( !window.mw ) {\n\twindow.mw = window.mediaWiki = {\n\t\tloader: {\n\t\t\tstate: function () {\n\t\t\t}\n\t\t}\n\t};\n}\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/src/common/assets/js/wm-typeahead.js","messages":[{"ruleId":"security/detect-non-literal-regexp","severity":1,"message":"Found non-literal argument to RegExp Constructor","line":217,"column":18,"nodeType":"NewExpression","endLine":217,"endColumn":58}],"suppressedMessages":[{"ruleId":"no-prototype-builtins","severity":2,"message":"Do not access Object.prototype method 'hasOwnProperty' from target object.","line":55,"column":13,"nodeType":"CallExpression","messageId":"prototypeBuildIn","endLine":55,"endColumn":27,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * WMTypeAhead.\n * Displays search suggestions with thumbnail and description\n * as user types into an input field.\n *\n * @constructor\n * @param {string} appendTo - ID of a container element that the suggestions will be appended to.\n * @param {string} searchInput - ID of a search input whose value will be used to generate\n * search suggestions.\n *\n * @return {Object} Returns an object with the following properties:\n * @return {HTMLElement} return.typeAheadEl The type-ahead DOM object.\n * @return {Function} return.query A function that loads the type-ahead suggestions.\n *\n * @example\n * var typeAhead = new WMTypeAhead('containerID', 'inputID');\n * typeAhead.query('search string', 'en');\n *\n */\n\n/* global getDevicePixelRatio,portalSearchDomain */\n\nwindow.WMTypeAhead = function ( appendTo, searchInput ) {\n\n\tvar typeAheadID = 'typeahead-suggestions',\n\t\ttypeAheadEl = document.getElementById( typeAheadID ), // Type-ahead DOM element.\n\t\tappendEl = document.getElementById( appendTo ),\n\t\tsearchEl = document.getElementById( searchInput ),\n\t\tthumbnailSize = Math.round( getDevicePixelRatio() * 60 ),\n\t\tmaxSearchResults = 6,\n\t\tsearchLang,\n\t\tsearchString,\n\t\ttypeAheadItems,\n\t\tactiveItem,\n\t\tssActiveIndex;\n\n\t// Only create typeAheadEl once on page.\n\tif ( !typeAheadEl ) {\n\t\ttypeAheadEl = document.createElement( 'div' );\n\t\ttypeAheadEl.id = typeAheadID;\n\t\tappendEl.appendChild( typeAheadEl );\n\t}\n\n\t/**\n\t * Serializes a JS object into a URL parameter string.\n\t *\n\t * @param {Object} obj - object whose properties will be serialized\n\t * @return {string}\n\t */\n\tfunction serialize( obj ) {\n\t\tvar serialized = [],\n\t\t\tprop;\n\n\t\tfor ( prop in obj ) {\n\t\t\tif ( obj.hasOwnProperty( prop ) ) { // eslint-disable-line no-prototype-builtins\n\t\t\t\tserialized.push( prop + '=' + encodeURIComponent( obj[ prop ] ) );\n\t\t\t}\n\t\t}\n\t\treturn serialized.join( '&' );\n\t}\n\n\t/**\n\t * Keeps track of the search query callbacks. Consists of an array of\n\t * callback functions and an index that keeps track of the order of requests.\n\t * Callbacks are deleted by replacing the callback function with a no-op.\n\t */\n\twindow.callbackStack = {\n\t\tqueue: {},\n\t\tindex: -1,\n\t\tincrementIndex: function () {\n\t\t\tthis.index += 1;\n\t\t\treturn this.index;\n\t\t},\n\t\taddCallback: function ( func ) {\n\t\t\tvar index = this.incrementIndex();\n\t\t\tthis.queue[ index ] = func( index );\n\t\t\treturn index;\n\t\t},\n\t\tdeleteSelfFromQueue: function ( i ) {\n\t\t\tdelete this.queue[ i ];\n\t\t},\n\t\tdeletePrevCallbacks: function ( j ) {\n\t\t\tvar callback;\n\n\t\t\tthis.deleteSelfFromQueue( j );\n\n\t\t\tfor ( callback in this.queue ) {\n\t\t\t\tif ( callback < j ) {\n\t\t\t\t\tthis.queue[ callback ] = this.deleteSelfFromQueue.bind(\n\t\t\t\t\t\twindow.callbackStack, callback\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Maintains the 'active' state on search suggestions.\n\t * Makes sure the 'active' element is synchronized between mouse and keyboard usage,\n\t * and cleared when new search suggestions appear.\n\t */\n\tssActiveIndex = {\n\t\tindex: -1,\n\t\tmax: maxSearchResults,\n\t\tsetMax: function ( x ) {\n\t\t\tthis.max = x;\n\t\t},\n\t\tincrement: function ( i ) {\n\t\t\tthis.index += i;\n\t\t\tif ( this.index < 0 ) {\n\t\t\t\tthis.setIndex( this.max - 1 );\n\t\t\t} // Index reaches top\n\t\t\tif ( this.index === this.max ) {\n\t\t\t\tthis.setIndex( 0 );\n\t\t\t} // Index reaches bottom\n\t\t\treturn this.index;\n\t\t},\n\t\tsetIndex: function ( i ) {\n\t\t\tif ( i <= this.max - 1 ) {\n\t\t\t\tthis.index = i;\n\t\t\t}\n\t\t\treturn this.index;\n\t\t},\n\t\tclear: function () {\n\t\t\tthis.setIndex( -1 );\n\t\t}\n\t};\n\n\t/**\n\t * Removes the type-ahead suggestions from the DOM.\n\t * Reason for timeout: The typeahead is set to clear on input blur.\n\t * When a user clicks on a search suggestion, they triggers the input blur\n\t * and remove the typeahead before a click event is registered.\n\t * The timeout makes it so a click on the search suggestion is registered before\n\t * an input blur.\n\t * 300ms is used to account for the click delay on mobile devices.\n\t *\n\t */\n\tfunction clearTypeAhead() {\n\t\tsetTimeout( function () {\n\t\t\tvar searchScript = document.getElementById( 'api_opensearch' );\n\t\t\ttypeAheadEl.innerHTML = '';\n\t\t\tif ( searchScript ) {\n\t\t\t\tsearchScript.src = false;\n\t\t\t}\n\t\t\tssActiveIndex.clear();\n\t\t}, 300 );\n\t}\n\n\t/**\n\t * Inserts script element containing the Search API results into document head.\n\t * The script itself calls the 'portalOpensearchCallback' callback function,\n\t *\n\t * @param {string} string - query string to search.\n\t * @param {string} lang - ISO code of language to search in.\n\t */\n\n\tfunction loadQueryScript( string, lang ) {\n\t\tvar script = document.getElementById( 'api_opensearch' ),\n\t\t\tdocHead = document.getElementsByTagName( 'head' )[ 0 ],\n\t\t\thostname,\n\t\t\tcallbackIndex,\n\t\t\tsearchQuery;\n\n\t\t// Variables declared in parent function.\n\t\tsearchLang = encodeURIComponent( lang ) || 'en';\n\t\tsearchString = encodeURIComponent( string );\n\t\tif ( searchString.length === 0 ) {\n\t\t\tclearTypeAhead();\n\t\t\treturn;\n\t\t}\n\n\t\thostname = '//' + searchLang + '.' + portalSearchDomain + '/w/api.php?';\n\n\t\t// If script already exists, remove it.\n\t\tif ( script ) {\n\t\t\tdocHead.removeChild( script );\n\t\t}\n\n\t\tscript = document.createElement( 'script' );\n\t\tscript.id = 'api_opensearch';\n\n\t\tcallbackIndex = window.callbackStack.addCallback( window.portalOpensearchCallback );\n\t\tsearchQuery = {\n\t\t\taction: 'query',\n\t\t\tformat: 'json',\n\t\t\tgenerator: 'prefixsearch',\n\t\t\tprop: 'pageprops|pageimages|description',\n\t\t\tredirects: '',\n\t\t\tppprop: 'displaytitle',\n\t\t\tpiprop: 'thumbnail',\n\t\t\tpithumbsize: thumbnailSize,\n\t\t\tpilimit: maxSearchResults,\n\t\t\tgpssearch: string,\n\t\t\tgpsnamespace: 0,\n\t\t\tgpslimit: maxSearchResults,\n\t\t\tcallback: 'callbackStack.queue[' + callbackIndex + ']'\n\t\t};\n\n\t\tscript.src = hostname + serialize( searchQuery );\n\t\tdocHead.appendChild( script );\n\t}\n\n\t// END loadQueryScript\n\n\t/**\n\t * Highlights the part of the suggestion title that matches the search query.\n\t * Used inside the generateTemplateString function.\n\t *\n\t * @param {string} title - The title of the search suggestion.\n\t * @param {string} search - The string to highlight.\n\t * @return {string} The title with highlighted part in an <em> tag.\n\t */\n\tfunction highlightTitle( title, search ) {\n\n\t\tvar sanitizedSearchString = mw.html.escape( mw.RegExp.escape( search ) ),\n\t\t\tsearchRegex = new RegExp( sanitizedSearchString, 'i' ),\n\t\t\tstartHighlightIndex = title.search( searchRegex ),\n\t\t\tformattedTitle = mw.html.escape( title ),\n\t\t\tendHighlightIndex,\n\t\t\tstrong,\n\t\t\tbeforeHighlight,\n\t\t\taferHighlight;\n\n\t\tif ( startHighlightIndex >= 0 ) {\n\n\t\t\tendHighlightIndex = startHighlightIndex + sanitizedSearchString.length;\n\t\t\tstrong = title.slice( startHighlightIndex, endHighlightIndex );\n\t\t\tbeforeHighlight = title.slice( 0, Math.max( 0, startHighlightIndex ) );\n\t\t\taferHighlight = title.slice( endHighlightIndex, title.length );\n\t\t\tformattedTitle = beforeHighlight + mw.html.element( 'em', { class: 'suggestion-highlight' }, strong ) + aferHighlight;\n\t\t}\n\n\t\treturn formattedTitle;\n\t} // END highlightTitle\n\n\t/**\n\t * Generates a template string based on an array of search suggestions.\n\t *\n\t * @param {Array} suggestions - An array of search suggestion results.\n\t * @return {string} A string representing the search suggestions DOM\n\t */\n\tfunction generateTemplateString( suggestions ) {\n\t\tvar string = '<div class=\"suggestions-dropdown\">',\n\t\t\tsuggestionLink,\n\t\t\tsuggestionThumbnail,\n\t\t\tsuggestionText,\n\t\t\tsuggestionTitle,\n\t\t\tsuggestionDescription,\n\t\t\tpage,\n\t\t\tsanitizedThumbURL = false,\n\t\t\tdescriptionText = '',\n\t\t\tpageDescription = '',\n\t\t\ti;\n\n\t\tfor ( i = 0; i < suggestions.length; i++ ) {\n\n\t\t\tif ( !suggestions[ i ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpage = suggestions[ i ];\n\t\t\tpageDescription = page.description || '';\n\n\t\t\t// Ensure that the value from the previous iteration isn't used\n\t\t\tsanitizedThumbURL = false;\n\n\t\t\tif ( page.thumbnail && page.thumbnail.source ) {\n\t\t\t\tsanitizedThumbURL = page.thumbnail.source.replace( /\"/g, '%22' );\n\t\t\t\tsanitizedThumbURL = sanitizedThumbURL.replace( /'/g, '%27' );\n\t\t\t}\n\n\t\t\t// Ensure that the value from the previous iteration isn't used\n\t\t\tdescriptionText = '';\n\n\t\t\t// Check if description exists\n\t\t\tif ( pageDescription ) {\n\t\t\t\t// If the description is an array, use the first item\n\t\t\t\tif ( typeof pageDescription === 'object' && pageDescription[ 0 ] ) {\n\t\t\t\t\tdescriptionText = pageDescription[ 0 ].toString();\n\t\t\t\t} else {\n\t\t\t\t\t// Otherwise, use the description as is.\n\t\t\t\t\tdescriptionText = pageDescription.toString();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsuggestionDescription = mw.html.element( 'p', { class: 'suggestion-description' }, descriptionText );\n\n\t\t\tsuggestionTitle = mw.html.element( 'h3', { class: 'suggestion-title' }, new mw.html.Raw( highlightTitle( page.title, searchString ) ) );\n\n\t\t\tsuggestionText = mw.html.element( 'div', { class: 'suggestion-text' }, new mw.html.Raw( suggestionTitle + suggestionDescription ) );\n\n\t\t\tsuggestionThumbnail = mw.html.element( 'div', {\n\t\t\t\tclass: 'suggestion-thumbnail',\n\t\t\t\tstyle: ( sanitizedThumbURL ) ? 'background-image:url(' + sanitizedThumbURL + ')' : false\n\t\t\t}, '' );\n\n\t\t\tsuggestionLink = mw.html.element( 'a', {\n\t\t\t\tclass: 'suggestion-link',\n\t\t\t\thref: 'https://' + searchLang + '.' + portalSearchDomain + '/wiki/' + encodeURIComponent( page.title.replace( / /gi, '_' ) )\n\t\t\t}, new mw.html.Raw( suggestionText + suggestionThumbnail ) );\n\n\t\t\tstring += suggestionLink;\n\n\t\t}\n\n\t\tstring += '</div>';\n\n\t\treturn string;\n\t} // END generateTemplateString\n\n\t/**\n\t * - Removes 'active' class from a collection of elements.\n\t * - Adds 'active' class to an item if missing.\n\t * - Removes 'active' class from item if present.\n\t *\n\t * @param {HTMLElement} item Item to add active class to.\n\t * @param {NodeList} collection Sibling items.\n\t */\n\n\tfunction toggleActiveClass( item, collection ) {\n\n\t\tvar activeClass = ' active', // Prefixed with space.\n\t\t\tcolItem,\n\t\t\ti;\n\n\t\tfor ( i = 0; i < collection.length; i++ ) {\n\n\t\t\tcolItem = collection[ i ];\n\t\t\t// Remove the class name from everything except item.\n\t\t\tif ( colItem !== item ) {\n\t\t\t\tcolItem.className = colItem.className.replace( activeClass, '' );\n\t\t\t} else {\n\t\t\t\t// If item has class name, remove it\n\t\t\t\tif ( / active/.test( item.className ) ) {\n\t\t\t\t\titem.className = item.className.replace( activeClass, '' );\n\t\t\t\t} else {\n\t\t\t\t\t// It item doesn't have class name, add it.\n\t\t\t\t\titem.className += activeClass;\n\t\t\t\t\tssActiveIndex.setIndex( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Search API callback. Returns a closure that holds the index of the request.\n\t * Deletes previous callbacks based on this index. This prevents callbacks for old\n\t * requests from executing. Then:\n\t * - parses the search results\n\t * - generates the template String\n\t * - inserts the template string into the DOM\n\t * - attaches event listeners on each suggestion item.\n\t *\n\t * @param {number} i\n\t * @return {Function}\n\t */\n\twindow.portalOpensearchCallback = function ( i ) {\n\n\t\tvar callbackIndex = i,\n\t\t\torderedResults = [],\n\t\t\tsuggestions,\n\t\t\titem,\n\t\t\tresult,\n\t\t\ttemplateDOMString,\n\t\t\tlistEl;\n\n\t\treturn function ( xhrResults ) {\n\n\t\t\twindow.callbackStack.deletePrevCallbacks( callbackIndex );\n\n\t\t\tif ( document.activeElement !== searchEl ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsuggestions = ( xhrResults.query && xhrResults.query.pages ) ?\n\t\t\t\txhrResults.query.pages : [];\n\n\t\t\tfor ( item in suggestions ) {\n\t\t\t\tresult = suggestions[ item ];\n\t\t\t\torderedResults[ result.index - 1 ] = result;\n\t\t\t}\n\n\t\t\ttemplateDOMString = generateTemplateString( orderedResults );\n\n\t\t\tssActiveIndex.setMax( orderedResults.length );\n\t\t\tssActiveIndex.clear();\n\n\t\t\ttypeAheadEl.innerHTML = templateDOMString;\n\n\t\t\ttypeAheadItems = typeAheadEl.childNodes[ 0 ].childNodes;\n\n\t\t\t// Attaching hover events\n\t\t\tfor ( i = 0; i < typeAheadItems.length; i++ ) {\n\t\t\t\tlistEl = typeAheadItems[ i ];\n\t\t\t\t// Requires the global polyfill\n\t\t\t\tlistEl.addEventListener( 'mouseenter', toggleActiveClass.bind( this, listEl, typeAheadItems ) );\n\t\t\t\tlistEl.addEventListener( 'mouseleave', toggleActiveClass.bind( this, listEl, typeAheadItems ) );\n\t\t\t}\n\t\t};\n\t};\n\n\t/**\n\t * Keyboard events: up arrow, down arrow and enter.\n\t * moves the 'active' suggestion up and down.\n\t *\n\t * @param {event} event\n\t */\n\tfunction keyboardEvents( event ) {\n\n\t\tvar e = event || window.event,\n\t\t\tkeycode = e.which || e.keyCode,\n\t\t\tsuggestionItems,\n\t\t\tsuggestiontitle,\n\t\t\tsearchSuggestionIndex;\n\n\t\tif ( !typeAheadEl.firstChild ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( keycode === 40 || keycode === 38 ) {\n\t\t\tsuggestionItems = typeAheadEl.firstChild.childNodes;\n\n\t\t\tif ( keycode === 40 ) {\n\t\t\t\tsearchSuggestionIndex = ssActiveIndex.increment( 1 );\n\t\t\t} else {\n\t\t\t\tsearchSuggestionIndex = ssActiveIndex.increment( -1 );\n\t\t\t}\n\n\t\t\t// (T279994) NewFeature:-Autofill search suggestion by using key up and key down event\n\t\t\tsuggestiontitle = suggestionItems[ searchSuggestionIndex ].firstChild.childNodes[ 0 ];\n\t\t\tsearchEl.value = suggestiontitle.textContent;\n\n\t\t\tactiveItem = ( suggestionItems ) ? suggestionItems[ searchSuggestionIndex ] : false;\n\n\t\t\ttoggleActiveClass( activeItem, suggestionItems );\n\n\t\t}\n\t\tif ( keycode === 13 && activeItem ) {\n\n\t\t\tif ( e.preventDefault ) {\n\t\t\t\te.preventDefault();\n\t\t\t} else {\n\t\t\t\t( e.returnValue = false );\n\t\t\t}\n\n\t\t\tactiveItem.children[ 0 ].click();\n\t\t}\n\t}\n\n\tsearchEl.addEventListener( 'keydown', keyboardEvents );\n\n\twindow.addEventListener( 'click', function ( event ) {\n\t\tvar target = event.target.closest( '#search-form' );\n\n\t\tif ( !target ) {\n\t\t\tclearTypeAhead();\n\t\t}\n\t} );\n\n\treturn {\n\t\ttypeAheadEl: typeAheadEl,\n\t\tquery: loadQueryScript\n\t};\n};\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikibooks.org/assets/js/wm-test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikibooks.org/controller.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":119,"column":3,"nodeType":"CallExpression","endLine":119,"endColumn":44}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint-env node, es6 */\nvar _ = require( 'underscore' ),\n\thbs = require( '../../hbs-helpers.global.js' ),\n\tfs = require( 'fs' ),\n\tglob = require( 'glob' ),\n\tstats = require( '../../data/stats' ),\n\totherProjects = require( './other-projects.json' ),\n\trtlLanguages = require( './rtl-languages.json' ),\n\tcrypto = require( 'crypto' ),\n\tdeleteFiles = require( '../../data/utils' ),\n\tsearchLanguageWikis,\n\tsearchLanguageDropdown,\n\tController,\n\tcachebuster,\n\tsiteStats,\n\trange,\n\ttranslationPath = __dirname + '/assets/l10n/',\n\tl10n = require( '../../l10n/en.json' ); // These will be global values\n// This is specific to Wikibooks.\nl10n.portal = l10n.wikibooks;\n\nl10n.assets = {\n\tlogo: {\n\t\tsrc: 'portal/wikibooks.org/assets/img/Wikibooks-logo-tiles_1x.png',\n\t\tsrcset: 'portal/wikibooks.org/assets/img/Wikibooks-logo-tiles_1.5x.png 1.5x, portal/wikibooks.org/assets/img/Wikibooks-logo-tiles_2x.png 2x',\n\t\twidth: '200',\n\t\theight: '183'\n\t},\n\tlang: {\n\t\turl: '//meta.wikimedia.org/wiki/List_of_Wikibooks'\n\t},\n\tsearch:\n\t{\n\t\taction: '//www.wikibooks.org/search-redirect.php'\n\t}\n};\n\nfunction getPreloadLinks() {\n\tvar preloadLinks = [];\n\t[\n\t\t{\n\t\t\tpattern: 'portal/wikibooks.org/assets/img/sprite*.svg',\n\t\t\tas: 'image'\n\t\t}\n\t].forEach( function ( source ) {\n\t\tglob.sync( source.pattern, { cwd: __dirname } )\n\t\t\t.forEach( function ( href ) {\n\t\t\t\tpreloadLinks.push( { href: href, as: source.as } );\n\t\t\t} );\n\t} );\n\n\treturn preloadLinks;\n}\n\n// Format the dropdown for ./templates/search.mustache\nsearchLanguageWikis = stats.getRange( 'wikibooks', 'numPages', 1000 );\nsearchLanguageDropdown = stats.format( 'wikibooks', searchLanguageWikis, {\n\tstripTags: true\n} );\n\n/**\n * SiteStats returns and object for each language wiktionary by language code.\n * ex:\n * \"en\":{\"url\":\"en.wiktionary.org\",\n * \"numPages\":\"5 077 000\",\n * \"views\":1723574042,\n * \"siteName\":\"Wiktionary\",\n * \"articles\":\"articles\",\n * \"slogan\":\"The Free Encyclopedia\",\n * \"name\":\"English\",\n * \"lang\":\"en\"\n * }\n */\nsiteStats = {};\nrange = stats.getRangeFormatted( 'wikibooks', 'views', 10 );\n\n_.each( range, function ( wiki ) {\n\tif ( wiki.closed || wiki.sublinks ) {\n\t\treturn;\n\t}\n\n\twiki.numPages = hbs.formatNumber( wiki.numPages, {\n\t\thash: {\n\t\t\tthousandSeparator: true,\n\t\t\trounded: true,\n\t\t\tnbsp: false\n\t\t}\n\t} ).toString();\n\n\tsiteStats[ wiki.code ] = _.omit( wiki, 'closed', 'code', 'index' );\n} );\n\n/**\n * Writing stats to translation files\n *\n * @return {string}\n */\nfunction createTranslationsChecksum() {\n\tvar data = JSON.stringify( siteStats ),\n\t\thash = crypto.createHash( 'md5' ).update( data ).digest( 'hex' );\n\t// Truncating hash for legibility\n\thash = hash.slice( 0, 8 );\n\treturn hash;\n}\n\nfunction createTranslationFiles() {\n\tvar fileName, lang;\n\n\tfunction writeFile( el, langCode ) {\n\t\tvar fileContent;\n\n\t\tif ( el.code ) {\n\t\t\tlangCode = el.code;\n\t\t}\n\n\t\tfileName = translationPath + langCode + '-' + cachebuster + '.json';\n\t\tfileContent = JSON.stringify( el );\n\n\t\tfs.writeFileSync( fileName, fileContent );\n\t}\n\n\tfor ( lang in siteStats ) {\n\t\tif ( siteStats[ lang ].sublinks ) {\n\t\t\tsiteStats[ lang ].sublinks.forEach( writeFile );\n\t\t} else if ( lang === 'zh' ) {\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hans' ], 'zh-hans' );\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hant' ], 'zh-hant' );\n\t\t\twriteFile( _.omit( siteStats[ lang ], 'variants' ), lang );\n\t\t} else {\n\t\t\twriteFile( siteStats[ lang ], lang );\n\t\t}\n\t}\n}\n\ncachebuster = createTranslationsChecksum();\n\nif ( fs.existsSync( translationPath ) ) {\n\tdeleteFiles( translationPath, 1 );\n} else {\n\tfs.mkdirSync( translationPath );\n}\ncreateTranslationFiles();\n\nController = {\n\ttop10views: stats.getTopFormatted( 'wikibooks', 'views', 10 ),\n\ttop10000Articles: stats.getRangeFormatted( 'wikibooks', 'numPages', 10000, 100000 ),\n\ttop1000Articles: stats.getRangeFormatted( 'wikibooks', 'numPages', 1000, 10000 ),\n\ttop100Articles: stats.getRangeFormatted( 'wikibooks', 'numPages', 100, 1000 ),\n\tsearchLanguageDropdown: searchLanguageDropdown,\n\trtlLanguages: rtlLanguages,\n\trtlLanguagesStringified: '[\\'' + rtlLanguages.join( '\\',\\'' ) + '\\']',\n\ttranslationChecksum: cachebuster,\n\tpreloadLinks: getPreloadLinks(),\n\totherProjects: otherProjects,\n\tl10n\n};\n\nmodule.exports = Controller;\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikibooks.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikibooks.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikimedia.org/assets/js/wm-test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikimedia.org/controller.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikinews.org/assets/js/wm-test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikinews.org/controller.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":119,"column":3,"nodeType":"CallExpression","endLine":119,"endColumn":44}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint-env node, es6 */\nvar _ = require( 'underscore' ),\n\thbs = require( '../../hbs-helpers.global.js' ),\n\tfs = require( 'fs' ),\n\tglob = require( 'glob' ),\n\tstats = require( '../../data/stats' ),\n\totherProjects = require( './other-projects.json' ),\n\trtlLanguages = require( './rtl-languages.json' ),\n\tcrypto = require( 'crypto' ),\n\tdeleteFiles = require( '../../data/utils' ),\n\tsearchLanguageWikis,\n\tsearchLanguageDropdown,\n\tController,\n\tcachebuster,\n\tsiteStats,\n\trange,\n\ttranslationPath = __dirname + '/assets/l10n/',\n\tl10n = require( '../../l10n/en.json' ); // These will be global values\n// This is specific to Wikinews.\nl10n.portal = l10n.wikinews;\n\nl10n.assets = {\n\tlogo: {\n\t\tsrc: 'portal/wikinews.org/assets/img/Wikinews-logo-tiles_1x.png',\n\t\tsrcset: 'portal/wikinews.org/assets/img/Wikinews-logo-tiles_1.5x.png 1.5x, portal/wikinews.org/assets/img/Wikinews-logo-tiles_2x.png 2x',\n\t\twidth: '240',\n\t\theight: '131'\n\t},\n\tlang: {\n\t\turl: '//meta.wikimedia.org/wiki/Wikinews'\n\t},\n\tsearch:\n\t{\n\t\taction: '//www.wikinews.org/search-redirect.php'\n\t}\n};\n\nfunction getPreloadLinks() {\n\tvar preloadLinks = [];\n\t[\n\t\t{\n\t\t\tpattern: 'portal/wikinews.org/assets/img/sprite*.svg',\n\t\t\tas: 'image'\n\t\t}\n\t].forEach( function ( source ) {\n\t\tglob.sync( source.pattern, { cwd: __dirname } )\n\t\t\t.forEach( function ( href ) {\n\t\t\t\tpreloadLinks.push( { href: href, as: source.as } );\n\t\t\t} );\n\t} );\n\n\treturn preloadLinks;\n}\n\n// Format the dropdown for ./templates/search.mustache\nsearchLanguageWikis = stats.getRange( 'wikinews', 'numPages', 1000 );\nsearchLanguageDropdown = stats.format( 'wikinews', searchLanguageWikis, {\n\tstripTags: true\n} );\n\n/**\n * SiteStats returns and object for each language wiktionary by language code.\n * ex:\n * \"en\":{\"url\":\"en.wiktionary.org\",\n * \"numPages\":\"5 077 000\",\n * \"views\":1723574042,\n * \"siteName\":\"Wiktionary\",\n * \"articles\":\"articles\",\n * \"slogan\":\"The Free Encyclopedia\",\n * \"name\":\"English\",\n * \"lang\":\"en\"\n * }\n */\nsiteStats = {};\nrange = stats.getRangeFormatted( 'wikinews', 'views', 10 );\n\n_.each( range, function ( wiki ) {\n\tif ( wiki.closed || wiki.sublinks ) {\n\t\treturn;\n\t}\n\n\twiki.numPages = hbs.formatNumber( wiki.numPages, {\n\t\thash: {\n\t\t\tthousandSeparator: true,\n\t\t\trounded: true,\n\t\t\tnbsp: false\n\t\t}\n\t} ).toString();\n\n\tsiteStats[ wiki.code ] = _.omit( wiki, 'closed', 'code', 'index' );\n} );\n\n/**\n * Writing stats to translation files\n *\n * @return {string}\n */\nfunction createTranslationsChecksum() {\n\tvar data = JSON.stringify( siteStats ),\n\t\thash = crypto.createHash( 'md5' ).update( data ).digest( 'hex' );\n\t// Truncating hash for legibility\n\thash = hash.slice( 0, 8 );\n\treturn hash;\n}\n\nfunction createTranslationFiles() {\n\tvar fileName, lang;\n\n\tfunction writeFile( el, langCode ) {\n\t\tvar fileContent;\n\n\t\tif ( el.code ) {\n\t\t\tlangCode = el.code;\n\t\t}\n\n\t\tfileName = translationPath + langCode + '-' + cachebuster + '.json';\n\t\tfileContent = JSON.stringify( el );\n\n\t\tfs.writeFileSync( fileName, fileContent );\n\t}\n\n\tfor ( lang in siteStats ) {\n\t\tif ( siteStats[ lang ].sublinks ) {\n\t\t\tsiteStats[ lang ].sublinks.forEach( writeFile );\n\t\t} else if ( lang === 'zh' ) {\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hans' ], 'zh-hans' );\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hant' ], 'zh-hant' );\n\t\t\twriteFile( _.omit( siteStats[ lang ], 'variants' ), lang );\n\t\t} else {\n\t\t\twriteFile( siteStats[ lang ], lang );\n\t\t}\n\t}\n}\n\ncachebuster = createTranslationsChecksum();\n\nif ( fs.existsSync( translationPath ) ) {\n\tdeleteFiles( translationPath, 1 );\n} else {\n\tfs.mkdirSync( translationPath );\n}\ncreateTranslationFiles();\n\nController = {\n\ttop10views: stats.getTopFormatted( 'wikinews', 'views', 10 ),\n\ttop10000Articles: stats.getRangeFormatted( 'wikinews', 'numPages', 10000, 100000 ),\n\ttop1000Articles: stats.getRangeFormatted( 'wikinews', 'numPages', 1000, 10000 ),\n\ttop100Articles: stats.getRangeFormatted( 'wikinews', 'numPages', 100, 1000 ),\n\tsearchLanguageDropdown: searchLanguageDropdown,\n\trtlLanguages: rtlLanguages,\n\trtlLanguagesStringified: '[\\'' + rtlLanguages.join( '\\',\\'' ) + '\\']',\n\ttranslationChecksum: cachebuster,\n\tpreloadLinks: getPreloadLinks(),\n\totherProjects: otherProjects,\n\tl10n\n};\n\nmodule.exports = Controller;\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikinews.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikinews.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikipedia.org/assets/js/event-logging-lite.js","messages":[],"suppressedMessages":[{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":99,"column":13,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":99,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":102,"column":18,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":102,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '>>>'.","line":102,"column":18,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":102,"endColumn":42,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '<<'.","line":102,"column":26,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":102,"endColumn":40,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-bitwise","severity":2,"message":"Unexpected use of '&'.","line":102,"column":28,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":102,"endColumn":33,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-prototype-builtins","severity":2,"message":"Do not access Object.prototype method 'hasOwnProperty' from target object.","line":134,"column":29,"nodeType":"CallExpression","messageId":"prototypeBuildIn","endLine":134,"endColumn":43,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-prototype-builtins","severity":2,"message":"Do not access Object.prototype method 'hasOwnProperty' from target object.","line":142,"column":15,"nodeType":"CallExpression","messageId":"prototypeBuildIn","endLine":142,"endColumn":29,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'client_dt' is not in camel case.","line":184,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":184,"endColumn":14,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikipedia.org/assets/js/wikipedia-org-event-logging.js","messages":[],"suppressedMessages":[{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before 'nodes'.","line":86,"column":27,"nodeType":"Identifier","messageId":"multipleSpaces","endLine":86,"endColumn":30,"fix":{"range":[1825,1828],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before 'nodes'.","line":87,"column":20,"nodeType":"Identifier","messageId":"multipleSpaces","endLine":87,"endColumn":30,"fix":{"range":[1922,1932],"text":" "},"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-multi-spaces","severity":2,"message":"Multiple spaces found before 'nodes'.","line":91,"column":28,"nodeType":"Identifier","messageId":"multipleSpaces","endLine":91,"endColumn":30,"fix":{"range":[2345,2347],"text":" "},"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikipedia.org/assets/js/wm-test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikipedia.org/controller.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":121,"column":3,"nodeType":"CallExpression","endLine":121,"endColumn":44}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint-env node, es6 */\nvar _ = require( 'underscore' ),\n\thbs = require( '../../hbs-helpers.global.js' ),\n\tfs = require( 'fs' ),\n\tglob = require( 'glob' ),\n\tstats = require( '../../data/stats' ),\n\totherProjects = require( './other-projects.json' ),\n\trtlLanguages = require( './rtl-languages.json' ),\n\tcrypto = require( 'crypto' ),\n\tdeleteFiles = require( '../../data/utils' ),\n\tsearchLanguageWikis,\n\tsearchLanguageDropdown,\n\tController,\n\tcachebuster,\n\tsiteStats,\n\trange,\n\ttranslationPath = __dirname + '/assets/l10n/',\n\tl10n = require( '../../l10n/en.json' ); // These will be global values\n\n// This is specific to Wikipedia.\nl10n.portal = l10n.wiki;\n\nl10n.assets = {\n\tlogo: {\n\t\tsrc: 'portal/wikipedia.org/assets/img/Wikipedia-logo-v2.png',\n\t\tsrcset: 'portal/wikipedia.org/assets/img/Wikipedia-logo-v2@1.5x.png 1.5x, portal/wikipedia.org/assets/img/Wikipedia-logo-v2@2x.png 2x',\n\t\twidth: '200',\n\t\theight: '183'\n\t},\n\tlang: {\n\t\turl: 'https://meta.wikimedia.org/wiki/Special:MyLanguage/List_of_Wikipedias'\n\t},\n\tsearch:\n\t{\n\t\taction: '//www.wikipedia.org/search-redirect.php'\n\t}\n};\n\n// Format the dropdown for ./templates/search.mustache\nsearchLanguageWikis = stats.getRange( 'wiki', 'numPages', 100000 );\nsearchLanguageDropdown = stats.format( 'wiki', searchLanguageWikis, {\n\tstripTags: true\n} );\n\n/**\n * SiteStats returns and object for each language wikipedia by language code.\n * ex:\n * \"en\":{\"url\":\"en.wikipedia.org\",\n * \"numPages\":\"5 077 000\",\n * \"views\":1723574042,\n * \"siteName\":\"Wikipedia\",\n * \"articles\":\"articles\",\n * \"slogan\":\"The Free Encyclopedia\",\n * \"name\":\"English\",\n * \"lang\":\"en\"\n * }\n */\nsiteStats = {};\nrange = stats.getRangeFormatted( 'wiki', 'views', 10 );\n\n_.each( range, function ( wiki ) {\n\tif ( wiki.closed || wiki.sublinks ) {\n\t\treturn;\n\t}\n\n\twiki.numPages = hbs.formatNumber( wiki.numPages, {\n\t\thash: {\n\t\t\tthousandSeparator: true,\n\t\t\trounded: true,\n\t\t\tnbsp: false\n\t\t}\n\t} ).toString();\n\n\tsiteStats[ wiki.code ] = _.omit( wiki, 'closed', 'code', 'index' );\n} );\n\nfunction getPreloadLinks() {\n\tvar preloadLinks = [];\n\t[\n\t\t{\n\t\t\tpattern: 'portal/wikipedia.org/assets/img/sprite*.svg',\n\t\t\tas: 'image'\n\t\t}\n\t].forEach( function ( source ) {\n\t\tglob.sync( source.pattern, { cwd: __dirname } )\n\t\t\t.forEach( function ( href ) {\n\t\t\t\tpreloadLinks.push( { href: href, as: source.as } );\n\t\t\t} );\n\t} );\n\n\treturn preloadLinks;\n}\n\n/**\n * Writing stats to translation files\n *\n * @return {string}\n */\nfunction createTranslationsChecksum() {\n\tvar data = JSON.stringify( siteStats ),\n\t\thash = crypto.createHash( 'md5' ).update( data ).digest( 'hex' );\n\n\t// Truncating hash for legibility\n\thash = hash.slice( 0, 8 );\n\treturn hash;\n}\n\nfunction createTranslationFiles() {\n\tvar fileName, lang;\n\n\tfunction writeFile( el, langCode ) {\n\t\tvar fileContent;\n\n\t\tif ( el.code ) {\n\t\t\tlangCode = el.code;\n\t\t}\n\n\t\tfileName = translationPath + langCode + '-' + cachebuster + '.json';\n\t\tfileContent = JSON.stringify( el );\n\n\t\tfs.writeFileSync( fileName, fileContent );\n\t}\n\n\tfor ( lang in siteStats ) {\n\t\tif ( siteStats[ lang ].sublinks ) {\n\t\t\tsiteStats[ lang ].sublinks.forEach( writeFile );\n\t\t} else if ( lang === 'zh' ) {\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hans' ], 'zh-hans' );\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hant' ], 'zh-hant' );\n\t\t\twriteFile( _.omit( siteStats[ lang ], 'variants' ), lang );\n\t\t} else {\n\t\t\twriteFile( siteStats[ lang ], lang );\n\t\t}\n\t}\n}\n\ncachebuster = createTranslationsChecksum();\n\nif ( fs.existsSync( translationPath ) ) {\n\tdeleteFiles( translationPath, 1 );\n} else {\n\tfs.mkdirSync( translationPath );\n}\ncreateTranslationFiles();\n\nController = {\n\ttop10views: stats.getTopFormatted( 'wiki', 'views', 10 ),\n\ttop1000000Articles: stats.getRangeFormatted( 'wiki', 'numPages', 1000000 ),\n\ttop100000Articles: stats.getRangeFormatted( 'wiki', 'numPages', 100000, 1000000 ),\n\ttop10000Articles: stats.getRangeFormatted( 'wiki', 'numPages', 10000, 100000 ),\n\ttop1000Articles: stats.getRangeFormatted( 'wiki', 'numPages', 1000, 10000 ),\n\ttop100Articles: stats.getRangeFormatted( 'wiki', 'numPages', 100, 1000 ),\n\tsearchLanguageDropdown: searchLanguageDropdown,\n\tpreloadLinks: getPreloadLinks(),\n\totherProjects: otherProjects,\n\trtlLanguages: rtlLanguages,\n\t// The only \"advantage\" to do this instead of JSON.stringify is to get single quotes.\n\trtlLanguagesStringified: '[\\'' + rtlLanguages.join( '\\',\\'' ) + '\\']',\n\ttranslationChecksum: cachebuster,\n\tl10n\n};\n\nmodule.exports = Controller;\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikipedia.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikipedia.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikiquote.org/assets/js/wm-test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikiquote.org/controller.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":119,"column":3,"nodeType":"CallExpression","endLine":119,"endColumn":44}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint-env node, es6 */\nvar _ = require( 'underscore' ),\n\thbs = require( '../../hbs-helpers.global.js' ),\n\tfs = require( 'fs' ),\n\tglob = require( 'glob' ),\n\tstats = require( '../../data/stats' ),\n\totherProjects = require( './other-projects.json' ),\n\trtlLanguages = require( './rtl-languages.json' ),\n\tcrypto = require( 'crypto' ),\n\tdeleteFiles = require( '../../data/utils' ),\n\tsearchLanguageWikis,\n\tsearchLanguageDropdown,\n\tController,\n\tcachebuster,\n\tsiteStats,\n\trange,\n\ttranslationPath = __dirname + '/assets/l10n/',\n\tl10n = require( '../../l10n/en.json' ); // These will be global values\n// This is specific to Wikiquote.\nl10n.portal = l10n.wikiquote;\n\nl10n.assets = {\n\tlogo: {\n\t\tsrc: 'portal/wikiquote.org/assets/img/Wikiquote-logo-tiles_1x.png',\n\t\tsrcset: 'portal/wikiquote.org/assets/img/Wikiquote-logo-tiles_1.5x.png 1.5x, portal/wikiquote.org/assets/img/Wikiquote-logo-tiles_2x.png 2x',\n\t\twidth: '169',\n\t\theight: '200'\n\t},\n\tlang: {\n\t\turl: '//meta.wikimedia.org/wiki/Wikiquote'\n\t},\n\tsearch:\n\t{\n\t\taction: '//www.wikiquote.org/search-redirect.php'\n\t}\n};\n\nfunction getPreloadLinks() {\n\tvar preloadLinks = [];\n\t[\n\t\t{\n\t\t\tpattern: 'portal/wikiquote.org/assets/img/sprite*.svg',\n\t\t\tas: 'image'\n\t\t}\n\t].forEach( function ( source ) {\n\t\tglob.sync( source.pattern, { cwd: __dirname } )\n\t\t\t.forEach( function ( href ) {\n\t\t\t\tpreloadLinks.push( { href: href, as: source.as } );\n\t\t\t} );\n\t} );\n\n\treturn preloadLinks;\n}\n\n// Format the dropdown for ./templates/search.mustache\nsearchLanguageWikis = stats.getRange( 'wikiquote', 'numPages', 1000 );\nsearchLanguageDropdown = stats.format( 'wikiquote', searchLanguageWikis, {\n\tstripTags: true\n} );\n\n/**\n * SiteStats returns and object for each language wiktionary by language code.\n * ex:\n * \"en\":{\"url\":\"en.wiktionary.org\",\n * \"numPages\":\"5 077 000\",\n * \"views\":1723574042,\n * \"siteName\":\"Wiktionary\",\n * \"articles\":\"articles\",\n * \"slogan\":\"The Free Encyclopedia\",\n * \"name\":\"English\",\n * \"lang\":\"en\"\n * }\n */\nsiteStats = {};\nrange = stats.getRangeFormatted( 'wikiquote', 'views', 10 );\n\n_.each( range, function ( wiki ) {\n\tif ( wiki.closed || wiki.sublinks ) {\n\t\treturn;\n\t}\n\n\twiki.numPages = hbs.formatNumber( wiki.numPages, {\n\t\thash: {\n\t\t\tthousandSeparator: true,\n\t\t\trounded: true,\n\t\t\tnbsp: false\n\t\t}\n\t} ).toString();\n\n\tsiteStats[ wiki.code ] = _.omit( wiki, 'closed', 'code', 'index' );\n} );\n\n/**\n * Writing stats to translation files\n *\n * @return {string}\n */\nfunction createTranslationsChecksum() {\n\tvar data = JSON.stringify( siteStats ),\n\t\thash = crypto.createHash( 'md5' ).update( data ).digest( 'hex' );\n\t// Truncating hash for legibility\n\thash = hash.slice( 0, 8 );\n\treturn hash;\n}\n\nfunction createTranslationFiles() {\n\tvar fileName, lang;\n\n\tfunction writeFile( el, langCode ) {\n\t\tvar fileContent;\n\n\t\tif ( el.code ) {\n\t\t\tlangCode = el.code;\n\t\t}\n\n\t\tfileName = translationPath + langCode + '-' + cachebuster + '.json';\n\t\tfileContent = JSON.stringify( el );\n\n\t\tfs.writeFileSync( fileName, fileContent );\n\t}\n\n\tfor ( lang in siteStats ) {\n\t\tif ( siteStats[ lang ].sublinks ) {\n\t\t\tsiteStats[ lang ].sublinks.forEach( writeFile );\n\t\t} else if ( lang === 'zh' ) {\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hans' ], 'zh-hans' );\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hant' ], 'zh-hant' );\n\t\t\twriteFile( _.omit( siteStats[ lang ], 'variants' ), lang );\n\t\t} else {\n\t\t\twriteFile( siteStats[ lang ], lang );\n\t\t}\n\t}\n}\n\ncachebuster = createTranslationsChecksum();\n\nif ( fs.existsSync( translationPath ) ) {\n\tdeleteFiles( translationPath, 1 );\n} else {\n\tfs.mkdirSync( translationPath );\n}\ncreateTranslationFiles();\n\nController = {\n\ttop10views: stats.getTopFormatted( 'wikiquote', 'views', 10 ),\n\ttop10000Articles: stats.getRangeFormatted( 'wikiquote', 'numPages', 10000, 100000 ),\n\ttop1000Articles: stats.getRangeFormatted( 'wikiquote', 'numPages', 1000, 10000 ),\n\ttop100Articles: stats.getRangeFormatted( 'wikiquote', 'numPages', 100, 1000 ),\n\tsearchLanguageDropdown: searchLanguageDropdown,\n\trtlLanguages: rtlLanguages,\n\trtlLanguagesStringified: '[\\'' + rtlLanguages.join( '\\',\\'' ) + '\\']',\n\ttranslationChecksum: cachebuster,\n\tpreloadLinks: getPreloadLinks(),\n\totherProjects: otherProjects,\n\tl10n\n};\n\nmodule.exports = Controller;\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikiquote.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikiquote.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikiversity.org/assets/js/wm-test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikiversity.org/controller.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":119,"column":3,"nodeType":"CallExpression","endLine":119,"endColumn":44}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint-env node, es6 */\nvar _ = require( 'underscore' ),\n\thbs = require( '../../hbs-helpers.global.js' ),\n\tfs = require( 'fs' ),\n\tglob = require( 'glob' ),\n\tstats = require( '../../data/stats' ),\n\totherProjects = require( './other-projects.json' ),\n\trtlLanguages = require( './rtl-languages.json' ),\n\tcrypto = require( 'crypto' ),\n\tdeleteFiles = require( '../../data/utils' ),\n\tsearchLanguageWikis,\n\tsearchLanguageDropdown,\n\tController,\n\tcachebuster,\n\tsiteStats,\n\trange,\n\ttranslationPath = __dirname + '/assets/l10n/',\n\tl10n = require( '../../l10n/en.json' ); // These will be global values\n// This is specific to Wikiversity.\nl10n.portal = l10n.wikiversity;\n\nl10n.assets = {\n\tlogo: {\n\t\tsrc: 'portal/wikiversity.org/assets/img/Wikiversity-logo-tiles_1x.png',\n\t\tsrcset: 'portal/wikiversity.org/assets/img/Wikiversity-logo-tiles_1.5x.png 1.5x, portal/wikiversity.org/assets/img/Wikiversity-logo-tiles_2x.png 2x',\n\t\twidth: '200',\n\t\theight: '164'\n\t},\n\tlang: {\n\t\turl: '//meta.wikimedia.org/wiki/Wikiversity'\n\t},\n\tsearch:\n\t{\n\t\taction: '//www.wikiversity.org/search-redirect.php'\n\t}\n};\n\nfunction getPreloadLinks() {\n\tvar preloadLinks = [];\n\t[\n\t\t{\n\t\t\tpattern: 'portal/wikiversity.org/assets/img/sprite*.svg',\n\t\t\tas: 'image'\n\t\t}\n\t].forEach( function ( source ) {\n\t\tglob.sync( source.pattern, { cwd: __dirname } )\n\t\t\t.forEach( function ( href ) {\n\t\t\t\tpreloadLinks.push( { href: href, as: source.as } );\n\t\t\t} );\n\t} );\n\n\treturn preloadLinks;\n}\n\n// Format the dropdown for ./templates/search.mustache\nsearchLanguageWikis = stats.getRange( 'wikiversity', 'numPages', 1000 );\nsearchLanguageDropdown = stats.format( 'wikiversity', searchLanguageWikis, {\n\tstripTags: true\n} );\n\n/**\n * SiteStats returns and object for each language wiktionary by language code.\n * ex:\n * \"en\":{\"url\":\"en.wiktionary.org\",\n * \"numPages\":\"5 077 000\",\n * \"views\":1723574042,\n * \"siteName\":\"Wiktionary\",\n * \"articles\":\"articles\",\n * \"slogan\":\"The Free Encyclopedia\",\n * \"name\":\"English\",\n * \"lang\":\"en\"\n * }\n */\nsiteStats = {};\nrange = stats.getRangeFormatted( 'wikiversity', 'views', 10 );\n\n_.each( range, function ( wiki ) {\n\tif ( wiki.closed || wiki.sublinks ) {\n\t\treturn;\n\t}\n\n\twiki.numPages = hbs.formatNumber( wiki.numPages, {\n\t\thash: {\n\t\t\tthousandSeparator: true,\n\t\t\trounded: true,\n\t\t\tnbsp: false\n\t\t}\n\t} ).toString();\n\n\tsiteStats[ wiki.code ] = _.omit( wiki, 'closed', 'code', 'index' );\n} );\n\n/**\n * Writing stats to translation files\n *\n * @return {string}\n */\nfunction createTranslationsChecksum() {\n\tvar data = JSON.stringify( siteStats ),\n\t\thash = crypto.createHash( 'md5' ).update( data ).digest( 'hex' );\n\t// Truncating hash for legibility\n\thash = hash.slice( 0, 8 );\n\treturn hash;\n}\n\nfunction createTranslationFiles() {\n\tvar fileName, lang;\n\n\tfunction writeFile( el, langCode ) {\n\t\tvar fileContent;\n\n\t\tif ( el.code ) {\n\t\t\tlangCode = el.code;\n\t\t}\n\n\t\tfileName = translationPath + langCode + '-' + cachebuster + '.json';\n\t\tfileContent = JSON.stringify( el );\n\n\t\tfs.writeFileSync( fileName, fileContent );\n\t}\n\n\tfor ( lang in siteStats ) {\n\t\tif ( siteStats[ lang ].sublinks ) {\n\t\t\tsiteStats[ lang ].sublinks.forEach( writeFile );\n\t\t} else if ( lang === 'zh' ) {\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hans' ], 'zh-hans' );\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hant' ], 'zh-hant' );\n\t\t\twriteFile( _.omit( siteStats[ lang ], 'variants' ), lang );\n\t\t} else {\n\t\t\twriteFile( siteStats[ lang ], lang );\n\t\t}\n\t}\n}\n\ncachebuster = createTranslationsChecksum();\n\nif ( fs.existsSync( translationPath ) ) {\n\tdeleteFiles( translationPath, 1 );\n} else {\n\tfs.mkdirSync( translationPath );\n}\ncreateTranslationFiles();\n\nController = {\n\ttop10views: stats.getTopFormatted( 'wikiversity', 'views', 10 ),\n\ttop10000Articles: stats.getRangeFormatted( 'wikiversity', 'numPages', 10000, 100000 ),\n\ttop1000Articles: stats.getRangeFormatted( 'wikiversity', 'numPages', 1000, 10000 ),\n\ttop100Articles: stats.getRangeFormatted( 'wikiversity', 'numPages', 100, 1000 ),\n\tsearchLanguageDropdown: searchLanguageDropdown,\n\trtlLanguages: rtlLanguages,\n\trtlLanguagesStringified: '[\\'' + rtlLanguages.join( '\\',\\'' ) + '\\']',\n\ttranslationChecksum: cachebuster,\n\tpreloadLinks: getPreloadLinks(),\n\totherProjects: otherProjects,\n\tl10n\n};\n\nmodule.exports = Controller;\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikiversity.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikiversity.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikivoyage.org/assets/js/wm-test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikivoyage.org/controller.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":119,"column":3,"nodeType":"CallExpression","endLine":119,"endColumn":44}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint-env node, es6 */\nvar _ = require( 'underscore' ),\n\thbs = require( '../../hbs-helpers.global.js' ),\n\tfs = require( 'fs' ),\n\tglob = require( 'glob' ),\n\tstats = require( '../../data/stats' ),\n\totherProjects = require( './other-projects.json' ),\n\trtlLanguages = require( './rtl-languages.json' ),\n\tcrypto = require( 'crypto' ),\n\tdeleteFiles = require( '../../data/utils' ),\n\tsearchLanguageWikis,\n\tsearchLanguageDropdown,\n\tController,\n\tcachebuster,\n\tsiteStats,\n\trange,\n\ttranslationPath = __dirname + '/assets/l10n/',\n\tl10n = require( '../../l10n/en.json' ); // These will be global values\n// This is specific to Wikivoyage.\nl10n.portal = l10n.wikivoyage;\n\nl10n.assets = {\n\tlogo: {\n\t\tsrc: 'portal/wikivoyage.org/assets/img/Wikivoyage-logo-tiles_1x.png',\n\t\tsrcset: 'portal/wikivoyage.org/assets/img/Wikivoyage-logo-tiles_1.5x.png 1.5x, portal/wikivoyage.org/assets/img/Wikivoyage-logo-tiles_2x.png 2x',\n\t\twidth: '200',\n\t\theight: '200'\n\t},\n\tlang: {\n\t\turl: '//meta.wikimedia.org/wiki/Wikivoyage'\n\t},\n\tsearch:\n\t{\n\t\taction: '//www.wikivoyage.org/search-redirect.php'\n\t}\n};\n\nfunction getPreloadLinks() {\n\tvar preloadLinks = [];\n\t[\n\t\t{\n\t\t\tpattern: 'portal/wikivoyage.org/assets/img/sprite*.svg',\n\t\t\tas: 'image'\n\t\t}\n\t].forEach( function ( source ) {\n\t\tglob.sync( source.pattern, { cwd: __dirname } )\n\t\t\t.forEach( function ( href ) {\n\t\t\t\tpreloadLinks.push( { href: href, as: source.as } );\n\t\t\t} );\n\t} );\n\n\treturn preloadLinks;\n}\n\n// Format the dropdown for ./templates/search.mustache\nsearchLanguageWikis = stats.getRange( 'wikivoyage', 'numPages', 1000 );\nsearchLanguageDropdown = stats.format( 'wikivoyage', searchLanguageWikis, {\n\tstripTags: true\n} );\n\n/**\n * SiteStats returns and object for each language wiktionary by language code.\n * ex:\n * \"en\":{\"url\":\"en.wiktionary.org\",\n * \"numPages\":\"5 077 000\",\n * \"views\":1723574042,\n * \"siteName\":\"Wiktionary\",\n * \"articles\":\"articles\",\n * \"slogan\":\"The Free Encyclopedia\",\n * \"name\":\"English\",\n * \"lang\":\"en\"\n * }\n */\nsiteStats = {};\nrange = stats.getRangeFormatted( 'wikivoyage', 'views', 10 );\n\n_.each( range, function ( wiki ) {\n\tif ( wiki.closed || wiki.sublinks ) {\n\t\treturn;\n\t}\n\n\twiki.numPages = hbs.formatNumber( wiki.numPages, {\n\t\thash: {\n\t\t\tthousandSeparator: true,\n\t\t\trounded: true,\n\t\t\tnbsp: false\n\t\t}\n\t} ).toString();\n\n\tsiteStats[ wiki.code ] = _.omit( wiki, 'closed', 'code', 'index' );\n} );\n\n/**\n * Writing stats to translation files\n *\n * @return {string}\n */\nfunction createTranslationsChecksum() {\n\tvar data = JSON.stringify( siteStats ),\n\t\thash = crypto.createHash( 'md5' ).update( data ).digest( 'hex' );\n\t// Truncating hash for legibility\n\thash = hash.slice( 0, 8 );\n\treturn hash;\n}\n\nfunction createTranslationFiles() {\n\tvar fileName, lang;\n\n\tfunction writeFile( el, langCode ) {\n\t\tvar fileContent;\n\n\t\tif ( el.code ) {\n\t\t\tlangCode = el.code;\n\t\t}\n\n\t\tfileName = translationPath + langCode + '-' + cachebuster + '.json';\n\t\tfileContent = JSON.stringify( el );\n\n\t\tfs.writeFileSync( fileName, fileContent );\n\t}\n\n\tfor ( lang in siteStats ) {\n\t\tif ( siteStats[ lang ].sublinks ) {\n\t\t\tsiteStats[ lang ].sublinks.forEach( writeFile );\n\t\t} else if ( lang === 'zh' ) {\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hans' ], 'zh-hans' );\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hant' ], 'zh-hant' );\n\t\t\twriteFile( _.omit( siteStats[ lang ], 'variants' ), lang );\n\t\t} else {\n\t\t\twriteFile( siteStats[ lang ], lang );\n\t\t}\n\t}\n}\n\ncachebuster = createTranslationsChecksum();\n\nif ( fs.existsSync( translationPath ) ) {\n\tdeleteFiles( translationPath, 1 );\n} else {\n\tfs.mkdirSync( translationPath );\n}\ncreateTranslationFiles();\n\nController = {\n\ttop10views: stats.getTopFormatted( 'wikivoyage', 'views', 10 ),\n\ttop10000Articles: stats.getRangeFormatted( 'wikivoyage', 'numPages', 10000, 100000 ),\n\ttop1000Articles: stats.getRangeFormatted( 'wikivoyage', 'numPages', 1000, 10000 ),\n\ttop100Articles: stats.getRangeFormatted( 'wikivoyage', 'numPages', 100, 1000 ),\n\tsearchLanguageDropdown: searchLanguageDropdown,\n\trtlLanguages: rtlLanguages,\n\trtlLanguagesStringified: '[\\'' + rtlLanguages.join( '\\',\\'' ) + '\\']',\n\ttranslationChecksum: cachebuster,\n\tpreloadLinks: getPreloadLinks(),\n\totherProjects: otherProjects,\n\tl10n\n};\n\nmodule.exports = Controller;\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikivoyage.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wikivoyage.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wiktionary.org/assets/js/wm-test.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wiktionary.org/controller.js","messages":[{"ruleId":"security/detect-non-literal-fs-filename","severity":1,"message":"Found writeFileSync from package \"fs\" with non literal argument at index 0","line":119,"column":3,"nodeType":"CallExpression","endLine":119,"endColumn":44}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/* eslint-env node, es6 */\nvar _ = require( 'underscore' ),\n\thbs = require( '../../hbs-helpers.global.js' ),\n\tfs = require( 'fs' ),\n\tglob = require( 'glob' ),\n\tstats = require( '../../data/stats' ),\n\totherProjects = require( './other-projects.json' ),\n\trtlLanguages = require( './rtl-languages.json' ),\n\tcrypto = require( 'crypto' ),\n\tdeleteFiles = require( '../../data/utils' ),\n\tsearchLanguageWikis,\n\tsearchLanguageDropdown,\n\tController,\n\tcachebuster,\n\tsiteStats,\n\trange,\n\ttranslationPath = __dirname + '/assets/l10n/',\n\tl10n = require( '../../l10n/en.json' ); // These will be global values\n// This is specific to Wiktionary.\nl10n.portal = l10n.wiktionary;\n\nl10n.assets = {\n\tlogo: {\n\t\tsrc: 'portal/wiktionary.org/assets/img/Wiktionary-logo-tiles_1x.png',\n\t\tsrcset: 'portal/wiktionary.org/assets/img/Wiktionary-logo-tiles_1.5x.png 1.5x, portal/wiktionary.org/assets/img/Wiktionary-logo-tiles_2x.png 2x',\n\t\twidth: '200',\n\t\theight: '183'\n\t},\n\tlang: {\n\t\turl: '//meta.wikimedia.org/wiki/Wiktionary#List_of_Wiktionaries'\n\t},\n\tsearch:\n\t{\n\t\taction: '//www.wiktionary.org/search-redirect.php'\n\t}\n};\n\nfunction getPreloadLinks() {\n\tvar preloadLinks = [];\n\t[\n\t\t{\n\t\t\tpattern: 'portal/wiktionary.org/assets/img/sprite*.svg',\n\t\t\tas: 'image'\n\t\t}\n\t].forEach( function ( source ) {\n\t\tglob.sync( source.pattern, { cwd: __dirname } )\n\t\t\t.forEach( function ( href ) {\n\t\t\t\tpreloadLinks.push( { href: href, as: source.as } );\n\t\t\t} );\n\t} );\n\n\treturn preloadLinks;\n}\n\n// Format the dropdown for ./templates/search.mustache\nsearchLanguageWikis = stats.getRange( 'wiktionary', 'numPages', 100000 );\nsearchLanguageDropdown = stats.format( 'wiktionary', searchLanguageWikis, {\n\tstripTags: true\n} );\n\n/**\n * SiteStats returns and object for each language wiktionary by language code.\n * ex:\n * \"en\":{\"url\":\"en.wiktionary.org\",\n * \"numPages\":\"5 077 000\",\n * \"views\":1723574042,\n * \"siteName\":\"Wiktionary\",\n * \"articles\":\"articles\",\n * \"slogan\":\"The Free Encyclopedia\",\n * \"name\":\"English\",\n * \"lang\":\"en\"\n * }\n */\nsiteStats = {};\nrange = stats.getRangeFormatted( 'wiktionary', 'views', 10 );\n\n_.each( range, function ( wiki ) {\n\tif ( wiki.closed || wiki.sublinks ) {\n\t\treturn;\n\t}\n\n\twiki.numPages = hbs.formatNumber( wiki.numPages, {\n\t\thash: {\n\t\t\tthousandSeparator: true,\n\t\t\trounded: true,\n\t\t\tnbsp: false\n\t\t}\n\t} ).toString();\n\n\tsiteStats[ wiki.code ] = _.omit( wiki, 'closed', 'code', 'index' );\n} );\n\n/**\n * Writing stats to translation files\n *\n * @return {string}\n */\nfunction createTranslationsChecksum() {\n\tvar data = JSON.stringify( siteStats ),\n\t\thash = crypto.createHash( 'md5' ).update( data ).digest( 'hex' );\n\t// Truncating hash for legibility\n\thash = hash.slice( 0, 8 );\n\treturn hash;\n}\n\nfunction createTranslationFiles() {\n\tvar fileName, lang;\n\n\tfunction writeFile( el, langCode ) {\n\t\tvar fileContent;\n\n\t\tif ( el.code ) {\n\t\t\tlangCode = el.code;\n\t\t}\n\n\t\tfileName = translationPath + langCode + '-' + cachebuster + '.json';\n\t\tfileContent = JSON.stringify( el );\n\n\t\tfs.writeFileSync( fileName, fileContent );\n\t}\n\n\tfor ( lang in siteStats ) {\n\t\tif ( siteStats[ lang ].sublinks ) {\n\t\t\tsiteStats[ lang ].sublinks.forEach( writeFile );\n\t\t} else if ( lang === 'zh' ) {\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hans' ], 'zh-hans' );\n\t\t\twriteFile( siteStats[ lang ].variants[ 'zh-hant' ], 'zh-hant' );\n\t\t\twriteFile( _.omit( siteStats[ lang ], 'variants' ), lang );\n\t\t} else {\n\t\t\twriteFile( siteStats[ lang ], lang );\n\t\t}\n\t}\n}\n\ncachebuster = createTranslationsChecksum();\n\nif ( fs.existsSync( translationPath ) ) {\n\tdeleteFiles( translationPath, 1 );\n} else {\n\tfs.mkdirSync( translationPath );\n}\ncreateTranslationFiles();\n\nController = {\n\ttop10views: stats.getTopFormatted( 'wiktionary', 'views', 10 ),\n\ttop1000000Articles: stats.getRangeFormatted( 'wiktionary', 'numPages', 1000000 ),\n\ttop100000Articles: stats.getRangeFormatted( 'wiktionary', 'numPages', 100000, 1000000 ),\n\ttop10000Articles: stats.getRangeFormatted( 'wiktionary', 'numPages', 10000, 100000 ),\n\ttop1000Articles: stats.getRangeFormatted( 'wiktionary', 'numPages', 1000, 10000 ),\n\ttop100Articles: stats.getRangeFormatted( 'wiktionary', 'numPages', 100, 1000 ),\n\tsearchLanguageDropdown: searchLanguageDropdown,\n\trtlLanguages: rtlLanguages,\n\trtlLanguagesStringified: '[\\'' + rtlLanguages.join( '\\',\\'' ) + '\\']',\n\ttranslationChecksum: cachebuster,\n\tpreloadLinks: getPreloadLinks(),\n\totherProjects: otherProjects,\n\tl10n\n};\n\nmodule.exports = Controller;\n","usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wiktionary.org/other-projects.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/wiktionary.org/rtl-languages.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]}]
--- end ---