ayakashi
Version:
The next generation web scraping framework
224 lines (223 loc) • 7.15 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.operators = void 0;
exports.operators = {
and: function (...reductions) {
return function () {
for (let i = 0; i < reductions.length; i += 1) {
if (typeof reductions[i] === "object") {
const op = Object.keys(reductions[i])[0];
//@ts-ignore
reductions[i] = exports.operators[op](...reductions[i][op]);
}
}
let result = reductions[0]();
for (let i = 1; i <= reductions.length - 1; i += 1) {
result = result && reductions[i]();
if (result === false)
break;
}
return result;
};
},
or: function (...reductions) {
return function () {
for (let i = 0; i < reductions.length; i += 1) {
if (typeof reductions[i] === "object") {
const op = Object.keys(reductions[i])[0];
//@ts-ignore
reductions[i] = exports.operators[op](...reductions[i][op]);
}
}
let result = reductions[0]();
for (let i = 1; i <= reductions.length - 1; i += 1) {
result = result || reductions[i]();
if (result === true)
break;
}
return result;
};
},
eq: function (domQuery, expected) {
return function () {
const domResult = domQuery();
if (domResult === null)
return false;
if (Array.isArray(domResult)) {
return !!domResult.find(member => {
return member === expected;
});
}
else {
return domResult === expected;
}
};
},
$neq: function (domQuery, expected) {
return function () {
const domResult = domQuery();
return _neq(domResult, expected);
};
},
neq: function (domQuery, expected) {
return function () {
const domResult = domQuery();
if (domResult === null)
return true;
return _neq(domResult, expected);
};
},
like: function (domQuery, expected) {
return function () {
const domResult = domQuery();
if (domResult === null)
return false;
if (Array.isArray(domResult)) {
return !!domResult.find(member => {
if (member && typeof member.match === "function") {
if (typeof expected === "string") {
return !!member.match(expected);
}
else if (expected instanceof RegExp) {
return !!member.match(new RegExp(expected, "i"));
}
else {
return false;
}
}
else {
return false;
}
});
}
else if (typeof domResult.match === "function") {
if (typeof expected === "string") {
return !!domResult.match(expected);
}
else if (expected instanceof RegExp) {
return !!domResult.match(new RegExp(expected, "i"));
}
else {
return false;
}
}
else {
return false;
}
};
},
$nlike: function (domQuery, expected) {
return function () {
const domResult = domQuery();
return _nlike(domResult, expected);
};
},
nlike: function (domQuery, expected) {
return function () {
const domResult = domQuery();
if (domResult === null)
return true;
return _nlike(domResult, expected);
};
},
in: function (domQuery, expected) {
return function () {
const domResult = domQuery();
if (domResult === null)
return false;
if (Array.isArray(domResult)) {
return !!domResult.find(member => {
if (expected && typeof expected.indexOf === "function") {
return expected.indexOf(member) > -1;
}
else {
return false;
}
});
}
else if (expected && typeof expected.indexOf === "function") {
return expected.indexOf(domResult) > -1;
}
else {
return false;
}
};
},
$nin: function (domQuery, expected) {
return function () {
const domResult = domQuery();
return _nin(domResult, expected);
};
},
nin: function (domQuery, expected) {
return function () {
const domResult = domQuery();
if (domResult === null)
return true;
return _nin(domResult, expected);
};
}
};
function _neq(domResult, expected) {
if (Array.isArray(domResult)) {
return !domResult.includes(expected);
}
else if (domResult) {
return domResult !== expected;
}
else {
return false;
}
}
function _nlike(domResult, expected) {
if (Array.isArray(domResult)) {
return domResult.filter(member => {
if (member && typeof member.match === "function") {
if (typeof expected === "string") {
return member.match(expected);
}
else if (expected instanceof RegExp) {
return member.match(new RegExp(expected, "i"));
}
else {
return false;
}
}
else {
return false;
}
}).length === 0;
}
else if (domResult && typeof domResult.match === "function") {
if (typeof expected === "string") {
return !domResult.match(expected);
}
else if (expected instanceof RegExp) {
return !domResult.match(new RegExp(expected, "i"));
}
else {
return false;
}
}
else {
return false;
}
}
function _nin(domResult, expected) {
if (Array.isArray(domResult)) {
return domResult.filter(member => {
if (expected && typeof expected.indexOf === "function") {
return expected.includes(member);
}
else {
return false;
}
}).length === 0;
}
else if (domResult && expected && typeof expected.indexOf === "function") {
return !expected.includes(domResult);
}
else {
return false;
}
}