syphonx-core
Version:
SyphonX is a template-driven solution for extracting data from HTML in a highly efficient way. It combines the power of jQuery, Regular Expressions, and Javascript into a declarative template-driven format that extracts and reshapes HTML data into JSON.
88 lines • 3.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.flattenTemplateTransforms = exports.flattenTemplateSelect = exports.flattenTemplateActions = exports.findSelect = exports.findLastSelectGroup = exports.findAction = void 0;
function findAction(actions, action_type) {
return flattenTemplateActions(actions)
.map(function (obj) { return obj.action; })
.filter(function (action) { return action.hasOwnProperty(action_type); });
}
exports.findAction = findAction;
function findLastSelectGroup(actions) {
var selectActions = findAction(actions, "select").map(function (action) { return action.select; });
return selectActions.at(-1);
}
exports.findLastSelectGroup = findLastSelectGroup;
function findSelect(actions, name) {
var group = findAction(actions, "select").map(function (action) { return action.select; });
var result = [];
for (var _i = 0, group_1 = group; _i < group_1.length; _i++) {
var action = group_1[_i];
for (var _a = 0, action_1 = action; _a < action_1.length; _a++) {
var select = action_1[_a];
if (select.name === name)
result.push(select);
}
}
return result;
}
exports.findSelect = findSelect;
function flattenTemplateActions(actions, result, level, n) {
if (result === void 0) { result = []; }
if (level === void 0) { level = 0; }
for (var _i = 0, actions_1 = actions; _i < actions_1.length; _i++) {
var action = actions_1[_i];
result.push(!n ? { action: action, level: level } : { action: action, level: level, case: n });
if (action.hasOwnProperty("each"))
flattenTemplateActions(action.each.actions, result, level + 1);
else if (action.hasOwnProperty("repeat"))
flattenTemplateActions(action.repeat.actions, result, level + 1);
else if (action.hasOwnProperty("switch"))
for (var _a = 0, _b = action.switch; _a < _b.length; _a++) {
var obj = _b[_a];
flattenTemplateActions(obj.actions, result, level + 1, action.switch.indexOf(obj) + 1);
}
}
return result;
}
exports.flattenTemplateActions = flattenTemplateActions;
function flattenTemplateSelect(actions, names) {
var group = findAction(actions, "select").map(function (action) { return action.select; });
var result = [];
for (var _i = 0, group_2 = group; _i < group_2.length; _i++) {
var action = group_2[_i];
var _loop_1 = function (select) {
if (!names || (select.name && names.includes(select.name))) {
var existing_select = result.find(function (obj) { return obj.name === select.name; });
if (!existing_select)
result.push(select);
else if (existing_select.query || select.query)
existing_select.query = mergeQueries(existing_select.query, select.query);
}
};
for (var _a = 0, action_2 = action; _a < action_2.length; _a++) {
var select = action_2[_a];
_loop_1(select);
}
}
return result;
}
exports.flattenTemplateSelect = flattenTemplateSelect;
function flattenTemplateTransforms(actions) {
return findAction(actions, "transform").map(function (action) { return action.transform; }).flat();
}
exports.flattenTemplateTransforms = flattenTemplateTransforms;
function mergeQueries(q1, q2) {
if (q1 && q2) {
var jsons_1 = q1.map(function (obj) { return JSON.stringify(obj); });
var a = q2.filter(function (obj) { return jsons_1.find(function (json) { return json === JSON.stringify(obj); }); });
q1.push.apply(q1, a);
return q1;
}
else if (q1 && !q2)
return q1;
else if (!q1 && q2)
return q2;
else
return undefined;
}
//# sourceMappingURL=utilities.js.map