@shayanthenerd/eslint-config
Version:
A modern, flexible ESLint configuration for enforcing best practices and maintaining a consistent coding style
39 lines (38 loc) • 1.47 kB
JavaScript
import { isTruthy } from "../utils/isTruthy.mjs";
import { globs } from "../helpers/globs.mjs";
import { isEnabled } from "../utils/isEnabled.mjs";
import { defaultOptions } from "../helpers/options/defaultOptions.mjs";
import { getTypescriptRules } from "../rules/typescript.mjs";
import { mergeConfigs } from "eslint-flat-config-utils";
import { parser, plugin } from "typescript-eslint";
import path from "node:path";
//#region src/configs/typescript.ts
function getTypescriptConfig(options) {
const { tsConfig, configs: { vue, astro, typescript } } = options;
const { allowedDefaultProjects } = isEnabled(typescript) ? typescript : defaultOptions.configs.typescript;
const { overrides } = isEnabled(typescript) ? typescript : defaultOptions.configs.typescript;
return mergeConfigs({
name: "shayanthenerd/typescript",
files: [
globs.src,
globs.jsxTsx,
isEnabled(vue) ? globs.vue : "",
isEnabled(astro) ? globs.astro : ""
].filter(isTruthy),
plugins: { "@typescript-eslint": plugin },
languageOptions: {
parser,
parserOptions: {
warnOnUnsupportedTypeScriptVersion: false,
tsconfigRootDir: tsConfig ? path.resolve(tsConfig.rootDir) : void 0,
projectService: {
defaultProject: tsConfig ? tsConfig.filename : void 0,
allowDefaultProject: ["{prettier,eslint}.config.?([mc])ts", ...allowedDefaultProjects]
}
}
},
rules: getTypescriptRules(options)
}, overrides);
}
//#endregion
export { getTypescriptConfig };