index.js 1.8 KB
/**
 * `@drama/config/vitest` 公共面 —— `defineNodePreset` / `defineVuePreset` 两个工厂。
 *
 * - `defineNodePreset(overrides)`:纯逻辑包用,`environment:'node'`。
 * - `defineVuePreset(overrides)`:组件包用,`environment:'jsdom'` + `@vitejs/plugin-vue`。
 *
 * 两者共享 coverage 门槛、include/exclude、reporter(单一来源),overrides 深合并可改门槛。
 *
 * 消费示例:
 *   // packages/foo/vitest.config.js
 *   import { defineNodePreset } from '@drama/config/vitest'
 *   export default defineNodePreset()
 *
 *   // packages/ui/vitest.config.js
 *   import { defineVuePreset } from '@drama/config/vitest'
 *   export default defineVuePreset()
 */

import { buildSharedTestConfig, deepMerge, COVERAGE_THRESHOLDS } from './base.js'

export { COVERAGE_THRESHOLDS }

/**
 * node 环境 Vitest config(纯逻辑包)。
 * @param {Record<string, unknown>} [overrides] 深合并进默认(可覆盖门槛 / include 等)。
 * @returns {Record<string, unknown>}
 */
export function defineNodePreset(overrides = {}) {
  const base = {
    test: {
      ...buildSharedTestConfig(),
      environment: 'node',
    },
  }
  return deepMerge(base, overrides)
}

/**
 * jsdom + Vue 环境 Vitest config(组件包)。
 * Vue 插件经动态 import 装配,避免纯 node 消费方加载本工厂时被强制拉起 plugin-vue。
 * @param {Record<string, unknown>} [overrides] 深合并进默认。
 * @returns {Promise<Record<string, unknown>>} 含 Vue 插件的 config(异步以惰性加载插件)。
 */
export async function defineVuePreset(overrides = {}) {
  const { default: vue } = await import('@vitejs/plugin-vue')
  const base = {
    plugins: [vue()],
    test: {
      ...buildSharedTestConfig(),
      environment: 'jsdom',
    },
  }
  return deepMerge(base, overrides)
}