UNPKG

@cyanheads/pubmed-mcp-server

Version:

Search PubMed/Europe PMC, fetch articles and full text (PMC/EPMC/Unpaywall), citations, MeSH terms via MCP. STDIO or Streamable HTTP.

56 lines 2 kB
/** * @fileoverview Generic helper functions for parsing XML data, particularly * structures from fast-xml-parser. * @module src/services/ncbi/parsing/xml-helpers */ /** * Ensures that the input is an array. If it's not an array, it wraps it in one. * Handles undefined or null by returning an empty array. * @param item - The item to ensure is an array. * @returns An array containing the item, or an empty array if item is null/undefined. * @template T - The type of the items in the array. */ export function ensureArray(item) { if (item == null) { return []; } return Array.isArray(item) ? item : [item]; } export function getText(element, defaultValue = '') { if (element == null) { return defaultValue; } if (typeof element === 'string') { return element; } if (typeof element === 'number' || typeof element === 'boolean') { return String(element); // Handle direct number/boolean elements } if (typeof element === 'object') { const obj = element; if (obj['#text'] !== undefined) { const val = obj['#text']; if (typeof val === 'string') return val; if (typeof val === 'number' || typeof val === 'boolean') return String(val); } } return defaultValue; } export function getAttribute(element, attributeName, // e.g., 'UI', 'MajorTopicYN' defaultValue = '') { const fullAttributeName = `@_${attributeName}`; // As per fast-xml-parser config if (element && typeof element === 'object') { const obj = element; const val = obj[fullAttributeName]; if (typeof val === 'string') return val; if (typeof val === 'boolean') return String(val); // Convert boolean attributes to string if (typeof val === 'number') return String(val); // Convert number attributes to string } return defaultValue; } //# sourceMappingURL=xml-helpers.js.map