@luminati-io/luminati-proxy
Version:
A configurable local proxy for luminati.io
38 lines (34 loc) • 1 kB
JavaScript
// LICENSE_CODE ZON
; /*jslint node:true*/
require('./config.js');
const _ = require('lodash');
const E = exports;
E.select_rules = (all_rules, selector)=>{
let matches = all_rules.filter(x=>matches_rule(x.match, selector));
return _.merge({}, ...matches.map(x=>x.rules), (dest, src)=>{
if (Array.isArray(src))
return src;
});
};
function matches_rule(rule, data){
for (let k in rule)
{
if (k=='version_min')
{
if ((rule[k]||0)>(data.version||0))
return false;
}
else if (!rule_value_match(rule[k], data[k]))
return false;
}
return true;
}
function rule_value_match(rule_v, v){
if (Array.isArray(rule_v))
return rule_v.some(_rule_v=>rule_value_match(_rule_v, v));
if (!_.isObject(rule_v))
return rule_v==v;
if (rule_v.test)
return rule_v.test(v||'');
return _.every(rule_v, (_rule_v, k)=>rule_value_match(_rule_v, v && v[k]));
}