aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArpit Chakladar <arpitchakladar@gmail.com>2026-09-29 17:48:06 +0530
committerArpit Chakladar <arpitchakladar@gmail.com>2026-09-29 17:51:16 +0530
commitb200c1345392c055bfe48e1c06d6dfc2a0768565 (patch)
tree2bdf56aacc9e6ac38adc5a4896c27668ca686340
parent9544e606c0f2a35124018a3c1099d987ba673ae6 (diff)
downloadbanglar-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.js6
-rw-r--r--config/webpack/plugins/create-rules-webpack-plugin.js23
-rw-r--r--src/rules/redirect-jquery-script.json12
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"
- }
-}