| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- "use strict";
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
- };
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- const axios_1 = __importDefault(require("axios"));
- const genbank_parser_1 = __importDefault(require("genbank-parser"));
- const fast_xml_parser_1 = require("fast-xml-parser");
- const jsonata_1 = __importDefault(require("jsonata"));
- const simpleJSON = (json) => {
- if (Array.isArray(json)) {
- if (json.length === 1) {
- return simpleJSON(json[0]);
- }
- else {
- return json;
- }
- }
- else if (typeof json === 'object') {
- if (Object.keys(json).length === 1 && typeof json[Object.keys(json)[0]] === 'object') {
- return simpleJSON(json[Object.keys(json)[0]]);
- }
- else {
- return json;
- }
- }
- else {
- return json;
- }
- };
- const renameKeys = (json) => {
- if (Array.isArray(json)) {
- return json.map(e => renameKeys(e));
- }
- else if (typeof json === 'object') {
- const newObj = {};
- Object.keys(json).map(key => {
- let tmp;
- if (typeof json[key] === 'object') {
- tmp = renameKeys(json[key]);
- }
- else {
- tmp = json[key];
- }
- newObj[key.replace(/-/g, "_")] = tmp;
- });
- return newObj;
- }
- else {
- return json;
- }
- };
- const getEsearch = (params) => __awaiter(void 0, void 0, void 0, function* () {
- const endpoint = (params === null || params === void 0 ? void 0 : params.endpoint) ? params.endpoint : 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi';
- const queries = Array.isArray(params === null || params === void 0 ? void 0 : params.query) ? params === null || params === void 0 ? void 0 : params.query : [params === null || params === void 0 ? void 0 : params.query];
- params.id = Array.isArray(params === null || params === void 0 ? void 0 : params.id) ? params.id.join(',') : params.id;
- let allowedParams;
- let connType = 'get';
- if (endpoint.match('esearch')) {
- allowedParams = ['db', 'term', 'retmax', 'retstart', 'api_key'];
- params = Object.assign(Object.assign({}, params), { retmax: 100000, retmode: 'xml' });
- }
- else if (endpoint.match('efetch')) {
- connType = 'get';
- allowedParams = ['id', 'db', 'retmode', 'rettype', 'retmax', 'api_key'];
- const retmode = (params === null || params === void 0 ? void 0 : params.rettype) === 'fasta' || (params === null || params === void 0 ? void 0 : params.rettype) === 'gb' ? 'txt' : 'xml';
- params = Object.assign(Object.assign({}, params), { retmax: 10000, retmode });
- }
- else if (endpoint.match('esummary')) {
- allowedParams = ['id', 'db', 'retmode', 'rettype', 'retstart', 'version', 'api_key'];
- params = Object.assign(Object.assign({}, params), { retmax: 10000, retmode: 'xml', version: '2.0' });
- }
- let response = '';
- switch (connType) {
- case 'post':
- let postParam = {};
- Object.keys(params).flatMap(k => allowedParams.includes(k) ? postParam[k] = params[k] : []);
- response = yield axios_1.default.post(endpoint, postParam);
- break;
- case 'get':
- const q = `${endpoint}?${Object.keys(params).flatMap(k => allowedParams.includes(k) ? k + '=' + params[k] : []).join('&')}`;
- console.log(q);
- let block = 0;
- let ctrl = true;
- while (ctrl && block <= 5) {
- try {
- response = yield axios_1.default.get(q);
- ctrl = false;
- }
- catch (error) { }
- block++;
- if (block === 6) {
- console.log("Dropping !!! ", q);
- }
- }
- default:
- break;
- }
- let json = Array.isArray(response.data) ? response.data.join('') : response.data;
- if (params === null || params === void 0 ? void 0 : params.retmode) {
- switch (params.retmode) {
- case 'xml':
- const parser = new fast_xml_parser_1.XMLParser({
- ignoreAttributes: false,
- alwaysCreateTextNode: false,
- attributeNamePrefix: "",
- textNodeName: "value",
- allowBooleanAttributes: true,
- });
- json = parser.parse(json);
- break;
- case 'gb':
- json = (0, genbank_parser_1.default)(json);
- break;
- default:
- break;
- }
- }
- json = renameKeys(json);
- const results = [];
- for (const query of queries) {
- let result;
- if (query !== '') {
- result = { query, value: (0, jsonata_1.default)(query).evaluate(json) /*simpleJSON(JSONPath({path: query, json})) */ };
- }
- else {
- result = '';
- }
- results.push(result);
- }
- return simpleJSON(results);
- });
- module.exports = (params) => __awaiter(void 0, void 0, void 0, function* () { return yield getEsearch(params); });
|