@bit-ocean/eslint-config
Version:
Universal ESLint configuration.
1 lines • 17.2 kB
Source Map (JSON)
{"version":3,"sources":["../src/config-builder.ts","../src/presets/astro.ts","../src/presets/import.ts","../src/presets/javascript.ts","../src/presets/next.ts","../src/presets/react.ts","../src/presets/react-native.ts","../src/presets/react-refresh.ts","../src/presets/simple-import-sort.ts","../src/presets/tailwind.ts","../src/presets/typescript.ts","../src/presets/unused-imports.ts","../src/presets/vue.ts"],"names":["astroRules","buildAstroOverrides","project","importRules","javascriptRules","javascriptOverrides","nextRules","reactRules","reactNativeRules","reactRefreshRules","simpleImportSortRules","tailwindRules","typescriptRules","buildTypescriptOverrides","dtsOverrides","unusedImportsRules","vueRules","vueOverrides","ConfigBuilder","_ConfigBuilder","defaultConfig","options","__publicField","__spreadProps","__spreadValues","typescript","vue","astro","react","reactNative","next","tailwind","rules","acc","rule","fs","join","resolve"],"mappings":"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","file":"chunk-RNBDPU75.mjs","sourcesContent":["import fs from 'node:fs'\nimport { join, resolve } from 'node:path'\n\nimport type { Linter } from 'eslint'\nimport { rules } from 'eslint-plugin-jsx-a11y'\n\nimport {\n buildAstroOverrides,\n buildTypescriptOverrides,\n dtsOverrides,\n importRules,\n javascriptOverrides,\n javascriptRules,\n nextRules,\n reactNativeRules,\n reactRefreshRules,\n reactRules,\n simpleImportSortRules,\n tailwindRules,\n typescriptRules,\n unusedImportsRules,\n vueOverrides,\n vueRules\n} from './presets'\nimport type { ConfigBuilderOptions } from './types'\n\nexport class ConfigBuilder {\n /**\n * ESLint config\n */\n private readonly config: Linter.Config\n\n /**\n * ESLint ignore patterns\n */\n private readonly ignorePatterns = [\n 'node_modules',\n 'dist',\n 'src-tauri',\n '@types/auto-imports.d.ts',\n 'storybook-static'\n ]\n\n constructor(defaultConfig: Linter.Config, options?: ConfigBuilderOptions) {\n this.config = {\n ...defaultConfig,\n root: true,\n ignorePatterns: this.ignorePatterns,\n reportUnusedDisableDirectives: true,\n rules: this.buildRules(options),\n overrides: this.buildOverrides(options)\n }\n }\n\n /**\n * Get the final config object\n */\n public build() {\n return this.config\n }\n\n /**\n * Build the overrides array\n */\n private buildOverrides(\n options?: ConfigBuilderOptions,\n project = ConfigBuilder.buildTypeScriptProject()\n ): Linter.ConfigOverride<Linter.RulesRecord>[] {\n const { typescript, vue, astro } = options ?? {}\n return [\n javascriptOverrides,\n ...(typescript ? [buildTypescriptOverrides(project), dtsOverrides] : []),\n ...(vue ? [vueOverrides] : []),\n ...(astro ? [buildAstroOverrides(project)] : [])\n ]\n }\n\n /**\n * Build the rules object\n */\n private buildRules(options?: ConfigBuilderOptions): Linter.RulesRecord {\n const { typescript, react, reactNative, next, tailwind, vue } = options ?? {}\n return {\n ...javascriptRules,\n ...unusedImportsRules,\n ...simpleImportSortRules,\n ...importRules,\n ...(typescript ? typescriptRules : {}),\n ...(reactNative ? reactNativeRules : {}),\n ...(react || reactNative\n ? { ...reactRules, ...reactRefreshRules, ...this.disableA11y() }\n : {}),\n ...(next ? nextRules : {}),\n ...(tailwind ? tailwindRules : {}),\n ...(vue ? vueRules : {})\n }\n }\n\n /**\n * Disable all jsx-a11y rules\n */\n private disableA11y() {\n return Object.keys(rules).reduce<Record<string, any>>((acc, rule) => {\n acc[`jsx-a11y/${rule}`] = 'off'\n return acc\n }, {})\n }\n\n /**\n * Get the TypeScript project path\n */\n static buildTypeScriptProject(): string {\n return !fs.existsSync(join(process.cwd(), 'tsconfig.eslint.json'))\n ? resolve(process.cwd(), 'tsconfig.json')\n : resolve(process.cwd(), 'tsconfig.eslint.json')\n }\n}\n","import type { Linter } from 'eslint'\n\nexport const astroRules: Linter.RulesRecord = {\n 'react/no-unknown-property': 'off',\n 'react/jsx-filename-extension': [1, { extensions: ['.astro'] }],\n 'consistent-return': 'off'\n}\n\nexport const buildAstroOverrides = (\n project: string\n): Linter.ConfigOverride<Linter.RulesRecord> => ({\n files: ['*.astro'],\n parser: 'astro-eslint-parser',\n parserOptions: {\n parser: '@typescript-eslint/parser',\n extraFileExtensions: ['.astro'],\n project,\n ecmaVersion: 'latest',\n sourceType: 'module'\n },\n globals: {\n Astro: 'readonly'\n },\n rules: astroRules,\n settings: {\n 'import/resolver': {\n typescript: {\n project\n }\n }\n }\n})\n","import type { Linter } from 'eslint'\n\nexport const importRules: Linter.RulesRecord = {\n 'import/order': 'off',\n 'import/first': 'error',\n 'import/newline-after-import': 'error',\n 'import/no-unresolved': 'off',\n 'import/no-absolute-path': 'off',\n 'import/no-duplicates': 'error',\n 'import/extensions': 'off',\n 'import/no-extraneous-dependencies': 'off',\n 'import/no-mutable-exports': 'error',\n 'import/no-self-import': 'error',\n 'import/prefer-default-export': 'off'\n}\n","import type { Linter } from 'eslint'\n\nexport const javascriptRules: Linter.RulesRecord = {\n quotes: ['error', 'single'],\n semi: ['error', 'never'],\n 'no-unused-vars': 'off',\n 'class-methods-use-this': 'off',\n 'max-classes-per-file': 'off',\n 'no-param-reassign': [\n 'warn',\n {\n props: true,\n ignorePropertyModificationsFor: [\n 'target',\n 'descriptor',\n 'req',\n 'request',\n 'args',\n 'draft',\n 'acc',\n 'props'\n ],\n ignorePropertyModificationsForRegex: ['^item', 'Item$']\n }\n ]\n}\n\nexport const javascriptOverrides: Linter.ConfigOverride<Linter.RulesRecord> = {\n files: ['*.{js,cjs,mjs,jsx}'],\n extends: 'plugin:@typescript-eslint/disable-type-checked',\n rules: {\n '@typescript-eslint/no-var-requires': 'off',\n '@typescript-eslint/no-require-imports': 'off'\n }\n}\n","import type { Linter } from 'eslint'\n\nexport const nextRules: Linter.RulesRecord = {\n 'react-refresh/only-export-components': 'off'\n}\n","import type { Linter } from 'eslint'\n\nexport const reactRules: Linter.RulesRecord = {\n 'react/checked-requires-onchange-or-readonly': 'error',\n 'react/destructuring-assignment': ['error', 'always'],\n 'react/display-name': 'error',\n 'react/forbid-component-props': 'error',\n 'react/function-component-definition': 'error',\n 'react/hook-use-state': 'error',\n 'react/iframe-missing-sandbox': 'error',\n 'react/jsx-key': 'error',\n 'react/jsx-no-comment-textnodes': 'error',\n 'react/jsx-no-duplicate-props': 'error',\n 'react/jsx-no-target-blank': ['error', { enforceDynamicLinks: 'always' }],\n 'react/jsx-no-undef': 'off',\n 'react/no-children-prop': 'error',\n 'react/no-danger-with-children': 'error',\n 'react/no-deprecated': 'error',\n 'react/no-find-dom-node': 'error',\n 'react/no-is-mounted': 'error',\n 'react/no-render-return-value': 'error',\n 'react/no-string-refs': 'error',\n 'react/no-unescaped-entities': 'error',\n 'react/no-unknown-property': 'error',\n 'react/prop-types': 'error',\n 'react/jsx-props-no-spreading': 'off',\n 'react/jsx-filename-extension': ['warn', { extensions: ['.jsx', '.tsx'] }],\n 'react/jsx-no-useless-fragment': ['error', { allowExpressions: true }],\n 'react/no-array-index-key': 'off',\n 'react/no-unstable-nested-components': ['error', { allowAsProps: true, customValidators: [] }],\n 'react/require-default-props': 'off'\n}\n","import type { Linter } from 'eslint'\n\nexport const reactNativeRules: Linter.RulesRecord = {\n 'global-require': 'off',\n 'react-native/no-inline-styles': 'off'\n}\n","import type { Linter } from 'eslint'\n\nexport const reactRefreshRules: Linter.RulesRecord = {\n 'react-refresh/only-export-components': [\n 'warn',\n {\n allowConstantExport: true,\n allowExportNames: []\n }\n ]\n}\n","import type { Linter } from 'eslint'\n\nexport const simpleImportSortRules: Linter.RulesRecord = {\n 'simple-import-sort/imports': 'error',\n 'simple-import-sort/exports': 'error'\n}\n","import type { Linter } from 'eslint'\n\nexport const tailwindRules: Linter.RulesRecord = {\n 'tailwindcss/classnames-order': 'off', // NOTE: Use prettier-plugin-tailwindcss instead.\n 'tailwindcss/enforces-shorthand': 'error',\n 'tailwindcss/enforces-negative-arbitrary-values': 'error',\n 'tailwindcss/no-contradicting-classname': 'warn',\n 'tailwindcss/no-custom-classname': 'off',\n 'tailwindcss/no-unnecessary-arbitrary-value': 'error'\n}\n","import type { Linter } from 'eslint'\n\nexport const typescriptRules: Linter.RulesRecord = {\n '@typescript-eslint/no-explicit-any': 'off',\n '@typescript-eslint/comma-dangle': 'off',\n '@typescript-eslint/consistent-type-imports': 'error',\n '@typescript-eslint/triple-slash-reference': 'off',\n '@typescript-eslint/no-unused-vars': 'off',\n '@typescript-eslint/no-use-before-define': ['error', { functions: false, classes: false }],\n '@typescript-eslint/no-throw-literal': 'off',\n '@typescript-eslint/no-empty-function': 'off'\n}\n\nexport const buildTypescriptOverrides = (\n project: string\n): Linter.ConfigOverride<Linter.RulesRecord> => ({\n files: ['*.{ts,tsx,cts,mts}'],\n parser: '@typescript-eslint/parser',\n parserOptions: {\n project,\n ecmaVersion: 'latest',\n sourceType: 'module'\n },\n rules: {\n 'no-undef': 'off',\n 'react/jsx-no-undef': 'off'\n },\n settings: {\n 'import/resolver': {\n typescript: {\n project\n }\n }\n }\n})\n\nexport const dtsOverrides: Linter.ConfigOverride<Linter.RulesRecord> = {\n files: ['*.d.ts'],\n rules: {\n 'import/no-duplicates': 'off'\n }\n}\n","import type { Linter } from 'eslint'\n\nexport const unusedImportsRules: Linter.RulesRecord = {\n 'unused-imports/no-unused-imports': 'error',\n 'unused-imports/no-unused-vars': [\n 'warn',\n {\n vars: 'all',\n varsIgnorePattern: '^_',\n args: 'after-used',\n argsIgnorePattern: '^_'\n }\n ]\n}\n","import type { Linter } from 'eslint'\n\nexport const vueRules: Linter.RulesRecord = {\n 'vue/no-v-html': 'off',\n 'vue/multi-word-component-names': 'off',\n 'vue/component-tags-order': ['error', { order: ['script', 'template', 'style'] }]\n}\n\nexport const vueOverrides: Linter.ConfigOverride<Linter.RulesRecord> = {\n files: ['*.vue'],\n rules: {\n 'no-undef': 'off'\n }\n}\n"]}