UNPKG

ayakashi

Version:

The next generation web scraping framework

224 lines (223 loc) 7.15 kB
"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; } }