From 10f0133efc817a554a4b8baa30a748d6c777ff52 Mon Sep 17 00:00:00 2001 From: Brian Rodriguez Date: Tue, 21 Jan 2025 14:58:31 -0500 Subject: [PATCH] fix: extracting metadata from package.json --- index.js | 208 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 107 insertions(+), 101 deletions(-) diff --git a/index.js b/index.js index e40323c..178147f 100644 --- a/index.js +++ b/index.js @@ -1,18 +1,14 @@ -import babelParser from '@babel/eslint-parser'; -import eslintJsPlugin from '@eslint/js'; -import compatPlugin from 'eslint-plugin-compat'; -import reactPlugin from 'eslint-plugin-react'; -import reactHooksPlugin from 'eslint-plugin-react-hooks'; -import fs from 'fs'; -import globals from 'globals'; - -const pkg = JSON.parse( - fs.readFileSync(new URL('./package.json', import.meta.url), 'utf-8'), -); +import babelParser from "@babel/eslint-parser"; +import eslintJsPlugin from "@eslint/js"; +import compatPlugin from "eslint-plugin-compat"; +import reactPlugin from "eslint-plugin-react"; +import reactHooksPlugin from "eslint-plugin-react-hooks"; +import globals from "globals"; +import packageJson from "./package.json"; /** @type {import('eslint').ESLint.Plugin} */ export default { - meta: { name: pkg.name, version: pkg.version }, + meta: { name: packageJson.name, version: packageJson.version }, configs: { recommended: [ // We don't use reactPlugin.configs.recommended here to avoid React-specific rules. @@ -22,7 +18,7 @@ export default { plugins: { compat: compatPlugin, react: reactPlugin, - 'react-hooks': reactHooksPlugin, + "react-hooks": reactHooksPlugin, }, languageOptions: { @@ -38,7 +34,7 @@ export default { // Currently ignored due to the custom parser. parserOptions: { ecmaVersion: 2020, - sourceType: 'module', + sourceType: "module", ecmaFeatures: { modules: true, impliedStrict: true, @@ -47,8 +43,8 @@ export default { requireConfigFile: false, babelOptions: { plugins: [ - '@babel/plugin-syntax-class-properties', - '@babel/plugin-syntax-jsx', + "@babel/plugin-syntax-class-properties", + "@babel/plugin-syntax-jsx", ], }, }, @@ -56,14 +52,14 @@ export default { settings: { // Preact CLI provides these defaults - targets: ['last 2 versions'], - polyfills: ['fetch', 'Promise'], + targets: ["last 2 versions"], + polyfills: ["fetch", "Promise"], react: { // eslint-plugin-preact interprets this as "h.createElement", // however we only care about marking h() as being a used variable. - pragma: 'h', + pragma: "h", // We use "react 16.0" to avoid pushing folks to UNSAFE_ methods. - version: '16.0', + version: "16.0", }, }, @@ -71,102 +67,112 @@ export default { /** * Preact / JSX rules */ - 'react/no-deprecated': 2, - 'react/react-in-jsx-scope': 0, // handled this automatically - 'react/display-name': [1, { ignoreTranspilerName: false }], - 'react/jsx-no-bind': [1, { - ignoreRefs: true, - allowFunctions: true, - allowArrowFunctions: true, - }], - 'react/jsx-no-comment-textnodes': 2, - 'react/jsx-no-duplicate-props': 2, - 'react/jsx-no-target-blank': 2, - 'react/jsx-no-undef': 2, - 'react/jsx-tag-spacing': [2, { beforeSelfClosing: 'always' }], - 'react/jsx-uses-react': 2, // debatable - 'react/jsx-uses-vars': 2, - 'react/jsx-key': [2, { checkFragmentShorthand: true }], - 'react/self-closing-comp': 2, - 'react/prefer-es6-class': 2, - 'react/prefer-stateless-function': 1, - 'react/require-render-return': 2, - 'react/no-danger': 1, + "react/no-deprecated": 2, + "react/react-in-jsx-scope": 0, // handled this automatically + "react/display-name": [1, { ignoreTranspilerName: false }], + "react/jsx-no-bind": [ + 1, + { + ignoreRefs: true, + allowFunctions: true, + allowArrowFunctions: true, + }, + ], + "react/jsx-no-comment-textnodes": 2, + "react/jsx-no-duplicate-props": 2, + "react/jsx-no-target-blank": 2, + "react/jsx-no-undef": 2, + "react/jsx-tag-spacing": [2, { beforeSelfClosing: "always" }], + "react/jsx-uses-react": 2, // debatable + "react/jsx-uses-vars": 2, + "react/jsx-key": [2, { checkFragmentShorthand: true }], + "react/self-closing-comp": 2, + "react/prefer-es6-class": 2, + "react/prefer-stateless-function": 1, + "react/require-render-return": 2, + "react/no-danger": 1, // Legacy APIs not supported in Preact: - 'react/no-did-mount-set-state': 2, - 'react/no-did-update-set-state': 2, - 'react/no-find-dom-node': 2, - 'react/no-is-mounted': 2, - 'react/no-string-refs': 2, + "react/no-did-mount-set-state": 2, + "react/no-did-update-set-state": 2, + "react/no-find-dom-node": 2, + "react/no-is-mounted": 2, + "react/no-string-refs": 2, /** * Hooks */ - 'react-hooks/rules-of-hooks': 2, - 'react-hooks/exhaustive-deps': 1, + "react-hooks/rules-of-hooks": 2, + "react-hooks/exhaustive-deps": 1, /** * General JavaScript error avoidance */ - 'constructor-super': 2, - 'no-caller': 2, - 'no-const-assign': 2, - 'no-delete-var': 2, - 'no-dupe-class-members': 2, - 'no-dupe-keys': 2, - 'no-duplicate-imports': 2, - 'no-else-return': 1, - 'no-empty-pattern': 0, - 'no-empty': 0, - 'no-extra-parens': 0, - 'no-iterator': 2, - 'no-lonely-if': 2, - 'no-mixed-spaces-and-tabs': [1, 'smart-tabs'], - 'no-multi-str': 1, - 'no-new-wrappers': 2, - 'no-proto': 2, - 'no-redeclare': 2, - 'no-shadow-restricted-names': 2, - 'no-shadow': 0, - 'no-spaced-func': 2, - 'no-this-before-super': 2, - 'no-undef-init': 2, - 'no-unneeded-ternary': 2, - 'no-unused-vars': [2, { - args: 'after-used', - ignoreRestSiblings: true, - }], - 'no-useless-call': 1, - 'no-useless-computed-key': 1, - 'no-useless-concat': 1, - 'no-useless-constructor': 1, - 'no-useless-escape': 1, - 'no-useless-rename': 1, - 'no-var': 1, - 'no-with': 2, + "constructor-super": 2, + "no-caller": 2, + "no-const-assign": 2, + "no-delete-var": 2, + "no-dupe-class-members": 2, + "no-dupe-keys": 2, + "no-duplicate-imports": 2, + "no-else-return": 1, + "no-empty-pattern": 0, + "no-empty": 0, + "no-extra-parens": 0, + "no-iterator": 2, + "no-lonely-if": 2, + "no-mixed-spaces-and-tabs": [1, "smart-tabs"], + "no-multi-str": 1, + "no-new-wrappers": 2, + "no-proto": 2, + "no-redeclare": 2, + "no-shadow-restricted-names": 2, + "no-shadow": 0, + "no-spaced-func": 2, + "no-this-before-super": 2, + "no-undef-init": 2, + "no-unneeded-ternary": 2, + "no-unused-vars": [ + 2, + { + args: "after-used", + ignoreRestSiblings: true, + }, + ], + "no-useless-call": 1, + "no-useless-computed-key": 1, + "no-useless-concat": 1, + "no-useless-constructor": 1, + "no-useless-escape": 1, + "no-useless-rename": 1, + "no-var": 1, + "no-with": 2, /** * General JavaScript stylistic rules (disabled) */ semi: 0, - strict: [2, 'never'], // assume type=module output (cli default) - 'object-curly-spacing': [0, 'always'], - 'rest-spread-spacing': 0, - 'space-before-function-paren': [0, 'always'], - 'space-in-parens': [0, 'never'], - 'object-shorthand': 1, - 'prefer-arrow-callback': 1, - 'prefer-rest-params': 1, - 'prefer-spread': 1, - 'prefer-template': 1, - quotes: [0, 'single', { - avoidEscape: true, - allowTemplateLiterals: true, - }], - 'quote-props': [2, 'as-needed'], + strict: [2, "never"], // assume type=module output (cli default) + "object-curly-spacing": [0, "always"], + "rest-spread-spacing": 0, + "space-before-function-paren": [0, "always"], + "space-in-parens": [0, "never"], + "object-shorthand": 1, + "prefer-arrow-callback": 1, + "prefer-rest-params": 1, + "prefer-spread": 1, + "prefer-template": 1, + quotes: [ + 0, + "single", + { + avoidEscape: true, + allowTemplateLiterals: true, + }, + ], + "quote-props": [2, "as-needed"], radix: 1, // parseInt(x, 10) - 'unicode-bom': 2, - 'valid-jsdoc': 0, + "unicode-bom": 2, + "valid-jsdoc": 0, }, }, ],