diff --git a/web/.eslintignore b/web/.eslintignore deleted file mode 100644 index 74aba32..0000000 --- a/web/.eslintignore +++ /dev/null @@ -1,16 +0,0 @@ -*.sh -node_modules -*.md -*.woff -*.ttf -.vscode -.idea -dist -/public -/docs -.husky -.local -/bin -Dockerfile -components.d.ts -components.d.ts diff --git a/web/.eslintrc.js b/web/.eslintrc.js deleted file mode 100644 index 87705e9..0000000 --- a/web/.eslintrc.js +++ /dev/null @@ -1,77 +0,0 @@ -// @ts-check -const { defineConfig } = require('eslint-define-config'); -module.exports = defineConfig({ - root: true, - env: { - browser: true, - node: true, - es6: true, - }, - parser: 'vue-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser', - ecmaVersion: 2020, - sourceType: 'module', - jsxPragma: 'React', - ecmaFeatures: { - jsx: true, - }, - }, - extends: [ - 'plugin:vue/vue3-recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier', - 'plugin:prettier/recommended', - ], - rules: { - 'vue/script-setup-uses-vars': 'error', - '@typescript-eslint/ban-ts-ignore': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/no-empty-function': 'off', - 'vue/custom-event-name-casing': 'off', - 'no-use-before-define': 'off', - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-unused-vars': ['error', { varsIgnorePattern: '.*', args: 'none' }], - 'no-unused-vars': [ - 'error', - // we are only using this rule to check for unused arguments since TS - // catches unused variables but not args. - { varsIgnorePattern: '.*', args: 'none' }, - ], - 'space-before-function-paren': 'off', - 'vue/multi-word-component-names': 'off', - 'vue/attributes-order': 'off', - 'vue/one-component-per-file': 'off', - 'vue/html-closing-bracket-newline': 'off', - 'vue/max-attributes-per-line': 'off', - 'vue/multiline-html-element-content-newline': 'off', - 'vue/singleline-html-element-content-newline': 'off', - 'vue/attribute-hyphenation': 'off', - 'vue/require-default-prop': 'off', - 'vue/html-self-closing': [ - 'error', - { - html: { - void: 'always', - normal: 'never', - component: 'always', - }, - svg: 'always', - math: 'always', - }, - ], - '@typescript-eslint/no-this-alias': [ - 'error', - { - allowDestructuring: false, // Disallow `const { props, state } = this`; true by default - allowedNames: ['that'], // Allow `const self = this`; `[]` by default - }, - ], - }, -}); diff --git a/web/eslint.config.js b/web/eslint.config.js new file mode 100644 index 0000000..a4eb964 --- /dev/null +++ b/web/eslint.config.js @@ -0,0 +1,104 @@ +import parser from 'vue-eslint-parser'; +import { FlatCompat } from '@eslint/eslintrc'; + +const compat = new FlatCompat(); + +export default [ + { + ignores: [ + '**/*.sh', + '**/node_modules', + '**/*.md', + '**/*.woff', + '**/*.ttf', + '**/.vscode', + '**/.idea', + '**/dist', + 'public', + 'docs', + '**/.husky', + '**/.local', + 'bin', + '**/Dockerfile', + '**/components.d.ts', + ], + }, + ...compat.extends( + 'plugin:vue/vue3-recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier', + 'plugin:prettier/recommended' + ), + { + languageOptions: { + parser: parser, + ecmaVersion: 2020, + sourceType: 'module', + parserOptions: { + parser: '@typescript-eslint/parser', + jsxPragma: 'React', + ecmaFeatures: { + jsx: true, + }, + }, + }, + rules: { + 'vue/script-setup-uses-vars': 'error', + '@typescript-eslint/ban-ts-ignore': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-empty-function': 'off', + 'vue/custom-event-name-casing': 'off', + 'no-use-before-define': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + varsIgnorePattern: '.*', + args: 'none', + }, + ], + 'no-unused-vars': [ + 'error', + { + varsIgnorePattern: '.*', + args: 'none', + }, + ], + 'space-before-function-paren': 'off', + 'vue/multi-word-component-names': 'off', + 'vue/attributes-order': 'off', + 'vue/one-component-per-file': 'off', + 'vue/html-closing-bracket-newline': 'off', + 'vue/max-attributes-per-line': 'off', + 'vue/multiline-html-element-content-newline': 'off', + 'vue/singleline-html-element-content-newline': 'off', + 'vue/attribute-hyphenation': 'off', + 'vue/require-default-prop': 'off', + 'vue/html-self-closing': [ + 'error', + { + html: { + void: 'always', + normal: 'never', + component: 'always', + }, + svg: 'always', + math: 'always', + }, + ], + '@typescript-eslint/no-this-alias': [ + 'error', + { + allowDestructuring: false, + allowedNames: ['that'], + }, + ], + }, + }, +]; diff --git a/web/package.json b/web/package.json index 1794042..84a8ad9 100644 --- a/web/package.json +++ b/web/package.json @@ -66,6 +66,7 @@ "devDependencies": { "@commitlint/cli": "^19.4.1", "@commitlint/config-conventional": "^19.4.1", + "@eslint/eslintrc": "^3.1.0", "@types/fs-extra": "^11.0.4", "@types/lodash": "^4.17.7", "@types/node": "^22.5.2", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 0555b2d..21bf9b1 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -114,6 +114,9 @@ importers: '@commitlint/config-conventional': specifier: ^19.4.1 version: 19.4.1 + '@eslint/eslintrc': + specifier: ^3.1.0 + version: 3.1.0 '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 diff --git a/web/prettier.config.js b/web/prettier.config.cjs similarity index 100% rename from web/prettier.config.js rename to web/prettier.config.cjs