eslint-config-regiojet-typescript-react
Version:
Eslint Typescript rules for JS and TS React projects
173 lines (163 loc) • 5.13 kB
JavaScript
import getTsConfig, {
barrels,
barrelsFiles,
customs,
defaultTs,
errors,
es6,
getLanguageOptions,
getImportConfig as getTsImportConfig,
ignores,
mapFiles,
node,
perfectionist,
plus,
strict,
stylistic,
tsConfig,
tsPlugins,
tsStrict,
tsStylistic,
plugins as tsVanillaPlugins,
vanillaConfigs,
vanillaPlugins,
variables,
} from 'eslint-config-regiojet-typescript';
import {
a11y,
reactConfigs as allReactConfigs,
bestPractices,
getConfig as getReactConfig,
hooks,
react,
perfectionist as reactPerfectionist,
reactPlugins,
reactStylistic,
plugins as reactVanillaPlugins,
refresh,
} from 'eslint-config-regiojet-vanilla-react';
import {
files, plugins, refreshFiles, tsFiles,
} from './eslint.config.mjs';
import {
defaultImportExtensions,
defaultImportExtensionsRuleGranularOption,
defaultImportNoExtraneousDependenciesDevDependencies,
defaultImportResolverNodeExtensions,
} from './rules/imports.mjs';
import reactConfigs from './rules/react.mjs';
import reactTsOff from './rules/reactTsOff.mjs';
const dineddd = defaultImportNoExtraneousDependenciesDevDependencies;
const diergo = defaultImportExtensionsRuleGranularOption;
const defaultOptions = {
barrelsFiles,
files,
importExtensions: defaultImportExtensions,
importExtensionsRuleGranularOption: diergo,
importNoExtraneousDependenciesDevDependencies: dineddd,
importResolverNodeExtensions: defaultImportResolverNodeExtensions,
plugins,
tsFiles,
};
/**
* returns eslint config for typescript
* @param {string} baseDir - base directory for tsconfig.json
* @param {object} [options={}] - options
* @param {Array.<string>} [options.barrelsFiles=['**\/index.{js,mjs,mts,ts}']] - file patterns for barrel files
* @param {Array.<string>} [options.files=['**\/*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}']] - file patterns to lint
* @param {Array.<string>} [options.importExtensions=['.tsx', '.js', '.jsx', '.mjs', '.mts', '.ts']] - extensions for module settings import/extensions
* @param {Object.<string, string>} [options.importExtensionsRuleGranularOption] - granural oprions for import/extensions rule; for default values see Readme.md
* @param {Array.<string>} [options.importNoExtraneousDependenciesDevDependencies=['see Readme.md']] - devDependencies for import/no-extraneous-dependencies rule
* @param {Array.<string>} [options.importResolverNodeExtensions=['.tsx', '.js', '.jsx', '.json', '.mjs', '.mts', '.ts']] - extensions for module settings import/resolver.node.extensions
* @param {Object.<string, Object | undefined>} [options.plugins] - default plugins; for default values see Readme.md
* @param {Array.<string>} [options.refreshFiles=['**\/*.jsx', '**\/*.tsx']] - file patterns for refresh rules
* @param {Array.<string>} [options.tsFiles=['**\/*.jsx', '**\/*.tsx']] - file patterns for refresh rules
* @returns {Array.<Object>} - ESLint Flat config
*/
const getConfig = (baseDir, options = defaultOptions) => {
const {
barrelsFiles: customBarrelsFiles = barrelsFiles,
files: customFiles = files,
importExtensions: ie = defaultImportExtensions,
importExtensionsRuleGranularOption: iergo = diergo,
importNoExtraneousDependenciesDevDependencies: ineddd = dineddd,
importResolverNodeExtensions: irne = defaultImportResolverNodeExtensions,
plugins: customPlugins = plugins,
refreshFiles: customRefreshFiles = refreshFiles,
tsFiles: customTsFiles = tsFiles,
} = options;
const tsConfigs = getTsConfig(baseDir, {
barrelsFiles: customBarrelsFiles,
files: customFiles,
importExtensions: ie,
importExtensionsRuleGranularOption: iergo,
importNoExtraneousDependenciesDevDependencies: ineddd,
importResolverNodeExtensions: irne,
plugins: customPlugins,
tsFiles: customTsFiles,
});
const reactConfigsWithFiles = mapFiles(reactConfigs, customFiles);
const refreshConfigsWithFiles = mapFiles(refresh, customRefreshFiles);
const perfectionistWithFiles = mapFiles(reactPerfectionist, files);
const offWithFiles = mapFiles(reactTsOff, tsFiles);
const eslintConfig = [
{
name: 'typescript-react/base',
plugins: customPlugins,
},
...tsConfigs,
...reactConfigsWithFiles,
...refreshConfigsWithFiles,
...perfectionistWithFiles,
...offWithFiles,
...ignores,
];
return eslintConfig;
};
export {
a11y,
allReactConfigs,
barrels,
barrelsFiles,
bestPractices,
customs,
defaultImportExtensions,
defaultImportExtensionsRuleGranularOption,
defaultImportNoExtraneousDependenciesDevDependencies,
defaultImportResolverNodeExtensions,
defaultTs,
errors,
es6,
files,
getLanguageOptions,
getReactConfig,
getTsImportConfig,
hooks,
ignores,
mapFiles,
node,
perfectionist,
plugins,
plus,
react,
reactConfigs,
reactPerfectionist,
reactPlugins,
reactStylistic,
reactTsOff,
reactVanillaPlugins,
refresh,
refreshFiles,
strict,
stylistic,
tsConfig,
tsFiles,
tsPlugins,
tsStrict,
tsStylistic,
tsVanillaPlugins,
vanillaConfigs,
vanillaPlugins,
variables,
};
export default getConfig;