diff options
| author | Arpit Chakladar <arpitchakladar@gmail.com> | 2026-09-29 17:48:06 +0530 |
|---|---|---|
| committer | Arpit Chakladar <arpitchakladar@gmail.com> | 2026-09-29 17:51:16 +0530 |
| commit | b200c1345392c055bfe48e1c06d6dfc2a0768565 (patch) | |
| tree | 2bdf56aacc9e6ac38adc5a4896c27668ca686340 | |
| parent | 9544e606c0f2a35124018a3c1099d987ba673ae6 (diff) | |
| download | banglar-bhumi-utils-b200c1345392c055bfe48e1c06d6dfc2a0768565.tar.gz banglar-bhumi-utils-b200c1345392c055bfe48e1c06d6dfc2a0768565.zip | |
ci(config): ignore rules directory if src/rules is empty
| -rw-r--r-- | config/webpack/plugins/create-manifest-webpack-plugin/index.js | 6 | ||||
| -rw-r--r-- | config/webpack/plugins/create-rules-webpack-plugin.js | 23 | ||||
| -rw-r--r-- | src/rules/redirect-jquery-script.json | 12 |
3 files changed, 27 insertions, 14 deletions
diff --git a/config/webpack/plugins/create-manifest-webpack-plugin/index.js b/config/webpack/plugins/create-manifest-webpack-plugin/index.js index f2e28b2..e28c695 100644 --- a/config/webpack/plugins/create-manifest-webpack-plugin/index.js +++ b/config/webpack/plugins/create-manifest-webpack-plugin/index.js @@ -104,6 +104,12 @@ class CreateManifestPlugin { } } + // `CreateRulesPlugin` skips emitting `rules.json` when `src/rules/` + // holds no rule files, so drop the ruleset reference with it. + if (!("rules.json" in assets)) { + delete manifest.declarative_net_request; + } + const injectedSharedModules = this.sortedSharedModules .filter((sharedModule) => this.injectedSharedModulesImportedCount[sharedModule] > 0) .map((sharedModule) => `shared/${getFileName(sharedModule, "shared")}.js`); diff --git a/config/webpack/plugins/create-rules-webpack-plugin.js b/config/webpack/plugins/create-rules-webpack-plugin.js index ce2fbef..e2a2568 100644 --- a/config/webpack/plugins/create-rules-webpack-plugin.js +++ b/config/webpack/plugins/create-rules-webpack-plugin.js @@ -7,6 +7,12 @@ import webpack from "webpack"; * Webpack plugin that reads all JSON rule files from `src/rules/`, * assigns sequential IDs to each rule, and emits a single `rules.json` * asset used by `declarativeNetRequest`. + * + * If `src/rules/` is missing or contains no JSON rule files, no asset is + * emitted and a build warning is raised. `CreateManifestPlugin` relies on + * that: it drops the `declarative_net_request` manifest key when + * `rules.json` is absent, so the extension never ships a dangling ruleset + * reference. */ class CreateRulesPlugin { /** @@ -21,12 +27,25 @@ class CreateRulesPlugin { stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL }, (_assets) => { - const ruleFileNames = fs.readdirSync(path.resolve(SOURCE_DIR, "rules")); + const rulesDirectoryPath = path.resolve(SOURCE_DIR, "rules"); + const ruleFileNames = fs.existsSync(rulesDirectoryPath) + ? fs.readdirSync(rulesDirectoryPath).filter((ruleFileName) => ruleFileName.endsWith(".json")) + : []; const rules = []; let ruleId = 1; + if (ruleFileNames.length === 0) { + compilation.warnings.push( + new Error( + `No *.json rule files found in ${rulesDirectoryPath}; skipping the rules.json asset and the declarative_net_request manifest key.` + ) + ); + + return; + } + for (const ruleFileName of ruleFileNames) { - const rule = JSON.parse(fs.readFileSync(path.resolve("src/rules", ruleFileName))); + const rule = JSON.parse(fs.readFileSync(path.resolve(rulesDirectoryPath, ruleFileName))); if (rule instanceof Array) { for (const currentRule of rule) { diff --git a/src/rules/redirect-jquery-script.json b/src/rules/redirect-jquery-script.json deleted file mode 100644 index b54a7ed..0000000 --- a/src/rules/redirect-jquery-script.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "priority": 1, - "action": { - "type": "redirect", - "redirect": { - "url": "https://code.jquery.com/jquery-1.12.4.min.js" - } - }, - "condition": { - "urlFilter": "https://banglarbhumi.gov.in/BanglarBhumi/js/jquery-1.12.4.min.js" - } -} |
