| 1234567891011121314151617181920212223242526272829303132333435363738 |
- 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)
|