164 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
const babelOptions = {
 | 
						|
  plugins: [
 | 
						|
    [
 | 
						|
      require.resolve('@babel/plugin-proposal-decorators'),
 | 
						|
      {
 | 
						|
        legacy: true,
 | 
						|
      },
 | 
						|
    ],
 | 
						|
    [
 | 
						|
      require.resolve('@babel/plugin-proposal-class-properties'),
 | 
						|
      {
 | 
						|
        loose: true,
 | 
						|
      },
 | 
						|
    ],
 | 
						|
    require.resolve('@babel/plugin-proposal-object-rest-spread'),
 | 
						|
    require.resolve('@babel/plugin-proposal-optional-catch-binding'),
 | 
						|
    require.resolve('@babel/plugin-proposal-async-generator-functions'),
 | 
						|
    require.resolve('@babel/plugin-proposal-export-namespace-from'),
 | 
						|
    require.resolve('@babel/plugin-proposal-export-default-from'),
 | 
						|
    require.resolve('@babel/plugin-proposal-nullish-coalescing-operator'),
 | 
						|
    require.resolve('@babel/plugin-proposal-optional-chaining'),
 | 
						|
    [
 | 
						|
      require.resolve('@babel/plugin-proposal-pipeline-operator'),
 | 
						|
      {
 | 
						|
        proposal: 'minimal',
 | 
						|
      },
 | 
						|
    ],
 | 
						|
    require.resolve('@babel/plugin-proposal-do-expressions'),
 | 
						|
    require.resolve('@babel/plugin-proposal-function-bind'),
 | 
						|
    require.resolve('@babel/plugin-syntax-dynamic-import'),
 | 
						|
    require.resolve('@babel/plugin-syntax-jsx'),
 | 
						|
  ],
 | 
						|
};
 | 
						|
 | 
						|
/** @type {(import('eslint').Linter.Config)[]} */
 | 
						|
module.exports = [
 | 
						|
  {
 | 
						|
    files: ['**/*.?(m|c)js?(x)'],
 | 
						|
    rules: {
 | 
						|
      'no-import-assign': 'error',
 | 
						|
      'no-extra-semi': 'error',
 | 
						|
      'no-undef': 'error',
 | 
						|
      'no-unused-vars': [
 | 
						|
        'error',
 | 
						|
        {
 | 
						|
          argsIgnorePattern: '^_',
 | 
						|
        },
 | 
						|
      ],
 | 
						|
      'comma-dangle': ['error', 'always-multiline'],
 | 
						|
      'no-array-constructor': 'error',
 | 
						|
      'dot-notation': 'error',
 | 
						|
      'constructor-super': 'error',
 | 
						|
      'no-this-before-super': 'error',
 | 
						|
      'no-useless-constructor': 'error',
 | 
						|
      'getter-return': [
 | 
						|
        'error',
 | 
						|
        {
 | 
						|
          allowImplicit: true,
 | 
						|
        },
 | 
						|
      ],
 | 
						|
      'no-setter-return': 'error',
 | 
						|
      'no-dupe-class-members': 'error',
 | 
						|
      'default-param-last': 'error',
 | 
						|
      'no-func-assign': 'error',
 | 
						|
      'no-unsafe-negation': 'error',
 | 
						|
      'valid-typeof': 'error',
 | 
						|
      'no-empty-function': 'error',
 | 
						|
      quotes: [
 | 
						|
        'error',
 | 
						|
        'single',
 | 
						|
        {
 | 
						|
          avoidEscape: true,
 | 
						|
        },
 | 
						|
      ],
 | 
						|
      'no-loss-of-precision': 'error',
 | 
						|
      'no-magic-numbers': [
 | 
						|
        'warn',
 | 
						|
        {
 | 
						|
          ignoreArrayIndexes: true,
 | 
						|
          ignoreDefaultValues: true,
 | 
						|
          enforceConst: true,
 | 
						|
          ignore: [0, 1, -1],
 | 
						|
          ignoreClassFieldInitialValues: true,
 | 
						|
        },
 | 
						|
      ],
 | 
						|
      'no-unreachable': 'error',
 | 
						|
      'no-throw-literal': 'error',
 | 
						|
      'no-implied-eval': 'error',
 | 
						|
      'no-new-symbol': 'error',
 | 
						|
      'no-obj-calls': 'error',
 | 
						|
      camelcase: [
 | 
						|
        'error',
 | 
						|
        {
 | 
						|
          properties: 'never',
 | 
						|
          allow: ['^UNSAFE_'],
 | 
						|
          ignoreDestructuring: true,
 | 
						|
        },
 | 
						|
      ],
 | 
						|
      'unicorn/filename-case': [
 | 
						|
        'error',
 | 
						|
        {
 | 
						|
          cases: {
 | 
						|
            kebabCase: true,
 | 
						|
          },
 | 
						|
        },
 | 
						|
      ],
 | 
						|
      'max-lines-per-function': [
 | 
						|
        'error',
 | 
						|
        {
 | 
						|
          max: 300,
 | 
						|
          IIFEs: true,
 | 
						|
        },
 | 
						|
      ],
 | 
						|
    },
 | 
						|
    languageOptions: {
 | 
						|
      parser: require('@babel/eslint-parser'),
 | 
						|
      parserOptions: {
 | 
						|
        ecmaVersion: 11,
 | 
						|
        sourceType: 'module',
 | 
						|
        ecmaFeatures: {
 | 
						|
          jsx: true,
 | 
						|
          legacyDecorators: true,
 | 
						|
        },
 | 
						|
        requireConfigFile: false,
 | 
						|
        babelOptions,
 | 
						|
      },
 | 
						|
    },
 | 
						|
  },
 | 
						|
  {
 | 
						|
    // for jsx
 | 
						|
    files: ['**/*.?(m|c)jsx'],
 | 
						|
    rules: {
 | 
						|
      'react/jsx-uses-react': 'error',
 | 
						|
      'react/jsx-uses-vars': 'error',
 | 
						|
      'unicorn/filename-case': [
 | 
						|
        'warn',
 | 
						|
        {
 | 
						|
          cases: {
 | 
						|
            kebabCase: true,
 | 
						|
            snakeCase: true,
 | 
						|
            pascalCase: true,
 | 
						|
          },
 | 
						|
          ignore: ['^(?!.*?\\.jsx$)(?!.*?\\.tsx$).+'],
 | 
						|
        },
 | 
						|
      ],
 | 
						|
      'max-lines-per-function': [
 | 
						|
        'warn',
 | 
						|
        {
 | 
						|
          max: 300,
 | 
						|
          IIFEs: true,
 | 
						|
        },
 | 
						|
      ],
 | 
						|
      'max-lines': [
 | 
						|
        'error',
 | 
						|
        {
 | 
						|
          max: 500,
 | 
						|
          skipComments: true,
 | 
						|
          skipBlankLines: true,
 | 
						|
        },
 | 
						|
      ],
 | 
						|
    },
 | 
						|
  },
 | 
						|
];
 |