@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
JavaScript
/**
* @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