From b0161fe0115acd0f2cfed4abde69120e260490ac Mon Sep 17 00:00:00 2001 From: Kristjan ESPERANTO <35647502+KristjanESPERANTO@users.noreply.github.com> Date: Wed, 24 Jan 2024 20:43:59 +0100 Subject: [PATCH] Lint package.json files (#3368) Notable changes in this context: - simplification of the ESLint calls - there is no longer a combination of two file/directory lists (one in `package.json` and one in `.eslintignore`) - removal of a non-existent path from the `.eslintignore` - use shorthand declaration for GitHub repository Normally the new plugin would also sort the scripts in the package.json alphabetically, but I think the current order is fine, so I deactivated it. Is it overkill to introduce a linter plugin just for the `package.json` files? In other projects I have seen that such internal changes were marked with "chore" in the changelog. That's what I've done here. These chore changes are less interesting for "normal" users. Please feel free to give me feedback. --- .eslintignore | 3 +- .eslintrc.json | 9 +++ .prettierignore | 1 + CHANGELOG.md | 1 + fonts/package-lock.json | 2 + fonts/package.json | 8 +-- package-lock.json | 119 +++++++++++++++++++++++++++++++++++++++ package.json | 10 ++-- vendor/package-lock.json | 2 + vendor/package.json | 8 +-- 10 files changed, 146 insertions(+), 17 deletions(-) diff --git a/.eslintignore b/.eslintignore index fa766882..24f4f1f5 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1,2 @@ -modules/default/calendar/vendor/* +modules/* +!modules/default/ \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index 1eaa9b43..dccd2ee2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -79,6 +79,15 @@ "rules": { "@stylistic/quotes": "off" } + }, + { + "extends": ["plugin:package-json/recommended"], + "files": ["package.json"], + "parser": "jsonc-eslint-parser", + "plugins": ["package-json"], + "rules": { + "package-json/sort-collections": ["error", ["devDependencies", "dependencies", "peerDependencies", "config"]] + } } ] } diff --git a/.prettierignore b/.prettierignore index 231245b1..dba12af8 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,5 @@ *.js +.eslintignore .prettierignore /config /coverage diff --git a/CHANGELOG.md b/CHANGELOG.md index c0884bc4..f1307cf6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ _This release is scheduled to be released on 2024-04-01._ ### Added - Output of system information to the console for troubleshooting (#3328 and #3337), ignore errors under aarch64 +- [chore] Add `eslint-plugin-package-json` to lint the `package.json` files ### Updated diff --git a/fonts/package-lock.json b/fonts/package-lock.json index d2b9f510..fb2f9eba 100644 --- a/fonts/package-lock.json +++ b/fonts/package-lock.json @@ -1,10 +1,12 @@ { "name": "magicmirror-fonts", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "magicmirror-fonts", + "version": "1.0.0", "license": "MIT", "dependencies": { "@fontsource/roboto": "^5.0.8", diff --git a/fonts/package.json b/fonts/package.json index 7dd6fd25..3b5714d1 100644 --- a/fonts/package.json +++ b/fonts/package.json @@ -1,10 +1,8 @@ { "name": "magicmirror-fonts", - "description": "Package for fonts use by MagicMirror² Core.", - "repository": { - "type": "git", - "url": "git+https://github.com/MagicMirrorOrg/MagicMirror.git" - }, + "version": "1.0.0", + "description": "Package for fonts use by MagicMirror² core.", + "repository": "MagicMirrorOrg/MagicMirror", "license": "MIT", "bugs": { "url": "https://github.com/MagicMirrorOrg/MagicMirror/issues" diff --git a/package-lock.json b/package-lock.json index 09fe1f6e..23c0a30d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^27.6.3", "eslint-plugin-jsdoc": "^48.0.2", + "eslint-plugin-package-json": "^0.10.0", "eslint-plugin-unicorn": "^50.0.1", "express-basic-auth": "^1.2.1", "husky": "^8.0.3", @@ -2055,6 +2056,16 @@ "@types/node": "*" } }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -2115,6 +2126,12 @@ "@types/node": "*" } }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, "node_modules/@types/node": { "version": "18.19.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.7.tgz", @@ -2973,6 +2990,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -3765,6 +3791,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -4570,6 +4605,25 @@ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, + "node_modules/eslint-plugin-package-json": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-package-json/-/eslint-plugin-package-json-0.10.0.tgz", + "integrity": "sha512-vUEfGptdpaEw0DTzN8Yl4cjZ2XZosuzAbZ+kOKJN+tJRe2hZDogesMhNYT8FI26QZ1rYUnfQ0wwzBTjswGr04g==", + "dev": true, + "dependencies": { + "package-json-validator": "^0.6.3", + "semver": "^7.5.4", + "sort-package-json": "^1.57.0", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": ">=8.0.0", + "jsonc-eslint-parser": "^2.0.0" + } + }, "node_modules/eslint-plugin-unicorn": { "version": "50.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-50.0.1.tgz", @@ -6114,6 +6168,15 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -7027,6 +7090,25 @@ "node": ">=6" } }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", + "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", + "dev": true, + "peer": true, + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -8075,6 +8157,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", + "dev": true, + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", + "dev": true + }, + "node_modules/optimist/node_modules/wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -11082,6 +11189,18 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index 67c274ae..ccd735af 100644 --- a/package.json +++ b/package.json @@ -18,20 +18,17 @@ "test:e2e": "NODE_ENV=test jest --selectProjects e2e -i --forceExit", "test:unit": "NODE_ENV=test jest --selectProjects unit", "test:prettier": "prettier . --check", - "test:js": "eslint 'js/**/*.js' 'modules/default/**/*.js' 'clientonly/*.js' 'serveronly/*.js' 'translations/*.js' 'vendor/*.js' 'tests/**/*.js' 'config/*'", + "test:js": "eslint .", "test:css": "stylelint 'css/main.css' 'fonts/*.css' 'modules/default/**/*.css' 'vendor/*.css' --config .stylelintrc.json", "test:calendar": "node ./modules/default/calendar/debug.js", "config:check": "node js/check_config.js", "lint:prettier": "prettier . --write", - "lint:js": "eslint 'js/**/*.js' 'modules/default/**/*.js' 'clientonly/*.js' 'serveronly/*.js' 'translations/*.js' 'vendor/*.js' 'tests/**/*.js' 'config/*' --fix", + "lint:js": "eslint . --fix", "lint:css": "stylelint 'css/main.css' 'fonts/*.css' 'modules/default/**/*.css' 'vendor/*.css' --config .stylelintrc.json --fix", "lint:staged": "lint-staged", "prepare": "[ -f node_modules/.bin/husky ] && husky install || echo no husky installed." }, - "repository": { - "type": "git", - "url": "git+https://github.com/MagicMirrorOrg/MagicMirror.git" - }, + "repository": "MagicMirrorOrg/MagicMirror", "keywords": [ "magic mirror", "magicmirror", @@ -53,6 +50,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^27.6.3", "eslint-plugin-jsdoc": "^48.0.2", + "eslint-plugin-package-json": "^0.10.0", "eslint-plugin-unicorn": "^50.0.1", "express-basic-auth": "^1.2.1", "husky": "^8.0.3", diff --git a/vendor/package-lock.json b/vendor/package-lock.json index c20e2d49..e5b2476e 100644 --- a/vendor/package-lock.json +++ b/vendor/package-lock.json @@ -1,10 +1,12 @@ { "name": "magicmirror-vendors", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "magicmirror-vendors", + "version": "1.0.0", "license": "MIT", "dependencies": { "@fortawesome/fontawesome-free": "^6.5.1", diff --git a/vendor/package.json b/vendor/package.json index 3d1ef83e..468321d6 100644 --- a/vendor/package.json +++ b/vendor/package.json @@ -1,10 +1,8 @@ { "name": "magicmirror-vendors", - "description": "Package for vendors use by MagicMirror² Core.", - "repository": { - "type": "git", - "url": "git+https://github.com/MagicMirrorOrg/MagicMirror.git" - }, + "version": "1.0.0", + "description": "Package for vendors use by MagicMirror² core.", + "repository": "MagicMirrorOrg/MagicMirror", "license": "MIT", "bugs": { "url": "https://github.com/MagicMirrorOrg/MagicMirror/issues"