@shayanthenerd/eslint-config
Version:
A modern, flexible ESLint configuration for enforcing best practices and maintaining a consistent coding style
42 lines (40 loc) • 1.78 kB
JavaScript
import { globs } from "../utils/globs.js";
import { isEnabled } from "../utils/isEnabled.js";
import { defaultOptions } from "../utils/options/defaultOptions.js";
import { getTailwindRules } from "../rules/tailwind.js";
import path from "node:path";
import { mergeConfigs } from "eslint-flat-config-utils";
import eslintPluginVue from "eslint-plugin-vue";
import eslintPluginHTML from "@html-eslint/eslint-plugin";
import eslintPluginTailwind from "eslint-plugin-better-tailwindcss";
//#region src/configs/tailwind.ts
const eslintParserHTML = eslintPluginHTML.configs["flat/recommended"].languageOptions.parser;
const eslintParserVue = eslintPluginVue.configs["flat/recommended"].find((config) => config.name === "vue/base/setup-for-vue")?.languageOptions?.parser;
function getTailwindConfig(options) {
const { tsConfig, configs: { vue, html, tailwind } } = options;
const { config, entryPoint, overrides } = isEnabled(tailwind) ? tailwind : defaultOptions.configs.tailwind;
const tailwindConfig = {
name: "shayanthenerd/tailwind",
files: [
globs.src,
html ? globs.html : "",
vue ? globs.vue : ""
],
plugins: { "better-tailwindcss": eslintPluginTailwind },
languageOptions: { parserOptions: { parser: html ? eslintParserHTML : eslintParserVue } },
settings: { "better-tailwindcss": {
entryPoint,
tailwindConfig: config,
tsconfig: tsConfig ? path.resolve(tsConfig.rootDir, tsConfig.filename) : void 0,
attributes: [["^v-bind:ui$", [{ match: "objectValues" }]], ["^(?:v-bind:)?(class|activeClass|inactiveClass)$", [
{ match: "strings" },
{ match: "objectKeys" },
{ match: "objectValues" }
]]]
} },
rules: getTailwindRules(options)
};
return mergeConfigs(tailwindConfig, overrides);
}
//#endregion
export { getTailwindConfig };