eslint-config-proste
Version:
preset eslint config
66 lines (65 loc) • 2.96 kB
JavaScript
import { getTypescriptConfig } from "./configs/ts.js";
import { getJsConfig } from "./configs/js.js";
import { FlatConfigComposer } from "eslint-flat-config-utils";
import { getImportConfig } from "./configs/import.js";
import { getReactConfig } from "./configs/react.js";
import { getPrettierConfig } from "./configs/prettier.js";
import { getUnicornConfig } from "./configs/unicorn.js";
import { getVitestConfig } from "./configs/vitest.js";
import { getJsxA11yConfig } from "./configs/jsxA11y.js";
import { getVueConfig } from "./configs/vue.js";
import { isPackageExists } from "local-pkg";
import { resolveVueOptions, resolveReactOptions, resolveTsOptions, resolveOptions } from "./utils/options.js";
const BASE_IGNORES = [
"**/node_modules",
"**/dist",
"**/package-lock.json",
"**/yarn.lock",
"**/pnpm-lock.yaml",
"**/CHANGELOG.md",
"**/LICENSE"
];
async function eslintConfig(options, ...configs) {
const {
ignores = BASE_IGNORES,
react: enableReact = isPackageExists("react"),
ts: enableTypescript = isPackageExists("typescript"),
prettier: enablePrettier = isPackageExists("prettier"),
unicorn: enableUnicorn = !0,
vitestGlobals = isPackageExists("vitest"),
jsxA11y: enableJsxA11y = !1,
vue: enableVue = isPackageExists("vue"),
js: enableJs = !0,
import: enableImport = !0
} = options ?? {}, vueOptions = resolveVueOptions(enableVue), reactOptions = resolveReactOptions(enableReact), tsOptions = resolveTsOptions(enableTypescript), prettierOptions = resolveOptions(enablePrettier), unicornOptions = resolveOptions(enableUnicorn), jsxA11yOptions = resolveOptions(enableJsxA11y), jsOptions = resolveOptions(enableJs), importOptions = resolveOptions(enableImport), tsExts = [], tsFiels = [];
vueOptions.enable && (tsExts.push(".vue"), tsFiels.push("**/*.vue"));
const configList = [
{
ignores
},
jsOptions.enable && getJsConfig({ overrides: jsOptions.overrides }),
unicornOptions.enable && getUnicornConfig({ overrides: unicornOptions.overrides }),
tsOptions.enable && getTypescriptConfig({
overrides: tsOptions.overrides,
exts: tsExts,
files: tsFiels,
parseOptions: tsOptions.parseOptions
}),
importOptions.enable && getImportConfig({
overrides: importOptions.overrides,
enableTs: tsOptions.enable
}),
reactOptions.enable && getReactConfig({ ...reactOptions }),
vitestGlobals && getVitestConfig(),
jsxA11yOptions.enable && getJsxA11yConfig({ overrides: jsxA11yOptions.overrides }),
vueOptions.enable && getVueConfig({
enableTs: tsOptions.enable,
version: vueOptions.version,
overrides: vueOptions.overrides
})
].filter(Boolean), composer = new FlatConfigComposer();
return composer.append(...configList, ...configs), prettierOptions.enable && composer.append(getPrettierConfig({ overrides: prettierOptions.overrides })), composer;
}
export {
eslintConfig as default
};