From 02ea798f5f80d0979fce357940a4677a9f4ffd2a Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 15 Jul 2024 14:27:03 +0200 Subject: [PATCH] Streamlined eslint usage for eslint9 w/ cds8 (#719) * Streamlined eslint usage * import from @sap/cds instead of @sap/cds/lib * Using @sap/cds/eslint.js * eslint.config.mjs aktualisieren * Adjusted eslint usage for eslint9 with cds8 --- .vscode/settings.json | 10 +-------- bookshop/app/vue/app.js | 2 +- bookshop/db/init.js | 2 ++ bookstore/srv/mashup.js | 6 +++--- data-viewer/srv/data-service.js | 2 +- eslint.config.js | 36 --------------------------------- eslint.config.mjs | 20 ++++++++++++++++++ orders/srv/orders-service.js | 2 +- package-lock.json | 18 ----------------- package.json | 1 - reviews/app/vue/app.js | 1 - reviews/srv/reviews-service.js | 2 +- 12 files changed, 30 insertions(+), 72 deletions(-) delete mode 100644 eslint.config.js create mode 100644 eslint.config.mjs diff --git a/.vscode/settings.json b/.vscode/settings.json index f03c9ca9..57353d15 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,13 +13,5 @@ "**/cds/lib/req/cds-context.js", "**/odata-v4/okra/**" ] - }, - "eslint.probe": [ - "cds", - "csn", - "csv", - "csv (semicolon)", - "tsv", - "tab" - ] + } } diff --git a/bookshop/app/vue/app.js b/bookshop/app/vue/app.js index b637d115..c381d78d 100644 --- a/bookshop/app/vue/app.js +++ b/bookshop/app/vue/app.js @@ -77,7 +77,7 @@ function csrfToken (request) { document.csrfToken = token request.headers['x-csrf-token'] = document.csrfToken return request - }).catch(_ => { + }).catch(() => { document.csrfToken = null // set mark to not try again return request }) diff --git a/bookshop/db/init.js b/bookshop/db/init.js index 1dec13c3..6295808d 100644 --- a/bookshop/db/init.js +++ b/bookshop/db/init.js @@ -1,3 +1,5 @@ +const cds = require('@sap/cds') + /** * In order to keep basic bookshop sample as simple as possible, we don't add * reuse dependencies. This db/init.js ensures we still have a minimum set of diff --git a/bookstore/srv/mashup.js b/bookstore/srv/mashup.js index bd8aa0f9..c92840a9 100644 --- a/bookstore/srv/mashup.js +++ b/bookstore/srv/mashup.js @@ -18,7 +18,7 @@ module.exports = async()=>{ // called by server.js // Note: prepend is neccessary to intercept generic default handler // CatalogService.prepend (srv => srv.on ('READ', 'Books/reviews', (req) => { - console.debug ('> delegating request to ReviewsService') + console.debug ('> delegating request to ReviewsService') // eslint-disable-line no-console const [id] = req.params, { columns, limit } = req.query.SELECT return ReviewsService.read ('Reviews',columns).limit(limit).where({subject:String(id)}) })) @@ -40,7 +40,7 @@ module.exports = async()=>{ // called by server.js // Update Books' average ratings when ReviewsService signals updated reviews // ReviewsService.on ('reviewed', (msg) => { - console.debug ('> received:', msg.event, msg.data) + console.debug ('> received:', msg.event, msg.data) // eslint-disable-line no-console const { subject, count, rating } = msg.data return UPDATE(Books,subject).with({ numberOfReviews:count, rating }) }) @@ -49,7 +49,7 @@ module.exports = async()=>{ // called by server.js // Reduce stock of ordered books for orders are created from Orders admin UI // OrdersService.on ('OrderChanged', (msg) => { - console.debug ('> received:', msg.event, msg.data) + console.debug ('> received:', msg.event, msg.data) // eslint-disable-line no-console const { product, deltaQuantity } = msg.data return UPDATE (Books) .where ('ID =', product) .and ('stock >=', deltaQuantity) diff --git a/data-viewer/srv/data-service.js b/data-viewer/srv/data-service.js index b8a8c14b..155eccac 100644 --- a/data-viewer/srv/data-service.js +++ b/data-viewer/srv/data-service.js @@ -18,7 +18,7 @@ class DataService extends cds.ApplicationService { init(){ .sort((e1, e2) => e1.name.localeCompare(e2.name)) .map(e => { const columns = Object.entries(e.elements) - .filter(([_, el]) => !(el instanceof cds.Association)) // exclude assocs+compositions + .filter(([,el]) => !(el instanceof cds.Association)) // exclude assocs+compositions .map(([name, el]) => { return { name, type: el.type, isKey:!!el.key }}) return { name: e.name, columns } }) diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index a5fd2f7b..00000000 --- a/eslint.config.js +++ /dev/null @@ -1,36 +0,0 @@ -const cds = require('@sap/eslint-plugin-cds') -const globals = require('globals') -const js = require('@eslint/js') - -module.exports = [ - cds.configs.recommended, - js.configs.recommended, - { - languageOptions: { - globals: { - es2022: true, - ...globals.browser, - ...globals.node, - ...globals.jest, - ...globals.mocha, - cds: true, - sap: true, - CDL: true, - CQL: true, - CREATE: true, - DELETE: true, - DROP: true, - INSERT: true, - SELECT: true, - UPDATE: true, - UPSERT: true - } - }, - rules: { - 'no-console': 'off', - 'no-unused-vars': ['warn', { argsIgnorePattern: '^_' }], - 'require-atomic-updates': 'off', - 'require-await': 'warn' - } - } -] diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..8ee52de2 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,20 @@ +import cds from '@sap/cds/eslint.config.mjs' +export default [ ...cds.recommended ] + +// +// The above is the recommended minimalistic eslint config, just using +// recommended defaults provided by cds. Alternatively, go for enhanced +// project-specific options, but only if really required, like this: +// +// export default [ ...cds.recommended, { +// rules: { +// 'complexity': [ 'warn', 66 ], +// 'require-await': 'warn', +// 'no-await-in-loop': 'warn', +// }, +// }, { +// ignores: [ +// '**/webapp/**' +// ] +// }] +// diff --git a/orders/srv/orders-service.js b/orders/srv/orders-service.js index f395c077..f9b55c3c 100644 --- a/orders/srv/orders-service.js +++ b/orders/srv/orders-service.js @@ -29,7 +29,7 @@ class OrdersService extends cds.ApplicationService { /** order changed -> broadcast event */ orderChanged (product, deltaQuantity) { // Emit events to inform subscribers about changes in orders - console.log ('> emitting:', 'OrderChanged', { product, deltaQuantity }) + console.log ('> emitting:', 'OrderChanged', { product, deltaQuantity }) // eslint-disable-line no-console return this.emit ('OrderChanged', { product, deltaQuantity }) } diff --git a/package-lock.json b/package-lock.json index 07ff3516..e03045f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,6 @@ }, "devDependencies": { "@cap-js/sqlite": "^1", - "@sap/eslint-plugin-cds": "^3", "axios": "^1", "chai": "^4.3.4", "chai-as-promised": "^7.1.1", @@ -590,23 +589,6 @@ "node": ">=14" } }, - "node_modules/@sap/eslint-plugin-cds": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@sap/eslint-plugin-cds/-/eslint-plugin-cds-3.0.4.tgz", - "integrity": "sha512-1fEtpkSMaRHb35vPxyoO08zJsBaCH/7jjQT7D99XxNIQBMDybYGL1sZoicg/XNzPxB8ZyW2T86dvHBJ8WGY7sg==", - "dev": true, - "license": "See LICENSE file", - "dependencies": { - "@sap/cds": ">=7", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "eslint": ">=8" - } - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", diff --git a/package.json b/package.json index baac6dda..585c1907 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,6 @@ ], "devDependencies": { "@cap-js/sqlite": "^1", - "@sap/eslint-plugin-cds": "^3", "axios": "^1", "chai": "^4.3.4", "chai-as-promised": "^7.1.1", diff --git a/reviews/app/vue/app.js b/reviews/app/vue/app.js index eab4ea6b..02a4ae6d 100644 --- a/reviews/app/vue/app.js +++ b/reviews/app/vue/app.js @@ -50,7 +50,6 @@ const reviews = Vue.createApp ({ const res = await POST(`/Reviews`,review) reviews.ID = res.data.ID } else { - console.trace() await PUT(`/Reviews/${review.ID}`,review) } reviews.message = { succeeded: 'Your review was submitted successfully. Thanks.' } diff --git a/reviews/srv/reviews-service.js b/reviews/srv/reviews-service.js index b9b5c6c9..20fde770 100644 --- a/reviews/srv/reviews-service.js +++ b/reviews/srv/reviews-service.js @@ -15,7 +15,7 @@ module.exports = cds.service.impl (function(){ const { count, rating } = await cds.tx(req) .run ( SELECT.one `round(avg(rating),2) as rating, count(*) as count` .from (Reviews) .where ({subject}) ) - global.it || console.log ('< emitting:', 'reviewed', { subject, count, rating }) + global.it || console.log ('< emitting:', 'reviewed', { subject, count, rating }) // eslint-disable-line no-console await this.emit ('reviewed', { subject, count, rating }) })