@shayanthenerd/eslint-config
Version:
A modern, flexible ESLint configuration for enforcing best practices and maintaining a consistent coding style
53 lines (52 loc) • 1.97 kB
JavaScript
import { isTruthy } from "../utils/isTruthy.mjs";
import { globs } from "../helpers/globs.mjs";
import { isEnabled } from "../utils/isEnabled.mjs";
import { getJavaScriptRules } from "../rules/javascript.mjs";
import { mergeConfigs } from "eslint-flat-config-utils";
import { parser } from "typescript-eslint";
import globals from "globals";
//#region src/configs/javascript.ts
function getJavascriptConfig(options) {
const { env, configs: { vue, astro, javascript: { overrides } }, project: { globals: { bun, node, deno, vitest, worker, browser, commonjs, nodeBuiltin, audioWorklet, webextension, sharedWorker, serviceworker, vue: vueGlobals, astro: astroGlobals, custom: userGlobals } } } = options;
return mergeConfigs({
name: "shayanthenerd/base",
files: [
globs.src,
globs.jsxTsx,
isEnabled(vue) ? globs.vue : "",
isEnabled(astro) ? globs.astro : ""
].filter(isTruthy),
languageOptions: {
parser,
parserOptions: {
ecmaVersion: "latest",
ecmaFeatures: {
jsx: true,
impliedStrict: true
}
},
globals: {
...globals.builtin,
...globals.es2027,
...worker && globals.worker,
...commonjs && globals.commonjs,
...bun && env === "bun" && globals.bunBuiltin,
...deno && env === "deno" && globals.denoBuiltin,
...node && globals.node,
...nodeBuiltin && env === "node" && globals.nodeBuiltin,
...browser && env === "browser" && globals.browser,
...sharedWorker && env === "browser" && globals.sharedWorker,
...serviceworker && env === "browser" && globals.serviceworker,
...webextension && env === "browser" && globals.webextensions,
...audioWorklet && env === "browser" && globals.audioWorklet,
...vitest && globals.vitest,
...vueGlobals && isEnabled(vue) && globals.vue,
...astroGlobals && isEnabled(astro) && globals.astro,
...userGlobals
}
},
rules: getJavaScriptRules(options)
}, overrides);
}
//#endregion
export { getJavascriptConfig };