@pranavraut033/ats-checker 1.4.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/skills.ts","../../../src/profiles/index.ts","../../../src/lang/en/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import { KeywordCategory, KeywordRegistry, SkillAliases } from \"../types/config\";\nimport { unique } from \"./text\";\n\n// ponytail: Map lookup, not fuzzy match — add fuzzy only if real misses show up.\nconst aliasIndexCache = new WeakMap<SkillAliases, Map<string, string>>();\n\nfunction getAliasIndex(aliases: SkillAliases): Map<string, string> {\n let index = aliasIndexCache.get(aliases);\n if (!index) {\n index = new Map();\n for (const [canonical, aliasList] of Object.entries(aliases)) {\n const lower = canonical.toLowerCase();\n index.set(lower, lower);\n for (const alias of aliasList) {\n index.set(alias.toLowerCase(), lower);\n }\n }\n aliasIndexCache.set(aliases, index);\n }\n return index;\n}\n\nexport function normalizeSkill(skill: string, aliases: SkillAliases): string {\n const normalized = skill.trim().toLowerCase();\n return getAliasIndex(aliases).get(normalized) ?? normalized;\n}\n\nexport function normalizeSkills(skills: string[], aliases: SkillAliases): string[] {\n return unique(skills.map((skill) => normalizeSkill(skill, aliases)));\n}\n\nexport function skillMatched(candidate: string, targetSkills: Set<string>, aliases: SkillAliases): boolean {\n const normalizedCandidate = normalizeSkill(candidate, aliases);\n return targetSkills.has(normalizedCandidate);\n}\n\n/** Derive a flat canonical->aliases map from a keyword registry (back-compat with SkillAliases). */\nexport function deriveSkillAliases(registry: KeywordRegistry): SkillAliases {\n const aliases: SkillAliases = {};\n for (const entry of registry) {\n aliases[entry.canonical] = entry.aliases;\n }\n return aliases;\n}\n\n/** Derive a canonical->category lookup from a keyword registry. */\nexport function buildCategoryIndex(registry: KeywordRegistry): Map<string, KeywordCategory> {\n const index = new Map<string, KeywordCategory>();\n for (const entry of registry) {\n index.set(entry.canonical.toLowerCase(), entry.category);\n }\n return index;\n}\n\n/** Merge two registries by canonical term; entries in `overrides` win. */\nexport function mergeKeywordRegistries(base: KeywordRegistry, overrides: KeywordRegistry): KeywordRegistry {\n const byCanonical = new Map<string, KeywordRegistry[number]>();\n for (const entry of base) byCanonical.set(entry.canonical.toLowerCase(), entry);\n for (const entry of overrides) byCanonical.set(entry.canonical.toLowerCase(), entry);\n return [...byCanonical.values()];\n}\n","import { ATSProfile, KeywordRegistry } from \"../types/config\";\nimport { deriveSkillAliases } from \"../utils/skills\";\n\n// ponytail: broad seed set per category, still not an exhaustive taxonomy — grow on demand.\nexport const defaultKeywordRegistry: KeywordRegistry = [\n // languages / frameworks\n // ponytail: \"node\" split from javascript — Node.js runtime !== JS language\n { canonical: \"javascript\", aliases: [\"js\"], category: \"technical\" },\n { canonical: \"node\", aliases: [\"node.js\", \"nodejs\"], category: \"technical\" },\n { canonical: \"typescript\", aliases: [\"ts\"], category: \"technical\" },\n { canonical: \"react\", aliases: [\"reactjs\", \"react.js\"], category: \"technical\" },\n { canonical: \"angular\", aliases: [\"angularjs\"], category: \"technical\" },\n { canonical: \"vue\", aliases: [\"vue.js\", \"vuejs\"], category: \"technical\" },\n { canonical: \"svelte\", aliases: [], category: \"technical\" },\n { canonical: \"next.js\", aliases: [\"nextjs\"], category: \"technical\" },\n { canonical: \"c++\", aliases: [\"cpp\"], category: \"technical\" },\n { canonical: \"c#\", aliases: [\"csharp\", \".net\"], category: \"technical\" },\n { canonical: \"java\", aliases: [], category: \"technical\" },\n { canonical: \"python\", aliases: [\"py\"], category: \"technical\" },\n { canonical: \"go\", aliases: [\"golang\"], category: \"technical\" },\n { canonical: \"rust\", aliases: [], category: \"technical\" },\n { canonical: \"ruby\", aliases: [\"ruby on rails\", \"rails\"], category: \"technical\" },\n { canonical: \"php\", aliases: [], category: \"technical\" },\n { canonical: \"swift\", aliases: [], category: \"technical\" },\n { canonical: \"kotlin\", aliases: [], category: \"technical\" },\n { canonical: \"scala\", aliases: [], category: \"technical\" },\n { canonical: \"html\", aliases: [\"html5\"], category: \"technical\" },\n { canonical: \"css\", aliases: [\"css3\"], category: \"technical\" },\n { canonical: \"ios development\", aliases: [\"ios\"], category: \"technical\" },\n { canonical: \"android development\", aliases: [\"android\"], category: \"technical\" },\n { canonical: \"react native\", aliases: [], category: \"technical\" },\n { canonical: \"flutter\", aliases: [], category: \"technical\" },\n { canonical: \"machine learning\", aliases: [\"ml\"], category: \"technical\" },\n { canonical: \"deep learning\", aliases: [], category: \"technical\" },\n { canonical: \"natural language processing\", aliases: [\"nlp\"], category: \"technical\" },\n // tools / platforms / infra\n { canonical: \"sql\", aliases: [\"postgres\", \"mysql\", \"sqlite\"], category: \"tool\" },\n { canonical: \"graphql\", aliases: [\"gql\"], category: \"tool\" },\n { canonical: \"aws\", aliases: [\"amazon web services\"], category: \"tool\" },\n { canonical: \"azure\", aliases: [\"microsoft azure\"], category: \"tool\" },\n { canonical: \"gcp\", aliases: [\"google cloud\", \"google cloud platform\"], category: \"tool\" },\n { canonical: \"docker\", aliases: [\"containers\"], category: \"tool\" },\n { canonical: \"kubernetes\", aliases: [\"k8s\"], category: \"tool\" },\n { canonical: \"terraform\", aliases: [], category: \"tool\" },\n { canonical: \"ansible\", aliases: [], category: \"tool\" },\n { canonical: \"jenkins\", aliases: [], category: \"tool\" },\n { canonical: \"git\", aliases: [\"github\", \"gitlab\"], category: \"tool\" },\n { canonical: \"jira\", aliases: [], category: \"tool\" },\n { canonical: \"confluence\", aliases: [], category: \"tool\" },\n { canonical: \"pytorch\", aliases: [\"torch\"], category: \"tool\" },\n { canonical: \"tensorflow\", aliases: [\"tf\"], category: \"tool\" },\n { canonical: \"scikit-learn\", aliases: [\"sklearn\"], category: \"tool\" },\n { canonical: \"pandas\", aliases: [], category: \"tool\" },\n { canonical: \"numpy\", aliases: [], category: \"tool\" },\n { canonical: \"fastapi\", aliases: [], category: \"tool\" },\n { canonical: \"flask\", aliases: [], category: \"tool\" },\n { canonical: \"django\", aliases: [], category: \"tool\" },\n { canonical: \"kafka\", aliases: [], category: \"tool\" },\n { canonical: \"redis\", aliases: [], category: \"tool\" },\n { canonical: \"elasticsearch\", aliases: [\"elastic\"], category: \"tool\" },\n { canonical: \"spark\", aliases: [\"apache spark\"], category: \"tool\" },\n { canonical: \"tableau\", aliases: [], category: \"tool\" },\n { canonical: \"power bi\", aliases: [\"powerbi\"], category: \"tool\" },\n { canonical: \"excel\", aliases: [\"microsoft excel\", \"ms excel\"], category: \"tool\" },\n { canonical: \"salesforce\", aliases: [], category: \"tool\" },\n { canonical: \"hubspot\", aliases: [], category: \"tool\" },\n { canonical: \"sap\", aliases: [], category: \"tool\" },\n { canonical: \"quickbooks\", aliases: [], category: \"tool\" },\n { canonical: \"workday\", aliases: [], category: \"tool\" },\n { canonical: \"zendesk\", aliases: [], category: \"tool\" },\n { canonical: \"servicenow\", aliases: [], category: \"tool\" },\n { canonical: \"figma\", aliases: [], category: \"tool\" },\n { canonical: \"photoshop\", aliases: [\"adobe photoshop\"], category: \"tool\" },\n { canonical: \"illustrator\", aliases: [\"adobe illustrator\"], category: \"tool\" },\n { canonical: \"autocad\", aliases: [], category: \"tool\" },\n // engineering concepts\n { canonical: \"accessibility\", aliases: [\"a11y\"], category: \"concept\" },\n { canonical: \"frontend\", aliases: [\"front-end\"], category: \"concept\" },\n { canonical: \"backend\", aliases: [\"back-end\"], category: \"concept\" },\n { canonical: \"security\", aliases: [\"cybersecurity\"], category: \"concept\" },\n { canonical: \"testing\", aliases: [\"unittest\", \"pytest\"], category: \"concept\" },\n { canonical: \"microservices\", aliases: [], category: \"concept\" },\n { canonical: \"agile\", aliases: [\"scrum\"], category: \"concept\" },\n { canonical: \"kanban\", aliases: [], category: \"concept\" },\n { canonical: \"blockchain\", aliases: [], category: \"concept\" },\n { canonical: \"devops\", aliases: [], category: \"concept\" },\n { canonical: \"ci/cd\", aliases: [\"continuous integration\", \"continuous deployment\"], category: \"concept\" },\n { canonical: \"rest api\", aliases: [\"restful api\", \"rest apis\"], category: \"concept\" },\n { canonical: \"design patterns\", aliases: [], category: \"concept\" },\n { canonical: \"data structures\", aliases: [], category: \"concept\" },\n { canonical: \"algorithms\", aliases: [], category: \"concept\" },\n { canonical: \"cloud computing\", aliases: [], category: \"concept\" },\n { canonical: \"system design\", aliases: [], category: \"concept\" },\n { canonical: \"tdd\", aliases: [\"test driven development\", \"test-driven development\"], category: \"concept\" },\n { canonical: \"ux design\", aliases: [\"user experience\"], category: \"concept\" },\n { canonical: \"ui design\", aliases: [\"user interface design\"], category: \"concept\" },\n { canonical: \"project management\", aliases: [], category: \"concept\" },\n { canonical: \"change management\", aliases: [], category: \"concept\" },\n { canonical: \"risk management\", aliases: [], category: \"concept\" },\n { canonical: \"quality assurance\", aliases: [\"qa\"], category: \"concept\" },\n // product / data domain\n { canonical: \"roadmap\", aliases: [], category: \"domain\" },\n { canonical: \"stakeholder management\", aliases: [], category: \"domain\" },\n { canonical: \"prioritization\", aliases: [], category: \"domain\" },\n { canonical: \"a/b testing\", aliases: [\"ab testing\"], category: \"domain\" },\n { canonical: \"analytics\", aliases: [], category: \"domain\" },\n { canonical: \"statistics\", aliases: [\"stats\"], category: \"domain\" },\n { canonical: \"data visualization\", aliases: [], category: \"domain\" },\n // finance / accounting domain\n { canonical: \"financial analysis\", aliases: [], category: \"domain\" },\n { canonical: \"budgeting\", aliases: [], category: \"domain\" },\n { canonical: \"forecasting\", aliases: [], category: \"domain\" },\n { canonical: \"bookkeeping\", aliases: [], category: \"domain\" },\n { canonical: \"accounts payable\", aliases: [\"ap\"], category: \"domain\" },\n { canonical: \"accounts receivable\", aliases: [\"ar\"], category: \"domain\" },\n { canonical: \"payroll\", aliases: [], category: \"domain\" },\n { canonical: \"auditing\", aliases: [\"audit\"], category: \"domain\" },\n { canonical: \"tax preparation\", aliases: [], category: \"domain\" },\n { canonical: \"gaap\", aliases: [], category: \"domain\" },\n // sales / account management domain\n { canonical: \"lead generation\", aliases: [], category: \"domain\" },\n { canonical: \"account management\", aliases: [], category: \"domain\" },\n { canonical: \"crm\", aliases: [\"customer relationship management\"], category: \"domain\" },\n { canonical: \"sales pipeline\", aliases: [], category: \"domain\" },\n { canonical: \"cold calling\", aliases: [], category: \"domain\" },\n { canonical: \"upselling\", aliases: [\"cross-selling\"], category: \"domain\" },\n { canonical: \"customer retention\", aliases: [], category: \"domain\" },\n // human resources domain\n { canonical: \"recruiting\", aliases: [\"talent acquisition\"], category: \"domain\" },\n { canonical: \"onboarding\", aliases: [], category: \"domain\" },\n { canonical: \"employee relations\", aliases: [], category: \"domain\" },\n { canonical: \"benefits administration\", aliases: [], category: \"domain\" },\n { canonical: \"performance management\", aliases: [], category: \"domain\" },\n // healthcare domain\n { canonical: \"patient care\", aliases: [], category: \"domain\" },\n { canonical: \"clinical documentation\", aliases: [], category: \"domain\" },\n { canonical: \"hipaa\", aliases: [], category: \"domain\" },\n { canonical: \"electronic health records\", aliases: [\"ehr\", \"emr\"], category: \"domain\" },\n { canonical: \"medical billing\", aliases: [], category: \"domain\" },\n // legal domain\n { canonical: \"contract review\", aliases: [], category: \"domain\" },\n { canonical: \"legal research\", aliases: [], category: \"domain\" },\n { canonical: \"litigation\", aliases: [], category: \"domain\" },\n { canonical: \"regulatory compliance\", aliases: [\"compliance\"], category: \"domain\" },\n { canonical: \"due diligence\", aliases: [], category: \"domain\" },\n // education domain\n { canonical: \"curriculum development\", aliases: [], category: \"domain\" },\n { canonical: \"lesson planning\", aliases: [], category: \"domain\" },\n { canonical: \"classroom management\", aliases: [], category: \"domain\" },\n { canonical: \"instructional design\", aliases: [], category: \"domain\" },\n // operations / supply chain domain\n { canonical: \"supply chain management\", aliases: [\"supply chain\"], category: \"domain\" },\n { canonical: \"inventory management\", aliases: [], category: \"domain\" },\n { canonical: \"procurement\", aliases: [], category: \"domain\" },\n { canonical: \"vendor management\", aliases: [], category: \"domain\" },\n { canonical: \"logistics\", aliases: [], category: \"domain\" },\n // customer service domain\n { canonical: \"customer support\", aliases: [\"customer service\"], category: \"domain\" },\n { canonical: \"technical support\", aliases: [], category: \"domain\" },\n { canonical: \"conflict resolution\", aliases: [], category: \"domain\" },\n // soft skills\n { canonical: \"communication\", aliases: [], category: \"soft\" },\n { canonical: \"leadership\", aliases: [], category: \"soft\" },\n { canonical: \"teamwork\", aliases: [\"collaboration\"], category: \"soft\" },\n { canonical: \"problem solving\", aliases: [\"problem-solving\"], category: \"soft\" },\n { canonical: \"adaptability\", aliases: [\"flexibility\"], category: \"soft\" },\n { canonical: \"time management\", aliases: [], category: \"soft\" },\n { canonical: \"critical thinking\", aliases: [], category: \"soft\" },\n { canonical: \"creativity\", aliases: [], category: \"soft\" },\n { canonical: \"attention to detail\", aliases: [], category: \"soft\" },\n { canonical: \"decision making\", aliases: [\"decision-making\"], category: \"soft\" },\n { canonical: \"emotional intelligence\", aliases: [], category: \"soft\" },\n { canonical: \"negotiation\", aliases: [], category: \"soft\" },\n { canonical: \"organization\", aliases: [\"organizational skills\"], category: \"soft\" },\n { canonical: \"public speaking\", aliases: [\"presentation skills\"], category: \"soft\" },\n { canonical: \"mentoring\", aliases: [\"coaching\"], category: \"soft\" },\n { canonical: \"interpersonal skills\", aliases: [], category: \"soft\" },\n { canonical: \"work ethic\", aliases: [], category: \"soft\" },\n // marketing\n { canonical: \"seo\", aliases: [\"search engine optimization\"], category: \"marketing\" },\n { canonical: \"branding\", aliases: [\"brand strategy\"], category: \"marketing\" },\n { canonical: \"campaign management\", aliases: [], category: \"marketing\" },\n { canonical: \"content marketing\", aliases: [], category: \"marketing\" },\n { canonical: \"social media marketing\", aliases: [\"social media\"], category: \"marketing\" },\n { canonical: \"email marketing\", aliases: [], category: \"marketing\" },\n { canonical: \"digital marketing\", aliases: [], category: \"marketing\" },\n { canonical: \"copywriting\", aliases: [], category: \"marketing\" },\n { canonical: \"market research\", aliases: [], category: \"marketing\" },\n { canonical: \"ppc\", aliases: [\"pay-per-click\", \"google ads\"], category: \"marketing\" },\n { canonical: \"conversion rate optimization\", aliases: [\"cro\"], category: \"marketing\" },\n { canonical: \"public relations\", aliases: [\"pr\"], category: \"marketing\" },\n];\n\nexport const defaultSkillAliases = deriveSkillAliases(defaultKeywordRegistry);\n\nexport const softwareEngineerProfile: ATSProfile = {\n name: \"software-engineer\",\n mandatorySkills: [\"javascript\", \"typescript\", \"react\", \"node\"],\n optionalSkills: [\"graphql\", \"sql\", \"docker\"],\n minExperience: 3,\n};\n\nexport const dataScientistProfile: ATSProfile = {\n name: \"data-scientist\",\n mandatorySkills: [\"python\", \"sql\", \"statistics\"],\n optionalSkills: [\"pandas\", \"numpy\", \"pytorch\", \"tensorflow\"],\n minExperience: 2,\n};\n\nexport const productManagerProfile: ATSProfile = {\n name: \"product-manager\",\n mandatorySkills: [\"roadmap\", \"stakeholder management\", \"prioritization\"],\n optionalSkills: [\"a/b testing\", \"analytics\", \"sql\"],\n minExperience: 3,\n};\n\nexport const defaultProfiles: ATSProfile[] = [\n softwareEngineerProfile,\n dataScientistProfile,\n productManagerProfile,\n];\n","/**\n * English keyword registry (the library's default). Re-exported as its own\n * subpath so language packs are imported uniformly:\n *\n * import en from \"@pranavraut033/ats-checker/en\";\n * analyzeResume({ ..., config: { keywordRegistry: en } });\n */\nimport { defaultKeywordRegistry } from \"../../profiles\";\nimport type { KeywordRegistry } from \"../../types/config\";\n\nconst en: KeywordRegistry = defaultKeywordRegistry;\n\nexport default en;\nexport { en as keywordRegistry };\n"]}
1
+ {"version":3,"sources":["../../../src/utils/skills.ts","../../../src/profiles/index.ts","../../../src/lang/en/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import { fuzzyEqual, stem } from \"./match\";\nimport { unique } from \"./text\";\nimport {\n KeywordCategory,\n KeywordRegistry,\n SkillAliases,\n} from \"../types/config\";\n\n// Map lookup by default; stem/fuzzy fallback is opt-in (see NormalizeSkillOptions) so\n// existing exact-match callers/tests keep their current behavior until SCORING opts in.\nconst aliasIndexCache = new WeakMap<SkillAliases, Map<string, string>>();\n// Cache of stemmed-alias-key -> canonical, built lazily alongside the exact index so the\n// fuzzy fallback also stays a Map lookup (plus a bounded distance check) rather than a scan.\nconst stemIndexCache = new WeakMap<SkillAliases, Map<string, string>>();\n\nfunction getAliasIndex(aliases: SkillAliases): Map<string, string> {\n let index = aliasIndexCache.get(aliases);\n if (!index) {\n index = new Map();\n for (const [canonical, aliasList] of Object.entries(aliases)) {\n const lower = canonical.toLowerCase();\n index.set(lower, lower);\n for (const alias of aliasList) {\n index.set(alias.toLowerCase(), lower);\n }\n }\n aliasIndexCache.set(aliases, index);\n }\n return index;\n}\n\nfunction getStemIndex(aliases: SkillAliases): Map<string, string> {\n let index = stemIndexCache.get(aliases);\n if (!index) {\n index = new Map();\n for (const [key, canonical] of getAliasIndex(aliases)) {\n const stemmed = stem(key);\n // First writer wins so aliasing collisions stay deterministic across runs.\n if (!index.has(stemmed)) {\n index.set(stemmed, canonical);\n }\n }\n stemIndexCache.set(aliases, index);\n }\n return index;\n}\n\nexport interface NormalizeSkillOptions {\n /** Fall back to stemmed/fuzzy matching when the exact alias lookup misses. Default: false. */\n fuzzy?: boolean;\n /** Passed through to fuzzyEqual when fuzzy fallback is enabled. */\n maxDistance?: number;\n}\n\nexport function normalizeSkill(\n skill: string,\n aliases: SkillAliases,\n options?: NormalizeSkillOptions\n): string {\n const normalized = skill.trim().toLowerCase();\n const exact = getAliasIndex(aliases).get(normalized);\n if (exact) {\n return exact;\n }\n if (!options?.fuzzy) {\n return normalized;\n }\n\n const stemmed = stem(normalized);\n const stemIndex = getStemIndex(aliases);\n const stemHit = stemIndex.get(stemmed);\n if (stemHit) {\n return stemHit;\n }\n\n // Bounded fuzzy scan of alias keys, stem-first to skip obviously distant candidates\n // before paying for Levenshtein.\n for (const [key, canonical] of stemIndex) {\n if (fuzzyEqual(stemmed, key, { maxDistance: options.maxDistance })) {\n return canonical;\n }\n }\n return normalized;\n}\n\nexport function normalizeSkills(\n skills: string[],\n aliases: SkillAliases,\n options?: NormalizeSkillOptions\n): string[] {\n return unique(skills.map((skill) => normalizeSkill(skill, aliases, options)));\n}\n\nexport function skillMatched(\n candidate: string,\n targetSkills: Set<string>,\n aliases: SkillAliases,\n options?: NormalizeSkillOptions\n): boolean {\n const normalizedCandidate = normalizeSkill(candidate, aliases, options);\n return targetSkills.has(normalizedCandidate);\n}\n\n/** Derive a flat canonical->aliases map from a keyword registry (back-compat with SkillAliases). */\nexport function deriveSkillAliases(registry: KeywordRegistry): SkillAliases {\n const aliases: SkillAliases = {};\n for (const entry of registry) {\n aliases[entry.canonical] = entry.aliases;\n }\n return aliases;\n}\n\n/** Derive a canonical->category lookup from a keyword registry. */\nexport function buildCategoryIndex(\n registry: KeywordRegistry\n): Map<string, KeywordCategory> {\n const index = new Map<string, KeywordCategory>();\n for (const entry of registry) {\n index.set(entry.canonical.toLowerCase(), entry.category);\n }\n return index;\n}\n\n/** Merge two registries by canonical term; entries in `overrides` win. */\nexport function mergeKeywordRegistries(\n base: KeywordRegistry,\n overrides: KeywordRegistry\n): KeywordRegistry {\n const byCanonical = new Map<string, KeywordRegistry[number]>();\n for (const entry of base)\n byCanonical.set(entry.canonical.toLowerCase(), entry);\n for (const entry of overrides)\n byCanonical.set(entry.canonical.toLowerCase(), entry);\n return [...byCanonical.values()];\n}\n","import { ATSProfile, KeywordRegistry } from \"../types/config\";\nimport { deriveSkillAliases } from \"../utils/skills\";\n\n// ponytail: broad seed set per category, still not an exhaustive taxonomy — grow on demand.\nexport const defaultKeywordRegistry: KeywordRegistry = [\n // languages / frameworks\n // ponytail: \"node\" split from javascript — Node.js runtime !== JS language\n {\n canonical: \"javascript\",\n aliases: [\"js\", \"ecmascript\", \"es6\"],\n category: \"technical\",\n },\n { canonical: \"node\", aliases: [\"node.js\", \"nodejs\"], category: \"technical\" },\n { canonical: \"typescript\", aliases: [\"ts\"], category: \"technical\" },\n {\n canonical: \"react\",\n aliases: [\"reactjs\", \"react.js\"],\n category: \"technical\",\n },\n {\n canonical: \"angular\",\n aliases: [\"angularjs\", \"angular2+\"],\n category: \"technical\",\n },\n { canonical: \"vue\", aliases: [\"vue.js\", \"vuejs\"], category: \"technical\" },\n { canonical: \"svelte\", aliases: [\"sveltekit\"], category: \"technical\" },\n { canonical: \"next.js\", aliases: [\"nextjs\"], category: \"technical\" },\n { canonical: \"nuxt.js\", aliases: [\"nuxtjs\", \"nuxt\"], category: \"technical\" },\n { canonical: \"remix\", aliases: [], category: \"technical\" },\n { canonical: \"c++\", aliases: [\"cpp\"], category: \"technical\" },\n { canonical: \"c#\", aliases: [\"csharp\", \".net\"], category: \"technical\" },\n { canonical: \"java\", aliases: [], category: \"technical\" },\n { canonical: \"python\", aliases: [\"py\"], category: \"technical\" },\n { canonical: \"go\", aliases: [\"golang\"], category: \"technical\" },\n { canonical: \"rust\", aliases: [], category: \"technical\" },\n {\n canonical: \"ruby\",\n aliases: [\"ruby on rails\", \"rails\"],\n category: \"technical\",\n },\n { canonical: \"php\", aliases: [], category: \"technical\" },\n { canonical: \"swift\", aliases: [\"swiftui\"], category: \"technical\" },\n { canonical: \"kotlin\", aliases: [], category: \"technical\" },\n { canonical: \"scala\", aliases: [], category: \"technical\" },\n { canonical: \"perl\", aliases: [], category: \"technical\" },\n {\n canonical: \"r\",\n aliases: [\"r language\", \"r programming\"],\n category: \"technical\",\n },\n { canonical: \"matlab\", aliases: [], category: \"technical\" },\n {\n canonical: \"objective-c\",\n aliases: [\"objective c\", \"objc\"],\n category: \"technical\",\n },\n { canonical: \"dart\", aliases: [], category: \"technical\" },\n { canonical: \"elixir\", aliases: [], category: \"technical\" },\n { canonical: \"haskell\", aliases: [], category: \"technical\" },\n { canonical: \"html\", aliases: [\"html5\"], category: \"technical\" },\n { canonical: \"css\", aliases: [\"css3\"], category: \"technical\" },\n { canonical: \"sass\", aliases: [\"scss\"], category: \"technical\" },\n { canonical: \"less\", aliases: [], category: \"technical\" },\n {\n canonical: \"tailwind css\",\n aliases: [\"tailwind\", \"tailwindcss\"],\n category: \"technical\",\n },\n { canonical: \"bootstrap\", aliases: [], category: \"technical\" },\n { canonical: \"webassembly\", aliases: [\"wasm\"], category: \"technical\" },\n { canonical: \"ios development\", aliases: [\"ios\"], category: \"technical\" },\n {\n canonical: \"android development\",\n aliases: [\"android\"],\n category: \"technical\",\n },\n { canonical: \"react native\", aliases: [], category: \"technical\" },\n { canonical: \"flutter\", aliases: [], category: \"technical\" },\n { canonical: \"xamarin\", aliases: [], category: \"technical\" },\n { canonical: \"machine learning\", aliases: [\"ml\"], category: \"technical\" },\n { canonical: \"deep learning\", aliases: [\"dl\"], category: \"technical\" },\n {\n canonical: \"natural language processing\",\n aliases: [\"nlp\"],\n category: \"technical\",\n },\n { canonical: \"computer vision\", aliases: [\"cv\"], category: \"technical\" },\n {\n canonical: \"large language models\",\n aliases: [\"llm\", \"llms\"],\n category: \"technical\",\n },\n {\n canonical: \"generative ai\",\n aliases: [\"genai\", \"gen ai\"],\n category: \"technical\",\n },\n {\n canonical: \"reinforcement learning\",\n aliases: [\"rl\"],\n category: \"technical\",\n },\n {\n canonical: \"neural networks\",\n aliases: [\"neural network\"],\n category: \"technical\",\n },\n { canonical: \"data engineering\", aliases: [], category: \"technical\" },\n {\n canonical: \"data warehousing\",\n aliases: [\"data warehouse\"],\n category: \"technical\",\n },\n {\n canonical: \"etl\",\n aliases: [\"extract transform load\", \"elt\"],\n category: \"technical\",\n },\n { canonical: \"distributed systems\", aliases: [], category: \"technical\" },\n { canonical: \"embedded systems\", aliases: [], category: \"technical\" },\n {\n canonical: \"firmware development\",\n aliases: [\"firmware\"],\n category: \"technical\",\n },\n { canonical: \"game development\", aliases: [], category: \"technical\" },\n { canonical: \"unity\", aliases: [], category: \"technical\" },\n { canonical: \"unreal engine\", aliases: [\"unreal\"], category: \"technical\" },\n { canonical: \"web development\", aliases: [], category: \"technical\" },\n {\n canonical: \"full stack development\",\n aliases: [\"full-stack development\", \"full stack\"],\n category: \"technical\",\n },\n { canonical: \"api development\", aliases: [], category: \"technical\" },\n { canonical: \"grpc\", aliases: [], category: \"technical\" },\n { canonical: \"websockets\", aliases: [\"websocket\"], category: \"technical\" },\n { canonical: \"linux\", aliases: [], category: \"technical\" },\n { canonical: \"unix\", aliases: [], category: \"technical\" },\n {\n canonical: \"bash scripting\",\n aliases: [\"bash\", \"shell scripting\"],\n category: \"technical\",\n },\n { canonical: \"powershell\", aliases: [], category: \"technical\" },\n // tools / platforms / infra\n {\n canonical: \"sql\",\n aliases: [\"structured query language\"],\n category: \"tool\",\n },\n { canonical: \"postgresql\", aliases: [\"postgres\", \"psql\"], category: \"tool\" },\n { canonical: \"mysql\", aliases: [], category: \"tool\" },\n { canonical: \"sqlite\", aliases: [], category: \"tool\" },\n {\n canonical: \"microsoft sql server\",\n aliases: [\"mssql\", \"sql server\", \"t-sql\"],\n category: \"tool\",\n },\n {\n canonical: \"oracle database\",\n aliases: [\"oracle db\", \"oracle\"],\n category: \"tool\",\n },\n { canonical: \"mongodb\", aliases: [\"mongo\"], category: \"tool\" },\n { canonical: \"cassandra\", aliases: [\"apache cassandra\"], category: \"tool\" },\n { canonical: \"dynamodb\", aliases: [\"amazon dynamodb\"], category: \"tool\" },\n { canonical: \"couchbase\", aliases: [], category: \"tool\" },\n { canonical: \"neo4j\", aliases: [], category: \"tool\" },\n { canonical: \"firebase\", aliases: [], category: \"tool\" },\n { canonical: \"supabase\", aliases: [], category: \"tool\" },\n { canonical: \"graphql\", aliases: [\"gql\"], category: \"tool\" },\n { canonical: \"aws\", aliases: [\"amazon web services\"], category: \"tool\" },\n { canonical: \"amazon ec2\", aliases: [\"ec2\"], category: \"tool\" },\n { canonical: \"amazon s3\", aliases: [\"s3\"], category: \"tool\" },\n { canonical: \"amazon rds\", aliases: [\"rds\"], category: \"tool\" },\n { canonical: \"aws lambda\", aliases: [\"lambda\"], category: \"tool\" },\n { canonical: \"amazon cloudfront\", aliases: [\"cloudfront\"], category: \"tool\" },\n { canonical: \"amazon sqs\", aliases: [\"sqs\"], category: \"tool\" },\n { canonical: \"amazon sns\", aliases: [\"sns\"], category: \"tool\" },\n { canonical: \"azure\", aliases: [\"microsoft azure\"], category: \"tool\" },\n { canonical: \"azure devops\", aliases: [], category: \"tool\" },\n { canonical: \"azure functions\", aliases: [], category: \"tool\" },\n {\n canonical: \"google cloud platform\",\n aliases: [\"gcp\", \"google cloud\"],\n category: \"tool\",\n },\n { canonical: \"google bigquery\", aliases: [\"bigquery\"], category: \"tool\" },\n { canonical: \"google kubernetes engine\", aliases: [\"gke\"], category: \"tool\" },\n {\n canonical: \"docker\",\n aliases: [\"containers\", \"containerization\"],\n category: \"tool\",\n },\n { canonical: \"kubernetes\", aliases: [\"k8s\"], category: \"tool\" },\n { canonical: \"helm\", aliases: [], category: \"tool\" },\n { canonical: \"terraform\", aliases: [], category: \"tool\" },\n { canonical: \"pulumi\", aliases: [], category: \"tool\" },\n { canonical: \"ansible\", aliases: [], category: \"tool\" },\n { canonical: \"puppet\", aliases: [], category: \"tool\" },\n { canonical: \"chef\", aliases: [], category: \"tool\" },\n { canonical: \"jenkins\", aliases: [], category: \"tool\" },\n { canonical: \"circleci\", aliases: [\"circle ci\"], category: \"tool\" },\n { canonical: \"github actions\", aliases: [], category: \"tool\" },\n { canonical: \"gitlab ci\", aliases: [\"gitlab ci/cd\"], category: \"tool\" },\n { canonical: \"travis ci\", aliases: [], category: \"tool\" },\n {\n canonical: \"git\",\n aliases: [\"github\", \"gitlab\", \"bitbucket\"],\n category: \"tool\",\n },\n { canonical: \"jira\", aliases: [], category: \"tool\" },\n { canonical: \"confluence\", aliases: [], category: \"tool\" },\n { canonical: \"trello\", aliases: [], category: \"tool\" },\n { canonical: \"asana\", aliases: [], category: \"tool\" },\n { canonical: \"monday.com\", aliases: [\"monday\"], category: \"tool\" },\n { canonical: \"notion\", aliases: [], category: \"tool\" },\n { canonical: \"linear\", aliases: [], category: \"tool\" },\n { canonical: \"slack\", aliases: [], category: \"tool\" },\n { canonical: \"microsoft teams\", aliases: [\"ms teams\"], category: \"tool\" },\n { canonical: \"pytorch\", aliases: [\"torch\"], category: \"tool\" },\n { canonical: \"tensorflow\", aliases: [\"tf\"], category: \"tool\" },\n { canonical: \"keras\", aliases: [], category: \"tool\" },\n { canonical: \"scikit-learn\", aliases: [\"sklearn\"], category: \"tool\" },\n { canonical: \"pandas\", aliases: [], category: \"tool\" },\n { canonical: \"numpy\", aliases: [], category: \"tool\" },\n {\n canonical: \"hugging face\",\n aliases: [\"huggingface\", \"transformers\"],\n category: \"tool\",\n },\n { canonical: \"langchain\", aliases: [], category: \"tool\" },\n { canonical: \"openai api\", aliases: [\"openai\", \"gpt api\"], category: \"tool\" },\n { canonical: \"jupyter\", aliases: [\"jupyter notebook\"], category: \"tool\" },\n { canonical: \"fastapi\", aliases: [], category: \"tool\" },\n { canonical: \"flask\", aliases: [], category: \"tool\" },\n { canonical: \"django\", aliases: [], category: \"tool\" },\n {\n canonical: \"express.js\",\n aliases: [\"express\", \"expressjs\"],\n category: \"tool\",\n },\n { canonical: \"spring boot\", aliases: [\"spring\"], category: \"tool\" },\n { canonical: \"laravel\", aliases: [], category: \"tool\" },\n { canonical: \"kafka\", aliases: [\"apache kafka\"], category: \"tool\" },\n { canonical: \"rabbitmq\", aliases: [], category: \"tool\" },\n { canonical: \"redis\", aliases: [], category: \"tool\" },\n { canonical: \"memcached\", aliases: [], category: \"tool\" },\n { canonical: \"elasticsearch\", aliases: [\"elastic\"], category: \"tool\" },\n { canonical: \"logstash\", aliases: [], category: \"tool\" },\n { canonical: \"kibana\", aliases: [], category: \"tool\" },\n { canonical: \"grafana\", aliases: [], category: \"tool\" },\n { canonical: \"prometheus\", aliases: [], category: \"tool\" },\n { canonical: \"datadog\", aliases: [], category: \"tool\" },\n { canonical: \"new relic\", aliases: [], category: \"tool\" },\n { canonical: \"splunk\", aliases: [], category: \"tool\" },\n {\n canonical: \"spark\",\n aliases: [\"apache spark\", \"pyspark\"],\n category: \"tool\",\n },\n { canonical: \"hadoop\", aliases: [\"apache hadoop\"], category: \"tool\" },\n { canonical: \"airflow\", aliases: [\"apache airflow\"], category: \"tool\" },\n { canonical: \"dbt\", aliases: [\"data build tool\"], category: \"tool\" },\n { canonical: \"snowflake\", aliases: [], category: \"tool\" },\n { canonical: \"databricks\", aliases: [], category: \"tool\" },\n { canonical: \"looker\", aliases: [], category: \"tool\" },\n { canonical: \"tableau\", aliases: [], category: \"tool\" },\n { canonical: \"power bi\", aliases: [\"powerbi\"], category: \"tool\" },\n {\n canonical: \"excel\",\n aliases: [\"microsoft excel\", \"ms excel\"],\n category: \"tool\",\n },\n { canonical: \"google sheets\", aliases: [], category: \"tool\" },\n { canonical: \"spss\", aliases: [], category: \"tool\" },\n { canonical: \"sas\", aliases: [], category: \"tool\" },\n { canonical: \"salesforce\", aliases: [], category: \"tool\" },\n { canonical: \"hubspot\", aliases: [], category: \"tool\" },\n { canonical: \"marketo\", aliases: [], category: \"tool\" },\n { canonical: \"mailchimp\", aliases: [], category: \"tool\" },\n { canonical: \"google analytics\", aliases: [\"ga4\"], category: \"tool\" },\n { canonical: \"google tag manager\", aliases: [\"gtm\"], category: \"tool\" },\n { canonical: \"sap\", aliases: [], category: \"tool\" },\n { canonical: \"quickbooks\", aliases: [], category: \"tool\" },\n { canonical: \"netsuite\", aliases: [], category: \"tool\" },\n { canonical: \"workday\", aliases: [], category: \"tool\" },\n { canonical: \"zendesk\", aliases: [], category: \"tool\" },\n { canonical: \"servicenow\", aliases: [], category: \"tool\" },\n { canonical: \"freshdesk\", aliases: [], category: \"tool\" },\n { canonical: \"figma\", aliases: [], category: \"tool\" },\n { canonical: \"sketch\", aliases: [], category: \"tool\" },\n { canonical: \"adobe xd\", aliases: [\"xd\"], category: \"tool\" },\n { canonical: \"invision\", aliases: [], category: \"tool\" },\n { canonical: \"photoshop\", aliases: [\"adobe photoshop\"], category: \"tool\" },\n {\n canonical: \"illustrator\",\n aliases: [\"adobe illustrator\"],\n category: \"tool\",\n },\n {\n canonical: \"after effects\",\n aliases: [\"adobe after effects\"],\n category: \"tool\",\n },\n { canonical: \"premiere pro\", aliases: [\"adobe premiere\"], category: \"tool\" },\n { canonical: \"autocad\", aliases: [], category: \"tool\" },\n { canonical: \"solidworks\", aliases: [], category: \"tool\" },\n { canonical: \"postman\", aliases: [], category: \"tool\" },\n { canonical: \"selenium\", aliases: [], category: \"tool\" },\n { canonical: \"cypress\", aliases: [], category: \"tool\" },\n { canonical: \"playwright\", aliases: [], category: \"tool\" },\n { canonical: \"jest\", aliases: [], category: \"tool\" },\n { canonical: \"mocha\", aliases: [], category: \"tool\" },\n { canonical: \"junit\", aliases: [], category: \"tool\" },\n // engineering concepts\n { canonical: \"accessibility\", aliases: [\"a11y\"], category: \"concept\" },\n { canonical: \"frontend\", aliases: [\"front-end\"], category: \"concept\" },\n { canonical: \"backend\", aliases: [\"back-end\"], category: \"concept\" },\n {\n canonical: \"security\",\n aliases: [\"cybersecurity\", \"infosec\"],\n category: \"concept\",\n },\n {\n canonical: \"application security\",\n aliases: [\"appsec\"],\n category: \"concept\",\n },\n {\n canonical: \"penetration testing\",\n aliases: [\"pentesting\", \"pen testing\"],\n category: \"concept\",\n },\n { canonical: \"vulnerability assessment\", aliases: [], category: \"concept\" },\n {\n canonical: \"identity and access management\",\n aliases: [\"iam\"],\n category: \"concept\",\n },\n { canonical: \"zero trust\", aliases: [], category: \"concept\" },\n { canonical: \"encryption\", aliases: [], category: \"concept\" },\n {\n canonical: \"testing\",\n aliases: [\"unittest\", \"pytest\"],\n category: \"concept\",\n },\n { canonical: \"unit testing\", aliases: [], category: \"concept\" },\n { canonical: \"integration testing\", aliases: [], category: \"concept\" },\n {\n canonical: \"end-to-end testing\",\n aliases: [\"e2e testing\"],\n category: \"concept\",\n },\n { canonical: \"regression testing\", aliases: [], category: \"concept\" },\n { canonical: \"microservices\", aliases: [], category: \"concept\" },\n {\n canonical: \"monolithic architecture\",\n aliases: [\"monolith\"],\n category: \"concept\",\n },\n {\n canonical: \"event-driven architecture\",\n aliases: [\"event driven architecture\"],\n category: \"concept\",\n },\n {\n canonical: \"serverless\",\n aliases: [\"serverless architecture\"],\n category: \"concept\",\n },\n { canonical: \"agile\", aliases: [], category: \"concept\" },\n { canonical: \"scrum\", aliases: [], category: \"concept\" },\n { canonical: \"kanban\", aliases: [], category: \"concept\" },\n { canonical: \"waterfall\", aliases: [], category: \"concept\" },\n { canonical: \"sprint planning\", aliases: [], category: \"concept\" },\n { canonical: \"blockchain\", aliases: [], category: \"concept\" },\n { canonical: \"smart contracts\", aliases: [], category: \"concept\" },\n { canonical: \"devops\", aliases: [], category: \"concept\" },\n {\n canonical: \"site reliability engineering\",\n aliases: [\"sre\"],\n category: \"concept\",\n },\n {\n canonical: \"infrastructure as code\",\n aliases: [\"iac\"],\n category: \"concept\",\n },\n {\n canonical: \"ci/cd\",\n aliases: [\n \"continuous integration\",\n \"continuous deployment\",\n \"continuous delivery\",\n ],\n category: \"concept\",\n },\n {\n canonical: \"rest api\",\n aliases: [\"restful api\", \"rest apis\"],\n category: \"concept\",\n },\n { canonical: \"api design\", aliases: [], category: \"concept\" },\n { canonical: \"design patterns\", aliases: [], category: \"concept\" },\n { canonical: \"data structures\", aliases: [], category: \"concept\" },\n { canonical: \"algorithms\", aliases: [], category: \"concept\" },\n {\n canonical: \"object-oriented programming\",\n aliases: [\"oop\", \"object oriented programming\"],\n category: \"concept\",\n },\n { canonical: \"functional programming\", aliases: [], category: \"concept\" },\n { canonical: \"cloud computing\", aliases: [], category: \"concept\" },\n { canonical: \"cloud migration\", aliases: [], category: \"concept\" },\n { canonical: \"system design\", aliases: [], category: \"concept\" },\n { canonical: \"high availability\", aliases: [], category: \"concept\" },\n { canonical: \"scalability\", aliases: [], category: \"concept\" },\n { canonical: \"load balancing\", aliases: [], category: \"concept\" },\n { canonical: \"caching\", aliases: [], category: \"concept\" },\n {\n canonical: \"tdd\",\n aliases: [\"test driven development\", \"test-driven development\"],\n category: \"concept\",\n },\n {\n canonical: \"bdd\",\n aliases: [\"behavior driven development\", \"behavior-driven development\"],\n category: \"concept\",\n },\n { canonical: \"code review\", aliases: [\"code reviews\"], category: \"concept\" },\n { canonical: \"pair programming\", aliases: [], category: \"concept\" },\n { canonical: \"ux design\", aliases: [\"user experience\"], category: \"concept\" },\n {\n canonical: \"ui design\",\n aliases: [\"user interface design\"],\n category: \"concept\",\n },\n { canonical: \"user research\", aliases: [], category: \"concept\" },\n { canonical: \"wireframing\", aliases: [], category: \"concept\" },\n { canonical: \"prototyping\", aliases: [], category: \"concept\" },\n { canonical: \"design systems\", aliases: [], category: \"concept\" },\n { canonical: \"responsive design\", aliases: [], category: \"concept\" },\n { canonical: \"project management\", aliases: [], category: \"concept\" },\n { canonical: \"program management\", aliases: [], category: \"concept\" },\n { canonical: \"change management\", aliases: [], category: \"concept\" },\n { canonical: \"risk management\", aliases: [], category: \"concept\" },\n { canonical: \"quality assurance\", aliases: [\"qa\"], category: \"concept\" },\n { canonical: \"data privacy\", aliases: [], category: \"concept\" },\n { canonical: \"version control\", aliases: [], category: \"concept\" },\n {\n canonical: \"documentation\",\n aliases: [\"technical documentation\"],\n category: \"concept\",\n },\n { canonical: \"requirements gathering\", aliases: [], category: \"concept\" },\n {\n canonical: \"business process improvement\",\n aliases: [],\n category: \"concept\",\n },\n { canonical: \"root cause analysis\", aliases: [], category: \"concept\" },\n { canonical: \"lean\", aliases: [\"lean methodology\"], category: \"concept\" },\n { canonical: \"six sigma\", aliases: [], category: \"concept\" },\n // product / data domain\n { canonical: \"roadmap\", aliases: [\"product roadmap\"], category: \"domain\" },\n { canonical: \"stakeholder management\", aliases: [], category: \"domain\" },\n { canonical: \"prioritization\", aliases: [], category: \"domain\" },\n { canonical: \"a/b testing\", aliases: [\"ab testing\"], category: \"domain\" },\n { canonical: \"analytics\", aliases: [], category: \"domain\" },\n { canonical: \"statistics\", aliases: [\"stats\"], category: \"domain\" },\n { canonical: \"data visualization\", aliases: [], category: \"domain\" },\n { canonical: \"data governance\", aliases: [], category: \"domain\" },\n { canonical: \"product management\", aliases: [], category: \"domain\" },\n { canonical: \"product strategy\", aliases: [], category: \"domain\" },\n {\n canonical: \"go-to-market strategy\",\n aliases: [\"go to market\", \"gtm strategy\"],\n category: \"domain\",\n },\n {\n canonical: \"user story writing\",\n aliases: [\"user stories\"],\n category: \"domain\",\n },\n { canonical: \"competitive analysis\", aliases: [], category: \"domain\" },\n {\n canonical: \"okrs\",\n aliases: [\"objectives and key results\"],\n category: \"domain\",\n },\n {\n canonical: \"kpis\",\n aliases: [\"key performance indicators\"],\n category: \"domain\",\n },\n // finance / accounting domain\n { canonical: \"financial analysis\", aliases: [], category: \"domain\" },\n { canonical: \"financial modeling\", aliases: [], category: \"domain\" },\n { canonical: \"budgeting\", aliases: [], category: \"domain\" },\n { canonical: \"forecasting\", aliases: [], category: \"domain\" },\n { canonical: \"bookkeeping\", aliases: [], category: \"domain\" },\n { canonical: \"accounts payable\", aliases: [\"ap\"], category: \"domain\" },\n { canonical: \"accounts receivable\", aliases: [\"ar\"], category: \"domain\" },\n { canonical: \"payroll\", aliases: [], category: \"domain\" },\n { canonical: \"auditing\", aliases: [\"audit\"], category: \"domain\" },\n { canonical: \"tax preparation\", aliases: [], category: \"domain\" },\n { canonical: \"gaap\", aliases: [], category: \"domain\" },\n { canonical: \"ifrs\", aliases: [], category: \"domain\" },\n {\n canonical: \"reconciliation\",\n aliases: [\"account reconciliation\"],\n category: \"domain\",\n },\n { canonical: \"general ledger\", aliases: [], category: \"domain\" },\n { canonical: \"cost accounting\", aliases: [], category: \"domain\" },\n {\n canonical: \"mergers and acquisitions\",\n aliases: [\"m&a\"],\n category: \"domain\",\n },\n { canonical: \"investment banking\", aliases: [], category: \"domain\" },\n { canonical: \"portfolio management\", aliases: [], category: \"domain\" },\n { canonical: \"equity research\", aliases: [], category: \"domain\" },\n {\n canonical: \"treasury management\",\n aliases: [\"treasury\"],\n category: \"domain\",\n },\n { canonical: \"fintech\", aliases: [], category: \"domain\" },\n {\n canonical: \"payments processing\",\n aliases: [\"payment processing\"],\n category: \"domain\",\n },\n // sales / account management domain\n { canonical: \"lead generation\", aliases: [], category: \"domain\" },\n { canonical: \"account management\", aliases: [], category: \"domain\" },\n {\n canonical: \"crm\",\n aliases: [\"customer relationship management\"],\n category: \"domain\",\n },\n {\n canonical: \"sales pipeline\",\n aliases: [\"pipeline management\"],\n category: \"domain\",\n },\n { canonical: \"cold calling\", aliases: [], category: \"domain\" },\n { canonical: \"upselling\", aliases: [\"cross-selling\"], category: \"domain\" },\n { canonical: \"customer retention\", aliases: [], category: \"domain\" },\n {\n canonical: \"business development\",\n aliases: [\"bizdev\"],\n category: \"domain\",\n },\n { canonical: \"quota attainment\", aliases: [], category: \"domain\" },\n { canonical: \"b2b sales\", aliases: [], category: \"domain\" },\n { canonical: \"b2c sales\", aliases: [], category: \"domain\" },\n { canonical: \"saas\", aliases: [\"software as a service\"], category: \"domain\" },\n { canonical: \"e-commerce\", aliases: [\"ecommerce\"], category: \"domain\" },\n // human resources domain\n {\n canonical: \"recruiting\",\n aliases: [\"talent acquisition\"],\n category: \"domain\",\n },\n { canonical: \"onboarding\", aliases: [], category: \"domain\" },\n { canonical: \"employee relations\", aliases: [], category: \"domain\" },\n { canonical: \"benefits administration\", aliases: [], category: \"domain\" },\n { canonical: \"performance management\", aliases: [], category: \"domain\" },\n {\n canonical: \"compensation and benefits\",\n aliases: [\"comp and benefits\"],\n category: \"domain\",\n },\n {\n canonical: \"diversity and inclusion\",\n aliases: [\"dei\"],\n category: \"domain\",\n },\n { canonical: \"employee engagement\", aliases: [], category: \"domain\" },\n {\n canonical: \"hris\",\n aliases: [\"human resources information system\"],\n category: \"domain\",\n },\n // healthcare domain\n { canonical: \"patient care\", aliases: [], category: \"domain\" },\n { canonical: \"clinical documentation\", aliases: [], category: \"domain\" },\n { canonical: \"hipaa\", aliases: [], category: \"domain\" },\n {\n canonical: \"electronic health records\",\n aliases: [\"ehr\", \"emr\"],\n category: \"domain\",\n },\n { canonical: \"medical billing\", aliases: [], category: \"domain\" },\n {\n canonical: \"medical coding\",\n aliases: [\"icd-10\", \"cpt coding\"],\n category: \"domain\",\n },\n { canonical: \"telehealth\", aliases: [], category: \"domain\" },\n { canonical: \"clinical trials\", aliases: [], category: \"domain\" },\n { canonical: \"regulatory affairs\", aliases: [], category: \"domain\" },\n // legal domain\n { canonical: \"contract review\", aliases: [], category: \"domain\" },\n { canonical: \"legal research\", aliases: [], category: \"domain\" },\n { canonical: \"litigation\", aliases: [], category: \"domain\" },\n {\n canonical: \"regulatory compliance\",\n aliases: [\"compliance\"],\n category: \"domain\",\n },\n { canonical: \"due diligence\", aliases: [], category: \"domain\" },\n {\n canonical: \"intellectual property\",\n aliases: [\"ip law\"],\n category: \"domain\",\n },\n {\n canonical: \"gdpr\",\n aliases: [\"general data protection regulation\"],\n category: \"domain\",\n },\n { canonical: \"soc 2\", aliases: [\"soc2\"], category: \"domain\" },\n { canonical: \"iso 27001\", aliases: [], category: \"domain\" },\n { canonical: \"pci dss\", aliases: [\"pci compliance\"], category: \"domain\" },\n // education domain\n { canonical: \"curriculum development\", aliases: [], category: \"domain\" },\n { canonical: \"lesson planning\", aliases: [], category: \"domain\" },\n { canonical: \"classroom management\", aliases: [], category: \"domain\" },\n { canonical: \"instructional design\", aliases: [], category: \"domain\" },\n { canonical: \"student assessment\", aliases: [], category: \"domain\" },\n { canonical: \"e-learning\", aliases: [\"elearning\"], category: \"domain\" },\n // operations / supply chain domain\n {\n canonical: \"supply chain management\",\n aliases: [\"supply chain\"],\n category: \"domain\",\n },\n { canonical: \"inventory management\", aliases: [], category: \"domain\" },\n { canonical: \"procurement\", aliases: [], category: \"domain\" },\n { canonical: \"vendor management\", aliases: [], category: \"domain\" },\n { canonical: \"logistics\", aliases: [], category: \"domain\" },\n { canonical: \"warehouse management\", aliases: [], category: \"domain\" },\n { canonical: \"demand planning\", aliases: [], category: \"domain\" },\n { canonical: \"manufacturing\", aliases: [], category: \"domain\" },\n { canonical: \"quality control\", aliases: [], category: \"domain\" },\n { canonical: \"lean manufacturing\", aliases: [], category: \"domain\" },\n // customer service domain\n {\n canonical: \"customer support\",\n aliases: [\"customer service\"],\n category: \"domain\",\n },\n { canonical: \"technical support\", aliases: [], category: \"domain\" },\n { canonical: \"conflict resolution\", aliases: [], category: \"domain\" },\n { canonical: \"customer success\", aliases: [], category: \"domain\" },\n { canonical: \"help desk\", aliases: [\"helpdesk\"], category: \"domain\" },\n // soft skills\n { canonical: \"communication\", aliases: [], category: \"soft\" },\n { canonical: \"written communication\", aliases: [], category: \"soft\" },\n { canonical: \"verbal communication\", aliases: [], category: \"soft\" },\n { canonical: \"leadership\", aliases: [], category: \"soft\" },\n { canonical: \"team leadership\", aliases: [], category: \"soft\" },\n { canonical: \"teamwork\", aliases: [\"collaboration\"], category: \"soft\" },\n {\n canonical: \"cross-functional collaboration\",\n aliases: [\"cross functional collaboration\"],\n category: \"soft\",\n },\n {\n canonical: \"problem solving\",\n aliases: [\"problem-solving\"],\n category: \"soft\",\n },\n { canonical: \"adaptability\", aliases: [\"flexibility\"], category: \"soft\" },\n { canonical: \"time management\", aliases: [], category: \"soft\" },\n { canonical: \"critical thinking\", aliases: [], category: \"soft\" },\n { canonical: \"creativity\", aliases: [], category: \"soft\" },\n { canonical: \"attention to detail\", aliases: [], category: \"soft\" },\n {\n canonical: \"decision making\",\n aliases: [\"decision-making\"],\n category: \"soft\",\n },\n { canonical: \"emotional intelligence\", aliases: [], category: \"soft\" },\n { canonical: \"negotiation\", aliases: [], category: \"soft\" },\n {\n canonical: \"organization\",\n aliases: [\"organizational skills\"],\n category: \"soft\",\n },\n {\n canonical: \"public speaking\",\n aliases: [\"presentation skills\"],\n category: \"soft\",\n },\n { canonical: \"mentoring\", aliases: [\"coaching\"], category: \"soft\" },\n { canonical: \"interpersonal skills\", aliases: [], category: \"soft\" },\n { canonical: \"work ethic\", aliases: [], category: \"soft\" },\n { canonical: \"stakeholder communication\", aliases: [], category: \"soft\" },\n {\n canonical: \"self-motivation\",\n aliases: [\"self motivation\"],\n category: \"soft\",\n },\n { canonical: \"resilience\", aliases: [], category: \"soft\" },\n { canonical: \"empathy\", aliases: [], category: \"soft\" },\n { canonical: \"active listening\", aliases: [], category: \"soft\" },\n { canonical: \"delegation\", aliases: [], category: \"soft\" },\n { canonical: \"strategic thinking\", aliases: [], category: \"soft\" },\n { canonical: \"multitasking\", aliases: [], category: \"soft\" },\n // marketing\n {\n canonical: \"seo\",\n aliases: [\"search engine optimization\"],\n category: \"marketing\",\n },\n {\n canonical: \"sem\",\n aliases: [\"search engine marketing\"],\n category: \"marketing\",\n },\n { canonical: \"branding\", aliases: [\"brand strategy\"], category: \"marketing\" },\n { canonical: \"campaign management\", aliases: [], category: \"marketing\" },\n { canonical: \"content marketing\", aliases: [], category: \"marketing\" },\n { canonical: \"content strategy\", aliases: [], category: \"marketing\" },\n {\n canonical: \"social media marketing\",\n aliases: [\"social media\"],\n category: \"marketing\",\n },\n { canonical: \"email marketing\", aliases: [], category: \"marketing\" },\n { canonical: \"digital marketing\", aliases: [], category: \"marketing\" },\n {\n canonical: \"growth marketing\",\n aliases: [\"growth hacking\"],\n category: \"marketing\",\n },\n { canonical: \"copywriting\", aliases: [], category: \"marketing\" },\n { canonical: \"market research\", aliases: [], category: \"marketing\" },\n {\n canonical: \"ppc\",\n aliases: [\"pay-per-click\", \"google ads\"],\n category: \"marketing\",\n },\n {\n canonical: \"conversion rate optimization\",\n aliases: [\"cro\"],\n category: \"marketing\",\n },\n { canonical: \"public relations\", aliases: [\"pr\"], category: \"marketing\" },\n { canonical: \"marketing automation\", aliases: [], category: \"marketing\" },\n { canonical: \"affiliate marketing\", aliases: [], category: \"marketing\" },\n { canonical: \"influencer marketing\", aliases: [], category: \"marketing\" },\n { canonical: \"product marketing\", aliases: [], category: \"marketing\" },\n { canonical: \"event marketing\", aliases: [], category: \"marketing\" },\n { canonical: \"brand awareness\", aliases: [], category: \"marketing\" },\n { canonical: \"media planning\", aliases: [], category: \"marketing\" },\n { canonical: \"lead nurturing\", aliases: [], category: \"marketing\" },\n];\n\nexport const defaultSkillAliases = deriveSkillAliases(defaultKeywordRegistry);\n\nexport const softwareEngineerProfile: ATSProfile = {\n name: \"software-engineer\",\n mandatorySkills: [\"javascript\", \"typescript\", \"react\", \"node\"],\n optionalSkills: [\"graphql\", \"sql\", \"docker\"],\n minExperience: 3,\n};\n\nexport const dataScientistProfile: ATSProfile = {\n name: \"data-scientist\",\n mandatorySkills: [\"python\", \"sql\", \"statistics\"],\n optionalSkills: [\"pandas\", \"numpy\", \"pytorch\", \"tensorflow\"],\n minExperience: 2,\n};\n\nexport const productManagerProfile: ATSProfile = {\n name: \"product-manager\",\n mandatorySkills: [\"roadmap\", \"stakeholder management\", \"prioritization\"],\n optionalSkills: [\"a/b testing\", \"analytics\", \"sql\"],\n minExperience: 3,\n};\n\nexport const defaultProfiles: ATSProfile[] = [\n softwareEngineerProfile,\n dataScientistProfile,\n productManagerProfile,\n];\n","/**\n * English keyword registry (the library's default). Re-exported as its own\n * subpath so language packs are imported uniformly:\n *\n * import en from \"@pranavraut033/ats-checker/en\";\n * analyzeResume({ ..., config: { keywordRegistry: en } });\n */\nimport { defaultKeywordRegistry } from \"../../profiles\";\n\nimport type { KeywordRegistry } from \"../../types/config\";\n\nconst en: KeywordRegistry = defaultKeywordRegistry;\n\nexport default en;\nexport { en as keywordRegistry };\n"]}
@@ -1,4 +1,4 @@
1
- import { K as KeywordRegistry } from '../../scoring-pZZR3soa.mjs';
1
+ import { K as KeywordRegistry } from '../../config-CVmXtmvk.mjs';
2
2
 
3
3
  declare const en: KeywordRegistry;
4
4
 
@@ -1,4 +1,4 @@
1
- import { K as KeywordRegistry } from '../../scoring-pZZR3soa.js';
1
+ import { K as KeywordRegistry } from '../../config-CVmXtmvk.js';
2
2
 
3
3
  declare const en: KeywordRegistry;
4
4
 
@@ -1,4 +1,4 @@
1
- import { defaultKeywordRegistry } from '../../chunk-IY7OVF6Z.mjs';
1
+ import { defaultKeywordRegistry } from '../../chunk-JAFFS7YZ.mjs';
2
2
 
3
3
  // src/lang/en/index.ts
4
4
  var en = defaultKeywordRegistry;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lang/en/index.ts"],"names":[],"mappings":";;;AAUA,IAAM,EAAA,GAAsB;AAE5B,IAAO,UAAA,GAAQ","file":"index.mjs","sourcesContent":["/**\n * English keyword registry (the library's default). Re-exported as its own\n * subpath so language packs are imported uniformly:\n *\n * import en from \"@pranavraut033/ats-checker/en\";\n * analyzeResume({ ..., config: { keywordRegistry: en } });\n */\nimport { defaultKeywordRegistry } from \"../../profiles\";\nimport type { KeywordRegistry } from \"../../types/config\";\n\nconst en: KeywordRegistry = defaultKeywordRegistry;\n\nexport default en;\nexport { en as keywordRegistry };\n"]}
1
+ {"version":3,"sources":["../../../src/lang/en/index.ts"],"names":[],"mappings":";;;AAWA,IAAM,EAAA,GAAsB;AAE5B,IAAO,UAAA,GAAQ","file":"index.mjs","sourcesContent":["/**\n * English keyword registry (the library's default). Re-exported as its own\n * subpath so language packs are imported uniformly:\n *\n * import en from \"@pranavraut033/ats-checker/en\";\n * analyzeResume({ ..., config: { keywordRegistry: en } });\n */\nimport { defaultKeywordRegistry } from \"../../profiles\";\n\nimport type { KeywordRegistry } from \"../../types/config\";\n\nconst en: KeywordRegistry = defaultKeywordRegistry;\n\nexport default en;\nexport { en as keywordRegistry };\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/pdf/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Caller-supplied OCR implementation, invoked only when the PDF's text layer\n * comes back too short to be useful (scanned/image PDFs). The caller owns\n * the actual OCR engine and dependency — this library never bundles one.\n */\nexport type OCRClient = (data: Uint8Array) => Promise<string>;\n\nexport interface ExtractTextOptions {\n /** Called with the raw PDF bytes when text-layer extraction is too short. */\n ocrFallback?: OCRClient;\n /** Threshold (trimmed char count) below which ocrFallback is tried. Default 100, matching resume.parser.ts's scanned-PDF warning. */\n minTextLength?: number;\n}\n\n/**\n * Extract plain text from a PDF buffer.\n *\n * Requires `pdfjs-dist` to be installed (optional peerDependency):\n * npm install pdfjs-dist\n *\n * @param data - Raw PDF bytes as Uint8Array or ArrayBuffer\n * @param options - Optional OCR fallback for scanned/image PDFs\n * @returns Extracted text, ready to pass as `resumeText` to analyzeResume\n */\nexport async function extractTextFromPDF(\n data: Uint8Array | ArrayBuffer,\n options?: ExtractTextOptions\n): Promise<string> {\n // ponytail: lazy import keeps core zero-dep; missing peer throws with clear message\n let pdfjsLib: typeof import(\"pdfjs-dist\");\n try {\n pdfjsLib = await import(\"pdfjs-dist\");\n } catch {\n throw new Error(\n \"pdfjs-dist is required for PDF extraction. Install it: npm install pdfjs-dist\"\n );\n }\n\n const bytes =\n data instanceof ArrayBuffer ? new Uint8Array(data) : data;\n\n const doc = await pdfjsLib.getDocument({ data: bytes }).promise;\n const pages: string[] = [];\n\n for (let i = 1; i <= doc.numPages; i++) {\n const page = await doc.getPage(i);\n const content = await page.getTextContent();\n\n type RawItem = { x: number; y: number; str: string };\n const items: RawItem[] = [];\n\n for (const item of content.items) {\n if (!(\"str\" in item) || !item.str.trim()) continue;\n const transform: number[] | undefined = Array.isArray(\n (item as { transform?: number[] }).transform\n )\n ? (item as { transform: number[] }).transform\n : undefined;\n\n if (!transform) {\n // No positional info (unit-test mocks) — treat as single-column item\n items.push({ x: 0, y: 0, str: item.str });\n } else {\n items.push({ x: transform[4], y: transform[5], str: item.str });\n }\n }\n\n // Detect column boundary: find the largest x-gap among item start positions.\n // If it exceeds COLUMN_GAP_THRESHOLD, split into left / right columns and\n // process each independently so headers in different columns don't merge.\n // ponytail: single largest-gap heuristic handles the common 2-column resume;\n // n-column needs k-means on x-distribution — upgrade if this proves insufficient.\n // Column boundary heuristic: the largest gap in item x-positions.\n // Real PDF column gutters show as a gap >>80px; normal word spacing is <50px.\n // ponytail: magic number calibrated to PranavRaut2026.pdf (104px gap); raise\n // if single-column PDFs with wide indentation start getting falsely split.\n const COLUMN_GAP_THRESHOLD = 80;\n const xPositions = [...new Set(items.map((it) => Math.round(it.x)))].sort(\n (a, b) => a - b\n );\n\n let columnBoundary: number | null = null;\n let maxGap = 0;\n for (let j = 1; j < xPositions.length; j++) {\n const gap = xPositions[j] - xPositions[j - 1];\n if (gap > maxGap) {\n maxGap = gap;\n columnBoundary = (xPositions[j - 1] + xPositions[j]) / 2;\n }\n }\n if (maxGap < COLUMN_GAP_THRESHOLD) columnBoundary = null;\n\n const columns =\n columnBoundary !== null\n ? [\n items.filter((it) => it.x < columnBoundary!),\n items.filter((it) => it.x >= columnBoundary!),\n ]\n : [items];\n\n const columnTexts = columns.map((col) => renderColumn(col));\n pages.push(columnTexts.filter(Boolean).join(\"\\n\"));\n }\n\n const text = pages.join(\"\\n\");\n\n // ponytail: OCR is the caller's engine/dependency — we only decide *when*\n // to ask for it (text layer too short) and pick the better of the two results.\n const minTextLength = options?.minTextLength ?? 100;\n if (options?.ocrFallback && text.trim().length < minTextLength) {\n try {\n const ocrText = await options.ocrFallback(bytes);\n if (ocrText.trim().length > text.trim().length) return ocrText;\n } catch {\n // OCR failure falls back to the text-layer result, never throws.\n }\n }\n\n return text;\n}\n\nfunction renderColumn(items: Array<{ x: number; y: number; str: string }>): string {\n const Y_TOLERANCE = 2;\n const lineMap: Map<number, Array<{ x: number; str: string }>> = new Map();\n const lineOrder: number[] = [];\n\n for (const { x, y, str } of items) {\n let bucketKey: number | undefined;\n for (const key of lineOrder) {\n if (Math.abs(key - y) <= Y_TOLERANCE) {\n bucketKey = key;\n break;\n }\n }\n if (bucketKey === undefined) {\n bucketKey = y;\n lineOrder.push(y);\n lineMap.set(y, []);\n }\n lineMap.get(bucketKey)!.push({ x, str });\n }\n\n // pdfjs y=0 is bottom of page — sort descending so top comes first\n lineOrder.sort((a, b) => b - a);\n\n return lineOrder\n .map((key) =>\n (lineMap.get(key) ?? [])\n .sort((a, b) => a.x - b.x)\n .map((it) => it.str)\n .join(\" \")\n .replace(/[^\\S\\n]+/g, \" \")\n .trim()\n )\n .filter(Boolean)\n .join(\"\\n\");\n}\n"]}
1
+ {"version":3,"sources":["../../src/pdf/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Caller-supplied OCR implementation, invoked only when the PDF's text layer\n * comes back too short to be useful (scanned/image PDFs). The caller owns\n * the actual OCR engine and dependency — this library never bundles one.\n */\nexport type OCRClient = (data: Uint8Array) => Promise<string>;\n\nexport interface ExtractTextOptions {\n /** Called with the raw PDF bytes when text-layer extraction is too short. */\n ocrFallback?: OCRClient;\n /** Threshold (trimmed char count) below which ocrFallback is tried. Default 100, matching resume.parser.ts's scanned-PDF warning. */\n minTextLength?: number;\n}\n\n/**\n * Extract plain text from a PDF buffer.\n *\n * Requires `pdfjs-dist` to be installed (optional peerDependency):\n * npm install pdfjs-dist\n *\n * @param data - Raw PDF bytes as Uint8Array or ArrayBuffer\n * @param options - Optional OCR fallback for scanned/image PDFs\n * @returns Extracted text, ready to pass as `resumeText` to analyzeResume\n */\nexport async function extractTextFromPDF(\n data: Uint8Array | ArrayBuffer,\n options?: ExtractTextOptions\n): Promise<string> {\n // ponytail: lazy import keeps core zero-dep; missing peer throws with clear message\n let pdfjsLib: typeof import(\"pdfjs-dist\");\n try {\n pdfjsLib = await import(\"pdfjs-dist\");\n } catch {\n throw new Error(\n \"pdfjs-dist is required for PDF extraction. Install it: npm install pdfjs-dist\"\n );\n }\n\n const bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\n\n const doc = await pdfjsLib.getDocument({ data: bytes }).promise;\n const pages: string[] = [];\n\n for (let i = 1; i <= doc.numPages; i++) {\n const page = await doc.getPage(i);\n const content = await page.getTextContent();\n\n type RawItem = { x: number; y: number; str: string };\n const items: RawItem[] = [];\n\n for (const item of content.items) {\n if (!(\"str\" in item) || !item.str.trim()) continue;\n const transform: number[] | undefined = Array.isArray(\n (item as { transform?: number[] }).transform\n )\n ? (item as { transform: number[] }).transform\n : undefined;\n\n if (!transform) {\n // No positional info (unit-test mocks) — treat as single-column item\n items.push({ x: 0, y: 0, str: item.str });\n } else {\n items.push({ x: transform[4], y: transform[5], str: item.str });\n }\n }\n\n // Detect column boundary: find the largest x-gap among item start positions.\n // If it exceeds COLUMN_GAP_THRESHOLD, split into left / right columns and\n // process each independently so headers in different columns don't merge.\n // ponytail: single largest-gap heuristic handles the common 2-column resume;\n // n-column needs k-means on x-distribution — upgrade if this proves insufficient.\n // Column boundary heuristic: the largest gap in item x-positions.\n // Real PDF column gutters show as a gap >>80px; normal word spacing is <50px.\n // ponytail: magic number calibrated to PranavRaut2026.pdf (104px gap); raise\n // if single-column PDFs with wide indentation start getting falsely split.\n const COLUMN_GAP_THRESHOLD = 80;\n const xPositions = [...new Set(items.map((it) => Math.round(it.x)))].sort(\n (a, b) => a - b\n );\n\n let columnBoundary: number | null = null;\n let maxGap = 0;\n for (let j = 1; j < xPositions.length; j++) {\n const gap = xPositions[j] - xPositions[j - 1];\n if (gap > maxGap) {\n maxGap = gap;\n columnBoundary = (xPositions[j - 1] + xPositions[j]) / 2;\n }\n }\n if (maxGap < COLUMN_GAP_THRESHOLD) columnBoundary = null;\n\n const columns =\n columnBoundary !== null\n ? [\n items.filter((it) => it.x < columnBoundary!),\n items.filter((it) => it.x >= columnBoundary!),\n ]\n : [items];\n\n const columnTexts = columns.map((col) => renderColumn(col));\n pages.push(columnTexts.filter(Boolean).join(\"\\n\"));\n }\n\n const text = pages.join(\"\\n\");\n\n // ponytail: OCR is the caller's engine/dependency — we only decide *when*\n // to ask for it (text layer too short) and pick the better of the two results.\n const minTextLength = options?.minTextLength ?? 100;\n if (options?.ocrFallback && text.trim().length < minTextLength) {\n try {\n const ocrText = await options.ocrFallback(bytes);\n if (ocrText.trim().length > text.trim().length) return ocrText;\n } catch {\n // OCR failure falls back to the text-layer result, never throws.\n }\n }\n\n return text;\n}\n\nfunction renderColumn(\n items: Array<{ x: number; y: number; str: string }>\n): string {\n const Y_TOLERANCE = 2;\n const lineMap: Map<number, Array<{ x: number; str: string }>> = new Map();\n const lineOrder: number[] = [];\n\n for (const { x, y, str } of items) {\n let bucketKey: number | undefined;\n for (const key of lineOrder) {\n if (Math.abs(key - y) <= Y_TOLERANCE) {\n bucketKey = key;\n break;\n }\n }\n if (bucketKey === undefined) {\n bucketKey = y;\n lineOrder.push(y);\n lineMap.set(y, []);\n }\n lineMap.get(bucketKey)!.push({ x, str });\n }\n\n // pdfjs y=0 is bottom of page — sort descending so top comes first\n lineOrder.sort((a, b) => b - a);\n\n return lineOrder\n .map((key) =>\n (lineMap.get(key) ?? [])\n .sort((a, b) => a.x - b.x)\n .map((it) => it.str)\n .join(\" \")\n .replace(/[^\\S\\n]+/g, \" \")\n .trim()\n )\n .filter(Boolean)\n .join(\"\\n\");\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/pdf/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Caller-supplied OCR implementation, invoked only when the PDF's text layer\n * comes back too short to be useful (scanned/image PDFs). The caller owns\n * the actual OCR engine and dependency — this library never bundles one.\n */\nexport type OCRClient = (data: Uint8Array) => Promise<string>;\n\nexport interface ExtractTextOptions {\n /** Called with the raw PDF bytes when text-layer extraction is too short. */\n ocrFallback?: OCRClient;\n /** Threshold (trimmed char count) below which ocrFallback is tried. Default 100, matching resume.parser.ts's scanned-PDF warning. */\n minTextLength?: number;\n}\n\n/**\n * Extract plain text from a PDF buffer.\n *\n * Requires `pdfjs-dist` to be installed (optional peerDependency):\n * npm install pdfjs-dist\n *\n * @param data - Raw PDF bytes as Uint8Array or ArrayBuffer\n * @param options - Optional OCR fallback for scanned/image PDFs\n * @returns Extracted text, ready to pass as `resumeText` to analyzeResume\n */\nexport async function extractTextFromPDF(\n data: Uint8Array | ArrayBuffer,\n options?: ExtractTextOptions\n): Promise<string> {\n // ponytail: lazy import keeps core zero-dep; missing peer throws with clear message\n let pdfjsLib: typeof import(\"pdfjs-dist\");\n try {\n pdfjsLib = await import(\"pdfjs-dist\");\n } catch {\n throw new Error(\n \"pdfjs-dist is required for PDF extraction. Install it: npm install pdfjs-dist\"\n );\n }\n\n const bytes =\n data instanceof ArrayBuffer ? new Uint8Array(data) : data;\n\n const doc = await pdfjsLib.getDocument({ data: bytes }).promise;\n const pages: string[] = [];\n\n for (let i = 1; i <= doc.numPages; i++) {\n const page = await doc.getPage(i);\n const content = await page.getTextContent();\n\n type RawItem = { x: number; y: number; str: string };\n const items: RawItem[] = [];\n\n for (const item of content.items) {\n if (!(\"str\" in item) || !item.str.trim()) continue;\n const transform: number[] | undefined = Array.isArray(\n (item as { transform?: number[] }).transform\n )\n ? (item as { transform: number[] }).transform\n : undefined;\n\n if (!transform) {\n // No positional info (unit-test mocks) — treat as single-column item\n items.push({ x: 0, y: 0, str: item.str });\n } else {\n items.push({ x: transform[4], y: transform[5], str: item.str });\n }\n }\n\n // Detect column boundary: find the largest x-gap among item start positions.\n // If it exceeds COLUMN_GAP_THRESHOLD, split into left / right columns and\n // process each independently so headers in different columns don't merge.\n // ponytail: single largest-gap heuristic handles the common 2-column resume;\n // n-column needs k-means on x-distribution — upgrade if this proves insufficient.\n // Column boundary heuristic: the largest gap in item x-positions.\n // Real PDF column gutters show as a gap >>80px; normal word spacing is <50px.\n // ponytail: magic number calibrated to PranavRaut2026.pdf (104px gap); raise\n // if single-column PDFs with wide indentation start getting falsely split.\n const COLUMN_GAP_THRESHOLD = 80;\n const xPositions = [...new Set(items.map((it) => Math.round(it.x)))].sort(\n (a, b) => a - b\n );\n\n let columnBoundary: number | null = null;\n let maxGap = 0;\n for (let j = 1; j < xPositions.length; j++) {\n const gap = xPositions[j] - xPositions[j - 1];\n if (gap > maxGap) {\n maxGap = gap;\n columnBoundary = (xPositions[j - 1] + xPositions[j]) / 2;\n }\n }\n if (maxGap < COLUMN_GAP_THRESHOLD) columnBoundary = null;\n\n const columns =\n columnBoundary !== null\n ? [\n items.filter((it) => it.x < columnBoundary!),\n items.filter((it) => it.x >= columnBoundary!),\n ]\n : [items];\n\n const columnTexts = columns.map((col) => renderColumn(col));\n pages.push(columnTexts.filter(Boolean).join(\"\\n\"));\n }\n\n const text = pages.join(\"\\n\");\n\n // ponytail: OCR is the caller's engine/dependency — we only decide *when*\n // to ask for it (text layer too short) and pick the better of the two results.\n const minTextLength = options?.minTextLength ?? 100;\n if (options?.ocrFallback && text.trim().length < minTextLength) {\n try {\n const ocrText = await options.ocrFallback(bytes);\n if (ocrText.trim().length > text.trim().length) return ocrText;\n } catch {\n // OCR failure falls back to the text-layer result, never throws.\n }\n }\n\n return text;\n}\n\nfunction renderColumn(items: Array<{ x: number; y: number; str: string }>): string {\n const Y_TOLERANCE = 2;\n const lineMap: Map<number, Array<{ x: number; str: string }>> = new Map();\n const lineOrder: number[] = [];\n\n for (const { x, y, str } of items) {\n let bucketKey: number | undefined;\n for (const key of lineOrder) {\n if (Math.abs(key - y) <= Y_TOLERANCE) {\n bucketKey = key;\n break;\n }\n }\n if (bucketKey === undefined) {\n bucketKey = y;\n lineOrder.push(y);\n lineMap.set(y, []);\n }\n lineMap.get(bucketKey)!.push({ x, str });\n }\n\n // pdfjs y=0 is bottom of page — sort descending so top comes first\n lineOrder.sort((a, b) => b - a);\n\n return lineOrder\n .map((key) =>\n (lineMap.get(key) ?? [])\n .sort((a, b) => a.x - b.x)\n .map((it) => it.str)\n .join(\" \")\n .replace(/[^\\S\\n]+/g, \" \")\n .trim()\n )\n .filter(Boolean)\n .join(\"\\n\");\n}\n"]}
1
+ {"version":3,"sources":["../../src/pdf/index.ts"],"names":[],"mappings":";AAwBA,eAAsB,kBAAA,CACpB,MACA,OAAA,EACiB;AAEjB,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,OAAO,YAAY,CAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,QAAQ,IAAA,YAAgB,WAAA,GAAc,IAAI,UAAA,CAAW,IAAI,CAAA,GAAI,IAAA;AAEnE,EAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,WAAA,CAAY,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA,CAAE,OAAA;AACxD,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,GAAA,CAAI,UAAU,CAAA,EAAA,EAAK;AACtC,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAA;AAChC,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,cAAA,EAAe;AAG1C,IAAA,MAAM,QAAmB,EAAC;AAE1B,IAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,KAAA,EAAO;AAChC,MAAA,IAAI,EAAE,KAAA,IAAS,IAAA,CAAA,IAAS,CAAC,IAAA,CAAK,GAAA,CAAI,MAAK,EAAG;AAC1C,MAAA,MAAM,YAAkC,KAAA,CAAM,OAAA;AAAA,QAC3C,IAAA,CAAkC;AAAA,OACrC,GACK,KAAiC,SAAA,GAClC,MAAA;AAEJ,MAAA,IAAI,CAAC,SAAA,EAAW;AAEd,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,CAAA;AAAA,MAC1C,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,CAAA,EAAG,SAAA,CAAU,CAAC,CAAA,EAAG,CAAA,EAAG,SAAA,CAAU,CAAC,CAAA,EAAG,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA;AAAA,MAChE;AAAA,IACF;AAWA,IAAA,MAAM,oBAAA,GAAuB,EAAA;AAC7B,IAAA,MAAM,aAAa,CAAC,GAAG,IAAI,GAAA,CAAI,MAAM,GAAA,CAAI,CAAC,EAAA,KAAO,IAAA,CAAK,MAAM,EAAA,CAAG,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,IAAA;AAAA,MACnE,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI;AAAA,KAChB;AAEA,IAAA,IAAI,cAAA,GAAgC,IAAA;AACpC,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,MAAM,UAAA,CAAW,CAAC,CAAA,GAAI,UAAA,CAAW,IAAI,CAAC,CAAA;AAC5C,MAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,QAAA,MAAA,GAAS,GAAA;AACT,QAAA,cAAA,GAAA,CAAkB,WAAW,CAAA,GAAI,CAAC,CAAA,GAAI,UAAA,CAAW,CAAC,CAAA,IAAK,CAAA;AAAA,MACzD;AAAA,IACF;AACA,IAAA,IAAI,MAAA,GAAS,sBAAsB,cAAA,GAAiB,IAAA;AAEpD,IAAA,MAAM,OAAA,GACJ,mBAAmB,IAAA,GACf;AAAA,MACE,MAAM,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,IAAI,cAAe,CAAA;AAAA,MAC3C,MAAM,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,KAAK,cAAe;AAAA,KAC9C,GACA,CAAC,KAAK,CAAA;AAEZ,IAAA,MAAM,cAAc,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ,YAAA,CAAa,GAAG,CAAC,CAAA;AAC1D,IAAA,KAAA,CAAM,KAAK,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EACnD;AAEA,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAI5B,EAAA,MAAM,aAAA,GAAgB,SAAS,aAAA,IAAiB,GAAA;AAChD,EAAA,IAAI,SAAS,WAAA,IAAe,IAAA,CAAK,IAAA,EAAK,CAAE,SAAS,aAAA,EAAe;AAC9D,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,WAAA,CAAY,KAAK,CAAA;AAC/C,MAAA,IAAI,OAAA,CAAQ,MAAK,CAAE,MAAA,GAAS,KAAK,IAAA,EAAK,CAAE,QAAQ,OAAO,OAAA;AAAA,IACzD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aACP,KAAA,EACQ;AACR,EAAA,MAAM,WAAA,GAAc,CAAA;AACpB,EAAA,MAAM,OAAA,uBAA8D,GAAA,EAAI;AACxE,EAAA,MAAM,YAAsB,EAAC;AAE7B,EAAA,KAAA,MAAW,EAAE,CAAA,EAAG,CAAA,EAAG,GAAA,MAAS,KAAA,EAAO;AACjC,IAAA,IAAI,SAAA;AACJ,IAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAA,GAAM,CAAC,KAAK,WAAA,EAAa;AACpC,QAAA,SAAA,GAAY,GAAA;AACZ,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,MAAA,SAAA,GAAY,CAAA;AACZ,MAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAChB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,EAAE,CAAA;AAAA,IACnB;AACA,IAAA,OAAA,CAAQ,IAAI,SAAS,CAAA,CAAG,KAAK,EAAE,CAAA,EAAG,KAAK,CAAA;AAAA,EACzC;AAGA,EAAA,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AAE9B,EAAA,OAAO,SAAA,CACJ,GAAA;AAAA,IAAI,CAAC,GAAA,KAAA,CACH,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,IAAK,EAAC,EACnB,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CACxB,GAAA,CAAI,CAAC,EAAA,KAAO,EAAA,CAAG,GAAG,CAAA,CAClB,IAAA,CAAK,GAAG,CAAA,CACR,OAAA,CAAQ,WAAA,EAAa,GAAG,EACxB,IAAA;AAAK,GACV,CACC,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AACd","file":"index.mjs","sourcesContent":["/**\n * Caller-supplied OCR implementation, invoked only when the PDF's text layer\n * comes back too short to be useful (scanned/image PDFs). The caller owns\n * the actual OCR engine and dependency — this library never bundles one.\n */\nexport type OCRClient = (data: Uint8Array) => Promise<string>;\n\nexport interface ExtractTextOptions {\n /** Called with the raw PDF bytes when text-layer extraction is too short. */\n ocrFallback?: OCRClient;\n /** Threshold (trimmed char count) below which ocrFallback is tried. Default 100, matching resume.parser.ts's scanned-PDF warning. */\n minTextLength?: number;\n}\n\n/**\n * Extract plain text from a PDF buffer.\n *\n * Requires `pdfjs-dist` to be installed (optional peerDependency):\n * npm install pdfjs-dist\n *\n * @param data - Raw PDF bytes as Uint8Array or ArrayBuffer\n * @param options - Optional OCR fallback for scanned/image PDFs\n * @returns Extracted text, ready to pass as `resumeText` to analyzeResume\n */\nexport async function extractTextFromPDF(\n data: Uint8Array | ArrayBuffer,\n options?: ExtractTextOptions\n): Promise<string> {\n // ponytail: lazy import keeps core zero-dep; missing peer throws with clear message\n let pdfjsLib: typeof import(\"pdfjs-dist\");\n try {\n pdfjsLib = await import(\"pdfjs-dist\");\n } catch {\n throw new Error(\n \"pdfjs-dist is required for PDF extraction. Install it: npm install pdfjs-dist\"\n );\n }\n\n const bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\n\n const doc = await pdfjsLib.getDocument({ data: bytes }).promise;\n const pages: string[] = [];\n\n for (let i = 1; i <= doc.numPages; i++) {\n const page = await doc.getPage(i);\n const content = await page.getTextContent();\n\n type RawItem = { x: number; y: number; str: string };\n const items: RawItem[] = [];\n\n for (const item of content.items) {\n if (!(\"str\" in item) || !item.str.trim()) continue;\n const transform: number[] | undefined = Array.isArray(\n (item as { transform?: number[] }).transform\n )\n ? (item as { transform: number[] }).transform\n : undefined;\n\n if (!transform) {\n // No positional info (unit-test mocks) — treat as single-column item\n items.push({ x: 0, y: 0, str: item.str });\n } else {\n items.push({ x: transform[4], y: transform[5], str: item.str });\n }\n }\n\n // Detect column boundary: find the largest x-gap among item start positions.\n // If it exceeds COLUMN_GAP_THRESHOLD, split into left / right columns and\n // process each independently so headers in different columns don't merge.\n // ponytail: single largest-gap heuristic handles the common 2-column resume;\n // n-column needs k-means on x-distribution — upgrade if this proves insufficient.\n // Column boundary heuristic: the largest gap in item x-positions.\n // Real PDF column gutters show as a gap >>80px; normal word spacing is <50px.\n // ponytail: magic number calibrated to PranavRaut2026.pdf (104px gap); raise\n // if single-column PDFs with wide indentation start getting falsely split.\n const COLUMN_GAP_THRESHOLD = 80;\n const xPositions = [...new Set(items.map((it) => Math.round(it.x)))].sort(\n (a, b) => a - b\n );\n\n let columnBoundary: number | null = null;\n let maxGap = 0;\n for (let j = 1; j < xPositions.length; j++) {\n const gap = xPositions[j] - xPositions[j - 1];\n if (gap > maxGap) {\n maxGap = gap;\n columnBoundary = (xPositions[j - 1] + xPositions[j]) / 2;\n }\n }\n if (maxGap < COLUMN_GAP_THRESHOLD) columnBoundary = null;\n\n const columns =\n columnBoundary !== null\n ? [\n items.filter((it) => it.x < columnBoundary!),\n items.filter((it) => it.x >= columnBoundary!),\n ]\n : [items];\n\n const columnTexts = columns.map((col) => renderColumn(col));\n pages.push(columnTexts.filter(Boolean).join(\"\\n\"));\n }\n\n const text = pages.join(\"\\n\");\n\n // ponytail: OCR is the caller's engine/dependency — we only decide *when*\n // to ask for it (text layer too short) and pick the better of the two results.\n const minTextLength = options?.minTextLength ?? 100;\n if (options?.ocrFallback && text.trim().length < minTextLength) {\n try {\n const ocrText = await options.ocrFallback(bytes);\n if (ocrText.trim().length > text.trim().length) return ocrText;\n } catch {\n // OCR failure falls back to the text-layer result, never throws.\n }\n }\n\n return text;\n}\n\nfunction renderColumn(\n items: Array<{ x: number; y: number; str: string }>\n): string {\n const Y_TOLERANCE = 2;\n const lineMap: Map<number, Array<{ x: number; str: string }>> = new Map();\n const lineOrder: number[] = [];\n\n for (const { x, y, str } of items) {\n let bucketKey: number | undefined;\n for (const key of lineOrder) {\n if (Math.abs(key - y) <= Y_TOLERANCE) {\n bucketKey = key;\n break;\n }\n }\n if (bucketKey === undefined) {\n bucketKey = y;\n lineOrder.push(y);\n lineMap.set(y, []);\n }\n lineMap.get(bucketKey)!.push({ x, str });\n }\n\n // pdfjs y=0 is bottom of page — sort descending so top comes first\n lineOrder.sort((a, b) => b - a);\n\n return lineOrder\n .map((key) =>\n (lineMap.get(key) ?? [])\n .sort((a, b) => a.x - b.x)\n .map((it) => it.str)\n .join(\" \")\n .replace(/[^\\S\\n]+/g, \" \")\n .trim()\n )\n .filter(Boolean)\n .join(\"\\n\");\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pranavraut033/ats-checker",
3
- "version": "1.4.0",
3
+ "version": "2.0.0",
4
4
  "description": "Deterministic, configurable ATS (Applicant Tracking System) compatibility checker with no external dependencies. Analyze resumes, generate scores, and get actionable suggestions.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -87,7 +87,11 @@
87
87
  "dev": "npm run serve",
88
88
  "test": "vitest run",
89
89
  "test:watch": "vitest",
90
- "type-check": "tsc --noEmit"
90
+ "type-check": "tsc --noEmit",
91
+ "lint": "eslint .",
92
+ "lint:fix": "eslint . --fix",
93
+ "format": "prettier --write .",
94
+ "format:check": "prettier --check ."
91
95
  },
92
96
  "publishConfig": {
93
97
  "access": "public"
@@ -96,11 +100,16 @@
96
100
  "@types/express": "^4.17.21",
97
101
  "@types/node": "^25.0.3",
98
102
  "@vitest/ui": "^4.0.16",
103
+ "eslint": "^9",
104
+ "eslint-plugin-import": "^2.32.0",
105
+ "eslint-plugin-unused-imports": "^4.3.0",
99
106
  "express": "^4.18.2",
100
107
  "pdfjs-dist": "^4.10.38",
108
+ "prettier": "^3.7.4",
101
109
  "tsup": "^8.3.0",
102
110
  "tsx": "^4.7.0",
103
111
  "typescript": "^5.6.3",
112
+ "typescript-eslint": "^8.20.0",
104
113
  "vitest": "^4.0.16"
105
114
  }
106
115
  }