@shayanthenerd/eslint-config
Version:
A modern, flexible ESLint configuration for enforcing best practices and maintaining a consistent coding style
54 lines (52 loc) • 3.69 kB
JavaScript
import { isEnabled } from "./utils/isEnabled.js";
import { defaultOptions } from "./utils/options/defaultOptions.js";
import { getCSSConfig } from "./configs/css.js";
import { getVueConfig } from "./configs/vue.js";
import { getBaseConfig } from "./configs/base.js";
import { getHTMLConfig } from "./configs/html.js";
import { getVitestConfig } from "./configs/vitest.js";
import { getCypressConfig } from "./configs/cypress.js";
import { getImportXConfig } from "./configs/importX.js";
import { getTailwindConfig } from "./configs/tailwind.js";
import { getStorybookConfig } from "./configs/storybook.js";
import { getStylisticConfig } from "./configs/stylistic.js";
import { getPlaywrightConfig } from "./configs/playwright.js";
import { getTypeScriptConfig } from "./configs/typescript.js";
import { getPerfectionistConfig } from "./configs/perfectionist.js";
import { getRestrictedExports } from "./configs/restrictedExports.js";
import { getOXLintOverridesConfig } from "./configs/oxlintOverrides.js";
import { getIgnorePatterns } from "./utils/ignores/getIgnorePatterns.js";
import { mergeWithDefaults } from "./utils/options/mergeWithDefaults.js";
import { getVueComponentNamesConfig } from "./configs/vueComponentNames.js";
import { getNuxtMultiRootTemplateConfig } from "./configs/nuxtMultiRootTemplate.js";
import { globalIgnores } from "eslint/config";
import eslintPluginOXLint from "eslint-plugin-oxlint";
import { config } from "typescript-eslint";
import path from "node:path";
//#region src/index.ts
/**
* Define the ESLint configuration based on the provided options and any number of Flat Config objects.
*
* @param {Options} options - Options to configure and customize the config
* @param {...ConfigObject} configs - Additional Flat Config objects to extend the config
*
* @returns {Linter.Config[]} The merged ESLint configuration array
*/
function defineConfig(options = {}, ...configs) {
const mergedOptions = mergeWithDefaults(options);
const { gitignore, global: { rules, ignores, settings, linterOptions }, configs: { vue, css, nuxt, html, oxlint, importX, tailwind, stylistic, typescript, perfectionist, base: { preferNamedExports }, test: { vitest, cypress, storybook, playwright } } } = mergedOptions;
const ignorePatterns = getIgnorePatterns({
gitignore,
patterns: ignores
});
const oxlintConfigPath = path.resolve(oxlint || defaultOptions.configs.oxlint);
const eslintConfig = config({
name: "shayanthenerd/global",
linterOptions,
settings,
rules
}, globalIgnores(ignorePatterns, "shayanthenerd/ignores"), getBaseConfig(mergedOptions), preferNamedExports ? getRestrictedExports() : {}, isEnabled(importX) ? getImportXConfig(mergedOptions) : {}, isEnabled(stylistic) ? getStylisticConfig(mergedOptions) : {}, isEnabled(perfectionist) ? getPerfectionistConfig(mergedOptions) : {}, isEnabled(typescript) ? getTypeScriptConfig(mergedOptions) : {}, isEnabled(html) ? getHTMLConfig(mergedOptions) : {}, isEnabled(css) ? getCSSConfig(mergedOptions) : {}, isEnabled(tailwind) ? getTailwindConfig(mergedOptions) : {}, isEnabled(vue) ? getVueConfig(mergedOptions) : {}, isEnabled(vue) ? getVueComponentNamesConfig() : {}, isEnabled(vue) && isEnabled(nuxt) ? getNuxtMultiRootTemplateConfig() : {}, isEnabled(storybook) ? getStorybookConfig(mergedOptions) : {}, isEnabled(vitest) ? getVitestConfig(mergedOptions) : {}, isEnabled(playwright) ? getPlaywrightConfig(mergedOptions) : {}, isEnabled(cypress) ? getCypressConfig(mergedOptions) : {}, ...oxlint ? eslintPluginOXLint.buildFromOxlintConfigFile(oxlintConfigPath) : [], oxlint ? getOXLintOverridesConfig(mergedOptions) : {}, ...configs);
return eslintConfig;
}
//#endregion
export { defineConfig };