@feathers-community/eslint-config
Version:
92 lines (91 loc) • 2.96 kB
JavaScript
import prettierConfig from "./prettier.js";
import eslint from "@eslint/js";
import tseslint from "typescript-eslint";
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
import eslintPluginImportX from "eslint-plugin-import-x";
import tsParser from "@typescript-eslint/parser";
import unicorn from "eslint-plugin-unicorn";
import globals from "globals";
import unusedImports from "eslint-plugin-unused-imports";
import { configs } from "eslint-plugin-package-json";
import process from "node:process";
//#region src/default-config.ts
const defaultConfig = (options, ...userConfigs) => {
const tsconfigPath = options?.tsconfig?.path ?? "./tsconfig.json";
const tsconfigRootDir = options?.tsconfig?.rootDir ?? process.cwd();
return tseslint.config({ ignores: [
"**/node_modules",
"**/dist",
"**/coverage",
"docs/.vitepress/cache",
"docs/.vitepress/dist",
"**/*.d.ts",
"**/*.cjs",
"**/*.json"
] }, eslint.configs.recommended, tseslint.configs.recommended, { rules: {
"no-unused-vars": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/consistent-type-imports": ["error", {
prefer: "type-imports",
fixStyle: "separate-type-imports"
}]
} }, eslintPluginImportX.flatConfigs.recommended, eslintPluginImportX.flatConfigs.typescript, {
files: ["**/*.{ts,tsx}"],
ignores: [],
languageOptions: {
parser: tsParser,
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
project: tsconfigPath,
tsconfigRootDir
}
}
}, {
files: ["**/*.{js,mjs}"],
languageOptions: {
ecmaVersion: "latest",
sourceType: "module"
}
}, { rules: {
"import-x/no-dynamic-require": "warn",
"import-x/no-nodejs-modules": "off"
} }, {
languageOptions: { globals: globals.builtin },
plugins: { unicorn },
rules: {
"unicorn/consistent-assert": "warn",
"unicorn/consistent-date-clone": "warn",
"unicorn/consistent-empty-array-spread": "warn",
"unicorn/prefer-date-now": "warn",
"unicorn/prefer-module": "warn",
"unicorn/prefer-node-protocol": "warn",
"unicorn/prefer-object-from-entries": "warn",
"unicorn/prefer-set-size": "warn"
}
}, {
plugins: { "unused-imports": unusedImports },
rules: {
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": "off",
"unused-imports/no-unused-imports": "error",
"unused-imports/no-unused-vars": ["warn", {
vars: "all",
varsIgnorePattern: "^_",
args: "after-used",
argsIgnorePattern: "^_",
ignoreRestSiblings: true
}]
}
}, {
...configs.recommended,
rules: { "package-json/require-files": "error" }
}, eslintPluginPrettierRecommended, { rules: { "prettier/prettier": ["warn", prettierConfig] } }, ...userConfigs);
};
//#endregion
//#region src/index.ts
var src_default = (options, ...userConfigs) => {
return defaultConfig(options, ...userConfigs);
};
//#endregion
export { src_default as default, defaultConfig, prettierConfig };