From 7e27e0bda877bd951e47683c7589248c230247be Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 23 Mar 2022 11:18:37 +0100 Subject: [PATCH] linting: enable eslint-plugin-n recommended rules And fixes a lot of related issues. --- .eslintrc.js | 20 ++++++++++++++++++- @xen-orchestra/babel-config/package.json | 2 +- .../backups-cli/commands/clean-vms.js | 2 -- @xen-orchestra/backups/package.json | 4 ++++ @xen-orchestra/log/package.json | 2 +- @xen-orchestra/log/transports/email.js | 4 ++-- @xen-orchestra/log/transports/syslog.js | 2 ++ @xen-orchestra/proxy/package.json | 3 ++- .../proxy/tests/reverseProxy.unit.spec.mjs | 2 +- package.json | 1 + packages/vhd-cli/package.json | 1 + packages/vhd-lib/package.json | 7 +++++-- packages/xen-api/package.json | 2 +- packages/xo-cli/package.json | 2 +- packages/xo-server-load-balancer/package.json | 2 +- packages/xo-server-usage-report/package.json | 2 +- packages/xo-server-usage-report/src/index.js | 5 +++-- packages/xo-vmdk-to-vhd/package.json | 3 ++- scripts/.eslintrc.js | 3 +++ scripts/babel-eslintrc.js | 15 ++++++++++++++ yarn.lock | 6 +++--- 21 files changed, 69 insertions(+), 21 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 40dfd21433..de967090e5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,7 +1,7 @@ 'use strict' module.exports = { - extends: ['plugin:eslint-comments/recommended', 'standard', 'standard-jsx', 'prettier'], + extends: ['plugin:eslint-comments/recommended', 'plugin:n/recommended', 'standard', 'standard-jsx', 'prettier'], globals: { __DEV__: true, $Dict: true, @@ -17,6 +17,7 @@ module.exports = { { files: ['cli.{,c,m}js', '*-cli.{,c,m}js', '**/*cli*/**/*.{,c,m}js'], rules: { + 'n/no-process-exit': 'off', 'no-console': 'off', }, }, @@ -26,6 +27,23 @@ module.exports = { sourceType: 'module', }, }, + { + files: ['*.spec.{,c,m}js'], + rules: { + 'n/no-unsupported-features/node-builtins': [ + 'error', + { + version: '>=16', + }, + ], + 'n/no-unsupported-features/es-syntax': [ + 'error', + { + version: '>=16', + }, + ], + }, + }, ], parserOptions: { diff --git a/@xen-orchestra/babel-config/package.json b/@xen-orchestra/babel-config/package.json index 542cf85815..0aea2d31b6 100644 --- a/@xen-orchestra/babel-config/package.json +++ b/@xen-orchestra/babel-config/package.json @@ -10,7 +10,7 @@ "url": "https://github.com/vatesfr/xen-orchestra.git" }, "engines": { - "node": ">=6" + "node": ">=8.3" }, "license": "AGPL-3.0-or-later", "author": { diff --git a/@xen-orchestra/backups-cli/commands/clean-vms.js b/@xen-orchestra/backups-cli/commands/clean-vms.js index d02bc471fe..0d08f2b7b0 100644 --- a/@xen-orchestra/backups-cli/commands/clean-vms.js +++ b/@xen-orchestra/backups-cli/commands/clean-vms.js @@ -1,5 +1,3 @@ -#!/usr/bin/env node - 'use strict' // ----------------------------------------------------------------------------- diff --git a/@xen-orchestra/backups/package.json b/@xen-orchestra/backups/package.json index a0c2b67188..ce6f36cfc7 100644 --- a/@xen-orchestra/backups/package.json +++ b/@xen-orchestra/backups/package.json @@ -39,6 +39,10 @@ "vhd-lib": "^3.1.0", "yazl": "^2.5.1" }, + "devDependencies": { + "rimraf": "^3.0.2", + "tmp": "^0.2.1" + }, "peerDependencies": { "@xen-orchestra/xapi": "^0.9.0" }, diff --git a/@xen-orchestra/log/package.json b/@xen-orchestra/log/package.json index 3245175cee..62e9aa3923 100644 --- a/@xen-orchestra/log/package.json +++ b/@xen-orchestra/log/package.json @@ -20,7 +20,7 @@ ">2%" ], "engines": { - "node": ">=6" + "node": ">=8.3" }, "dependencies": { "lodash": "^4.17.4", diff --git a/@xen-orchestra/log/transports/email.js b/@xen-orchestra/log/transports/email.js index 9d6842881e..30026ad38a 100644 --- a/@xen-orchestra/log/transports/email.js +++ b/@xen-orchestra/log/transports/email.js @@ -1,8 +1,8 @@ 'use strict' const fromCallback = require('promise-toolbox/fromCallback') -const nodemailer = require('nodemailer') // eslint-disable-line n/no-extraneous-import -const prettyFormat = require('pretty-format') // eslint-disable-line n/no-extraneous-import +const nodemailer = require('nodemailer') // eslint-disable-line n/no-extraneous-require +const prettyFormat = require('pretty-format') // eslint-disable-line n/no-extraneous-require const { evalTemplate, required } = require('../utils') const { NAMES } = require('../levels') diff --git a/@xen-orchestra/log/transports/syslog.js b/@xen-orchestra/log/transports/syslog.js index e8321a9fdc..3253f85a3b 100644 --- a/@xen-orchestra/log/transports/syslog.js +++ b/@xen-orchestra/log/transports/syslog.js @@ -1,7 +1,9 @@ 'use strict' const fromCallback = require('promise-toolbox/fromCallback') +// eslint-disable-next-line n/no-missing-require const splitHost = require('split-host') +// eslint-disable-next-line n/no-missing-require const { createClient, Facility, Severity, Transport } = require('syslog-client') const LEVELS = require('../levels') diff --git a/@xen-orchestra/proxy/package.json b/@xen-orchestra/proxy/package.json index de377ed6d1..ceefd1f5fa 100644 --- a/@xen-orchestra/proxy/package.json +++ b/@xen-orchestra/proxy/package.json @@ -63,7 +63,8 @@ "xo-common": "^0.7.0" }, "devDependencies": { - "@vates/toggle-scripts": "^1.0.0" + "@vates/toggle-scripts": "^1.0.0", + "ws": "^8.5.0" }, "scripts": { "_postinstall": "./scripts/systemd-service-installer", diff --git a/@xen-orchestra/proxy/tests/reverseProxy.unit.spec.mjs b/@xen-orchestra/proxy/tests/reverseProxy.unit.spec.mjs index 7ff5e1a2f8..652c7553d5 100644 --- a/@xen-orchestra/proxy/tests/reverseProxy.unit.spec.mjs +++ b/@xen-orchestra/proxy/tests/reverseProxy.unit.spec.mjs @@ -1,4 +1,4 @@ -import ReverseProxy, { backendToLocalPath, localToBackendUrl } from '../dist/app/mixins/reverseProxy.mjs' +import ReverseProxy, { backendToLocalPath, localToBackendUrl } from '../app/mixins/reverseProxy.mjs' import { deepEqual, strictEqual } from 'assert' function makeApp(reverseProxies) { diff --git a/package.json b/package.json index 9932d9978e..1445b7cb5c 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "vuepress": "^1.4.1" }, "engines": { + "node": ">=14", "yarn": "^1.7.0" }, "husky": { diff --git a/packages/vhd-cli/package.json b/packages/vhd-cli/package.json index d1b50aaa71..df409c4470 100644 --- a/packages/vhd-cli/package.json +++ b/packages/vhd-cli/package.json @@ -29,6 +29,7 @@ "exec-promise": "^0.7.0", "getopts": "^2.2.3", "human-format": "^0.11.0", + "lodash": "^4.17.21", "uuid": "^8.3.2", "vhd-lib": "^3.1.0" }, diff --git a/packages/vhd-lib/package.json b/packages/vhd-lib/package.json index 52e6a5818d..dded1a09ea 100644 --- a/packages/vhd-lib/package.json +++ b/packages/vhd-lib/package.json @@ -12,24 +12,27 @@ "url": "https://github.com/vatesfr/xen-orchestra.git" }, "engines": { - "node": ">=12" + "node": ">=14" }, "dependencies": { "@vates/async-each": "^0.1.0", "@vates/read-chunk": "^0.1.2", + "@xen-orchestra/async-map": "^0.1.2", "@xen-orchestra/log": "^0.3.0", "async-iterator-to-stream": "^1.0.2", "fs-extra": "^10.0.0", "limit-concurrency-decorator": "^0.5.0", "lodash": "^4.17.4", "promise-toolbox": "^0.21.0", + "readable-stream": "^3.0.6", "struct-fu": "^1.2.0", "uuid": "^8.3.1" }, "devDependencies": { "@xen-orchestra/fs": "^0.20.0", + "execa": "^6.1.0", "get-stream": "^6.0.0", - "readable-stream": "^3.0.6", + "rimraf": "^3.0.2", "tmp": "^0.2.1" }, "scripts": { diff --git a/packages/xen-api/package.json b/packages/xen-api/package.json index 801a8a4fa9..c92bdffbd6 100644 --- a/packages/xen-api/package.json +++ b/packages/xen-api/package.json @@ -28,7 +28,7 @@ "xen-api": "dist/cli.js" }, "engines": { - "node": ">=7.6" + "node": ">=10" }, "dependencies": { "@vates/coalesce-calls": "^0.1.0", diff --git a/packages/xo-cli/package.json b/packages/xo-cli/package.json index 46fcf67f4d..dc1b38a4d6 100644 --- a/packages/xo-cli/package.json +++ b/packages/xo-cli/package.json @@ -27,7 +27,7 @@ "xo-cli": "dist/index.js" }, "engines": { - "node": ">=10" + "node": ">=14" }, "dependencies": { "chalk": "^4.1.0", diff --git a/packages/xo-server-load-balancer/package.json b/packages/xo-server-load-balancer/package.json index fb0d91c6aa..dad4c25b75 100644 --- a/packages/xo-server-load-balancer/package.json +++ b/packages/xo-server-load-balancer/package.json @@ -24,7 +24,7 @@ "preferGlobal": false, "main": "dist/", "engines": { - "node": ">=6" + "node": ">=7" }, "dependencies": { "@xen-orchestra/cron": "^1.0.6", diff --git a/packages/xo-server-usage-report/package.json b/packages/xo-server-usage-report/package.json index 1bf178d5ad..86c2438650 100644 --- a/packages/xo-server-usage-report/package.json +++ b/packages/xo-server-usage-report/package.json @@ -26,7 +26,7 @@ "preferGlobal": false, "main": "dist/", "engines": { - "node": ">=6" + "node": ">=7" }, "dependencies": { "@xen-orchestra/async-map": "^0.1.2", diff --git a/packages/xo-server-usage-report/src/index.js b/packages/xo-server-usage-report/src/index.js index ac14f9fcb5..c5f5206c7a 100644 --- a/packages/xo-server-usage-report/src/index.js +++ b/packages/xo-server-usage-report/src/index.js @@ -4,6 +4,7 @@ import humanFormat from 'human-format' import { stringify } from 'csv-stringify' import { createLogger } from '@xen-orchestra/log' import { createSchedule } from '@xen-orchestra/cron' +import { join } from 'path' import { minify } from 'html-minifier' import { concat, @@ -43,7 +44,7 @@ const mibPower = Math.pow(2, 20) const kibPower = Math.pow(2, 10) let template = null -pReadFile(`${__dirname}/../report.html.tpl`, 'utf8').then(tpl => { +pReadFile(join(__dirname, '../report.html.tpl'), 'utf8').then(tpl => { template = Handlebars.compile( minify(tpl, { collapseBooleanAttributes: true, @@ -58,7 +59,7 @@ pReadFile(`${__dirname}/../report.html.tpl`, 'utf8').then(tpl => { }) let imgXo = null -pReadFile(`${__dirname}/../images/xo.png`, 'base64').then(data => { +pReadFile(join(__dirname, '../images/xo.png'), 'base64').then(data => { imgXo = `data:image/png;base64,${data}` }) diff --git a/packages/xo-vmdk-to-vhd/package.json b/packages/xo-vmdk-to-vhd/package.json index bddb378d6b..8472c098ec 100644 --- a/packages/xo-vmdk-to-vhd/package.json +++ b/packages/xo-vmdk-to-vhd/package.json @@ -18,7 +18,7 @@ "preferGlobal": false, "main": "dist/", "engines": { - "node": ">=10" + "node": ">=12" }, "dependencies": { "child-process-promise": "^2.0.3", @@ -32,6 +32,7 @@ "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", "@babel/preset-env": "^7.0.0", + "async-iterator-to-stream": "^1.2.0", "babel-plugin-lodash": "^3.3.2", "cross-env": "^7.0.2", "execa": "^5.0.0", diff --git a/scripts/.eslintrc.js b/scripts/.eslintrc.js index eeb7d37f16..002b42f174 100644 --- a/scripts/.eslintrc.js +++ b/scripts/.eslintrc.js @@ -2,6 +2,9 @@ module.exports = { rules: { + 'n/no-process-exit': 'off', + 'n/no-unpublished-require': 'off', + 'n/shebang': 'off', 'no-console': 'off', }, } diff --git a/scripts/babel-eslintrc.js b/scripts/babel-eslintrc.js index 1def67b7ac..1595a89cac 100644 --- a/scripts/babel-eslintrc.js +++ b/scripts/babel-eslintrc.js @@ -13,6 +13,21 @@ module.exports = { }, sourceType: 'module', }, + + rules: { + // Native module (and this rule) requires file extensions, but Babel does not + 'n/no-missing-import': 'off', + + 'n/no-unsupported-features/es-syntax': 'off', + 'n/shebang': [ + 'error', + { + convertPath: { + 'src/**/*.{,c,m}js': ['^src/(.+)$', 'dist/$1'], + }, + }, + ], + }, }, ], } diff --git a/yarn.lock b/yarn.lock index 80ab8db0e9..1a6eadc577 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2994,7 +2994,7 @@ async-hook-domain@^2.0.4: resolved "https://registry.yarnpkg.com/async-hook-domain/-/async-hook-domain-2.0.4.tgz#5a24910982c04394ea33dd442860f80cce2d972c" integrity sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw== -async-iterator-to-stream@^1.0.1, async-iterator-to-stream@^1.0.2, async-iterator-to-stream@^1.1.0: +async-iterator-to-stream@^1.0.1, async-iterator-to-stream@^1.0.2, async-iterator-to-stream@^1.1.0, async-iterator-to-stream@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/async-iterator-to-stream/-/async-iterator-to-stream-1.2.0.tgz#fd90483e3a308be2b5a1cf2d28d6f62f4f7923e0" integrity sha512-6R+mWdZgHpmXpvovdsl+/gidRgl0Wf18ADozWPA5isk9XBzJnzpVBH7qcZZbKG72eytJlNXBN3rWgmwzd4Wr8A== @@ -7017,7 +7017,7 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^6.0.0: +execa@^6.0.0, execa@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== @@ -18185,7 +18185,7 @@ ws@^7, ws@^7.4.6, ws@^7.5.5: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== -ws@^8.2.3, ws@^8.3.0: +ws@^8.2.3, ws@^8.3.0, ws@^8.5.0: version "8.5.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==