UNPKG

@kiwicom/eslint-config

Version:

Eslint configuration describing rules for JS used at Kiwi.com.

71 lines (59 loc) 3.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/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) { (0, _defineProperty2.default)(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'] }; };