openflexure-microscope-server/webapp/eslint.config.mjs
2026-05-15 17:08:09 -06:00

94 lines
2.7 KiB
JavaScript

import js from "@eslint/js";
import vue from "eslint-plugin-vue";
import prettierPlugin from "eslint-plugin-prettier";
import prettierConfig from "eslint-config-prettier";
import globals from "globals";
import pinia from "eslint-plugin-pinia";
const isDev = process.env.NODE_ENV === "development";
export default [
{
ignores: ["dist/**/*", "lib/**/*", "**/*.min.js", "tools/architecture_dashboard/**/*"],
},
js.configs.recommended,
...vue.configs["flat/recommended"],
{
files: ["**/*.vue", "**/*.js", "**/*.jsx", "**/*.cjs", "**/*.mjs"],
languageOptions: {
ecmaVersion: 2021,
sourceType: "module",
globals: {
...globals.node,
...globals.browser,
...globals.es2021,
process: "readonly",
},
},
plugins: {
vue,
prettier: prettierPlugin,
pinia,
},
rules: {
"prettier/prettier": "warn",
// Environment-based rules
"no-console": isDev ? "off" : ["warn", { allow: ["warn", "error"] }],
"no-debugger": isDev ? "off" : "warn",
// Vue deprecations
"vue/no-deprecated-slot-attribute": "warn",
"vue/no-deprecated-v-on-native-modifier": "warn",
"vue/no-deprecated-dollar-listeners-api": "warn",
"vue/no-deprecated-destroyed-lifecycle": "warn",
"vue/no-deprecated-dollar-scopedslots-api": "warn",
"vue/no-deprecated-events-api": "warn",
"vue/no-deprecated-filter": "warn",
"vue/no-deprecated-functional-template": "warn",
"vue/no-deprecated-html-element-is": "warn",
"vue/no-deprecated-inline-template": "warn",
"vue/no-deprecated-props-default-this": "warn",
"vue/no-deprecated-scope-attribute": "warn",
"vue/no-deprecated-v-bind-sync": "warn",
"vue/no-deprecated-v-is": "warn",
"vue/no-lifecycle-after-await": "warn",
"vue/no-watch-after-await": "warn",
// Vue best practices
"vue/require-explicit-emits": "warn",
"vue/multi-word-component-names": "warn",
"vue/no-v-for-template-key-on-child": "error",
"vue/no-v-model-argument": "off",
"vue/no-unused-components": "warn",
"vue/no-unused-vars": "warn",
// Pinia best practices
"pinia/prefer-use-store-naming-convention": "warn",
"pinia/require-setup-store-properties-export": "warn",
},
},
{
files: ["src/tests/unit/**/*.spec.js"],
languageOptions: {
globals: {
describe: "readonly",
it: "readonly",
expect: "readonly",
vi: "readonly",
beforeEach: "readonly",
afterEach: "readonly",
mockLogData: "readonly", // Prevents unused global mock variable warnings
afterAll: "readonly",
},
},
},
prettierConfig,
];