/** * 从路径中移除 locale 前缀 * @param path - 当前路径(如 '/uk/products/a1234' 或 '/eu-de') * @param locales - locale 列表(如 ['us', 'uk', 'eu-de', 'ca']) * @returns 去除 locale 后的路径(如 '/products/a1234' 或 '/') * * @example * removeLocalePrefix('/uk/products/a1234', ['uk', 'us']) * // 返回: '/products/a1234' * * removeLocalePrefix('/eu-de', ['eu-de', 'us']) * // 返回: '/' * * removeLocalePrefix('/products/a1234', ['uk', 'us']) * // 返回: '/products/a1234' (没有匹配的 locale,原样返回) */ export declare function removeLocalePrefix(path: string, locales: string[]): string; /** * 检查 URL 搜索参数中是否包含标准 UTM 参数 * (如 utm_source, utm_medium, utm_campaign 等) * * @param searchParams - URL 搜索参数字符串(如 '?utm_source=google&foo=bar') * @returns 是否包含 UTM 参数 * * @example * hasUtmParams('?utm_source=google') * // 返回: true * * hasUtmParams('?utm_medium=cpc&utm_campaign=summer') * // 返回: true * * hasUtmParams('?foo=bar') * // 返回: false * * hasUtmParams('') * // 返回: false */ export declare function hasUtmParams(searchParams: string): boolean; /** * 向 URL 添加 ref 参数 * * @param url - 目标 URL(可以是完整 URL 或相对路径) * @param refValue - ref 参数的值 * @returns 添加了 ref 参数的 URL * * @example * appendRefParam('https://example.com/products', 'geo_redirect_auto_de') * // 返回: 'https://example.com/products?ref=geo_redirect_auto_de' * * appendRefParam('https://example.com/products?utm_source=google', 'geo_redirect_auto_de') * // 返回: 'https://example.com/products?utm_source=google&ref=geo_redirect_auto_de' * * appendRefParam('/products', 'affiliate_123') * // 返回: '/products?ref=affiliate_123' */ export declare function appendRefParam(url: string, refValue: string): string; /** * 构建地理重定向的 ref 参数值 * * @param countryCode - 国家代码(如 'DE', 'US', 'HK') * @param prefix - ref 参数前缀,默认 'geo_redirect_auto' * @returns 格式化的 ref 参数值(如 'geo_redirect_auto_de') * * @example * buildGeoRedirectRef('DE') * // 返回: 'geo_redirect_auto_de' * * buildGeoRedirectRef('HK', 'custom_redirect') * // 返回: 'custom_redirect_hk' */ export declare function buildGeoRedirectRef(countryCode: string, prefix?: string): string; /** * 构建地区重定向的 ref 参数值(手动切换) * * @param countryCode - 国家代码(如 'DE', 'US', 'HK') * @param prefix - ref 参数前缀,默认 'geo_redirect_manual' * @returns 格式化的 ref 参数值(如 'geo_redirect_manual_de') * * @example * buildGeoRedirectRefManual('DE') * // 返回: 'geo_redirect_manual_de' * * buildGeoRedirectRefManual('HK', 'user_switch') * // 返回: 'user_switch_hk' */ export declare function buildGeoRedirectRefManual(countryCode: string, prefix?: string): string; /** * 解析用户地区偏好 cookie 值 * * @param cookieValue - Cookie 值(如 'v1_CA_EN' 或 'v1_CA') * @returns 解析后的地区代码和语言代码,如果格式无效返回 null * * @example * parseRegionCookie('v1_CA_EN') * // 返回: { regionCode: 'CA', languageCode: 'EN' } * * parseRegionCookie('v1_CA') * // 返回: { regionCode: 'CA', languageCode: undefined } * * parseRegionCookie('invalid') * // 返回: null */ export declare function parseRegionCookie(cookieValue: string): { regionCode: string; languageCode?: string; } | null; /** * 从 regions 数组自动生成地区代码到路径前缀的映射 * * @param regions - 地区配置数组 * @param customMap - 可选的自定义映射(优先级高于自动生成) * @returns 地区代码到路径前缀的映射对象 * * @example * const regions = [ * { code: 'US', url: 'https://www.anker.com' }, * { code: 'CA', url: 'https://www.anker.com/ca' }, * { code: 'DE', url: 'https://www.anker.com/eu-de' } * ] * generateRegionToPathMap(regions) * // 返回: { US: '', CA: 'ca', DE: 'eu-de' } * * generateRegionToPathMap(regions, { UK: 'uk' }) * // 返回: { US: '', CA: 'ca', DE: 'eu-de', UK: 'uk' } */ export declare function generateRegionToPathMap(regions: Array<{ code: string; url: string; }>, customMap?: Record): Record; /** * 检查路径/URL 是否在白名单中 * 支持:通配符匹配、忽略域名差异、忽略尾部斜杠 * * @param path - 当前路径(如 '/ca' 或 '/products/123') * @param whitelist - 白名单数组(支持路径或完整 URL,支持通配符 *) * @returns 是否在白名单中 * * @example * isPathInWhitelist('/ca', ['/ca', '/uk']) * // 返回: true * * isPathInWhitelist('/ca/', ['/ca']) * // 返回: true(忽略尾部斜杠) * * isPathInWhitelist('/products/123', ['/products/*']) * // 返回: true(通配符匹配) * * isPathInWhitelist('/checkout', ['https://www.anker.com/checkout']) * // 返回: true(忽略域名差异) * * isPathInWhitelist('/about', ['/ca', '/uk']) * // 返回: false */ export declare function isPathInWhitelist(path: string, whitelist: string[]): boolean; /** * 验证地区配置的完整性和正确性 * * @param options - 验证选项 * @param options.regions - 地区配置数组 * @param options.countryToRegionMap - 国家到地区的映射 * @param options.userCountry - 用户的国家代码(可选) * @returns 验证结果 * * @example * const validation = validateRegionConfig({ * regions: [{ code: 'US', ... }, { code: 'CA', ... }], * countryToRegionMap: { US: 'US', CA: 'CA', HK: 'DE' }, * userCountry: 'HK' * }) * * if (validation.valid) { * console.log('Mapped region:', validation.mappedRegion) // 'DE' * } else { * console.warn('Validation failed:', validation.error) * } */ export declare function validateRegionConfig(options: { regions?: Array<{ code: string; [key: string]: any; }>; countryToRegionMap?: Record; userCountry?: string; }): { valid: boolean; error?: string; mappedRegion?: string; }; /** * 将 locale 字符串转换为地区代码 * * @param locale - 当前 locale(如 'us', 'ca', 'eu-de') * @param regionToPathMap - 地区代码到路径前缀的映射 * @returns 地区代码(如 'US', 'CA', 'DE') * * @example * const regionToPathMap = { US: '', CA: 'ca', DE: 'eu-de' } * * localeToRegionCode('ca', regionToPathMap) * // 返回: 'CA' * * localeToRegionCode('eu-de', regionToPathMap) * // 返回: 'DE' * * localeToRegionCode('us', regionToPathMap) * // 返回: 'US' * * localeToRegionCode('unknown', regionToPathMap) * // 返回: 'UNKNOWN'(找不到时使用大写形式) */ export declare function localeToRegionCode(locale: string | null | undefined, regionToPathMap: Record): string; /** * 从 regionToPathMap 生成所有 locale 列表(用于移除路径前缀) * * @param regionToPathMap - 地区代码到路径前缀的映射 * @returns locale 列表(过滤掉空字符串) * * @example * const regionToPathMap = { US: '', CA: 'ca', DE: 'eu-de', UK: 'uk' } * * generateAllLocales(regionToPathMap) * // 返回: ['ca', 'eu-de', 'uk'] */ export declare function generateAllLocales(regionToPathMap: Record): string[];