This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
946 B
42 lines
946 B
"use strict"; |
|
|
|
var arrays = require("../../utils/arrays"), |
|
visitor = require("../visitor"); |
|
|
|
/* |
|
* Removes proxy rules -- that is, rules that only delegate to other rule. |
|
*/ |
|
function removeProxyRules(ast, options) { |
|
function isProxyRule(node) { |
|
return node.type === "rule" && node.expression.type === "rule_ref"; |
|
} |
|
|
|
function replaceRuleRefs(ast, from, to) { |
|
var replace = visitor.build({ |
|
rule_ref: function(node) { |
|
if (node.name === from) { |
|
node.name = to; |
|
} |
|
} |
|
}); |
|
|
|
replace(ast); |
|
} |
|
|
|
var indices = []; |
|
|
|
arrays.each(ast.rules, function(rule, i) { |
|
if (isProxyRule(rule)) { |
|
replaceRuleRefs(ast, rule.name, rule.expression.name); |
|
if (!arrays.contains(options.allowedStartRules, rule.name)) { |
|
indices.push(i); |
|
} |
|
} |
|
}); |
|
|
|
indices.reverse(); |
|
|
|
arrays.each(indices, function(i) { ast.rules.splice(i, 1); }); |
|
} |
|
|
|
module.exports = removeProxyRules;
|
|
|