/**
 * 定义预设选项接口
 */
interface PresetOptions {
    [key: string]: any;
}
declare enum EPresetType {
    /** 全掩码 */
    ALL = "all",
    /** 银行卡 */
    BANK_CARD = "bankCard",
    /** 证件号 */
    ID_CARD = "idCard",
    /** 姓名 */
    USER_NAME = "userName",
    /** 邮箱 */
    EMAIL = "email",
    /** 电话 */
    PHONE = "phone",
    /** 固定电话 */
    LANDLINE = "landline",
    /** 金额 */
    AMOUNT = "amount",
    /** 验证码 */
    VERIFICATION = "verification",
    /** 地址 */
    ADDRESS = "address",
    /** IP地址 */
    IP = "ip",
    /** URL */
    URL = "url",
    /** 车牌号 */
    LICENSE_PLATE = "licensePlate"
}
declare const preset: PresetOptions;

type MaskRulesType = keyof typeof preset;
type MaskIoConfig = MaskRulesType | Record<string, [string, string] | MaskRulesType> | [string, string];
/**
 * 字符串掩码函数
 * @param text 要掩码的字符串
 * @param config 配置，三种格式
 *
 * 1. 字符串：会匹配对应的预设格式
 * 2. 对象：会根据key匹配text找到对应配置
 * 3. 数组：第一项是正则匹配，第二项是需要替换的值，特殊情况：第二项如{{*$1}}的字符串，会使用*来获取$1的长度
 *
 * config示例:
 * 'all' → text: 1234567890，输出**********，根据text的长度进行掩码
 * {'^[0-9]$': ['^(.*)$', '***'], '^[a-z]$': ['^(.*)$', '*****']} → text: 1234，输出 ***，text：abcd，输出 *****
 * ['^([0-9]{3})(.*)$', '$1{{$2}}'] → text: 123456789，输出 ******789
 *
 * @param defaultConfig 可选的默认配置
 *
 * @returns 掩码后的字符串或原始字符串
 */
declare const maskText: (text: string, config: MaskIoConfig, defaultConfig?: MaskIoConfig) => string;

type FiledHandler = (val: number | string, pathAr?: any[]) => string;
/**
 * 递归掩码JSON
 * @param obj - 待处理的对象或数组
 * @param config - 配置项，键为路径，值为掩码配置或字段处理函数
 * @returns 处理后的对象
 */
declare const maskObject: (obj: Record<string, any> | any[], config: Record<string, MaskIoConfig | FiledHandler>) => any;

export { EPresetType, type MaskIoConfig, maskObject, maskText };
