@@ -45,13 +45,35 @@ function updateCache(type) {
4545 os . openCursor ( ) . onsuccess = function ( event ) {
4646 var cursor = event . target . result ;
4747 if ( cursor ) {
48- var s = cursor . value ;
48+ let s = cursor . value ;
49+ let isValidRule = true ;
4950 s . id = cursor . key ;
5051 // Init function here
5152 if ( s . isFunction ) {
52- s . func_body = new Function ( 'val' , 'detail' , s . code ) ;
53+ try {
54+ s . _func = new Function ( 'val' , 'detail' , s . code ) ;
55+ } catch ( e ) {
56+ isValidRule = false ;
57+ }
58+ }
59+ // Init regexp
60+ if ( s . matchType === 'regexp' ) {
61+ try {
62+ s . _reg = new RegExp ( s . pattern ) ;
63+ } catch ( e ) {
64+ isValidRule = false ;
65+ }
66+ }
67+ if ( typeof ( s . exclude ) === 'string' && s . exclude . length > 0 ) {
68+ try {
69+ s . _exclude = new RegExp ( s . exclude ) ;
70+ } catch ( e ) {
71+ isValidRule = false ;
72+ }
73+ }
74+ if ( isValidRule ) {
75+ all . push ( s ) ;
5376 }
54- all . push ( s ) ;
5577 cursor . continue ( ) ;
5678 } else {
5779 cachedRules [ type ] = all ;
@@ -93,11 +115,7 @@ function filterRules(rules, options) {
93115 result = true ;
94116 break ;
95117 case 'regexp' :
96- var r = runTryCatch ( ( ) => {
97- var reg = new RegExp ( rule . pattern ) ;
98- return reg . test ( url ) ;
99- } ) ;
100- result = ( r === undefined ? false : r ) ;
118+ result = rule . _reg . test ( url ) ;
101119 break ;
102120 case 'prefix' :
103121 result = url . indexOf ( rule . pattern ) === 0 ;
@@ -111,12 +129,8 @@ function filterRules(rules, options) {
111129 default :
112130 break ;
113131 }
114- if ( result && typeof ( rule . exclude ) === 'string' && rule . exclude . length > 0 ) {
115- var r = runTryCatch ( function ( ) {
116- var reg = new RegExp ( rule . exclude ) ;
117- return reg . test ( url ) ;
118- } ) ;
119- return ( typeof ( r ) === 'undefined' || r ) ? false : true ;
132+ if ( result && rule . _exclude ) {
133+ return ! ( rule . _exclude . test ( url ) ) ;
120134 } else {
121135 return result ;
122136 }
0 commit comments