From 418cec5e21f4a76986a9f1b4faa67d0ca83f832e Mon Sep 17 00:00:00 2001 From: Christoph Reiter <reiter.christoph@gmail.com> Date: Mon, 21 Dec 2020 12:54:07 +0100 Subject: [PATCH] Add a global eslint command and run in CI --- .gitlab-ci.yml | 8 ++++ package.json | 1 + packages/check-in-place-select/.eslintignore | 3 ++ packages/check-in-place-select/.eslintrc.json | 25 +++++++++++ packages/check-in-place-select/package.json | 7 ++- .../src/check-in-place-select.js | 6 ++- .../src/dbp-check-in-place-select-demo.js | 1 + .../src/i18n/de/select2.js | 2 +- .../src/i18n/en/select2.js | 2 +- packages/common/styles.js | 2 +- packages/common/utils.js | 22 +++++----- packages/data-table-view/.eslintignore | 4 ++ packages/data-table-view/.eslintrc.json | 25 +++++++++++ packages/data-table-view/package.json | 7 ++- .../data-table-view/src/data-table-view.js | 4 +- packages/language-select/.eslintignore | 3 ++ packages/language-select/.eslintrc.json | 25 +++++++++++ packages/language-select/package.json | 7 ++- .../language-select/src/language-select.js | 2 +- packages/matomo/.eslintignore | 3 ++ packages/matomo/.eslintrc.json | 25 +++++++++++ packages/matomo/package.json | 7 ++- packages/matomo/src/matomo.js | 43 ++++++++++--------- 23 files changed, 186 insertions(+), 48 deletions(-) create mode 100644 packages/check-in-place-select/.eslintignore create mode 100644 packages/check-in-place-select/.eslintrc.json create mode 100644 packages/data-table-view/.eslintignore create mode 100644 packages/data-table-view/.eslintrc.json create mode 100644 packages/language-select/.eslintignore create mode 100644 packages/language-select/.eslintrc.json create mode 100644 packages/matomo/.eslintignore create mode 100644 packages/matomo/.eslintrc.json diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 38df26d8..29402570 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,6 +16,14 @@ test: - yarn install - yarn run test +linting: + stage: test + allow_failure: true + script: + - yarn config set cache-folder "$CI_PROJECT_DIR/_yarn_cache" + - yarn install + - yarn run lint + publish: stage: deploy only: diff --git a/package.json b/package.json index 45f7a036..ce4dbed6 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "scripts": { "test": "lerna run test", "build": "lerna run build", + "lint": "lerna run lint", "publish": "lerna publish from-package --yes" }, "author": "", diff --git a/packages/check-in-place-select/.eslintignore b/packages/check-in-place-select/.eslintignore new file mode 100644 index 00000000..7b596da7 --- /dev/null +++ b/packages/check-in-place-select/.eslintignore @@ -0,0 +1,3 @@ +/vendor/** +/dist/** +/*.js \ No newline at end of file diff --git a/packages/check-in-place-select/.eslintrc.json b/packages/check-in-place-select/.eslintrc.json new file mode 100644 index 00000000..1ccd30a3 --- /dev/null +++ b/packages/check-in-place-select/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "env": { + "browser": true, + "es6": true, + "mocha": true + }, + "extends": ["eslint:recommended", "plugin:jsdoc/recommended"], + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parser": "babel-eslint", + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "no-unused-vars": ["error", { "args": "none" }], + "semi": [2, "always"], + "jsdoc/require-jsdoc": 0, + "jsdoc/require-param-description": 0, + "jsdoc/require-returns": 0, + "jsdoc/require-param-type": 0 + } +} \ No newline at end of file diff --git a/packages/check-in-place-select/package.json b/packages/check-in-place-select/package.json index 97cf65a7..78374980 100644 --- a/packages/check-in-place-select/package.json +++ b/packages/check-in-place-select/package.json @@ -31,7 +31,9 @@ "rollup-plugin-copy": "^3.1.0", "rollup-plugin-delete": "^2.0.0", "rollup-plugin-serve": "^1.0.1", - "rollup-plugin-terser": "^7.0.2" + "rollup-plugin-terser": "^7.0.2", + "eslint": "^7.3.1", + "eslint-plugin-jsdoc": "^30.6.4" }, "dependencies": { "@dbp-toolkit/auth": "^0.1.0", @@ -53,6 +55,7 @@ "watch": "npm run watch-local", "watch-local": "rollup -c --watch", "watch-dev": "rollup -c --watch --environment BUILD:development", - "test": "npm run build-test && karma start --singleRun" + "test": "npm run build-test && karma start --singleRun", + "lint": "eslint ." } } diff --git a/packages/check-in-place-select/src/check-in-place-select.js b/packages/check-in-place-select/src/check-in-place-select.js index d2a25948..ae3d9eea 100644 --- a/packages/check-in-place-select/src/check-in-place-select.js +++ b/packages/check-in-place-select/src/check-in-place-select.js @@ -1,6 +1,6 @@ import {findObjectInApiResults} from './utils.js'; -import select2LangDe from './i18n/de/select2' -import select2LangEn from './i18n/en/select2' +import select2LangDe from './i18n/de/select2'; +import select2LangEn from './i18n/en/select2'; import JSONLD from '@dbp-toolkit/common/jsonld'; import {css, html, LitElement} from 'lit-element'; import {ScopedElementsMixin} from '@open-wc/scoped-elements'; @@ -124,6 +124,8 @@ export class CheckInPlaceSelect extends ScopedElementsMixin(LitElement) { /** * Initializes the Select2 selector + * + * @param ignorePreset */ initSelect2(ignorePreset = false) { const that = this; diff --git a/packages/check-in-place-select/src/dbp-check-in-place-select-demo.js b/packages/check-in-place-select/src/dbp-check-in-place-select-demo.js index abcf3330..539baa50 100644 --- a/packages/check-in-place-select/src/dbp-check-in-place-select-demo.js +++ b/packages/check-in-place-select/src/dbp-check-in-place-select-demo.js @@ -17,6 +17,7 @@ export class CheckInPlaceSelectDemo extends ScopedElementsMixin(LitElement) { return { 'dbp-login-button': LoginButton, 'dbp-check-in-place-select': CheckInPlaceSelect, + 'dbp-auth-keycloak': AuthKeycloak, }; } diff --git a/packages/check-in-place-select/src/i18n/de/select2.js b/packages/check-in-place-select/src/i18n/de/select2.js index 487734d3..bef156f0 100644 --- a/packages/check-in-place-select/src/i18n/de/select2.js +++ b/packages/check-in-place-select/src/i18n/de/select2.js @@ -43,4 +43,4 @@ export default function () { return 'Entferne alle Gegenstände'; } }; -}; +} diff --git a/packages/check-in-place-select/src/i18n/en/select2.js b/packages/check-in-place-select/src/i18n/en/select2.js index 12ba14cc..d172d72e 100644 --- a/packages/check-in-place-select/src/i18n/en/select2.js +++ b/packages/check-in-place-select/src/i18n/en/select2.js @@ -47,4 +47,4 @@ export default function () { return 'Remove all items'; } }; -}; +} diff --git a/packages/common/styles.js b/packages/common/styles.js index 31248cd3..3c9748c9 100644 --- a/packages/common/styles.js +++ b/packages/common/styles.js @@ -1,4 +1,4 @@ -import {css, unsafeCSS, CSSResult} from 'lit-element'; +import {css, unsafeCSS} from 'lit-element'; import {getIconSVGURL} from './src/icon.js'; /** diff --git a/packages/common/utils.js b/packages/common/utils.js index fb31adb9..88cd1c53 100644 --- a/packages/common/utils.js +++ b/packages/common/utils.js @@ -212,7 +212,7 @@ export const getAssetURL = (pkg, path) => { // assume it is a full path fullPath = pkg; } else { - fullPath = 'local/' + pkg + '/' + path + fullPath = 'local/' + pkg + '/' + path; } return new URL(fullPath, new URL('..', import.meta.url).href).href; }; @@ -298,21 +298,21 @@ export async function getMimeTypeOfFile(file) { const getMimeType = (signature) => { switch (signature) { case '89504E47': - return 'image/png' + return 'image/png'; case '47494638': - return 'image/gif' + return 'image/gif'; case '25504446': - return 'application/pdf' + return 'application/pdf'; case 'FFD8FFDB': case 'FFD8FFE0': case 'FFD8FFE1': - return 'image/jpeg' + return 'image/jpeg'; case '504B0304': - return 'application/zip' + return 'application/zip'; default: - return 'Unknown filetype' + return 'Unknown filetype'; } - } + }; return await new Promise((resolve) => { let fileReader = new FileReader(); @@ -323,15 +323,15 @@ export async function getMimeTypeOfFile(file) { let bytes = []; uint.forEach((byte) => { - bytes.push(byte.toString(16)) - }) + bytes.push(byte.toString(16)); + }); const hex = bytes.join('').toUpperCase(); const mimeType = getMimeType(hex); resolve(mimeType); } - } + }; fileReader.readAsArrayBuffer(file.slice(0, 4)); }); diff --git a/packages/data-table-view/.eslintignore b/packages/data-table-view/.eslintignore new file mode 100644 index 00000000..c139ed4c --- /dev/null +++ b/packages/data-table-view/.eslintignore @@ -0,0 +1,4 @@ +/vendor/** +/dist/** +*.conf.js +*.config.js \ No newline at end of file diff --git a/packages/data-table-view/.eslintrc.json b/packages/data-table-view/.eslintrc.json new file mode 100644 index 00000000..dcb3daa3 --- /dev/null +++ b/packages/data-table-view/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "env": { + "browser": true, + "es6": true, + "mocha": true + }, + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parser": "babel-eslint", + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "no-unused-vars": ["error", { "args": "none" }], + "semi": [2, "always"], + "jsdoc/require-jsdoc": 0, + "jsdoc/require-param-description": 0, + "jsdoc/require-returns": 0, + "jsdoc/require-returns-description": 0, + "jsdoc/require-param-type": 0 + } +} \ No newline at end of file diff --git a/packages/data-table-view/package.json b/packages/data-table-view/package.json index ae907ff5..40d518d6 100644 --- a/packages/data-table-view/package.json +++ b/packages/data-table-view/package.json @@ -30,7 +30,9 @@ "rollup-plugin-copy": "^3.1.0", "rollup-plugin-delete": "^2.0.0", "rollup-plugin-serve": "^1.0.1", - "rollup-plugin-terser": "^7.0.2" + "rollup-plugin-terser": "^7.0.2", + "eslint": "^7.3.1", + "eslint-plugin-jsdoc": "^30.6.4" }, "dependencies": { "@dbp-toolkit/auth": "^0.1.0", @@ -59,6 +61,7 @@ "watch": "npm run watch-local", "watch-local": "rollup -c --watch", "watch-dev": "rollup -c --watch --environment BUILD:development", - "test": "npm run build-test && karma start --singleRun" + "test": "npm run build-test && karma start --singleRun", + "lint": "eslint ." } } diff --git a/packages/data-table-view/src/data-table-view.js b/packages/data-table-view/src/data-table-view.js index 565c38b8..834a211e 100644 --- a/packages/data-table-view/src/data-table-view.js +++ b/packages/data-table-view/src/data-table-view.js @@ -227,12 +227,12 @@ export class DataTableView extends LitElement { changedProperties.forEach((oldValue, propName) => { if (propName === "lang") { - i18n.changeLanguage(this.lang).catch(e => { console.log(e)}); + i18n.changeLanguage(this.lang).catch(e => { console.log(e);}); languageChange = true; } }); - this.updateComplete.then(this.set_datatable(this.data, languageChange)).catch(e => { console.log(e)}); + this.updateComplete.then(this.set_datatable(this.data, languageChange)).catch(e => { console.log(e);}); super.update(changedProperties); } diff --git a/packages/language-select/.eslintignore b/packages/language-select/.eslintignore new file mode 100644 index 00000000..7b596da7 --- /dev/null +++ b/packages/language-select/.eslintignore @@ -0,0 +1,3 @@ +/vendor/** +/dist/** +/*.js \ No newline at end of file diff --git a/packages/language-select/.eslintrc.json b/packages/language-select/.eslintrc.json new file mode 100644 index 00000000..1ccd30a3 --- /dev/null +++ b/packages/language-select/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "env": { + "browser": true, + "es6": true, + "mocha": true + }, + "extends": ["eslint:recommended", "plugin:jsdoc/recommended"], + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parser": "babel-eslint", + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "no-unused-vars": ["error", { "args": "none" }], + "semi": [2, "always"], + "jsdoc/require-jsdoc": 0, + "jsdoc/require-param-description": 0, + "jsdoc/require-returns": 0, + "jsdoc/require-param-type": 0 + } +} \ No newline at end of file diff --git a/packages/language-select/package.json b/packages/language-select/package.json index 157c4bed..19509f3c 100644 --- a/packages/language-select/package.json +++ b/packages/language-select/package.json @@ -29,7 +29,9 @@ "rollup-plugin-copy": "^3.1.0", "rollup-plugin-delete": "^2.0.0", "rollup-plugin-serve": "^1.0.1", - "rollup-plugin-terser": "^7.0.2" + "rollup-plugin-terser": "^7.0.2", + "eslint": "^7.3.1", + "eslint-plugin-jsdoc": "^30.6.4" }, "dependencies": { "@dbp-toolkit/common": "^0.1.0", @@ -48,6 +50,7 @@ "watch": "npm run watch-local", "watch-local": "rollup -c --watch", "watch-dev": "rollup -c --watch --environment BUILD:development", - "test": "npm run build-test && karma start --singleRun" + "test": "npm run build-test && karma start --singleRun", + "lint": "eslint ." } } diff --git a/packages/language-select/src/language-select.js b/packages/language-select/src/language-select.js index f337483f..661e6031 100644 --- a/packages/language-select/src/language-select.js +++ b/packages/language-select/src/language-select.js @@ -106,7 +106,7 @@ export class LanguageSelect extends LitElement { } onExternalChange(e) { - this.lang = e.detail.lang + this.lang = e.detail.lang; } connectedCallback() { diff --git a/packages/matomo/.eslintignore b/packages/matomo/.eslintignore new file mode 100644 index 00000000..7b596da7 --- /dev/null +++ b/packages/matomo/.eslintignore @@ -0,0 +1,3 @@ +/vendor/** +/dist/** +/*.js \ No newline at end of file diff --git a/packages/matomo/.eslintrc.json b/packages/matomo/.eslintrc.json new file mode 100644 index 00000000..1ccd30a3 --- /dev/null +++ b/packages/matomo/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "env": { + "browser": true, + "es6": true, + "mocha": true + }, + "extends": ["eslint:recommended", "plugin:jsdoc/recommended"], + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parser": "babel-eslint", + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "no-unused-vars": ["error", { "args": "none" }], + "semi": [2, "always"], + "jsdoc/require-jsdoc": 0, + "jsdoc/require-param-description": 0, + "jsdoc/require-returns": 0, + "jsdoc/require-param-type": 0 + } +} \ No newline at end of file diff --git a/packages/matomo/package.json b/packages/matomo/package.json index ced97981..a95d83e9 100644 --- a/packages/matomo/package.json +++ b/packages/matomo/package.json @@ -30,7 +30,9 @@ "rollup-plugin-copy": "^3.1.0", "rollup-plugin-delete": "^2.0.0", "rollup-plugin-serve": "^1.0.1", - "rollup-plugin-terser": "^7.0.2" + "rollup-plugin-terser": "^7.0.2", + "eslint": "^7.3.1", + "eslint-plugin-jsdoc": "^30.6.4" }, "dependencies": { "@dbp-toolkit/auth": "^0.1.0", @@ -49,6 +51,7 @@ "watch": "rollup -c --watch", "watch-local": "yarn run watch", "watch-dev": "rollup -c --watch --environment BUILD:development", - "test": "rollup -c --environment BUILD:test && karma start --singleRun" + "test": "rollup -c --environment BUILD:test && karma start --singleRun", + "lint": "eslint ." } } diff --git a/packages/matomo/src/matomo.js b/packages/matomo/src/matomo.js index 68fc5290..8e189c72 100644 --- a/packages/matomo/src/matomo.js +++ b/packages/matomo/src/matomo.js @@ -1,9 +1,11 @@ -import {i18n} from './i18n.js'; -import {LitElement} from "lit-element"; import DBPLitElement from '@dbp-toolkit/common/dbp-lit-element'; import {EventBus} from '@dbp-toolkit/common'; import buildInfo from 'consts:buildinfo'; +function pushEvent(event) { + window._paq = window._paq || []; + window._paq.push(event); +} export class MatomoElement extends DBPLitElement { @@ -53,16 +55,15 @@ export class MatomoElement extends DBPLitElement { } console.log('add matomo...'); - window._paq = window._paq || []; - _paq.push(['setCustomVariable', 1, "GitCommit", buildInfo.info, "visit"]); - _paq.push(['enableHeartBeatTimer']); - _paq.push(['disableCookies']); - _paq.push(['trackPageView']); - _paq.push(['enableLinkTracking']); + pushEvent(['setCustomVariable', 1, "GitCommit", buildInfo.info, "visit"]); + pushEvent(['enableHeartBeatTimer']); + pushEvent(['disableCookies']); + pushEvent(['trackPageView']); + pushEvent(['enableLinkTracking']); (function (endpoint, siteId) { - _paq.push(['setTrackerUrl', endpoint+'matomo.php']); - _paq.push(['setSiteId', siteId]); + pushEvent(['setTrackerUrl', endpoint+'matomo.php']); + pushEvent(['setSiteId', siteId]); var g = document.createElement('script'); var s = document.getElementsByTagName('script')[0]; @@ -75,31 +76,31 @@ export class MatomoElement extends DBPLitElement { // track changed locations window.addEventListener('locationchanged', function(e) { - _paq.push(['setReferrerUrl', e.detail.referrerUrl]); - _paq.push(['setCustomUrl', location.href]); - // _paq.push(['setDocumentTitle', '']); - _paq.push(['trackPageView']); + pushEvent(['setReferrerUrl', e.detail.referrerUrl]); + pushEvent(['setCustomUrl', location.href]); + // pushEvent(['setDocumentTitle', '']); + pushEvent(['trackPageView']); // make Matomo aware of newly added content var content = document.getElementById('content'); - _paq.push(['MediaAnalytics::scanForMedia', content]); - _paq.push(['FormAnalytics::scanForForms', content]); - _paq.push(['trackContentImpressionsWithinNode', content]); + pushEvent(['MediaAnalytics::scanForMedia', content]); + pushEvent(['FormAnalytics::scanForForms', content]); + pushEvent(['trackContentImpressionsWithinNode', content]); }); // track errors window.addEventListener('error', function(e) { - _paq.push(['trackEvent', 'Error', e.error.message + '\n' + e.error.stack]); + pushEvent(['trackEvent', 'Error', e.error.message + '\n' + e.error.stack]); }); window.addEventListener('unhandledrejection', function(e) { - _paq.push(['trackEvent', 'UnhandledRejection', e.reason]); + pushEvent(['trackEvent', 'UnhandledRejection', e.reason]); }); this.isRunning = true; if (this.lastEvent.length > 0) { console.log('MatomoElement* (' + this.isRunning + '): ' + this.lastEvent[1] + ', ' + this.lastEvent[2]); - _paq.push(this.lastEvent); + pushEvent(this.lastEvent); this.lastEvent = []; } return; @@ -115,7 +116,7 @@ export class MatomoElement extends DBPLitElement { console.log('MatomoElement (' + this.isRunning + '): ' + action + ', ' + message); const event = ['trackEvent', action, message]; if (this.isRunning) { - _paq.push(event); + pushEvent(event); } else { this.lastEvent = event; } -- GitLab