@kiwicom/eslint-config
Version:
Eslint configuration describing rules for JS used at Kiwi.com.
67 lines (57 loc) • 3.06 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var prettierRules = require('./extraPrettierRules');
var ERROR = 2;
/**
* This is basically copy-pasted detection from the React plugin except it doesn't
* complain when React dependency is missing. It's because we expect non-React environments.
* See: https://github.com/yannickcr/eslint-plugin-react/blob/6bb160459383a2eeec5d65e3de07e37e997b5f1a/lib/util/version.js#L12
*/
function detectReactVersion() {
try {
var react = require('react'); // eslint-disable-line import/no-extraneous-dependencies
return react.version;
} catch (error) {
if (error.code === 'MODULE_NOT_FOUND') {
return '999.999.999';
}
throw error;
}
}
module.exports = function getCommonConfig(rules) {
return {
rules: _objectSpread({}, rules, {}, prettierRules, {
'prettier/prettier': [ERROR, {
// see: prettier.config.js
bracketSpacing: true,
printWidth: 100,
// see: https://prettier.io/docs/en/options.html#print-width
singleQuote: true,
tabWidth: 2,
trailingComma: 'all'
}]
}),
settings: {
'import/resolver': {
node: {
extensions: ['.js', '.jsx', '.android.js', '.ios.js', '.native.js', '.web.js']
}
},
react: {
version: detectReactVersion()
}
},
globals: {
global: 'readonly',
// TODO: make it 'off'
globalThis: 'readonly',
// https://github.com/tc39/proposal-global
__: 'readonly',
// https://kiwicom.github.io/nitrolib/services.html#intl
__DEV__: 'readonly',
FormData: 'readonly' // https://developer.mozilla.org/en-US/docs/Web/API/FormData
},
plugins: ['eslint-plugin-babel', 'eslint-plugin-flowtype', 'eslint-plugin-jest', 'eslint-plugin-prefer-object-spread', 'eslint-plugin-react', 'eslint-plugin-react-hooks', 'eslint-plugin-jsx-a11y', 'eslint-plugin-react-native', 'eslint-plugin-relay', 'eslint-plugin-import', 'eslint-plugin-monorepo', 'eslint-plugin-node', 'eslint-plugin-eslint-comments', 'eslint-plugin-kiwicom-incubator', 'eslint-plugin-prettier', 'eslint-plugin-relay-imports']
};
};