/* eslint-env node */
require("@rushstack/eslint-patch/modern-module-resolution");

module.exports = {
  root: true,
  env: {
    browser: true,
    node: true,
  },
  extends: [
    "plugin:vue/essential",
    "eslint:recommended"
  ],
  parser: "vue-eslint-parser",
  rules: {
    "semi": ["error", "never"],
    "no-unused-vars": "off",
    "no-undef": "off",
    "@typescript-eslint/no-unused-vars": "off",
    "vue/max-attributes-per-line": "off",
    "vue/no-v-html": "off",
    "vue/require-prop-types": "off",
    "vue/require-default-prop": "off",
    "vue/multi-word-component-names": "off",
    "vue/prefer-import-from-vue": "off",

    // reactivity transform
    "vue/no-setup-props-destructure": "off",

    "vue/component-tags-order": [
      "error",
      {
        order: ["script", "template", "style"],
      },
    ],
    "vue/block-tag-newline": [
      "error",
      {
        singleline: "always",
        multiline: "always",
      },
    ],
    "vue/component-name-in-template-casing": ["error", "PascalCase"],
    "vue/component-options-name-casing": ["error", "PascalCase"],
    "vue/custom-event-name-casing": ["error", "camelCase"],
    "vue/define-macros-order": [
      "error",
      {
        order: ["defineProps", "defineEmits"],
      },
    ],
    "vue/html-comment-content-spacing": [
      "error",
      "always",
      {
        exceptions: ["-"],
      },
    ],
    "vue/no-restricted-v-bind": ["error", "/^v-/"],
    "vue/no-useless-v-bind": "error",
    "vue/no-v-text-v-html-on-component": "error",
    "vue/padding-line-between-blocks": ["error", "always"],
    "vue/prefer-separate-static-class": "error",

    // extensions
    "vue/array-bracket-spacing": ["error", "never"],
    "vue/arrow-spacing": ["error", { before: true, after: true }],
    "vue/block-spacing": ["error", "always"],
    "vue/brace-style": ["error", "stroustrup", { allowSingleLine: true }],
    "vue/comma-dangle": ["error", "always-multiline"],
    "vue/comma-spacing": ["error", { before: false, after: true }],
    "vue/comma-style": ["error", "last"],
    "vue/dot-location": ["error", "property"],
    "vue/dot-notation": ["error", { allowKeywords: true }],
    "vue/eqeqeq": ["error", "smart"],
    // 'vue/func-call-spacing': ['off', 'never'],
    "vue/key-spacing": ["error", { beforeColon: false, afterColon: true }],
    "vue/keyword-spacing": ["error", { before: true, after: true }],
    "vue/no-constant-condition": "warn",
    "vue/no-empty-pattern": "error",
    "vue/no-extra-parens": ["error", "functions"],
    "vue/no-irregular-whitespace": "error",
    "vue/no-loss-of-precision": "error",
    "vue/no-restricted-syntax": [
      "error",
      "DebuggerStatement",
      "LabeledStatement",
      "WithStatement",
    ],
    "vue/no-sparse-arrays": "error",
    "vue/object-curly-newline": [
      "error",
      { multiline: true, consistent: true },
    ],
    "vue/object-curly-spacing": ["error", "always"],
    "vue/object-property-newline": [
      "error",
      { allowMultiplePropertiesPerLine: true },
    ],
    "vue/object-shorthand": [
      "error",
      "always",
      {
        ignoreConstructors: false,
        avoidQuotes: true,
      },
    ],
    "vue/operator-linebreak": ["error", "before"],
    "vue/prefer-template": "error",
    "vue/quote-props": ["error", "consistent-as-needed"],
    "vue/space-in-parens": ["error", "never"],
    "vue/space-infix-ops": "error",
    "vue/space-unary-ops": ["error", { words: true, nonwords: false }],
    "vue/template-curly-spacing": "error",
    "vue/no-reserved-component-names": "off",
    "no-useless-escape": "off"
  },
};
