@@ -74,24 +74,25 @@ normalized:
7474*/
7575
7676function RuleSet ( rules ) {
77- this . rules = RuleSet . normalizeRules ( rules ) ;
77+ this . references = { } ;
78+ this . rules = RuleSet . normalizeRules ( rules , this . references ) ;
7879}
7980
8081module . exports = RuleSet ;
8182
82- RuleSet . normalizeRules = function ( rules ) {
83+ RuleSet . normalizeRules = function ( rules , refs ) {
8384 if ( Array . isArray ( rules ) ) {
8485 return rules . map ( function ( rule ) {
85- return RuleSet . normalizeRule ( rule ) ;
86+ return RuleSet . normalizeRule ( rule , refs ) ;
8687 } ) ;
8788 } else if ( rules ) {
88- return [ RuleSet . normalizeRule ( rules ) ]
89+ return [ RuleSet . normalizeRule ( rules , refs ) ]
8990 } else {
9091 return [ ] ;
9192 }
9293} ;
9394
94- RuleSet . normalizeRule = function ( rule ) {
95+ RuleSet . normalizeRule = function ( rule , refs ) {
9596 if ( typeof rule === "string" )
9697 return {
9798 use : [ {
@@ -166,10 +167,10 @@ RuleSet.normalizeRule = function(rule) {
166167 }
167168
168169 if ( rule . rules )
169- newRule . rules = RuleSet . normalizeRules ( rule . rules ) ;
170+ newRule . rules = RuleSet . normalizeRules ( rule . rules , refs ) ;
170171
171172 if ( rule . oneOf )
172- newRule . oneOf = RuleSet . normalizeRules ( rule . oneOf ) ;
173+ newRule . oneOf = RuleSet . normalizeRules ( rule . oneOf , refs ) ;
173174
174175 var keys = Object . keys ( rule ) . filter ( function ( key ) {
175176 return [ "resource" , "test" , "include" , "exclude" , "issuer" , "loader" , "options" , "query" , "loaders" , "use" , "rules" , "oneOf" ] . indexOf ( key ) < 0 ;
@@ -190,6 +191,14 @@ RuleSet.normalizeRule = function(rule) {
190191 resourceSource = newSource ;
191192 }
192193
194+ if ( Array . isArray ( newRule . use ) ) {
195+ newRule . use . forEach ( function ( item ) {
196+ if ( typeof item . options === "object" && item . options && item . options . ident ) {
197+ refs [ "$" + item . options . ident ] = item . options ;
198+ }
199+ } ) ;
200+ }
201+
193202 return newRule ;
194203} ;
195204
@@ -389,3 +398,9 @@ RuleSet.prototype._run = function _run(data, rule, result) {
389398
390399 return true ;
391400} ;
401+
402+ RuleSet . prototype . findOptionsByIdent = function findOptionsByIdent ( ident ) {
403+ var options = this . references [ "$" + ident ] ;
404+ if ( ! options ) throw new Error ( "Can't find options with ident '" + ident + "'" ) ;
405+ return options ;
406+ } ;
0 commit comments