UNPKG

@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
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 };