aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorArpit Chakladar <arpitchakladar+git@gmail.com>2026-07-13 20:56:46 +0530
committerArpit Chakladar <arpitchakladar+git@gmail.com>2026-07-13 21:01:07 +0530
commit20c3b38f24d79df8843f17985a7d13533d4e0d10 (patch)
tree4fd85847db3976ffc64f3be012455d61624ace43 /config
parent6f6c263a072c9df4e826d8ebb2035c82a87be7e0 (diff)
downloadbanglar-bhumi-utils-20c3b38f24d79df8843f17985a7d13533d4e0d10.tar.gz
banglar-bhumi-utils-20c3b38f24d79df8843f17985a7d13533d4e0d10.zip
refactor: some minor refactoring to config files
Diffstat (limited to 'config')
-rw-r--r--config/webpack.config.js252
-rw-r--r--config/webpack/plugins/create-injected-shared-modules-webpack-plugin.js2
-rw-r--r--config/webpack/plugins/create-manifest-webpack-plugin/index.js2
-rw-r--r--config/webpack/plugins/create-rules-webpack-plugin.js2
-rw-r--r--config/webpack/plugins/inject-script-webpack-plugin.js2
-rw-r--r--config/webpack/utils/build-file.js2
-rw-r--r--config/webpack/utils/injected-code.js2
-rw-r--r--config/webpack/utils/inline-javascript.js4
-rw-r--r--config/webpack/utils/script-runtime.js2
9 files changed, 10 insertions, 260 deletions
diff --git a/config/webpack.config.js b/config/webpack.config.js
deleted file mode 100644
index b0c1641..0000000
--- a/config/webpack.config.js
+++ /dev/null
@@ -1,252 +0,0 @@
-/**
- * Webpack configuration for the Banglar Bhumi Utils Chrome extension.
- *
- * Produces four separate bundles:
- * 1. **Background script** – service worker entry point.
- * 2. **Uninjected scripts** – content scripts that run as-is.
- * 3. **Injected scripts** – content scripts that are further processed
- * so they can be injected into the page DOM.
- * 4. **Shared modules** – libraries compiled as standalone files and
- * referenced via global variables (`$<hash>`).
- *
- * Custom loaders and plugins handle dependency ordering, import counting,
- * asset-URL rewriting, manifest generation, and declarative-net-rule creation.
- */
-import path from "path";
-import fs from "fs";
-import { fileURLToPath } from "url";
-import webpack from "webpack";
-import { merge } from "webpack-merge";
-import CopyPlugin from "copy-webpack-plugin";
-
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = path.dirname(__filename);
-
-global.ROOT_DIR = path.resolve(__dirname, "..");
-global.CONFIG_DIR = path.resolve(ROOT_DIR, "config");
-global.SOURCE_DIR = path.resolve(ROOT_DIR, "src");
-global.production = process.env.NODE_ENV === "production";
-
-import CreateManifestPlugin from "./webpack/plugins/create-manifest-webpack-plugin/index.js";
-import CreateRulesPlugin from "./webpack/plugins/create-rules-webpack-plugin.js";
-import InjectScriptPlugin from "./webpack/plugins/inject-script-webpack-plugin.js";
-import CreateInjectedSharedModulesPlugin from "./webpack/plugins/create-injected-shared-modules-webpack-plugin.js";
-
-import { inlineJavascript } from "./webpack/utils/inline-javascript.js";
-import { getScriptRuntimeFromType } from "./webpack/utils/script-runtime.js";
-import { getFileName } from "./webpack/utils/build-file.js";
-
-import scripts from "./webpack/utils/scripts.js";
-import sharedModules from "./webpack/utils/shared-modules.js";
-
-const sharedModulesImportedCount = {};
-
-for (const sharedModule of sharedModules) {
- sharedModulesImportedCount[sharedModule] = 0;
-}
-
-const injectedSharedModulesImportedCount = {};
-
-for (const sharedModule of sharedModules) {
- injectedSharedModulesImportedCount[sharedModule] = 0;
-}
-
-const backgroundScriptEntries = {};
-const uninjectedScriptEntries = {};
-const injectedAfterScriptEntries = {};
-const injectedBeforeScriptEntries = {};
-const sharedModuleEntries = {};
-const sharedModuleExternals = {};
-
-const backgroundScriptImports = fs.readdirSync(path.resolve(SOURCE_DIR, "background"))
- .map(scriptName => `import "${path.resolve(SOURCE_DIR, "background", scriptName)}";`)
- .join("\n");
-backgroundScriptEntries["background script"] = {
- import: inlineJavascript(backgroundScriptImports),
- filename: "background.js"
-};
-
-for (const scriptPath in scripts) {
- for (const scriptType in scripts[scriptPath]) {
- const currentScripts = scripts[scriptPath][scriptType];
- let scriptEntries;
- let destinationFolder = "scripts";
-
- switch (scriptType) {
- case "injected":
- scriptEntries = injectedAfterScriptEntries;
- destinationFolder = "scripts/injected";
- break;
-
- default:
- scriptEntries = uninjectedScriptEntries;
- }
-
- scriptEntries[`${scriptType} - "${scriptPath}"`] = {
- import: inlineJavascript(currentScripts.map(script => `import "${path.resolve(SOURCE_DIR, "scripts", script)}";`).join("\n")),
- filename: `${destinationFolder}/${getFileName(scriptType, scriptPath)}.js`
- };
- }
-}
-
-for (const sharedModule of sharedModules) {
- const sharedModuleNameHash = getFileName(sharedModule, "shared");
- const sharedModuleGlobalVariableName = `$${sharedModuleNameHash.substring(sharedModuleNameHash.length - 16)}`;
- sharedModuleEntries[sharedModule] = {
- import: path.resolve(SOURCE_DIR, "shared", sharedModule),
- filename: `shared/${sharedModuleNameHash}.js`,
- library: {
- name: sharedModuleGlobalVariableName,
- type: "var"
- }
- };
- sharedModuleExternals[`@/shared/${sharedModule}`] = sharedModuleGlobalVariableName;
-}
-
-const commonOptions = {
- mode: "production",
- target: "web",
- resolve: {
- extensions: [".ts", ".js", ".html"],
- alias: {
- "@": global.SOURCE_DIR,
- },
- },
- module: {
- rules: [
- {
- test: /\.ts$/,
- loader: "ts-loader",
- options: {
- configFile: "tsconfig.json",
- }
- },
- {
- test: /\.html$/,
- loader: path.resolve(CONFIG_DIR, "webpack/loader/to-string-loader.js"),
- },
- ],
- },
- optimization: {
- minimize: process.env.NODE_ENV === "production",
- runtimeChunk: false,
- },
- output: {
- iife: true,
- },
- plugins: [
- new webpack.optimize.LimitChunkCountPlugin({
- maxChunks: 1,
- }),
- ],
-};
-
-const sharedModuleOptions = {
- externals: sharedModuleExternals,
- externalsType: "var",
- module: {
- rules: [
- {
- test: /banglar-bhumi-utils\/src\/.*.(^.?|\.[^d]|[^.]d|[^.][^d])\.(t|j)s$/,
- loader: path.resolve(CONFIG_DIR, "webpack/loader/count-imports-loader.js"),
- options: {
- sharedModulesImportedCount,
- },
- enforce: "post",
- }
- ]
- }
-};
-
-const backgroundScriptConfiguration = merge(
- commonOptions,
- sharedModuleOptions,
- {
- entry: backgroundScriptEntries,
- },
-);
-
-const uninjectedScriptConfiguration = merge(
- commonOptions,
- sharedModuleOptions,
- {
- entry: uninjectedScriptEntries
- }
-);
-
-const injectedScriptConfiguration = merge(
- commonOptions,
- {
- externals: sharedModuleExternals,
- externalsType: "var",
- module: {
- rules: [
- {
- test: /banglar-bhumi-utils\/src\/.*.(^.?|\.[^d]|[^.]d|[^.][^d])\.(t|j)s$/,
- loader: path.resolve(CONFIG_DIR, "webpack/loader/count-imports-loader.js"),
- options: {
- sharedModulesImportedCount: injectedSharedModulesImportedCount
- },
- enforce: "post"
- }
- ]
- },
- entry: injectedAfterScriptEntries,
- plugins: [
- new InjectScriptPlugin()
- ]
- }
-);
-
-const sortedSharedModules = []
-
-const sharedModulesConfiguration = merge(
- commonOptions,
- sharedModuleOptions,
- {
- entry: sharedModuleEntries,
- plugins: [
- new CopyPlugin({
- patterns: [
- {
- from: path.resolve("static"),
- to: "./",
- },
- {
- from: path.resolve("src/offscreen"),
- to: "./offscreen",
- },
- ],
- }),
- new CreateInjectedSharedModulesPlugin({
- injectedSharedModulesImportedCount,
- sortedSharedModules
- }),
- new CreateRulesPlugin(),
- new CreateManifestPlugin({
- sharedModulesImportedCount,
- injectedSharedModulesImportedCount,
- sortedSharedModules
- })
- ],
- module: {
- rules: [
- {
- test: /banglar-bhumi-utils\/src\/.*.(^.?|\.[^d]|[^.]d|[^.][^d])\.(t|j)s$/,
- loader: path.resolve(CONFIG_DIR, "webpack/loader/arrange-shared-module-loader.js"),
- options: {
- sortedSharedModules
- },
- enforce: "post"
- }
- ]
- }
- }
-);
-
-export default [
- backgroundScriptConfiguration,
- uninjectedScriptConfiguration,
- injectedScriptConfiguration,
- sharedModulesConfiguration
-];
diff --git a/config/webpack/plugins/create-injected-shared-modules-webpack-plugin.js b/config/webpack/plugins/create-injected-shared-modules-webpack-plugin.js
index 6201a01..21cff34 100644
--- a/config/webpack/plugins/create-injected-shared-modules-webpack-plugin.js
+++ b/config/webpack/plugins/create-injected-shared-modules-webpack-plugin.js
@@ -28,7 +28,7 @@ class CreateInjectedSharedModulesPlugin {
name: "CreateInjectedSharedModulesPlugin",
stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL
},
- assets => {
+ (_assets) => {
const injectedSharedScripts = this.sortedSharedModules
.filter(sharedModule => this.injectedSharedModulesImportedCount[sharedModule] > 0)
.map(sharedModule => `shared/${getFileName(sharedModule, "shared")}.js`);
diff --git a/config/webpack/plugins/create-manifest-webpack-plugin/index.js b/config/webpack/plugins/create-manifest-webpack-plugin/index.js
index f012f1e..7328d5d 100644
--- a/config/webpack/plugins/create-manifest-webpack-plugin/index.js
+++ b/config/webpack/plugins/create-manifest-webpack-plugin/index.js
@@ -38,7 +38,7 @@ class CreateManifestPlugin {
* @param {import("webpack").Compiler} compiler
*/
apply(compiler) {
- compiler.hooks.compilation.tap("CreateManifestPlugin", compilation => {
+ compiler.hooks.compilation.tap("CreateManifestPlugin", (compilation) => {
compilation.hooks.processAssets.tap(
{
name: "CreateManifestPlugin",
diff --git a/config/webpack/plugins/create-rules-webpack-plugin.js b/config/webpack/plugins/create-rules-webpack-plugin.js
index 55b60f7..993ac31 100644
--- a/config/webpack/plugins/create-rules-webpack-plugin.js
+++ b/config/webpack/plugins/create-rules-webpack-plugin.js
@@ -18,7 +18,7 @@ class CreateRulesPlugin {
name: "CreateRulesPlugin",
stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL
},
- assets => {
+ (_assets) => {
const ruleFileNames = fs.readdirSync(path.resolve(SOURCE_DIR, "rules"));
const rules = [];
let ruleId = 1;
diff --git a/config/webpack/plugins/inject-script-webpack-plugin.js b/config/webpack/plugins/inject-script-webpack-plugin.js
index 43c5d9f..4f76ca8 100644
--- a/config/webpack/plugins/inject-script-webpack-plugin.js
+++ b/config/webpack/plugins/inject-script-webpack-plugin.js
@@ -22,7 +22,7 @@ class InjectScriptPlugin {
stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL,
additionalAssets: true
},
- async assets => {
+ async (assets) => {
for (const assetName in assets) {
if (/\.js$/.test(assetName)) {
const injectedCodeResponse = getInjectedCode(compilation.getAsset(assetName).source.source())
diff --git a/config/webpack/utils/build-file.js b/config/webpack/utils/build-file.js
index 17f0b03..e09747d 100644
--- a/config/webpack/utils/build-file.js
+++ b/config/webpack/utils/build-file.js
@@ -10,7 +10,7 @@ import crypto from "crypto";
* @param {boolean} justHash - When true, always return only the hash part.
* @returns {string} The transformed filename.
*/
-export const getFileName = (fileName, prefix, justHash = false) => {
+export function getFileName(fileName, prefix, justHash = false) {
let hash = crypto
.createHash("md5")
.update(`${prefix}-${fileName}`)
diff --git a/config/webpack/utils/injected-code.js b/config/webpack/utils/injected-code.js
index 2b8f750..f91fd4a 100644
--- a/config/webpack/utils/injected-code.js
+++ b/config/webpack/utils/injected-code.js
@@ -23,7 +23,7 @@ const getHash = url =>
* @param {string} code - The compiled JavaScript bundle.
* @returns {[string, string]} A tuple of [transformedCode, extensionAssetsJSON].
*/
-export const getInjectedCode = code => {
+export function getInjectedCode(code) {
const extensionAssets = {};
let i = 0;
diff --git a/config/webpack/utils/inline-javascript.js b/config/webpack/utils/inline-javascript.js
index 205bda4..501f852 100644
--- a/config/webpack/utils/inline-javascript.js
+++ b/config/webpack/utils/inline-javascript.js
@@ -5,4 +5,6 @@
* @param {string} code - The JavaScript source to inline.
* @returns {string} A `data:text/javascript;base64,…` URI.
*/
-export const inlineJavascript = code => `data:text/javascript;base64,${Buffer.from(code).toString("base64")}`;
+export function inlineJavascript(code) {
+ return `data:text/javascript;base64,${Buffer.from(code).toString("base64")}`;
+}
diff --git a/config/webpack/utils/script-runtime.js b/config/webpack/utils/script-runtime.js
index 1c23922..2745d54 100644
--- a/config/webpack/utils/script-runtime.js
+++ b/config/webpack/utils/script-runtime.js
@@ -9,7 +9,7 @@
* @param {string} scriptType - The script type from scripts.json.
* @returns {string} The corresponding `run_at` value.
*/
-export const getScriptRuntimeFromType = scriptType => {
+export function getScriptRuntimeFromType(scriptType) {
switch (scriptType) {
case "before":
case "injected-after":