esearch.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import axios from 'axios'
  2. import genbankParser from 'genbank-parser'
  3. import { XMLParser } from 'fast-xml-parser'
  4. import jsonata from "jsonata"
  5. const getEsearch = async (
  6. params: any
  7. ) => {
  8. const endpoint = params?.endpoint ? params.endpoint : 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi'
  9. const query = params?.query || ''
  10. const allowedParams = ['id', 'db', 'retmode', 'rettype']
  11. // console.log('query :', `${endpoint}?${Object.keys(params).flatMap(k => allowedParams.includes(k) ? k + '=' + params[k] : []).join('&')}`);
  12. const response = await axios.get(`${endpoint}?${Object.keys(params).flatMap(k => allowedParams.includes(k) ? k + '=' + params[k] : []).join('&')}`)
  13. let results = Array.isArray(response.data) ? response.data.join('') : response.data
  14. if (params?.retmode) {
  15. switch (params.retmode) {
  16. case 'xml':
  17. const parser = new XMLParser({
  18. ignoreAttributes : false, alwaysCreateTextNode: false, attributeNamePrefix : "attr-", allowBooleanAttributes: true
  19. })
  20. results = parser.parse(results)
  21. break;
  22. case 'gb':
  23. results = genbankParser(results)
  24. break;
  25. default:
  26. break;
  27. }
  28. }
  29. if (query !== '') results = jsonata(query).evaluate(results)
  30. return results
  31. }
  32. module.exports = async (params:any) => await getEsearch(params)