|
15 | 15 | test: <condition>, -> resource.test |
16 | 16 | include: <condition>, -> resource.include |
17 | 17 | exclude: <condition>, -> resource.exclude |
18 | | - issuer: { |
19 | | - test: <condition>, |
20 | | - include: <condition>, |
21 | | - exclude: <condition>, |
22 | | - }, |
23 | | - issuer: <condition>, -> issuer.test |
| 18 | + resourceQuery: <condition>, |
| 19 | + issuer: <condition>, |
24 | 20 | use: "loader", -> use[0].loader |
25 | 21 | loader: <>, -> use[0].loader |
26 | 22 | loaders: <>, -> use |
@@ -58,6 +54,7 @@ normalized: |
58 | 54 |
|
59 | 55 | { |
60 | 56 | resource: function(), |
| 57 | + resourceQuery: function(), |
61 | 58 | issuer: function(), |
62 | 59 | use: [ |
63 | 60 | { |
@@ -131,6 +128,14 @@ RuleSet.normalizeRule = function(rule) { |
131 | 128 | } |
132 | 129 | } |
133 | 130 |
|
| 131 | + if(rule.resourceQuery) { |
| 132 | + try { |
| 133 | + newRule.resourceQuery = RuleSet.normalizeCondition(rule.resourceQuery); |
| 134 | + } catch(error) { |
| 135 | + throw new Error(RuleSet.buildErrorMessage(rule.resourceQuery, error)); |
| 136 | + } |
| 137 | + } |
| 138 | + |
134 | 139 | if(rule.issuer) { |
135 | 140 | try { |
136 | 141 | newRule.issuer = RuleSet.normalizeCondition(rule.issuer); |
@@ -172,7 +177,7 @@ RuleSet.normalizeRule = function(rule) { |
172 | 177 | newRule.oneOf = RuleSet.normalizeRules(rule.oneOf); |
173 | 178 |
|
174 | 179 | var keys = Object.keys(rule).filter(function(key) { |
175 | | - return ["resource", "test", "include", "exclude", "issuer", "loader", "options", "query", "loaders", "use", "rules", "oneOf"].indexOf(key) < 0; |
| 180 | + return ["resource", "resourceQuery", "test", "include", "exclude", "issuer", "loader", "options", "query", "loaders", "use", "rules", "oneOf"].indexOf(key) < 0; |
176 | 181 | }); |
177 | 182 | keys.forEach(function(key) { |
178 | 183 | newRule[key] = rule[key]; |
@@ -344,16 +349,20 @@ RuleSet.prototype._run = function _run(data, rule, result) { |
344 | 349 | // test conditions |
345 | 350 | if(rule.resource && !data.resource) |
346 | 351 | return false; |
| 352 | + if(rule.resourceQuery && !data.resourceQuery) |
| 353 | + return false; |
347 | 354 | if(rule.issuer && !data.issuer) |
348 | 355 | return false; |
349 | 356 | if(rule.resource && !rule.resource(data.resource)) |
350 | 357 | return false; |
351 | 358 | if(data.issuer && rule.issuer && !rule.issuer(data.issuer)) |
352 | 359 | return false; |
| 360 | + if(data.resourceQuery && rule.resourceQuery && !rule.resourceQuery(data.resourceQuery)) |
| 361 | + return false; |
353 | 362 |
|
354 | 363 | // apply |
355 | 364 | var keys = Object.keys(rule).filter(function(key) { |
356 | | - return ["resource", "issuer", "rules", "oneOf", "use", "enforce"].indexOf(key) < 0; |
| 365 | + return ["resource", "resourceQuery", "issuer", "rules", "oneOf", "use", "enforce"].indexOf(key) < 0; |
357 | 366 | }); |
358 | 367 | keys.forEach(function(key) { |
359 | 368 | result.push({ |
|
0 commit comments