import axios from 'axios' import genbankParser from 'genbank-parser' import { XMLParser } from 'fast-xml-parser' import jsonata from "jsonata" const getEsearch = async ( params: any ) => { const endpoint = params?.endpoint ? params.endpoint : 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi' const query = params?.query || '' const allowedParams = ['id', 'db', 'retmode', 'rettype'] // console.log('query :', `${endpoint}?${Object.keys(params).flatMap(k => allowedParams.includes(k) ? k + '=' + params[k] : []).join('&')}`); const response = await axios.get(`${endpoint}?${Object.keys(params).flatMap(k => allowedParams.includes(k) ? k + '=' + params[k] : []).join('&')}`) let results = Array.isArray(response.data) ? response.data.join('') : response.data if (params?.retmode) { switch (params.retmode) { case 'xml': const parser = new XMLParser({ ignoreAttributes : false, alwaysCreateTextNode: false, attributeNamePrefix : "attr-", allowBooleanAttributes: true }) results = parser.parse(results) break; case 'gb': results = genbankParser(results) break; default: break; } } if (query !== '') results = jsonata(query).evaluate(results) return results } module.exports = async (params:any) => await getEsearch(params)