@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
JavaScript
;
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