@truenine/eslint9-config
Version:
ESLint 9 configuration package for Compose Client projects with TypeScript, Vue, and modern JavaScript support
118 lines (116 loc) • 4.87 kB
JavaScript
import { formatterConfig } from "./configs/formatter.mjs";
import { javascriptConfig } from "./configs/javascript.mjs";
import { testConfig, unocssConfig } from "./configs/misc.mjs";
import { stylisticConfig } from "./configs/stylistic.mjs";
import { strictTypescriptConfig, typescriptConfig } from "./configs/typescript.mjs";
import { applyUniappVueConfig, vueConfig } from "./configs/vue.mjs";
import rule from "./rules/code-style/beside-comment.mjs";
import rule$1 from "./rules/code-style/brace-style.mjs";
import rule$2 from "./rules/code-style/compact-try-catch.mjs";
import rule$6 from "./rules/code-style/concise-arrow.mjs";
import rule$7 from "./rules/code-style/guard-clause.mjs";
import rule$3 from "./rules/code-style/no-document-requirements.mjs";
import rule$4 from "./rules/code-style/no-separator-comment.mjs";
import rule$5 from "./rules/code-style/no-task-comment.mjs";
import rule$8 from "./rules/code-style/prefer-lookup-table.mjs";
import rule$9 from "./rules/code-style/prefer-separate-try-catch.mjs";
import rule$13 from "./rules/code-style/prefer-void-zero.mjs";
import { codeStyleRules } from "./rules/code-style/index.mjs";
import rule$10 from "./rules/single-line/call.mjs";
import rule$11 from "./rules/single-line/control.mjs";
import rule$12 from "./rules/single-line/if.mjs";
import { singleLineRules } from "./rules/single-line/index.mjs";
import { rules } from "./rules/index.mjs";
import plugin from "./plugin.mjs";
import { baseRulesPreset } from "./presets/base-rules.mjs";
import { dtsRulesPreset } from "./presets/dts-rules.mjs";
import { typescriptRulesPreset } from "./presets/typescript-rules.mjs";
import { mergeWithDefaults } from "./utils/merge.mjs";
import { antfu } from "@antfu/eslint-config";
//#region src/index.ts
const defaultIgnores = [
"**/dist/**",
"**/node_modules/**",
"**/.agent/**",
"**/.claude/**",
"**/.factory/**",
"**/.qoder/**",
"**/.trae/**",
"**/.kiro/**",
"AGENTS.md",
"README.md",
"GEMINI.md",
"CLAUDE.md",
"WARP.md"
];
/**
* 创建 ESLint 配置
*
* @param options - 配置选项
* @returns ESLint 配置数组
*/
async function defineConfig(options = {}) {
const { type = "lib", ignores = [], test = true, nextjs = false, react = false, unocss = false, vue = false, uniapp = false, jsx = false, pnpm = false, stylistic = true, javascript = javascriptConfig, typescript = typescriptConfig, formatters = false, ...restOptions } = options;
const resolvedIgnores = typeof ignores === "function" ? (originals) => [...new Set([...defaultIgnores, ...ignores(originals)])] : [...new Set([...defaultIgnores, ...ignores])];
const _test = mergeWithDefaults(test, testConfig);
const _unocss = mergeWithDefaults(unocss, unocssConfig);
let _vue = mergeWithDefaults(vue, vueConfig);
const _javascript = mergeWithDefaults(javascript, javascriptConfig);
const _stylistic = mergeWithDefaults(stylistic, stylisticConfig);
const _formatters = mergeWithDefaults(formatters, formatterConfig);
if (uniapp) _vue = applyUniappVueConfig(_vue === false || _vue === true ? vueConfig : _vue);
let _typescript = typescript;
const _pnpm = type === "app" ? false : pnpm;
if (isStrictTsConfig(_typescript)) {
const merged = mergeWithDefaults(_typescript, strictTypescriptConfig);
if (typeof merged === "object" && "tsconfigPath" in merged) {
const opts = merged;
if (opts.parserOptions?.projectService === void 0) opts.parserOptions = {
...opts.parserOptions,
projectService: true
};
}
_typescript = merged;
}
return antfu({
...restOptions,
markdown: true,
type,
ignores: resolvedIgnores,
pnpm: _pnpm,
test: _test,
unocss: _unocss,
vue: _vue,
nextjs,
react,
jsx,
typescript: _typescript,
javascript: _javascript,
stylistic: _stylistic,
formatters: _formatters
}, {
name: "@truenine/eslint-plugin",
plugins: { "@truenine": plugin },
rules: baseRulesPreset
}, {
name: "@truenine/dts-rules",
files: ["**/*.d.ts"],
rules: dtsRulesPreset
}, {
name: "@truenine/typescript-rules",
files: [
"**/*.ts",
"**/*.tsx",
"**/*.mts",
"**/*.cts"
],
ignores: ["**/*.md/**"],
rules: typescriptRulesPreset
});
}
function isStrictTsConfig(config) {
return config !== null && typeof config === "object" && "strictTypescriptEslint" in config && config.strictTypescriptEslint;
}
//#endregion
export { rule as besideComment, rule$1 as braceStyle, codeStyleRules, rule$2 as compactTryCatch, defineConfig as default, defineConfig, rule$3 as noDocumentRequirements, rule$4 as noSeparatorComment, rule$5 as noTaskComment, plugin, rule$6 as preferConciseArrow, rule$7 as preferGuardClause, rule$8 as preferLookupTable, rule$9 as preferSeparateTryCatch, rule$10 as preferSingleLineCall, rule$11 as preferSingleLineControl, rule$12 as preferSingleLineIf, rule$13 as preferVoidZero, rules, singleLineRules };
//# sourceMappingURL=index.mjs.map