index.js 1.47 KB
/**
 * `@drama/config/eslint` 公共面 —— 导出 `presetNode` / `presetVue` 两套 flat config 预设。
 *
 * - `presetNode`:纯逻辑 / 后端包用。通用 JS 规则 + scaffold 四条架构红线规则(深导入 /
 *   子域深导入 / 连接只在 composition root / 禁 app 互调)。
 * - `presetVue`:Vue 包用。在 `presetNode` 基础上拼接 `eslint-plugin-vue` 与浏览器全局。
 *
 * 两者都是**数据**(flat config 数组),消费方 `export default presetNode`(或 `presetVue`)
 * 即获得与全仓一致的 lint 行为,再按需补本包特例。
 *
 * 消费示例:
 *   // packages/foo/eslint.config.js
 *   import { presetNode } from '@drama/config/eslint'
 *   export default presetNode
 *
 *   // apps/web/eslint.config.js
 *   import { presetVue } from '@drama/config/eslint'
 *   export default presetVue
 */

import {
  JS_RECOMMENDED,
  COMMON_IGNORES_BLOCK,
  buildArchRulesBlock,
  buildCommonjsArchRulesBlock,
  ENFORCED_RULE_NAMES,
} from './rules.js'
import { buildVueBlocks } from './vue.js'

export { ENFORCED_RULE_NAMES }

/**
 * 纯逻辑 / 后端包 flat config 预设。
 * @type {import('eslint').Linter.Config[]}
 */
export const presetNode = [
  COMMON_IGNORES_BLOCK,
  JS_RECOMMENDED,
  buildArchRulesBlock(),
  buildCommonjsArchRulesBlock(),
]

/**
 * Vue 包 flat config 预设:node 预设之上拼接 Vue 片段。
 * @type {import('eslint').Linter.Config[]}
 */
export const presetVue = [...presetNode, ...buildVueBlocks()]