/** * 内置脱敏规则库 * 按 locale 分组,支持通用规则和地区特定规则 */ import type { DesensitizeRule } from './types' export type { DesensitizeRule } export const BUILTIN_DESENSITIZE_RULES: DesensitizeRule[] = [ // ==================== 中国 (zh-CN) ==================== { id: 'cn_phone', label: 'desensitize.rules.cn_phone', pattern: '(?"]+', replacement: '[URL]', enabled: false, builtin: true, locales: [], }, ] /** * 获取指定 locale 的默认规则(当前 locale 特定 + 通用规则) */ export function getDefaultRulesForLocale(locale: string): DesensitizeRule[] { return BUILTIN_DESENSITIZE_RULES.filter((rule) => rule.locales.length === 0 || rule.locales.includes(locale)).map( (rule) => ({ ...rule }) ) } /** * 合并新 locale 的规则到现有规则列表 * 不重复添加已有 id,不修改已有规则的 enabled 状态 */ export function mergeRulesForLocale(existing: DesensitizeRule[], locale: string): DesensitizeRule[] { const existingIds = new Set(existing.map((r) => r.id)) const newRules = BUILTIN_DESENSITIZE_RULES.filter( (rule) => !existingIds.has(rule.id) && (rule.locales.length === 0 || rule.locales.includes(locale)) ).map((rule) => ({ ...rule })) return [...existing, ...newRules] }