From af0a3f4abb9afcfb84093d78d5940ccec6f7e758 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Sat, 9 Dec 2023 11:02:20 -0500 Subject: [PATCH] [mv3] Have one rule per line in ruleset files --- platform/mv3/make-rulesets.js | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/platform/mv3/make-rulesets.js b/platform/mv3/make-rulesets.js index 2f5af9a9a..99663dcf9 100644 --- a/platform/mv3/make-rulesets.js +++ b/platform/mv3/make-rulesets.js @@ -295,9 +295,15 @@ function pruneHostnameArray(hostnames) { return assemble(rootMap, '', []); } -/******************************************************************************/ +/******************************************************************************* + * + * One rule per line for compromise between size and readability. This also + * means that the number of lines in resulting file representative of the + * number of rules in the ruleset. + * + * */ -async function processNetworkFilters(assetDetails, network) { +function toJSONRuleset(ruleset) { const replacer = (k, v) => { if ( k.startsWith('_') ) { return; } if ( Array.isArray(v) ) { @@ -312,7 +318,16 @@ async function processNetworkFilters(assetDetails, network) { } return v; }; + const out = []; + for ( const rule of ruleset ) { + out.push(JSON.stringify(rule, replacer)); + } + return `[\n${out.join(',\n')}\n]\n`; +} +/******************************************************************************/ + +async function processNetworkFilters(assetDetails, network) { const { ruleset: rules } = network; log(`Input filter count: ${network.filterCount}`); log(`\tAccepted filter count: ${network.acceptedFilterCount}`); @@ -394,38 +409,36 @@ async function processNetworkFilters(assetDetails, network) { log(`\tUnsupported: ${bad.length}`); log(bad.map(rule => rule._error.map(v => `\t\t${v}`)).join('\n'), true); - const jsonIndent = platform !== 'firefox' ? 1 : undefined; - writeFile( `${rulesetDir}/main/${assetDetails.id}.json`, - `${JSON.stringify(plainGood, replacer, jsonIndent)}\n` + toJSONRuleset(plainGood) ); if ( regexes.length !== 0 ) { writeFile( `${rulesetDir}/regex/${assetDetails.id}.json`, - `${JSON.stringify(regexes, replacer, 1)}\n` + toJSONRuleset(regexes) ); } if ( removeparamsGood.length !== 0 ) { writeFile( `${rulesetDir}/removeparam/${assetDetails.id}.json`, - `${JSON.stringify(removeparamsGood, replacer, 1)}\n` + toJSONRuleset(removeparamsGood) ); } if ( redirects.length !== 0 ) { writeFile( `${rulesetDir}/redirect/${assetDetails.id}.json`, - `${JSON.stringify(redirects, replacer, 1)}\n` + toJSONRuleset(redirects) ); } if ( modifyHeaders.length !== 0 ) { writeFile( `${rulesetDir}/modify-headers/${assetDetails.id}.json`, - `${JSON.stringify(modifyHeaders, replacer, 1)}\n` + toJSONRuleset(modifyHeaders) ); }