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