From e8202af11d0d3b6b5c1b345679eaae47f7d030c1 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Wed, 4 Sep 2024 11:32:26 -0400 Subject: [PATCH] Improve `prevent-fetch` scriptlet - Add support for negated matches - Log caller's arguments when verbose logging is enabled --- assets/resources/scriptlets.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index 07260358c..5a27d810b 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -97,7 +97,7 @@ function safeSelf() { }, initPattern(pattern, options = {}) { if ( pattern === '' ) { - return { matchAll: true }; + return { matchAll: true, expect: true }; } const expect = (options.canNegate !== true || pattern.startsWith('!') === false); if ( expect === false ) { @@ -2151,7 +2151,7 @@ function noFetchIf( key = 'url'; value = condition; } - needles.push({ key, re: safe.patternToRegex(value) }); + needles.push({ key, pattern: safe.initPattern(value, { canNegate: true }) }); } const validResponseProps = { ok: [ false, true ], @@ -2180,6 +2180,9 @@ function noFetchIf( const details = args[0] instanceof self.Request ? args[0] : Object.assign({ url: args[0] }, args[1]); + if ( safe.logLevel > 1 ) { + safe.uboLog(logPrefix, `apply:\n\t${Object.entries(details).map(a => `${a[0]}: ${a[1]}`).join('\n\t')}`); + } let proceed = true; try { const props = new Map(); @@ -2198,10 +2201,10 @@ function noFetchIf( return Reflect.apply(target, thisArg, args); } proceed = needles.length === 0; - for ( const { key, re } of needles ) { + for ( const { key, pattern } of needles ) { if ( - props.has(key) === false || - re.test(props.get(key)) === false + pattern.expect && props.has(key) === false || + safe.testPattern(pattern, props.get(key)) === false ) { proceed = true; break;