diff options
Diffstat (limited to 'config/webpack')
| -rw-r--r-- | config/webpack/loader/dynamic-imports-loader.js | 31 | ||||
| -rw-r--r-- | config/webpack/plugins/create-manifest-webpack-plugin/index.js | 14 | ||||
| -rw-r--r-- | config/webpack/plugins/create-manifest-webpack-plugin/manifest-template.json | 9 | ||||
| -rw-r--r-- | config/webpack/plugins/create-rules-webpack-plugin.js | 43 | ||||
| -rw-r--r-- | config/webpack/utils/filename-hash.js (renamed from config/webpack/utils/file-name-hash.js) | 3 |
5 files changed, 61 insertions, 39 deletions
diff --git a/config/webpack/loader/dynamic-imports-loader.js b/config/webpack/loader/dynamic-imports-loader.js deleted file mode 100644 index 12eb5b7..0000000 --- a/config/webpack/loader/dynamic-imports-loader.js +++ /dev/null @@ -1,31 +0,0 @@ -const { ImportManager } = require("import-manager"); -const { getFileNameHash } = webpackRequire("utils/file-name-hash"); - -const sharedModules = webpackRequire("utils/shared-modules.js"); - -module.exports = source => { - const manager = new ImportManager(source); - let modified = false; - - for (const unit of manager.imports.es6.units) { - const moduleIndex = sharedModules.indexOf(unit.module.name); - - if (moduleIndex >= 0 && unit.type === "es6") { - const importedModuleNames = unit.members.entities - .map(entity => `\t${entity.name}`) - .concat(unit.defaultMembers.entities.map(entity => `\tdefault: ${entity.name}`)) - .join(",\n"); - - const importStatement = `const {\n${importedModuleNames}\n} = await import(/* webpackIgnore: true */ "/shared/${getFileNameHash(sharedModules[moduleIndex], "shared")}.js");\n`; - - unit.methods = { - makeUntraceable() {} - }; - manager.remove(unit); - manager.insertStatement(importStatement, "bottom", "dynamic"); - modified = true; - } - } - - return modified ? manager.code.toString() + "\nexport {};" : source; -}; diff --git a/config/webpack/plugins/create-manifest-webpack-plugin/index.js b/config/webpack/plugins/create-manifest-webpack-plugin/index.js index 785d604..a2040da 100644 --- a/config/webpack/plugins/create-manifest-webpack-plugin/index.js +++ b/config/webpack/plugins/create-manifest-webpack-plugin/index.js @@ -2,7 +2,7 @@ const { sources } = require("webpack"); const path = require("path"); const { getScriptRuntimeFromType } = webpackRequire("utils/script-runtime"); -const { getFileNameHash } = webpackRequire("utils/file-name-hash"); +const { getFileNameHash } = webpackRequire("utils/filename-hash"); const scripts = webpackRequire("utils/scripts"); const sharedModules = webpackRequire("utils/shared-modules"); const manifest = webpackRequire("plugins/create-manifest-webpack-plugin/manifest-template.json"); @@ -35,6 +35,14 @@ class CreateManifestPlugin { } } + for (const sharedModule of sharedModules) { + manifest.content_scripts.push({ + matches: [`*://banglarbhumi.gov.in/BanglarBhumi/*`], + js: [`shared/${getFileNameHash(sharedModule, "shared")}.js`], + run_at: "document_start" + }); + } + const resources = []; for (const assetName in assets) { @@ -43,10 +51,6 @@ class CreateManifestPlugin { } } - for (const sharedModule of sharedModules) { - resources.push(`shared/${getFileNameHash(sharedModule, "shared")}.js`); - } - if (resources.length > 0) { manifest.web_accessible_resources = [ { diff --git a/config/webpack/plugins/create-manifest-webpack-plugin/manifest-template.json b/config/webpack/plugins/create-manifest-webpack-plugin/manifest-template.json index 0c59ef2..d1d29f4 100644 --- a/config/webpack/plugins/create-manifest-webpack-plugin/manifest-template.json +++ b/config/webpack/plugins/create-manifest-webpack-plugin/manifest-template.json @@ -1,9 +1,16 @@ { "manifest_version": 3, "name": "Banglar Bhumi Utils", - "permissions": ["scripting"], + "permissions": ["scripting", "declarativeNetRequest"], "description": "A chrome extension to improve functionality of the banglarbhumi.gov.in website.", "icons": { "512": "icon512.png" + }, + "declarative_net_request" : { + "rule_resources" : [{ + "id": "rules", + "enabled": true, + "path": "rules.json" + }] } } diff --git a/config/webpack/plugins/create-rules-webpack-plugin.js b/config/webpack/plugins/create-rules-webpack-plugin.js new file mode 100644 index 0000000..4a02e2f --- /dev/null +++ b/config/webpack/plugins/create-rules-webpack-plugin.js @@ -0,0 +1,43 @@ +const path = require("path"); +const fs = require("fs"); +const { sources } = require("webpack"); + +class CreateRulesPlugin { + apply(compiler) { + compiler.hooks.compilation.tap("CreateRulesPlugin", compilation => { + compilation.hooks.processAssets.tap( + { + name: "CreateRulesPlugin", + stage: compiler.webpack.Compilation.PROCESS_ASSETS_ADDITIONAL, + additionalAssets: true + }, + assets => { + const ruleFileNames = fs.readdirSync(path.resolve(SOURCE_DIR, "rules")); + const rules = []; + let ruleId = 1; + + for (const ruleFileName of ruleFileNames) { + const rule = require(path.resolve(SOURCE_DIR, "rules", ruleFileName)); + + if (rule instanceof Array) { + for (const rule of rule) { + rule.id = ruleId++; + rules.push(rule); + } + } else { + rule.id = ruleId++; + rules.push(rule); + } + } + + compilation.emitAsset( + "rules.json", + new sources.RawSource(JSON.stringify(rules, undefined, process.env.NODE_ENV === "production" ? undefined : "\t")) + ); + } + ); + }); + } +} + +module.exports = CreateRulesPlugin; diff --git a/config/webpack/utils/file-name-hash.js b/config/webpack/utils/filename-hash.js index 889e9a4..bd66647 100644 --- a/config/webpack/utils/file-name-hash.js +++ b/config/webpack/utils/filename-hash.js @@ -1,10 +1,9 @@ const crypto = require("crypto"); module.exports.getFileNameHash = (fileName, prefix) => { - const finalFileName = `${prefix}-${fileName}`; const hash = crypto .createHash("md5") - .update(finalFileName) + .update(`${prefix}-${fileName}`) .digest("hex"); return production ? hash : `${fileName}-${hash.substring(16)}`; |
