UNPKG

resume-anonymizer

Version:

A flexible NPM package for anonymizing resumes to reduce bias in hiring

65 lines (64 loc) 2.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Replacer = void 0; class Replacer { constructor(pseudonymPatterns) { this.pseudonymPatterns = pseudonymPatterns; this.replacements = new Map(); this.counters = new Map(); this.changeLog = {}; } getOrCreateReplacement(original, type) { const key = `${type}:${original}`; if (this.replacements.has(key)) { return this.replacements.get(key); } const pattern = this.pseudonymPatterns[type] || `${type.charAt(0).toUpperCase() + type.slice(1)} <number>`; const counter = this.counters.get(type) || 0; this.counters.set(type, counter + 1); let replacement; if (pattern.includes('<number>')) { replacement = pattern.replace('<number>', (counter + 1).toString()); } else if (pattern.includes('<letter>')) { replacement = pattern.replace('<letter>', String.fromCharCode(65 + counter)); } else { replacement = counter === 0 ? pattern : `${pattern} ${counter + 1}`; } this.replacements.set(key, replacement); this.logChange(type, original, replacement); return replacement; } logChange(type, original, replacement) { switch (type) { case 'name': this.changeLog.name = { original, replacedWith: replacement }; break; case 'company': if (!this.changeLog.companies) this.changeLog.companies = []; this.changeLog.companies.push({ original, replacedWith: replacement }); break; case 'person': if (!this.changeLog.references) this.changeLog.references = []; this.changeLog.references.push({ original, replacedWith: replacement }); break; case 'education': if (!this.changeLog.educationInstitutions) this.changeLog.educationInstitutions = []; this.changeLog.educationInstitutions.push({ original, replacedWith: replacement }); break; } } replaceInText(text, original, replacement) { const escaped = original.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const regex = new RegExp(`\\b${escaped}\\b`, 'gi'); return text.replace(regex, replacement); } getAllReplacements() { return new Map(this.replacements); } } exports.Replacer = Replacer;