UNPKG

@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
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