UNPKG

@easyscrape/core

Version:

EasyScrape is a NodeJS module designed to be integrated into your web scraping project. With it, you can more easily get information from the web from a JSON object to organized data, as a REST API could give you!

103 lines 5.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const IESQuery_1 = tslib_1.__importDefault(require("../Interfaces/ITypes/IESQuery.type")); const EasyScrapeMiddleware_1 = tslib_1.__importDefault(require("./EasyScrapeMiddleware.abstract")); const IESIfObject_1 = tslib_1.__importDefault(require("../Interfaces/ITypes/IESIfObject.type")); class AbstractESQueriesManager { constructor(MiddlewareModule) { this.MiddlewareModule = MiddlewareModule; } _each$($, param, query, key) { return this.MiddlewareModule.collectFromQuery($, { _select: param, _foreach: this.MiddlewareModule.getAftersQueries(query, key) }); } _foreach$($, query, key) { let response = []; let hasIterateAll = false; let value = query[key]; value = typeof query[key] === 'function' ? value($) : value; const isIterable = typeof query[key] === 'function' ? value : this.MiddlewareModule.isIterable($); if (typeof value === 'object' && isIterable) { for (let j = 0; j < $.length; j++) { response.push(this.MiddlewareModule.collectFromQuery($[j], value)); } } else if ((value === true || (typeof value === 'string' && value.toLowerCase() === 'all')) && isIterable) { for (let j = 0; j < $.length; j++) { response.push(this.MiddlewareModule.collectFromQuery($[j], this.MiddlewareModule.getAftersQueries(query, key))); } hasIterateAll = true; } response = isIterable ? response : $; return { hasIterateAll, response }; } _log$(response, value) { if (value === true) { console.log(response); } else { console.log(typeof value === 'function' ? value(response) : value); } } _if$(currentResponse, value) { let response = currentResponse; if (typeof value === 'object') { if (value._if === undefined) throw new Error('"if" query is required on if conditional object!'); if (value._then === undefined && value._set === undefined) throw new Error('"then" or "set" query is required on if conditional object!'); const condition = typeof value._if === 'function' ? value._if(response) : !!value._if; if (condition && value._then && this.MiddlewareModule.isValidQuery(value._then)) { response = this.MiddlewareModule.collectFromQuery(response, value._then); } else if (condition && value._then !== undefined) { response = typeof value._then === 'function' ? value._then(response) : value._then; } else if (condition && value._set !== undefined) { response = value._set; } else { const elseCase = Object.keys(value).filter(key => /^_?else/.test(key)); if (elseCase.length > 0) { for (let i = 0; i < elseCase.length; i++) { const elseObj = value[elseCase[i]]; if (elseCase[i].toLowerCase() !== '_else' && elseObj._if !== undefined) { const elseCondition = typeof elseObj._if === 'function' ? elseObj._if(response) : !!value._if; if (elseObj._then === undefined && elseObj._set === undefined) throw new Error('"then" or "set" query is required on if conditional object!'); if (elseCondition && elseObj._then) { if (this.MiddlewareModule.isValidQuery(elseObj._then)) { response = this.MiddlewareModule.collectFromQuery(response, elseObj._then); } else { response = typeof elseObj._then === 'function' ? elseObj._then(response) : elseObj._then; } break; } else if (elseCondition && elseObj._set !== undefined) { response = elseObj._set; break; } } else { response = this.MiddlewareModule.isValidQuery(elseObj) ? this.MiddlewareModule.collectFromQuery(response, elseObj) : elseObj; break; } } } } } else { throw new Error('Invalid condicional Object!'); } return response; } } exports.default = AbstractESQueriesManager; //# sourceMappingURL=ESQueriesManager.abstract.js.map