UNPKG

resume-parser-mcp

Version:

To install dependencies:

73 lines (72 loc) 2.88 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ResumeParser = exports.parameters = exports.description = exports.name = void 0; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const zod_1 = require("zod"); const downloadFileFromUrl_1 = require("../parser/downloadFileFromUrl"); const extractFileText_1 = require("../parser/extractFileText"); const parseTextToResume_1 = require("../parser/parseTextToResume"); const logger_1 = require("../utils/logger"); const fsPromises = fs_1.default.promises; const name = 'resume_parser'; exports.name = name; const description = 'Parses a resume and returns a JSON object'; exports.description = description; const parameters = zod_1.z.object({ resume_url: zod_1.z.string(), }); exports.parameters = parameters; const ResumeParser = { name, description, parameters, execute: async ({ resume_url }, { log }) => { const logger = (0, logger_1.useLogger)(log); let tempFilePath = null; try { // 1. 下载文件到临时目录 tempFilePath = await (0, downloadFileFromUrl_1.downloadFile)(resume_url); logger.info('文件下载成功:', tempFilePath); // 2. 根据文件扩展名提取文本 let text = ''; const fileExtension = path_1.default.extname(tempFilePath).toLowerCase(); if (fileExtension === '.pdf') { text = await (0, extractFileText_1.extractTextFromPdf)(tempFilePath); } else if (fileExtension === '.docx') { text = await (0, extractFileText_1.extractTextFromDocx)(tempFilePath); } else { throw new Error(`不支持的文件格式: ${fileExtension}。请使用PDF或DOCX格式。`); } if (!text) { throw new Error('无法从文件中提取文本内容'); } // 3. 解析文本为JSONResume格式 const resume = (0, parseTextToResume_1.parseTextToResume)(text); return resume; } catch (error) { logger.error('简历解析失败:', error?.message); throw error; } finally { // 4. 清理临时文件 if (tempFilePath) { try { await fsPromises.unlink(tempFilePath); logger.info('临时文件已清理'); } catch (cleanupError) { logger.warn('临时文件清理失败:', cleanupError?.message); } } } }, }; exports.ResumeParser = ResumeParser; exports.default = ResumeParser;