@shayanthenerd/eslint-config
Version:
A modern, flexible ESLint configuration for enforcing best practices and maintaining a consistent coding style
90 lines (89 loc) • 4.14 kB
JavaScript
import { isEnabled } from "../../utils/isEnabled.mjs";
import { defaultOptions } from "./defaultOptions.mjs";
import { isPackageDetected, logDetectedPackages } from "../isPackageDetected.mjs";
//#region src/helpers/options/enableDetectedConfigs.ts
function enableDetectedConfigs(options) {
const explicitlyDisabledConfigs = {
"typescript": options.configs?.typescript === false,
"zod": options.configs?.zod === false,
"astro": options.configs?.astro === false,
"react": options.configs?.react === false,
"next": options.configs?.next === false,
"vue": options.configs?.vue === false,
"nuxt": options.configs?.nuxt === false,
"@nuxt/ui": isEnabled(options.configs?.nuxt) && options.configs?.nuxt?.ui === false,
"@nuxt/icon": isEnabled(options.configs?.nuxt) && options.configs?.nuxt?.icon === false,
"@nuxt/image": isEnabled(options.configs?.nuxt) && options.configs?.nuxt?.image === false,
"vitest": options.configs?.test?.vitest === false,
"cypress": options.configs?.test?.cypress === false,
"storybook": options.configs?.test?.storybook === false,
"@playwright/test": options.configs?.test?.playwright === false
};
const autoDetectedPackages = {
typescript: isPackageDetected("typescript", options),
zod: isPackageDetected("zod", options),
astro: isPackageDetected("astro", options),
react: isPackageDetected("react", options),
next: isPackageDetected("next", options),
vue: isPackageDetected("vue", options),
nuxt: isPackageDetected("nuxt", options),
nuxtUI: isPackageDetected("@nuxt/ui", options),
nuxtIcon: isPackageDetected("@nuxt/icon", options),
nuxtImage: isPackageDetected("@nuxt/image", options),
vitest: isPackageDetected("vitest", options),
cypress: isPackageDetected("cypress", options),
storybook: isPackageDetected("storybook", options),
playwright: isPackageDetected("@playwright/test", options)
};
options.configs ??= {};
options.configs.test ??= {};
options.configs.node ??= true;
options.configs.packageJson ??= true;
options.configs.markdown ??= true;
options.configs.html ??= false;
options.configs.css ??= false;
options.configs.tailwind ??= false;
options.configs.promise ??= true;
options.configs.importX ??= true;
options.configs.stylistic ??= true;
options.configs.perfectionist ??= true;
options.configs.baseline ??= options.env === "browser";
options.configs.typescript ??= autoDetectedPackages.typescript;
options.configs.zod ??= autoDetectedPackages.zod;
options.configs.astro ??= autoDetectedPackages.astro;
options.configs.vue ??= autoDetectedPackages.vue;
options.configs.nuxt ??= autoDetectedPackages.nuxt;
options.configs.react ??= autoDetectedPackages.react;
options.configs.next ??= autoDetectedPackages.next;
options.configs.test.vitest ??= autoDetectedPackages.vitest;
options.configs.test.cypress ??= autoDetectedPackages.cypress;
options.configs.test.storybook ??= autoDetectedPackages.storybook;
options.configs.test.playwright ??= autoDetectedPackages.playwright;
const isTypescriptEnabled = isEnabled(options.configs.typescript);
if (isTypescriptEnabled) {
const defaultTsConfigRootDir = options.packageDir ?? defaultOptions.packageDir;
const defaultTsConfigFilename = "tsconfig.json";
if (options.tsConfig === void 0) options.tsConfig = {
rootDir: defaultTsConfigRootDir,
filename: defaultTsConfigFilename
};
else if (options.tsConfig !== false) {
options.tsConfig.rootDir ??= defaultTsConfigRootDir;
options.tsConfig.filename ??= defaultTsConfigFilename;
}
}
if (isTypescriptEnabled && options.configs.vue) {
options.configs.vue = options.configs.vue === true ? {} : options.configs.vue;
options.configs.vue.blockLang = { script: "ts" };
}
if (options.configs.nuxt) {
if (options.configs.nuxt === true) options.configs.nuxt = {};
options.configs.nuxt.ui ??= autoDetectedPackages.nuxtUI;
options.configs.nuxt.icon ??= autoDetectedPackages.nuxtIcon;
options.configs.nuxt.image ??= autoDetectedPackages.nuxtImage;
}
if (options.autoDetectDeps === "verbose") logDetectedPackages(explicitlyDisabledConfigs);
return options;
}
//#endregion
export { enableDetectedConfigs };