UNPKG

@shayanthenerd/eslint-config

Version:

A modern, flexible ESLint configuration for enforcing best practices and maintaining a consistent coding style

117 lines (116 loc) 4.75 kB
import { isTruthy } from "./utils/isTruthy.mjs"; import { isEnabled } from "./utils/isEnabled.mjs"; import { getCssConfig } from "./configs/css.mjs"; import { getVueConfig } from "./configs/vue.mjs"; import { getZodConfig } from "./configs/zod.mjs"; import { getHtmlConfig } from "./configs/html.mjs"; import { getNextConfig } from "./configs/next.mjs"; import { getNodeConfig } from "./configs/node.mjs"; import { getNuxtConfigs } from "./configs/nuxt.mjs"; import { getAstroConfig } from "./configs/astro.mjs"; import { getReactConfig } from "./configs/react.mjs"; import { getVitestConfig } from "./configs/vitest.mjs"; import { getCypressConfig } from "./configs/cypress.mjs"; import { getImportXConfig } from "./configs/importX.mjs"; import { getPromiseConfig } from "./configs/promise.mjs"; import { getUnicornConfig } from "./configs/unicorn.mjs"; import { getBaselineConfig } from "./configs/baseline.mjs"; import { getMarkdownConfig } from "./configs/markdown.mjs"; import { getTailwindConfig } from "./configs/tailwind.mjs"; import { getStorybookConfig } from "./configs/storybook.mjs"; import { getStylisticConfig } from "./configs/stylistic.mjs"; import { getJavascriptConfig } from "./configs/javascript.mjs"; import { getPlaywrightConfig } from "./configs/playwright.mjs"; import { getTypescriptConfig } from "./configs/typescript.mjs"; import { getPackageJsonConfig } from "./configs/packageJson.mjs"; import { getPerfectionistConfig } from "./configs/perfectionist.mjs"; import { getIgnorePatterns } from "./helpers/ignores/getIgnorePatterns.mjs"; import { mergeWithDefaults } from "./helpers/options/mergeWithDefaults.mjs"; import { defineConfig as defineConfig$1, globalIgnores } from "eslint/config"; //#region src/index.ts /** * Define your ESLint configuration based on the provided options and/or custom Flat Config Objects. * * @param {...DefineConfigArguments} args The configuration options and/or custom Flat Config objects. * @returns {Linter.Config[]} The merged ESLint configuration array * * @example * defineConfig(); * // or * defineConfig({ autoDetectDeps: 'verbose' }); * // or * defineConfig([ * { * name: 'custom', * rules: { * 'no-console': 'error', * }, * }, * { ... }, * ]); * // or * defineConfig( * { autoDetectDeps: 'verbose' }, * [ * { * name: 'custom', * rules: { * 'no-console': 'error', * }, * }, * { ... }, * ], * ); */ function defineConfig(...args) { let options = {}; let userConfigs = []; const [firstArgument, secondArgument] = args; if (Array.isArray(firstArgument)) userConfigs = firstArgument; else if (firstArgument) { options = firstArgument; userConfigs = secondArgument ?? []; } const mergedOptions = mergeWithDefaults(options); const { gitignore, project: { rules, ignores, settings, linterOptions }, configs: { css, vue, zod, html, next, node, nuxt, react, astro, unicorn, importX, promise, baseline, markdown, tailwind, stylistic, typescript, packageJson, perfectionist, test: { vitest, cypress, storybook, playwright } } } = mergedOptions; const ignorePatterns = getIgnorePatterns({ gitignore, patterns: ignores }); return defineConfig$1([ { name: "shayanthenerd/project", linterOptions, settings, rules }, globalIgnores(ignorePatterns, "shayanthenerd/ignores"), getJavascriptConfig(mergedOptions), isEnabled(typescript) && getTypescriptConfig(mergedOptions), isEnabled(unicorn) && getUnicornConfig(mergedOptions), isEnabled(promise) && getPromiseConfig(mergedOptions), isEnabled(importX) && getImportXConfig(mergedOptions), isEnabled(stylistic) && getStylisticConfig(mergedOptions), isEnabled(perfectionist) && getPerfectionistConfig(mergedOptions), isEnabled(baseline) && getBaselineConfig(mergedOptions), isEnabled(node) && getNodeConfig(mergedOptions), isEnabled(packageJson) && getPackageJsonConfig(mergedOptions), isEnabled(markdown) && getMarkdownConfig(mergedOptions), isEnabled(html) && getHtmlConfig(mergedOptions), isEnabled(css) && getCssConfig(mergedOptions), isEnabled(tailwind) && getTailwindConfig(mergedOptions), isEnabled(zod) && getZodConfig(mergedOptions), isEnabled(astro) && getAstroConfig(mergedOptions), isEnabled(react) && getReactConfig(mergedOptions), isEnabled(next) && getNextConfig(mergedOptions), isEnabled(vue) && getVueConfig(mergedOptions), ...isEnabled(nuxt) ? getNuxtConfigs(mergedOptions) : [], isEnabled(storybook) && getStorybookConfig(mergedOptions), isEnabled(vitest) && getVitestConfig(mergedOptions), isEnabled(cypress) && getCypressConfig(mergedOptions), isEnabled(playwright) && getPlaywrightConfig(mergedOptions), ...userConfigs ].filter(isTruthy)); } //#endregion export { defineConfig };