( rules: DesensitizeRule[], logger: PreprocessLogger )
| 236 | const regexCache = new Map<string, RegExp | null>() |
| 237 | |
| 238 | function compileRules( |
| 239 | rules: DesensitizeRule[], |
| 240 | logger: PreprocessLogger |
| 241 | ): Array<{ regex: RegExp; replacement: string }> { |
| 242 | const result: Array<{ regex: RegExp; replacement: string }> = [] |
| 243 | for (const rule of rules) { |
| 244 | let regex = regexCache.get(rule.pattern) |
| 245 | if (regex === undefined) { |
| 246 | try { |
| 247 | regex = new RegExp(rule.pattern, 'g') |
| 248 | regexCache.set(rule.pattern, regex) |
| 249 | } catch { |
| 250 | logger.warn('Preprocess', `Invalid regex in desensitize rule "${rule.id}": ${rule.pattern}`) |
| 251 | regexCache.set(rule.pattern, null) |
| 252 | continue |
| 253 | } |
| 254 | } |
| 255 | if (regex) { |
| 256 | result.push({ regex, replacement: rule.replacement }) |
| 257 | } |
| 258 | } |
| 259 | return result |
| 260 | } |
no test coverage detected