节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
2.56 KiB
Stardust
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import pluginVue from 'eslint-plugin-vue';
import vueParser from 'vue-eslint-parser';

// 内联常见浏览器/Node 全局变量(避免额外依赖 globals 包,规避安装环境限制)
const browserGlobals = {
  window: 'readonly', document: 'readonly', navigator: 'readonly', location: 'readonly',
  localStorage: 'readonly', sessionStorage: 'readonly', console: 'readonly',
  setTimeout: 'readonly', clearTimeout: 'readonly', setInterval: 'readonly', clearInterval: 'readonly',
  requestAnimationFrame: 'readonly', cancelAnimationFrame: 'readonly',
  alert: 'readonly', confirm: 'readonly', prompt: 'readonly',
  HTMLElement: 'readonly', Element: 'readonly', Node: 'readonly', Event: 'readonly',
  CustomEvent: 'readonly', MouseEvent: 'readonly', KeyboardEvent: 'readonly',
  File: 'readonly', Blob: 'readonly', FormData: 'readonly', URL: 'readonly', URLSearchParams: 'readonly', WebSocket: 'readonly', XMLHttpRequest: 'readonly',
  HTMLDivElement: 'readonly', HTMLCanvasElement: 'readonly', HTMLInputElement: 'readonly', SVGSVGElement: 'readonly',
  fetch: 'readonly', history: 'readonly', screen: 'readonly',
} as const;
const nodeGlobals = {
  process: 'readonly', __dirname: 'readonly', __filename: 'readonly',
  module: 'readonly', require: 'readonly', exports: 'readonly', Buffer: 'readonly',
} as const;

export default tseslint.config(
  {
    ignores: [
      'dist',
      'node_modules',
      'Bin',
      'bin',
      '**/*.config.ts',
      'e2e-report',
      'e2e/**/.cache',
      // 调试/临时残留脚本(非项目源码,跳过 lint)
      '**/_*.mjs',
      '**/_*.cjs',
      '**/_*.js',
      '**/_*.ts',
      '**/_*.spec.ts',
      '**/_dump*',
      // 废弃/一次性产物(非源码)
      'stardust_layout.js',
      'main_resolved.js',
      'spec-check.cjs',
    ],
  },
  js.configs.recommended,
  ...tseslint.configs.recommended,
  ...pluginVue.configs['flat/recommended'],
  {
    files: ['**/*.vue'],
    languageOptions: {
      parser: vueParser,
      parserOptions: {
        parser: tseslint.parser,
        ecmaVersion: 'latest',
        sourceType: 'module',
      },
    },
  },
  {
    files: ['**/*.{ts,tsx,vue}'],
    languageOptions: {
      globals: {
        ...browserGlobals,
        ...nodeGlobals,
      },
    },
    rules: {
      '@typescript-eslint/no-explicit-any': 'off',
      '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }],
      'vue/multi-word-component-names': 'off',
      'vue/no-v-html': 'off',
    },
  },
);