wvui: master (log #113464)

sourcepatches
$ date
Sat Feb 13 10:42:05 UTC 2021

$ git clone file:///srv/git/wvui.git repo --depth=1 -b master
Cloning into 'repo'...

$ git config user.name libraryupgrader

$ git config user.email tools.libraryupgrader@tools.wmflabs.org

$ git submodule update --init

$ grr init
Installed commit-msg hook.

$ git show-ref refs/heads/master
323d92ed560dd11aa821dda71fe54d863c28ce39 refs/heads/master

Upgrading n:eslint from 7.9.0 -> 7.16.0
Upgrading n:eslint-config-wikimedia from 0.17.0 -> 0.18.1
$ npm install

> deasync@0.1.21 install /src/repo/node_modules/deasync
> node ./build.js

`linux-x64-node-10` exists; testing
Binary is fine; exiting

> iltorb@2.4.5 install /src/repo/node_modules/iltorb
> node ./scripts/install.js || node-gyp rebuild

info looking for cached prebuild @ /cache/_prebuilds/2a34dd-iltorb-v2.4.5-node-v64-linux-x64.tar.gz
info found cached prebuild 
info unpacking @ /cache/_prebuilds/2a34dd-iltorb-v2.4.5-node-v64-linux-x64.tar.gz
info unpack resolved to /src/repo/node_modules/iltorb/build/bindings/iltorb.node
info unpack required /src/repo/node_modules/iltorb/build/bindings/iltorb.node successfully
info install Successfully installed iltorb binary!

> pre-commit@1.2.2 install /src/repo/node_modules/pre-commit
> node install.js


> core-js@2.6.12 postinstall /src/repo/node_modules/babel-register/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js on Open Collective or Patreon: 
> https://opencollective.com/core-js 
> https://www.patreon.com/zloirock 

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)


> core-js@2.6.12 postinstall /src/repo/node_modules/babel-runtime/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> core-js@3.8.3 postinstall /src/repo/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> core-js-pure@3.8.3 postinstall /src/repo/node_modules/core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"


> spawn-sync@1.0.15 postinstall /src/repo/node_modules/spawn-sync
> node postinstall


> ejs@2.7.4 postinstall /src/repo/node_modules/webpack-bundle-analyzer/node_modules/ejs
> node ./postinstall.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)

npm WARN eslint-plugin-vue@6.2.2 requires a peer of eslint@^5.0.0 || ^6.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules/watchpack-chokidar2/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.3.1 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.1: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

added 2748 packages from 1350 contributors and audited 2755 packages in 213.239s

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

found 0 vulnerabilities


$ npm update eslint -depth 10

$ ./node_modules/.bin/eslint . --fix

/src/repo/src/components/button/Button.stories.ts
  13:14  warning  There is more than one component in this file  vue/one-component-per-file
  41:14  warning  There is more than one component in this file  vue/one-component-per-file

/src/repo/src/components/icon/Icon.stories.ts
  12:14  warning  There is more than one component in this file  vue/one-component-per-file
  51:14  warning  There is more than one component in this file  vue/one-component-per-file

/src/repo/src/components/input/Input.stories.ts
   17:14  warning  There is more than one component in this file  vue/one-component-per-file
   54:14  warning  There is more than one component in this file  vue/one-component-per-file
   79:14  warning  There is more than one component in this file  vue/one-component-per-file
  103:14  warning  There is more than one component in this file  vue/one-component-per-file
  131:14  warning  There is more than one component in this file  vue/one-component-per-file
  158:14  warning  There is more than one component in this file  vue/one-component-per-file

/src/repo/src/components/typeahead-suggestion/TypeaheadSuggestion.stories.ts
  14:14  warning  There is more than one component in this file  vue/one-component-per-file
  58:14  warning  There is more than one component in this file  vue/one-component-per-file

✖ 12 problems (0 errors, 12 warnings)


$ ./node_modules/.bin/eslint . -f json
[{"filePath":"/src/repo/.jest/ignoreTransform.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/.jest/snapshotResolver.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/.storybook/main.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/.storybook/preview.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/fork-ts-checker.config.js","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/src/repo/src/actions/PrimaryAction.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/actions/PrimaryAction.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/button/Button.stories.ts","messages":[{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":13,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":38,"endColumn":3},{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":41,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":84,"endColumn":3}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { action } from '@storybook/addon-actions';\nimport { boolean, select, text } from '@storybook/addon-knobs';\nimport { PrimaryAction } from '../../actions/PrimaryAction';\nimport Vue, { PropType } from 'vue';\nimport WvuiButton from './Button.vue';\n\nexport default {\n\ttitle: 'Components/Button',\n\tparameters: { layout: 'centered' }\n};\n\nexport const configurable = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiButton },\n\t\tprops: {\n\t\t\tenabled: { type: Boolean, default: boolean( 'Enabled', true ) },\n\t\t\taction: {\n\t\t\t\ttype: String as PropType<keyof typeof PrimaryAction>,\n\t\t\t\tdefault: select( 'Action', Object.keys( PrimaryAction ), 'Default' )\n\t\t\t},\n\t\t\tquiet: { type: Boolean, default: boolean( 'Quiet', false ) },\n\t\t\tslotProp: { type: String, default: text( 'Slot', 'Label' ) }\n\t\t},\n\t\tdata() {\n\t\t\treturn { PrimaryAction };\n\t\t},\n\t\tmethods: { click: action( 'click' ) },\n\t\ttemplate: `\n\t\t<wvui-button\n\t\t\t:disabled=\"!enabled\"\n\t\t\t:action=\"PrimaryAction[ action ]\"\n\t\t\t:quiet=\"quiet\"\n\t\t\t@click=\"click\"\n\t\t>\n\t\t\t{{slotProp}}\n\t\t</wvui-button>\n\t`\n\t} );\n\nexport const combinations = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiButton },\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tPrimaryAction,\n\t\t\t\tcombinations: [\n\t\t\t\t\t{ enabled: true, quiet: false },\n\t\t\t\t\t{ enabled: false, quiet: false },\n\t\t\t\t\t{ enabled: true, quiet: true },\n\t\t\t\t\t{ enabled: false, quiet: true }\n\t\t\t\t]\n\t\t\t};\n\t\t},\n\t\tmethods: { click: action( 'click' ) },\n\t\ttemplate: `\n\t\t<table\n\t\t\tstyle=\"border-spacing: 16px;\">\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th scope=\"col\">Action</th>\n\t\t\t\t\t<th scope=\"col\">Normal</th>\n\t\t\t\t\t<th scope=\"col\">Disabled</th>\n\t\t\t\t\t<th scope=\"col\">Quiet</th>\n\t\t\t\t\t<th scope=\"col\">Quiet disabled</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr v-for=\"action in Object.keys( PrimaryAction )\" :key=\"action\">\n\t\t\t\t\t<th scope=\"row\">{{action}}</th>\n\t\t\t\t\t<td v-for=\"combo, index in combinations\" :key=\"index\">\n\t\t\t\t\t\t<wvui-button\n\t\t\t\t\t\t\t:disabled=\"!combo.enabled\"\n\t\t\t\t\t\t\t:action=\"PrimaryAction[ action ]\"\n\t\t\t\t\t\t\t:quiet=\"combo.quiet\"\n\t\t\t\t\t\t\t@click=\"click\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tLabel\n\t\t\t\t\t\t</wvui-button>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t`\n\t} );\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/button/Button.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/button/Button.vue","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/icon/Icon.stories.ts","messages":[{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":12,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":48,"endColumn":3},{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":51,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":87,"endColumn":3}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { color, text } from '@storybook/addon-knobs';\nimport Vue from 'vue';\nimport WvuiIcon from './Icon.vue';\nimport * as icons from '../../themes/icons';\n\nexport default {\n\ttitle: 'Components/Icon',\n\tparameters: { layout: 'centered' }\n};\n\nexport const iconsLTR = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiIcon },\n\t\tprops: {\n\t\t\ticonColor: { type: String, default: color( 'Icon color', 'rgba( 32, 33, 34, 1)' ) },\n\t\t\tlangCode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: text( 'Language code', window.document.documentElement.lang )\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ticons,\n\t\t\t\ticon: null\n\t\t\t};\n\t\t},\n\t\tbeforeMount() {\n\t\t\twindow.document.documentElement.setAttribute( 'dir', 'ltr' );\n\t\t},\n\t\ttemplate: `\n\t\t<div>\n\t\t\t<div\n\t\t\t\tv-for=\"icon in Object.keys( icons )\"\n\t\t\t\t:key=\"icon\"\n\t\t\t\tstyle=\"margin-bottom: 1em;\"\n\t\t\t>\n\t\t\t\t<wvui-icon\n\t\t\t\t\t:icon=\"icons[ icon ]\"\n\t\t\t\t\t:iconColor=\"iconColor\"\n\t\t\t\t\t:langCode=\"langCode\"\n\t\t\t\t>\n\t\t\t\t\t{{ icon }}\n\t\t\t\t</wvui-icon>\n\t\t\t\t{{ icon }}\n\t\t\t</div>\n\t\t</div>\n\t\t`\n\t} );\n\nexport const iconsRTL = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiIcon },\n\t\tprops: {\n\t\t\ticonColor: { type: String, default: color( 'Icon color', 'rgba( 32, 33, 34, 1 )' ) },\n\t\t\tlangCode: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: text( 'Language code', window.document.documentElement.lang )\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\ticons,\n\t\t\t\ticon: null\n\t\t\t};\n\t\t},\n\t\tbeforeMount() {\n\t\t\twindow.document.documentElement.setAttribute( 'dir', 'rtl' );\n\t\t},\n\t\ttemplate: `\n\t\t<div>\n\t\t\t<div\n\t\t\t\tv-for=\"icon in Object.keys( icons )\"\n\t\t\t\t:key=\"icon\"\n\t\t\t\tstyle=\"margin-bottom: 1em;\"\n\t\t\t>\n\t\t\t\t<wvui-icon\n\t\t\t\t\t:icon=\"icons[ icon ]\"\n\t\t\t\t\t:iconColor=\"iconColor\"\n\t\t\t\t\t:langCode=\"langCode\"\n\t\t\t\t>\n\t\t\t\t\t{{ icon }}\n\t\t\t\t</wvui-icon>\n\t\t\t\t{{ icon }}\n\t\t\t</div>\n\t\t</div>\n\t\t`\n\t} );\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/icon/Icon.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/icon/Icon.vue","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/icon/iconTypes.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/icon/iconTypes.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/input/Input.stories.ts","messages":[{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":17,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":51,"endColumn":3},{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":54,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":76,"endColumn":3},{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":79,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":100,"endColumn":3},{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":103,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":128,"endColumn":3},{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":131,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":145,"endColumn":3},{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":158,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":184,"endColumn":3}],"errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { boolean, text, select } from '@storybook/addon-knobs';\nimport { action } from '@storybook/addon-actions';\nimport Vue, { PropType } from 'vue';\nimport WvuiInput from './Input.vue';\nimport WvuiButton from '../button/Button.vue';\nimport { InputType } from './InputType';\nimport { wvuiIconSearch, wvuiIconInfoFilled } from '@/themes/icons';\nimport './Input.stories.less';\n\nexport default {\n\ttitle: 'Components/Input',\n\tcomponent: WvuiInput,\n\tparameters: { layout: 'centered' }\n};\n\nexport const configurable = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiInput },\n\t\tprops: {\n\t\t\tdisabled: { type: Boolean, default: boolean( 'Disabled', false ) },\n\t\t\ttype: {\n\t\t\t\ttype: String as PropType<keyof typeof InputType>,\n\t\t\t\tdefault: select( 'Input Type', Object.keys( InputType ), 'Search' )\n\t\t\t},\n\t\t\tplaceholder: { type: String, default: text( 'Placeholder', 'Search…' ) }\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tInputType\n\t\t\t};\n\t\t},\n\t\tmethods: {\n\t\t\tinput: action( 'input' ),\n\t\t\tchange: action( 'change' ),\n\t\t\tfocus: action( 'focus' ),\n\t\t\tblur: action( 'blur' )\n\t\t},\n\t\ttemplate: `\n\t\t<div class=\"sb-input\">\n\t\t\t<wvui-input\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:type=\"InputType[type]\"\n\t\t\t\t@input=\"input\"\n\t\t\t\t@change=\"change\"\n\t\t\t\t@focus=\"focus\"\n\t\t\t\t@blur=\"blur\"\n\t\t\t/>\n\t\t</div>\n\t\t`\n\t} );\n\nexport const withStartIcon = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiInput },\n\t\tprops: {\n\t\t\tdisabled: { type: Boolean, default: boolean( 'Disabled', false ) }\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tInputType,\n\t\t\t\tsearchIcon: wvuiIconSearch\n\t\t\t};\n\t\t},\n\n\t\ttemplate: `\n\t\t<div class=\"sb-input\">\n\t\t\t<wvui-input\n\t\t\t\tplaceholder=\"Search…\"\n\t\t\t\t:type=\"InputType.Search\"\n\t\t\t\t:start-icon=\"searchIcon\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t/>\n\t\t</div>\n\t`\n\t} );\n\nexport const withEndIcon = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiInput },\n\t\tprops: {\n\t\t\tdisabled: { type: Boolean, default: boolean( 'Disabled', false ) }\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tInputType,\n\t\t\t\tendIcon: wvuiIconInfoFilled\n\t\t\t};\n\t\t},\n\t\ttemplate: `\n\t\t<div class=\"sb-input\">\n\t\t\t<wvui-input\n\t\t\t\tplaceholder=\"Search…\"\n\t\t\t\t:type=\"InputType.Search\"\n\t\t\t\t:end-icon=\"endIcon\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t/>\n\t\t</div>\n\t`\n\t} );\n\nexport const withClearAction = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiInput },\n\t\tprops: {\n\t\t\tdisabled: { type: Boolean, default: boolean( 'Disabled', false ) }\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tInputType\n\t\t\t};\n\t\t},\n\t\tmethods: {\n\t\t\tinput: action( 'input' )\n\t\t},\n\t\ttemplate: `\n\t\t<div class=\"sb-input\">\n\t\t\t<wvui-input\n\t\t\t\tplaceholder=\"Type something…\"\n\t\t\t\t:type=\"InputType.Search\"\n\t\t\t\t:clearable=\"true\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\tvalue=\"Some value\"\n\t\t\t\t@input=\"input\"\n\t\t\t/>\n\t\t</div>\n\t`\n\t} );\n\nexport const withButton = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiInput, WvuiButton },\n\t\tprops: {\n\t\t\tdisabled: { type: Boolean, default: boolean( 'Disabled', false ) }\n\t\t},\n\t\ttemplate: `\n\t\t<div class=\"sb-input sb-input--has-button\">\n\t\t\t<wvui-input\n\t\t\t\tplaceholder=\"Search…\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t/>\n\t\t\t<wvui-button :disabled=\"disabled\">Search</wvui-button>\n\t\t</div>\n\t`\n\t} );\n\nconst searchLanguageMap = {\n\tEnglish: 'Search',\n\tRussian: 'Искать',\n\tVietnamese: 'Tìm kiếm',\n\tJapanese: '探す',\n\tGreek: 'Αναζήτηση',\n\tSwedish: 'Söka',\n\tMazandeerani: 'جستجو کردن'\n};\n\nexport const wikipediaSearchInput = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiInput, WvuiButton },\n\t\tprops: {\n\t\t\tdisabled: { type: Boolean, default: boolean( 'Disabled', false ) },\n\t\t\tbuttonLabel: {\n\t\t\t\ttype: String,\n\t\t\t\tdefault: select( 'Label language', searchLanguageMap, 'Search' )\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tstartIcon: wvuiIconSearch\n\t\t\t};\n\t\t},\n\t\ttemplate: `\n\t\t<div class=\"sb-input sb-input--has-button\">\n\t\t\t<wvui-input\n\t\t\t\tplaceholder=\"Search…\"\n\t\t\t\ticon=\"search\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:start-icon=\"startIcon\"\n\t\t\t\t:clearable=\"true\"\n\t\t\t/>\n\t\t\t<wvui-button :disabled=\"disabled\">{{ buttonLabel }}</wvui-button>\n\t\t</div>\n\t`\n\t} );\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/input/Input.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/input/Input.vue","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/input/InputType.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/input/InputType.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-search/TypeaheadSearch.constants.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-search/TypeaheadSearch.stories.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-search/TypeaheadSearch.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-search/TypeaheadSearch.vue","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-search/http/SearchClient.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-search/http/restSearchClient.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-search/http/restSearchClient.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-search/lifecycle-events/index.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-suggestion-title/TypeaheadSuggestionTitle.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-suggestion-title/TypeaheadSuggestionTitle.vue","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-suggestion-title/TypeaheadSuggestionTitleUtils.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-suggestion-title/TypeaheadSuggestionTitleUtils.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-suggestion/TypeaheadSuggestion.stories.ts","messages":[{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":14,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":55,"endColumn":3},{"ruleId":"vue/one-component-per-file","severity":1,"message":"There is more than one component in this file.","line":58,"column":14,"nodeType":"ObjectExpression","messageId":"toManyComponents","endLine":84,"endColumn":3}],"errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { boolean, text } from '@storybook/addon-knobs';\nimport Vue from 'vue';\nimport WvuiTypeaheadSuggestion from './TypeaheadSuggestion.vue';\nimport { SearchResult } from '../typeahead-search/http/SearchClient';\nimport './TypeaheadSuggestion.stories.less';\nimport suggestionsList from '../typeahead-search/mocks/restApi.suggestions.json';\n\nexport default {\n\ttitle: 'Components/TypeaheadSuggestion',\n\tcomponent: WvuiTypeaheadSuggestion\n};\n\nexport const configurable = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiTypeaheadSuggestion },\n\t\tprops: {\n\t\t\tthumbnail: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: boolean( 'Has thumbnail?', true )\n\t\t\t},\n\t\t\tshowThumbnail: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: boolean( 'Show thumbnail?', true )\n\t\t\t},\n\t\t\tshowDescription: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: boolean( 'Show description?', true )\n\t\t\t},\n\t\t\tactive: { type: Boolean, default: boolean( 'Active?', false ) },\n\t\t\tquery: { type: String, default: text( 'Query (for highlighting)', 'Co' ) }\n\t\t},\n\t\tcomputed: {\n\t\t\tsuggestion(): SearchResult {\n\t\t\t\tconst suggestion = suggestionsList.pages[ 1 ] as SearchResult;\n\n\t\t\t\treturn {\n\t\t\t\t\t...suggestion,\n\t\t\t\t\tthumbnail: this.thumbnail ? suggestion.thumbnail : undefined\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t<ol class=\"sb-search__suggestions\" role=\"listbox\">\n\t\t\t<li role=\"option\">\n\t\t\t\t<wvui-typeahead-suggestion\n\t\t\t\t\t:suggestion=\"suggestion\"\n\t\t\t\t\t:active=\"active\"\n\t\t\t\t\t:query=\"query\"\n\t\t\t\t\t:showThumbnail=\"showThumbnail\"\n\t\t\t\t\t:showDescription=\"showDescription\"\n\t\t\t\t/>\n\t\t\t</li>\n\t\t</ol>\n\t\t`\n\t} );\n\nexport const exampleList = (): Vue.Component =>\n\tVue.extend( {\n\t\tcomponents: { WvuiTypeaheadSuggestion },\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tsuggestionsList: suggestionsList.pages,\n\t\t\t\tactiveIndex: -1\n\t\t\t};\n\t\t},\n\t\tmethods: {\n\t\t\tonSuggestionMouseOver( index: number ) {\n\t\t\t\tthis.activeIndex = index;\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t<ol class=\"sb-search__suggestions\">\n\t\t\t<li v-for=\"(suggestion, index) in suggestionsList\" >\n\t\t\t\t<wvui-typeahead-suggestion\n\t\t\t\t\t@mouseover=\"onSuggestionMouseOver( index )\"\n\t\t\t\t\tquery=\"co\"\n\t\t\t\t\t:active=\"activeIndex === index\"\n\t\t\t\t\t:suggestion=\"suggestion\"\n\t\t\t\t\t:key=\"suggestion.id\"\n\t\t\t\t/>\n\t\t\t</li>\n\t\t</ol>\n\t\t`\n\t} );\n","usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-suggestion/TypeaheadSuggestion.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-suggestion/TypeaheadSuggestion.vue","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/components/typeahead-suggestion/UrlGenerator.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/entries/wvui-icons.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/entries/wvui.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/http/fetch.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/http/fetch.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/themes/icons.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/types/Environment.d.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/types/VueLoader.d.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/utils/StringUtils.test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"jest/no-try-expect","replacedBy":["no-conditional-expect"]},{"ruleId":"no-new-require","replacedBy":[]}]},{"filePath":"/src/repo/src/utils/StringUtils.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-new-require","replacedBy":[]}]}]

$ npm ci
npm WARN prepare removing existing node_modules/ before installation

> ejs@2.7.4 postinstall /src/repo/node_modules/webpack-bundle-analyzer/node_modules/ejs
> node ./postinstall.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)


> fsevents@1.2.13 install /src/repo/node_modules/watchpack-chokidar2/node_modules/fsevents
> node install.js


Skipping 'fsevents' build as platform linux is not supported

> core-js@2.6.12 postinstall /src/repo/node_modules/babel-runtime/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> deasync@0.1.21 install /src/repo/node_modules/deasync
> node ./build.js

`linux-x64-node-10` exists; testing
Binary is fine; exiting

> spawn-sync@1.0.15 postinstall /src/repo/node_modules/spawn-sync
> node postinstall


> pre-commit@1.2.2 install /src/repo/node_modules/pre-commit
> node install.js

pre-commit:
pre-commit: Detected an existing git pre-commit hook
pre-commit: Old pre-commit hook backuped to pre-commit.old
pre-commit:

> core-js@3.8.3 postinstall /src/repo/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> iltorb@2.4.5 install /src/repo/node_modules/iltorb
> node ./scripts/install.js || node-gyp rebuild

info looking for cached prebuild @ /cache/_cacache/_prebuilds/2a34dd-iltorb-v2.4.5-node-v64-linux-x64.tar.gz
info found cached prebuild 
info unpacking @ /cache/_cacache/_prebuilds/2a34dd-iltorb-v2.4.5-node-v64-linux-x64.tar.gz
info unpack resolved to /src/repo/node_modules/iltorb/build/bindings/iltorb.node
info unpack required /src/repo/node_modules/iltorb/build/bindings/iltorb.node successfully
info install Successfully installed iltorb binary!

> core-js@2.6.12 postinstall /src/repo/node_modules/babel-register/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"


> core-js-pure@3.8.3 postinstall /src/repo/node_modules/core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"

added 2750 packages in 58.149s

$ npm test

> @wikimedia/wvui@0.1.0 test /src/repo
> npm -s run build && npm -s run test:all && npm -s run doc:all

Killed
npm ERR! Test failed.  See above for more details.

Traceback (most recent call last):
  File "/venv/lib/python3.7/site-packages/libup-0.0.1-py3.7.egg/libup/ng.py", line 1188, in main
    libup.run(args.repo, args.output, args.branch)
  File "/venv/lib/python3.7/site-packages/libup-0.0.1-py3.7.egg/libup/ng.py", line 1130, in run
    self.npm_upgrade(plan)
  File "/venv/lib/python3.7/site-packages/libup-0.0.1-py3.7.egg/libup/ng.py", line 857, in npm_upgrade
    self.npm_test()
  File "/venv/lib/python3.7/site-packages/libup-0.0.1-py3.7.egg/libup/ng.py", line 240, in npm_test
    self.check_call(['npm', 'test'])
  File "/venv/lib/python3.7/site-packages/libup-0.0.1-py3.7.egg/libup/shell.py", line 38, in check_call
    res.check_returncode()
  File "/usr/lib/python3.7/subprocess.py", line 428, in check_returncode
    self.stderr)
subprocess.CalledProcessError: Command '['npm', 'test']' returned non-zero exit status 1.
Source code is licensed under the AGPL.