From 14d60ac5d3a1c5c2b9b8c062ea31e4ddcd13a98f Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Wed, 6 Sep 2023 13:04:43 -0400 Subject: [PATCH] Fix `json-prune-xhr-response` as per feedback Related commit: https://github.com/gorhill/uBlock/commit/abe41034f6e63ef726aa2818a83fdc271f07c285 --- assets/resources/scriptlets.js | 36 ++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index dfcb0a62e..b7a0850c1 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -1365,25 +1365,41 @@ function jsonPruneXhrResponse( if ( xhrDetails === undefined ) { return innerResponse; } - if ( typeof innerResponse !== 'object' ) { - xhrDetails.response = innerResponse; + if ( xhrDetails.response !== undefined ) { + return xhrDetails.response; } - let outerResponse = xhrDetails.response; - if ( outerResponse !== undefined ) { - return outerResponse; + let objBefore; + if ( typeof innerResponse === 'object' ) { + objBefore = innerResponse; + } else if ( typeof innerResponse === 'string' ) { + try { objBefore = safe.jsonParse(innerResponse); } + catch(ex) { } } - outerResponse = objectPrune( - innerResponse, + if ( typeof objBefore !== 'object' ) { + return (xhrDetails.response = innerResponse); + } + const objAfter = objectPrune( + objBefore, rawPrunePaths, rawNeedlePaths, { matchAll: true }, extraArgs ); - if ( typeof outerResponse !== 'object' ) { + let outerResponse; + if ( typeof objAfter === 'object' ) { + outerResponse = typeof innerResponse === 'string' + ? safe.jsonStringify(objAfter) + : objAfter; + } else { outerResponse = innerResponse; } - xhrDetails.response = outerResponse; - return outerResponse; + return (xhrDetails.response = outerResponse); + } + get responseText() { + const response = this.response; + return typeof response !== 'string' + ? super.responseText + : response; } }; }