UNPKG

@nvhien20vn/git-mcp-server

Version:
63 lines (62 loc) 2.78 kB
import * as chrono from 'chrono-node'; // Import utils from the main barrel file (logger, ErrorHandler, RequestContext from ../internal/*) import { logger, ErrorHandler } from '../index.js'; import { BaseErrorCode } from '../../types-global/errors.js'; // Corrected path /** * Parses a natural language date string into a Date object. * * @param text The natural language date string (e.g., "tomorrow", "in 5 days", "2024-01-15"). * @param context The request context for logging and error tracking. * @param refDate Optional reference date for parsing relative dates. Defaults to now. * @returns A Date object representing the parsed date, or null if parsing fails. * @throws McpError if parsing fails unexpectedly. */ async function parseDateString(text, context, refDate) { const operation = 'parseDateString'; const logContext = { ...context, operation, inputText: text, refDate }; logger.debug(`Attempting to parse date string: "${text}"`, logContext); return await ErrorHandler.tryCatch(async () => { const parsedDate = chrono.parseDate(text, refDate, { forwardDate: true }); if (parsedDate) { logger.debug(`Successfully parsed "${text}" to ${parsedDate.toISOString()}`, logContext); return parsedDate; } else { logger.warning(`Failed to parse date string: "${text}"`, logContext); return null; } }, { operation, context: logContext, input: { text, refDate }, errorCode: BaseErrorCode.PARSING_ERROR, }); } /** * Parses a natural language date string and returns detailed parsing results. * * @param text The natural language date string. * @param context The request context for logging and error tracking. * @param refDate Optional reference date for parsing relative dates. Defaults to now. * @returns An array of chrono.ParsedResult objects, or an empty array if parsing fails. * @throws McpError if parsing fails unexpectedly. */ async function parseDateStringDetailed(text, context, refDate) { const operation = 'parseDateStringDetailed'; const logContext = { ...context, operation, inputText: text, refDate }; logger.debug(`Attempting detailed parse of date string: "${text}"`, logContext); return await ErrorHandler.tryCatch(async () => { const results = chrono.parse(text, refDate, { forwardDate: true }); logger.debug(`Detailed parse of "${text}" resulted in ${results.length} result(s)`, logContext); return results; }, { operation, context: logContext, input: { text, refDate }, errorCode: BaseErrorCode.PARSING_ERROR, }); } export const dateParser = { parse: parseDateStringDetailed, parseDate: parseDateString, };