1 | const fs = require('fs');
|
2 | const config = {
|
3 | 'env': {
|
4 | 'browser': true,
|
5 | 'es6': true,
|
6 | 'mocha': true,
|
7 | 'node': true
|
8 | },
|
9 | 'parserOptions': {
|
10 | "ecmaVersion": 2017,
|
11 | 'sourceType': 'module'
|
12 | },
|
13 | 'rules': {
|
14 | 'eqeqeq': 2,
|
15 | 'guard-for-in': 2,
|
16 | 'new-cap': 0,
|
17 | 'no-caller': 2,
|
18 | 'no-console': 2,
|
19 | 'no-extend-native': 2,
|
20 | 'no-irregular-whitespace': 2,
|
21 | 'no-loop-func': 2,
|
22 | 'no-multi-spaces': 2,
|
23 | 'no-undef': 2,
|
24 | 'no-underscore-dangle': 0,
|
25 | 'no-unused-vars': 2,
|
26 | 'no-var': 2,
|
27 | 'one-var': [2, 'never'],
|
28 | 'quotes': [2, 'single'],
|
29 | 'semi': [1, 'always'],
|
30 | 'space-before-function-paren': [2, 'always'],
|
31 | 'wrap-iife': 2
|
32 | },
|
33 | 'globals': {
|
34 | 'fetch': true,
|
35 | 'requireText': true
|
36 | },
|
37 | 'plugins': [],
|
38 | 'extends': []
|
39 | };
|
40 |
|
41 | const packageJson = fs.existsSync('./package.json') && require('./package.json');
|
42 |
|
43 | if (
|
44 | (packageJson && packageJson.dependencies && (packageJson.dependencies.react || packageJson.dependencies.preact)) ||
|
45 | (packageJson && packageJson.devDependencies && (packageJson.devDependencies.react || packageJson.devDependencies.preact))
|
46 | ) {
|
47 | config.plugins.push('react');
|
48 | config.extends.push('plugin:react/recommended');
|
49 |
|
50 | Object.assign(config.rules, {
|
51 | 'react/display-name': 0,
|
52 | 'react/prop-types': 0,
|
53 | 'react/no-danger': 0,
|
54 | 'react/no-render-return-value': 0
|
55 | });
|
56 | }
|
57 |
|
58 | if (packageJson && packageJson.eslintConfig) {
|
59 | Object.assign(config.env, packageJson.eslintConfig.env);
|
60 | Object.assign(config.parserOptions, packageJson.eslintConfig.parserOptions);
|
61 | Object.assign(config.rules, packageJson.eslintConfig.rules);
|
62 | Object.assign(config.globals, packageJson.eslintConfig.globals);
|
63 | }
|
64 |
|
65 | module.exports = config;
|