aboutsummaryrefslogtreecommitdiffstats
path: root/web/src/js/filt/filt.js
diff options
context:
space:
mode:
Diffstat (limited to 'web/src/js/filt/filt.js')
-rw-r--r--web/src/js/filt/filt.js65
1 files changed, 50 insertions, 15 deletions
diff --git a/web/src/js/filt/filt.js b/web/src/js/filt/filt.js
index 6d7d10ba..60186491 100644
--- a/web/src/js/filt/filt.js
+++ b/web/src/js/filt/filt.js
@@ -57,7 +57,7 @@ Filt = (function() {
peg$c22 = { type: "literal", value: "(", description: "\"(\"" },
peg$c23 = ")",
peg$c24 = { type: "literal", value: ")", description: "\")\"" },
- peg$c25 = function(expr) { return binding(orExpr); },
+ peg$c25 = function(expr) { return binding(expr); },
peg$c26 = "~a",
peg$c27 = { type: "literal", value: "~a", description: "\"~a\"" },
peg$c28 = function() { return assetFilter; },
@@ -1512,31 +1512,42 @@ Filt = (function() {
function or(first, second) {
// Add explicit function names to ease debugging.
- return function orFilter() {
+ function orFilter() {
first.apply(this, arguments) || second.apply(this, arguments);
};
+ orFilter.desc = first.desc + " or " + second.desc;
+ return orFilter;
}
function and(first, second) {
- return function andFilter() {
+ function andFilter() {
return first.apply(this, arguments) && second.apply(this, arguments);
}
+ andFilter.desc = first.desc + " and " + second.desc;
+ return andFilter;
}
function not(expr) {
- return function notFilter() {
+ function notFilter() {
return !expr.apply(this, arguments);
};
+ notFilter.desc = "not " + expr.desc;
+ return notFilter;
}
function binding(expr) {
- return function bindingFilter() {
+ function bindingFilter() {
return expr.apply(this, arguments);
};
+ bindingFilter.desc = "(" + expr.desc + ")";
+ return bindingFilter;
}
function trueFilter(flow) {
return true;
}
+ trueFilter.desc = "true";
function falseFilter(flow) {
return false;
}
+ falseFilter.desc = "false";
+
var ASSET_TYPES = [
new RegExp("text/javascript"),
new RegExp("application/x-javascript"),
@@ -1557,83 +1568,107 @@ Filt = (function() {
}
return false;
}
+ assetFilter.desc = "is asset";
function responseCode(code){
code = parseInt(code);
- return function responseCodeFilter(flow){
+ function responseCodeFilter(flow){
return flow.response && flow.response.code === code;
};
+ responseCodeFilter.desc = "resp. code is " + code;
+ return responseCodeFilter;
}
function domain(regex){
regex = new RegExp(regex, "i");
- return function domainFilter(flow){
+ function domainFilter(flow){
return flow.request && regex.test(flow.request.host);
};
+ domainFilter.desc = "domain matches " + regex;
+ return domainFilter;
}
function errorFilter(flow){
return !!flow.error;
}
+ errorFilter.desc = "has error";
function header(regex){
regex = new RegExp(regex, "i");
- return function headerFilter(flow){
+ function headerFilter(flow){
return (
(flow.request && RequestUtils.match_header(flow.request, regex))
||
(flow.response && ResponseUtils.match_header(flow.response, regex))
);
};
+ headerFilter.desc = "header matches " + regex;
+ return headerFilter;
}
function requestHeader(regex){
regex = new RegExp(regex, "i");
- return function requestHeaderFilter(flow){
+ function requestHeaderFilter(flow){
return (flow.request && RequestUtils.match_header(flow.request, regex));
}
+ requestHeaderFilter.desc = "req. header matches " + regex;
+ return requestHeaderFilter;
}
function responseHeader(regex){
regex = new RegExp(regex, "i");
- return function responseHeaderFilter(flow){
+ function responseHeaderFilter(flow){
return (flow.response && ResponseUtils.match_header(flow.response, regex));
}
+ responseHeaderFilter.desc = "resp. header matches " + regex;
+ return responseHeaderFilter;
}
function method(regex){
regex = new RegExp(regex, "i");
- return function methodFilter(flow){
+ function methodFilter(flow){
return flow.request && regex.test(flow.request.method);
};
+ methodFilter.desc = "method matches " + regex;
+ return methodFilter;
}
function noResponseFilter(flow){
return flow.request && !flow.response;
}
+ noResponseFilter.desc = "has no response";
function responseFilter(flow){
return !!flow.response;
}
+ responseFilter.desc = "has response";
function contentType(regex){
regex = new RegExp(regex, "i");
- return function contentTypeFilter(flow){
+ function contentTypeFilter(flow){
return (
(flow.request && regex.test(RequestUtils.getContentType(flow.request)))
||
(flow.response && regex.test(ResponseUtils.getContentType(flow.response)))
);
};
+ contentTypeFilter.desc = "content type matches " + regex;
+ return contentTypeFilter;
}
function requestContentType(regex){
regex = new RegExp(regex, "i");
- return function requestContentTypeFilter(flow){
+ function requestContentTypeFilter(flow){
return flow.request && regex.test(RequestUtils.getContentType(flow.request));
};
+ requestContentTypeFilter.desc = "req. content type matches " + regex;
+ return requestContentTypeFilter;
}
function responseContentType(regex){
regex = new RegExp(regex, "i");
- return function responseContentTypeFilter(flow){
+ function responseContentTypeFilter(flow){
return flow.response && regex.test(ResponseUtils.getContentType(flow.response));
};
+ responseContentTypeFilter.desc = "resp. content type matches " + regex;
+ return responseContentTypeFilter;
}
function url(regex){
regex = new RegExp(regex, "i");
- return function urlFilter(flow){
+ function urlFilter(flow){
return flow.request && regex.test(RequestUtils.pretty_url(flow.request));
}
+ urlFilter.desc = "url matches " + regex;
+ return urlFilter;
}