extension-develop 2.0.0-alpha.17 → 2.0.0-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module.js +35 -35
- package/dist/run-chrome-profile/Default/Cache/Cache_Data/878b0f723bb46fc9_0 +0 -0
- package/dist/run-chrome-profile/Default/Cache/Cache_Data/index-dir/the-real-index +0 -0
- package/dist/run-chrome-profile/Default/DIPS +0 -0
- package/dist/run-chrome-profile/Default/DawnGraphiteCache/index +0 -0
- package/dist/run-chrome-profile/Default/DawnWebGPUCache/index +0 -0
- package/dist/run-chrome-profile/Default/Extension Rules/000003.log +0 -0
- package/dist/run-chrome-profile/Default/Extension Rules/LOG +3 -3
- package/dist/run-chrome-profile/Default/Extension Rules/LOG.old +3 -3
- package/dist/run-chrome-profile/Default/Extension Scripts/000003.log +0 -0
- package/dist/run-chrome-profile/Default/Extension Scripts/LOG +3 -3
- package/dist/run-chrome-profile/Default/Extension Scripts/LOG.old +3 -3
- package/dist/run-chrome-profile/Default/Extension State/000003.log +0 -0
- package/dist/run-chrome-profile/Default/Extension State/LOG +3 -3
- package/dist/run-chrome-profile/Default/Extension State/LOG.old +3 -3
- package/dist/run-chrome-profile/Default/GPUCache/data_1 +0 -0
- package/dist/run-chrome-profile/Default/GPUCache/index +0 -0
- package/dist/run-chrome-profile/Default/Local Extension Settings/pbpgonifamlpcahjkkkfelffkegofkgg/LOG +3 -3
- package/dist/run-chrome-profile/Default/Local Extension Settings/pbpgonifamlpcahjkkkfelffkegofkgg/LOG.old +3 -3
- package/dist/run-chrome-profile/Default/Local Storage/leveldb/LOG +3 -3
- package/dist/run-chrome-profile/Default/Local Storage/leveldb/LOG.old +3 -3
- package/dist/run-chrome-profile/Default/Network Persistent State +1 -1
- package/dist/run-chrome-profile/Default/Platform Notifications/LOG +3 -3
- package/dist/run-chrome-profile/Default/Platform Notifications/LOG.old +3 -2
- package/dist/run-chrome-profile/Default/Preferences +1 -1
- package/dist/run-chrome-profile/Default/Reporting and NEL and b/package/dist/run-chrome-profile/Default/Reporting → NEL +0 -0
- package/dist/run-chrome-profile/Default/Secure Preferences +1 -1
- package/dist/run-chrome-profile/Default/Service Worker/Database/LOG +3 -3
- package/dist/run-chrome-profile/Default/Service Worker/Database/LOG.old +3 -3
- package/dist/run-chrome-profile/Default/Session Storage/000003.log +0 -0
- package/dist/run-chrome-profile/Default/Session Storage/LOG +3 -3
- package/dist/run-chrome-profile/Default/Session Storage/LOG.old +3 -3
- package/dist/run-chrome-profile/Default/Sessions/Session_13369806389593188 +0 -0
- package/dist/run-chrome-profile/Default/Sessions/{Tabs_13369796364895748 → Tabs_13369806390221517} +0 -0
- package/dist/run-chrome-profile/Default/Site Characteristics Database/LOG +3 -3
- package/dist/run-chrome-profile/Default/Site Characteristics Database/LOG.old +3 -3
- package/dist/run-chrome-profile/Default/Sync Data/LevelDB/LOG +3 -3
- package/dist/run-chrome-profile/Default/Sync Data/LevelDB/LOG.old +3 -3
- package/dist/run-chrome-profile/Default/TransportSecurity +1 -1
- package/dist/run-chrome-profile/Default/WebStorage/QuotaManager +0 -0
- package/dist/run-chrome-profile/Default/shared_proto_db/000003.log +0 -0
- package/dist/run-chrome-profile/Default/shared_proto_db/LOG +3 -3
- package/dist/run-chrome-profile/Default/shared_proto_db/LOG.old +3 -3
- package/dist/run-chrome-profile/Default/shared_proto_db/metadata/000003.log +0 -0
- package/dist/run-chrome-profile/Default/shared_proto_db/metadata/LOG +3 -3
- package/dist/run-chrome-profile/Default/shared_proto_db/metadata/LOG.old +3 -3
- package/dist/run-chrome-profile/GrShaderCache/data_1 +0 -0
- package/dist/run-chrome-profile/GrShaderCache/index +0 -0
- package/dist/run-chrome-profile/GraphiteDawnCache/index +0 -0
- package/dist/run-chrome-profile/Local State +1 -1
- package/dist/run-chrome-profile/ShaderCache/data_1 +0 -0
- package/dist/run-chrome-profile/ShaderCache/index +0 -0
- package/dist/run-chrome-profile/first_party_sets.db +0 -0
- package/dist/run-chrome-profile/segmentation_platform/ukm_db +0 -0
- package/dist/run-chrome-profile/segmentation_platform/ukm_db-journal +0 -0
- package/package.json +1 -1
- package/dist/run-chrome-profile/Default/Cache/Cache_Data/e85ac8952d7783d7_0 +0 -0
- package/dist/run-chrome-profile/Default/Sessions/Session_13369796364394711 +0 -0
package/dist/module.js
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
"use strict";var Dp=Object.create;var Ge=Object.defineProperty;var Fp=Object.getOwnPropertyDescriptor;var Lp=Object.getOwnPropertyNames;var Ip=Object.getPrototypeOf,Op=Object.prototype.hasOwnProperty;var Ap=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Mp=(t,e)=>{for(var s in e)Ge(t,s,{get:e[s],enumerable:!0})},
|
|
1
|
+
"use strict";var Dp=Object.create;var Ge=Object.defineProperty;var Fp=Object.getOwnPropertyDescriptor;var Lp=Object.getOwnPropertyNames;var Ip=Object.getPrototypeOf,Op=Object.prototype.hasOwnProperty;var Ap=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Mp=(t,e)=>{for(var s in e)Ge(t,s,{get:e[s],enumerable:!0})},Tr=(t,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Lp(e))!Op.call(t,i)&&i!==s&&Ge(t,i,{get:()=>e[i],enumerable:!(r=Fp(e,i))||r.enumerable});return t};var a=(t,e,s)=>(s=t!=null?Dp(Ip(t)):{},Tr(e||!t||!t.__esModule?Ge(s,"default",{value:t,enumerable:!0}):s,t)),Tp=t=>Tr(Ge({},"__esModule",{value:!0}),t);var Ws=Ap((Ml,Np)=>{Np.exports={license:"MIT",repository:{type:"git",url:"https://github.com/cezaraugusto/extension.git",directory:"programs/develop"},engines:{node:">=18"},name:"extension-develop",version:"2.0.0-alpha.18",description:"The develop step of Extension.js",main:"./dist/module.js",types:"./dist/module.d.ts",files:["dist"],author:{name:"Cezar Augusto",email:"boss@cezaraugusto.net",url:"https://cezaraugusto.com"},scripts:{clean:"rm -rf dist",watch:"tsup-node ./module.ts --format cjs --dts --target=node18 --watch",compile:"tsup-node ./module.ts --format cjs --dts --target=node18 --minify && bash install_scripts.sh",test:"jest --no-cache --testPathPattern='webpack/.*/__spec__/.*\\.spec\\.ts'","test:coverage":"jest --no-cache --testPathPattern='webpack/.*/__spec__/.*\\.spec\\.ts' --coverage","test:build":"jest ./build.spec.ts --no-cache"},dependencies:{"@colors/colors":"^1.6.0","@swc/core":"^1.7.3","@types/firefox-webext-browser":"^120.0.4",acorn:"^8.12.1","acorn-walk":"^8.3.3","adm-zip":"^0.5.12",ajv:"^8.17.1",astring:"^1.8.6",axios:"^1.6.8","browser-extension-manifest-fields":"^1.0.6","case-sensitive-paths-webpack-plugin":"^2.4.0",chokidar:"^3.6.0","chrome-location":"^1.2.1","content-security-policy-parser":"^0.6.0","css-loader":"^6.10.0","csv-loader":"^3.0.5","detect-package-manager":"^3.0.2","dotenv-webpack":"^8.0.1","edge-location":"^1.0.0","firefox-profile":"^4.6.0","fx-runner":"^1.4.0","go-git-it":"2.0.4",ignore:"^5.3.1","loader-utils":"^3.3.1",micromatch:"^4.0.7","mini-css-extract-plugin":"^2.8.1",parse5:"^7.1.2","parse5-utils":"^2.0.0",postcss:"^8.4.40",progress:"^2.0.3","schema-utils":"^4.2.0",slugify:"^1.6.6","style-loader":"^3.3.4","swc-loader":"^0.2.6","tiny-glob":"^0.2.9","vue-template-compiler":"^2.7.16","webextension-polyfill":"^0.12.0",webpack:"~5.92.0","webpack-dev-server":"^5.0.2","webpack-merge":"^6.0.1","webpack-target-webextension":"^1.1.2"},devDependencies:{"@types/adm-zip":"^0.5.5","@types/case-sensitive-paths-webpack-plugin":"^2.1.9","@types/chrome":"^0.0.268","@types/dotenv-webpack":"^7.0.7","@types/jest":"^29.5.12","@types/loader-utils":"^2.0.6","@types/node":"^20.14.12","@types/webextension-polyfill":"^0.10.7",jest:"^29.7.0","ts-jest":"^29.1.2",tsup:"^8.0.1",typescript:"5.3.3"},optionalDependencies:{"@babel/core":"^7.24.9","@pmmmwh/react-refresh-webpack-plugin":"^0.5.15","@prefresh/webpack":"^4.0.1","@vue/compiler-sfc":"^3.4.34","babel-loader":"^9.1.3","babel-preset-modern-browser-extension":"^0.7.0",less:"^4.2.0","less-loader":"^12.2.0","postcss-flexbugs-fixes":"^5.0.2","postcss-loader":"^8.1.1","postcss-normalize":"^10.0.1","postcss-preset-env":"^9.6.0","postcss-scss":"^4.0.9","react-refresh":"^0.14.2","react-refresh-typescript":"^2.0.9","resolve-url-loader":"^5.0.0",sass:"^1.77.8","sass-loader":"^16.0.0",stylelint:"^16.7.0","stylelint-config-standard-scss":"^13.1.0","stylelint-webpack-plugin":"^5.0.1",tailwindcss:"^3.4.7","vue-loader":"^17.4.2","vue-style-loader":"^4.1.3","vue-template-compiler":"^2.7.16"}}});var Ll={};Mp(Ll,{extensionBuild:()=>cp,extensionDev:()=>wp,extensionPreview:()=>Pp,extensionStart:()=>Cp});module.exports=Tp(Ll);var ip=a(require("fs")),np=a(require("path")),op=a(require("webpack")),ap=require("webpack-merge");var Je=a(require("path"));var hi=a(require("case-sensitive-paths-webpack-plugin"));var V=a(require("fs")),M=a(require("path")),di=a(require("dotenv-webpack"));var Bs=a(require("path")),f=require("@colors/colors/safe");var Rr=a(require("path")),Xe=Rr.default.join(process.cwd(),"node_modules/extension-develop/dist/certs"),Se=["chrome","edge"],Rp=["firefox"],Ol=[...Se,...Rp];function w(t,e){return e==="error"?`${t} ${(0,f.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E")}`:`${e==="warn"?(0,f.brightYellow)("\u25BA\u25BA\u25BA"):e==="info"?(0,f.cyan)("\u25BA\u25BA\u25BA"):(0,f.brightGreen)("\u25BA\u25BA\u25BA")} ${t}`}function Nr(t){return t.charAt(0).toUpperCase()+t.slice(1)}function qr(t,e,s){if(!!1)return`${s.hasErrors()?(0,f.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E"):(0,f.brightGreen)("\u25BA\u25BA\u25BA")} ${(0,f.cyan)(t)} compiled ${s.hasErrors()?(0,f.red)("with errors"):(0,f.brightGreen)("successfully")} in ${e} ms.`}function Ur(t,e,s){return`${w(t,"info")} ${(0,f.magenta)(e)} Integration Found
|
|
2
2
|
|
|
3
|
-
Installing required setup dependencies via ${(0,f.brightYellow)(s)}. This is a one time operation...`}function
|
|
3
|
+
Installing required setup dependencies via ${(0,f.brightYellow)(s)}. This is a one time operation...`}function Wr(t){return`${w(t,"info")} loaded ${(0,f.brightYellow)("env")} file successfully.`}function v(t,e){return`${w(t,"info")} is using ${(0,f.magenta)(e)}.`}function E(t,e){return`${w(t,"success")} You Are All Set
|
|
4
4
|
|
|
5
|
-
Run the program again to start hacking with ${(0,f.magenta)(e)} support.`}function
|
|
5
|
+
Run the program again to start hacking with ${(0,f.magenta)(e)} support.`}function Br(t,e){return`${w(t,"info")} Installing Root Dependencies
|
|
6
6
|
|
|
7
|
-
Installing ${(0,f.magenta)(e)} dependencies in Extension.js root. This only happens for authors and contributors.`}function
|
|
7
|
+
Installing ${(0,f.magenta)(e)} dependencies in Extension.js root. This only happens for authors and contributors.`}function Jr(t,e){return`${w(t,"success")} ${e} Dependencies Installed ${(0,f.brightGreen)("Successfully")}.`}function zr(t,e,s){return`${w(t,"error")} ${(0,f.magenta)(e)} Installation Error
|
|
8
8
|
|
|
9
|
-
Failed to detect package manager or install ${(0,f.magenta)(e)} dependencies: ${(0,f.red)(s?.toString()||"")}`}function
|
|
9
|
+
Failed to detect package manager or install ${(0,f.magenta)(e)} dependencies: ${(0,f.red)(s?.toString()||"")}`}function Hr(t){return`${w(t,"error")} No Service Worker Support
|
|
10
10
|
|
|
11
11
|
Firefox does not support the ${(0,f.brightYellow)("background.service_worker")} field yet.
|
|
12
12
|
Update your manifest.json file to use ${(0,f.brightYellow)("background.scripts")} instead.
|
|
13
13
|
|
|
14
|
-
Read more: ${(0,f.underline)("https://bugzilla.mozilla.org/show_bug.cgi?id=1573659")}.`}function
|
|
14
|
+
Read more: ${(0,f.underline)("https://bugzilla.mozilla.org/show_bug.cgi?id=1573659")}.`}function Vr(t){return`${w(t,"error")} Insecure Content-Security-Policy
|
|
15
15
|
|
|
16
|
-
Manifest includes insecure content-security-policy value ${(0,f.brightYellow)("'unsafe-eval'")} in directive ${(0,f.brightBlue)("'script-src'")}.`}function
|
|
16
|
+
Manifest includes insecure content-security-policy value ${(0,f.brightYellow)("'unsafe-eval'")} in directive ${(0,f.brightBlue)("'script-src'")}.`}function Gr(t){return`${w(t,"error")} No Default Locale Specified
|
|
17
17
|
|
|
18
|
-
Localization used, but ${(0,f.brightYellow)("default_locale")} wasn't specified in the manifest.`}function Pe(t){return t==="chrome"?(0,f.underline)("https://developer.chrome.com/docs/extensions/reference/manifest"):(0,f.underline)("https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json")}function
|
|
18
|
+
Localization used, but ${(0,f.brightYellow)("default_locale")} wasn't specified in the manifest.`}function Pe(t){return t==="chrome"?(0,f.underline)("https://developer.chrome.com/docs/extensions/reference/manifest"):(0,f.underline)("https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json")}function Xr(t,e){return`${w(t,"error")} Wrong Manifest Field Type
|
|
19
19
|
|
|
20
20
|
Field ${(0,f.brightYellow)("web_accessible_resources")} must be a string array in Manifest version 2.
|
|
21
21
|
|
|
22
|
-
Read more: ${Pe(e)}`}function
|
|
22
|
+
Read more: ${Pe(e)}`}function Zr(t,e){return`${w(t,"error")} Wrong Manifest Field Type
|
|
23
23
|
|
|
24
24
|
Field ${(0,f.brightYellow)("web_accessible_resources")} must be an array of objects in Manifest version 3.
|
|
25
25
|
|
|
26
|
-
Read more: ${Pe(e)}`}function
|
|
26
|
+
Read more: ${Pe(e)}`}function Yr(t,e,s){let i=s?.schemaPath?.split("/"),n=i?.slice(i.length-2).shift();return`${w(t,"error")} Deprecated Field
|
|
27
27
|
|
|
28
28
|
Field ${(0,f.brightYellow)(n||"")} is deprecated in Manifest V3. Update your manifest.json file to run your extension.
|
|
29
29
|
|
|
30
|
-
Read more: ${Pe(e)}`}function
|
|
30
|
+
Read more: ${Pe(e)}`}function Kr(t,e,s){let r=e?.instancePath.replaceAll("/",".").slice(1)||"",i=e?.params.type;return`${w(t,"error")} Invalid Manifest Field
|
|
31
31
|
|
|
32
32
|
Field ${(0,f.brightYellow)(r)} must be of type ${(0,f.brightBlue)(i)}.
|
|
33
33
|
|
|
34
|
-
Read more: ${Pe(s)}`}function
|
|
34
|
+
Read more: ${Pe(s)}`}function Qr(t,e,s){return`${w(t,"error")} Missing Required Manifest Field
|
|
35
35
|
|
|
36
36
|
Field ${(0,f.brightYellow)(s||"")} is required. Update your manifest.json file to run your extension.
|
|
37
37
|
|
|
38
|
-
Read more: ${Pe(e)}`}function
|
|
38
|
+
Read more: ${Pe(e)}`}function ei(t,e){let s=e.split(".").pop(),r=`${w(t,"error")} Content Script Import
|
|
39
39
|
|
|
40
40
|
One of your ${s?.toUpperCase()} imports is also a content_script CSS in manifest.json.
|
|
41
|
-
Remove the duplicate entry and try again.`;if(e.startsWith("content_scripts"))return r}function
|
|
41
|
+
Remove the duplicate entry and try again.`;if(e.startsWith("content_scripts"))return r}function ti(t){return`${w(t,"error")} Top Level Await In Non-ECMAScript Module
|
|
42
42
|
|
|
43
43
|
Top-level await is only supported in ECMAScript modules.
|
|
44
44
|
To use it in your extension, make sure to set ${(0,f.brightYellow)('"type": "module"')}
|
|
45
|
-
in your package.json or use the ${(0,f.brightYellow)(".mjs")} extension for your script files.`}function Ze(t,e,s){if(!e)throw new Error("This operation is impossible. Please report a bug.");switch(
|
|
45
|
+
in your package.json or use the ${(0,f.brightYellow)(".mjs")} extension for your script files.`}function Ze(t,e,s){if(!e)throw new Error("This operation is impossible. Please report a bug.");switch(Bs.default.extname(s)){case".js":case".ts":case".jsx":case".tsx":return qp(t,e,s);case".css":case".scss":case".sass":case".less":return Up(t,e,s);default:return Wp(t,e,s)}}function oe(t,e,s){let r=e.startsWith("content_scripts")?"content_scripts":e.replace("/","."),i=e.split("-")[1],n=e.startsWith("pages"),o=t.includes("content_scripts")?`(index ${i})
|
|
46
46
|
|
|
47
47
|
`:r;return`${w(t,"error")} File Not Found
|
|
48
48
|
|
|
@@ -54,20 +54,20 @@ ${n?`Check the ${(0,f.brightYellow)("pages")} folder in your project root direct
|
|
|
54
54
|
|
|
55
55
|
Check the ${(0,f.brightYellow)(e)} field in your manifest.json file.
|
|
56
56
|
|
|
57
|
-
${(0,f.red)("NOT FOUND")} ${(0,f.underline)(s)}`}function
|
|
57
|
+
${(0,f.red)("NOT FOUND")} ${(0,f.underline)(s)}`}function si(t){return`${w(t,"error")} Manifest Not Found
|
|
58
58
|
|
|
59
|
-
Ensure you have a manifest.json file at the root directory of your project.`}function
|
|
59
|
+
Ensure you have a manifest.json file at the root directory of your project.`}function ri(t,e){return`${w(t,"error")} Invalid Manifest
|
|
60
60
|
|
|
61
|
-
Update your manifest.json file and try again. `+e}function
|
|
61
|
+
Update your manifest.json file and try again. `+e}function ii(t,e){let s=e&&`${(0,f.gray)("PATH")} ${(0,f.red)("REMOVED")} ${(0,f.underline)(e)}
|
|
62
62
|
`,r=t&&`${(0,f.gray)("PATH")} ${(0,f.brightGreen)("ADDED")} ${(0,f.underline)(t)}`;return`Manifest Entry Point Modification
|
|
63
63
|
|
|
64
64
|
Changing the path of ${(0,f.brightYellow)("<script>")} or ${(0,f.brightYellow)('<link rel="stylesheet">')} files after compilation requires a server restart.
|
|
65
65
|
|
|
66
|
-
`+s+r}function
|
|
66
|
+
`+s+r}function ni(t,e,s,r,i){let n=t.charAt(0).toUpperCase()+t.slice(1);return`${w("manifest.json","error")} Manifest Entry Point Modification
|
|
67
67
|
|
|
68
68
|
${n} ${(0,f.brightYellow)(r)} in the ${(0,f.underline)(s+"/")} folder after compilation requires a server restart.
|
|
69
69
|
|
|
70
|
-
${(0,f.gray)("PATH")} ${(0,f.underline)(i)}`}function
|
|
70
|
+
${(0,f.gray)("PATH")} ${(0,f.underline)(i)}`}function oi(t){return`${w(t,"warn")}`+v(t,"TypeScript").replace(".",`but no config file was found. Creating ${(0,f.brightYellow)("tsconfig.json")}...`)}function Js(t,e,s){let r=t.name||"Extension.js",i;switch(e){case"chrome":i="chrome://extensions";break;case"edge":i="edge://extensions";break;case"firefox":i="about:debugging#/runtime/this-firefox";break;default:i=""}if(!s.data)return`
|
|
71
71
|
|
|
72
72
|
${(0,f.bold)((0,f.red)("ERROR"))} in ${w(r,"error")} No data received from the extension client.
|
|
73
73
|
|
|
@@ -75,26 +75,26 @@ This error happens when the program can't get the data from your extension.
|
|
|
75
75
|
There are many reasons this might happen. To fix, ensure that:
|
|
76
76
|
|
|
77
77
|
- Your extension is set as enabled in ${(0,f.underline)(i)}
|
|
78
|
-
- No previous ${
|
|
78
|
+
- No previous ${Nr(e)} browser instance is open
|
|
79
79
|
|
|
80
80
|
If that is not the case, restart both the ${(0,f.cyan)(t.name||"")} and the
|
|
81
81
|
${(0,f.brightYellow)("Manager Extension")} in ${(0,f.underline)(i)} and try again.
|
|
82
82
|
|
|
83
83
|
If the issue still persists, please report a bug:
|
|
84
84
|
|
|
85
|
-
`+(0,f.underline)("https://github.com/extension-js/extension.js/issues");let{id:n,management:o}=s.data;if(!o&&process.env.EXTENSION_ENV==="development")return`${w(r,"error")} No management API info received from client. Investigate.`;let{name:c,version:p}=o,l=
|
|
85
|
+
`+(0,f.underline)("https://github.com/extension-js/extension.js/issues");let{id:n,management:o}=s.data;if(!o&&process.env.EXTENSION_ENV==="development")return`${w(r,"error")} No management API info received from client. Investigate.`;let{name:c,version:p}=o,l=Ws().version;return`
|
|
86
86
|
\u{1F9E9} ${(0,f.brightGreen)("Extension.js")} ${(0,f.gray)(`${l}`)}
|
|
87
87
|
Extension Name ${(0,f.gray)(c)}
|
|
88
88
|
Extension Version ${(0,f.gray)(p)}
|
|
89
|
-
Extension ID ${(0,f.gray)(n)}`}function
|
|
89
|
+
Extension ID ${(0,f.gray)(n)}`}function ai(t){return`This is your first run using Extension.js via ${Nr(t)}. Welcome! \u{1F389}
|
|
90
90
|
|
|
91
|
-
\u{1F9E9} Learn more at ${(0,f.underline)("https://extension.js.org")}`}function
|
|
91
|
+
\u{1F9E9} Learn more at ${(0,f.underline)("https://extension.js.org")}`}function ci(t,e){return`${w(t,"error")} WebSocket: ${e}`}function pi(t,e,s){return`
|
|
92
92
|
|
|
93
93
|
${(0,f.bold)((0,f.red)("ERROR"))} in ${w(t,"error")} File Not Found
|
|
94
94
|
|
|
95
95
|
Check the ${(0,f.brightYellow)(e.replace("/","."))} field in your manifest.json file.
|
|
96
96
|
|
|
97
|
-
${(0,f.red)("NOT FOUND")} ${(0,f.underline)(s)}}`}function
|
|
97
|
+
${(0,f.red)("NOT FOUND")} ${(0,f.underline)(s)}}`}function li(t,e){return`${w(t,"error")} HTML Entry Point Modification
|
|
98
98
|
|
|
99
99
|
Changing the path of ${(0,f.brightYellow)("<script>")} or ${(0,f.brightYellow)('<link rel="stylesheet">')} files after compilation requires a server restart.
|
|
100
100
|
|
|
@@ -106,11 +106,11 @@ ${(0,f.red)("NOT FOUND")} ${(0,f.underline)(s)}`}function Up(t,e,s){return`${w(t
|
|
|
106
106
|
|
|
107
107
|
Check your ${(0,f.brightYellow)("<link>")} tags in ${(0,f.underline)(e)}.
|
|
108
108
|
|
|
109
|
-
${(0,f.red)("NOT FOUND")} ${(0,f.underline)(s)}`}function Wp(t,e,s){let r=
|
|
109
|
+
${(0,f.red)("NOT FOUND")} ${(0,f.underline)(s)}`}function Wp(t,e,s){let r=Bs.default.extname(s);return`${w(t,"error")} File Not Found
|
|
110
110
|
|
|
111
111
|
Check your ${(0,f.brightYellow)("*"+r)} assets in ${(0,f.underline)(e)}.
|
|
112
112
|
|
|
113
|
-
${(0,f.red)("NOT FOUND")} ${(0,f.underline)(s)}`}function
|
|
113
|
+
${(0,f.red)("NOT FOUND")} ${(0,f.underline)(s)}`}function fi(){return`${(0,f.brightYellow)("Note")}: Firefox requires a secure certificate for localhost connections, needed for the reloader to work.
|
|
114
114
|
By default, your ${(0,f.brightYellow)("manifest.json")} file is not being watched. To enable this feature, run:
|
|
115
115
|
|
|
116
116
|
npx -y mkcert-cli \\
|
|
@@ -120,17 +120,17 @@ By default, your ${(0,f.brightYellow)("manifest.json")} file is not being watche
|
|
|
120
120
|
|
|
121
121
|
This will enable the secure certificate needed for Firefox via ${(0,f.bold)("mkcert")}.
|
|
122
122
|
|
|
123
|
-
Learn more about ${(0,f.bold)("mkcert")}: ${(0,f.underline)("https://github.com/FiloSottile/mkcert")}`}function
|
|
123
|
+
Learn more about ${(0,f.bold)("mkcert")}: ${(0,f.underline)("https://github.com/FiloSottile/mkcert")}`}function ui(t,e){return`${w(t,"error")} Default port ${e} in use, choose a new port. `}function mi(t){return`${w(t,"error")} No Extension Id Specified
|
|
124
124
|
|
|
125
125
|
For MAIN world content scripts, you must specify an extension ID.
|
|
126
126
|
Otherwise, the content script won't reload on changes.
|
|
127
|
-
Add an ${(0,f.brightYellow)("id")} field to your manifest.json file and try again.`}var Ke=class{manifestPath;constructor(e){this.manifestPath=e.manifestPath}apply(e){let s=M.default.dirname(this.manifestPath),i=require(this.manifestPath).name||"Extension.js";(V.default.existsSync(M.default.join(s,".env"))||V.default.existsSync(M.default.join(s,".env.example"))||V.default.existsSync(M.default.join(s,".env.local"))||V.default.existsSync(M.default.join(s,".env.defaults")))&&(console.log(Br(i)),new gi.default({path:V.default.existsSync(M.default.join(s,".env"))?M.default.join(s,".env"):V.default.existsSync(M.default.join(s,".env.local"))?M.default.join(s,".env.local"):M.default.join(s,".env.example"),allowEmptyValues:!0,defaults:V.default.existsSync(M.default.join(s,".env.defaults")),systemvars:!0}).apply(e))}};var Hs=a(require("fs")),hi=a(require("path")),Qe=class{apply(e){let s=hi.default.join(e.options.output.path||"","hot");Hs.default.existsSync(s)&&(Hs.default.rmSync(s,{recursive:!0,force:!0}),process.env.EXTENSION_ENV==="development"&&console.log("[CleanHotUpdatesPlugin] Removed old hot-update files before compilation."))}};var et=class{static name="plugin-compilation";manifestPath;constructor(e){this.manifestPath=e.manifestPath}apply(e){new yi.default().apply(e),new Ke({manifestPath:this.manifestPath}).apply(e),new Qe().apply(e),e.hooks.done.tap("develop:brand",s=>{s.compilation.name=void 0;let r=s.endTime-s.startTime,i=require(this.manifestPath).name;console.log(Ur(i,r,s))})}};var Ri=a(require("path")),Ni=a(require("mini-css-extract-plugin"));var Ii=a(require("mini-css-extract-plugin"));var ce=a(require("path")),ke=a(require("fs"));var ae=a(require("path")),tt=a(require("fs")),Vs=require("child_process"),bi=require("detect-package-manager");function wi(t,e){return Object.values(e||{}).some(s=>s===t)}function h(t,e,s){let r=ae.default.extname(e),n=P(e,s)?ae.default.normalize(e):t;return[".js",".jsx",".tsx",".ts"].includes(r)&&(n=n.replace(r,".js")),[".html",".njk",".nunjucks"].includes(r)&&(n=n.replace(r,".html")),[".css",".scss",".sass",".less"].includes(r)&&(n=n.replace(r,".css")),Gs(n||"")}function Gs(t){return t.replace(/\\/g,"/")}function P(t,e={}){if(!e)return!1;let s=ae.default.normalize(Gs(t));return Object.values(e).some(i=>typeof i!="string"?!1:Gs(i).includes(s))}function G(t,e){if(t.getAsset("manifest.json")||t.assets["manifest.json"]){let s=t.assets["manifest.json"].source().toString();return JSON.parse(s||"{}")}return require(e)}function st(){return process.env.npm_config_user_agent&&process.env.npm_config_user_agent.includes("pnpm")?"pnpm":!1}function rt(){return process.env.npm_execpath?"npm":!1}async function _(t,e,s){try{let r=await(0,bi.detect)();console.log(Wr(t,e,r));let i="";r==="yarn"?i=`yarn --silent add ${s.join(" ")} --cwd ${__dirname} --optional`:r==="npm"||rt()?i=`npm --silent install ${s.join(" ")} --prefix ${__dirname} --save-optional`:st()?i=`pnpm --silent add ${s.join(" ")} --prefix ${__dirname} --save-optional`:i=`${r} --silent install ${s.join(" ")} --cwd ${__dirname} --optional`,(0,Vs.execSync)(i,{stdio:"inherit"}),await new Promise(n=>setTimeout(n,2e3)),process.env.EXTENSION_ENV==="development"&&(console.log(Jr(t,e)),r==="yarn"?i="yarn install --silent > /dev/null 2>&1":r==="npm"||rt()?i="npm install --silent > /dev/null 2>&1":st()?i="pnpm install --silent > /dev/null 2>&1":i=`${r} install --silent > /dev/null 2>&1`,(0,Vs.execSync)(i,{stdio:"inherit"})),console.log(zr(t,e))}catch(r){console.error(Hr(t,e,r))}}function it(t){let e=ae.default.join(t,"package.json");if(!tt.default.existsSync(e))return!1;let s=JSON.parse(tt.default.readFileSync(e,"utf-8")),r=["react","vue","@angular/core","svelte","solid-js","preact"],i=s.dependencies||{},n=s.devDependencies||{};for(let o of r)if(i[o]||n[o])return!0;return!1}function xi(t){return!tt.default.existsSync(ae.default.resolve(__dirname,`run-${t}-profile`))}function vi(t){let e=t.name?.replace(/ /g,"-").toLowerCase();return{data:{id:`${e}@extension-js`,manifest:t,management:{id:`${e}@extension-js`,mayDisable:!0,optionsUrl:"",installType:"development",type:"extension",enabled:!0,name:t.name||"",description:t.description||"",version:t.version||"",hostPermissions:t.host_permissions||[],permissions:t.permissions||[],offlineEnabled:t.offline_enabled||!1,shortName:t.short_name||"",isApp:t.app&&t.app.background&&t.app.background.scripts}}}}function nt(t,e){return JSON.parse(JSON.stringify(t),function(i,n){let o=i.indexOf(":");if(o===-1)return n;let c=i.substring(0,o);(c===e||c==="chromium"&&Se.includes(e))&&(this[i.substring(o+1)]=n)})}var _i=!1;function ot(t){let e=ce.default.join(t,"package.json"),s=ce.default.join(t,"manifest.json");if(!ke.default.existsSync(e))return!1;let r=Bp(t),i=require(e),n=i.devDependencies&&i.devDependencies.tailwindcss,o=i.dependencies&&i.dependencies.tailwindcss,c=!!r&&!!(n||o);if(c&&!_i){let l=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(l,"Tailwind")),_i=!0}return c}function Bp(t){let e=ce.default.join(t,"tailwind.config.mjs"),s=ce.default.join(t,"tailwind.config.cjs"),r=ce.default.join(t,"tailwind.config.js");if(ke.default.existsSync(e))return e;if(ke.default.existsSync(s))return s;if(ke.default.existsSync(r))return r}var at=a(require("path")),Pi=a(require("fs"));var Si=!1;function Ee(t){let e=at.default.join(t,"package.json"),s=at.default.join(t,"manifest.json");if(!Pi.default.existsSync(e))return!1;let r=require(e),i=r.devDependencies&&r.devDependencies.sass,n=r.dependencies&&r.dependencies.sass;if(i||n){if(!Si){let c=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(c,"SASS")),Si=!0}return!0}return!1}async function ki(t,e){if(!Ee(t))return[];try{require.resolve("sass-loader")}catch{let r=["postcss-loader","postcss-scss","postcss-flexbugs-fixes","postcss-preset-env","postcss-normalize"],i=require(at.default.join(t,"package.json")).name;await _(i,"PostCSS",r),await _(i,"SASS",["sass","sass-loader","resolve-url-loader"]),console.log(E(i,"SASS")),process.exit(0)}return[{test:/\.(s(a|c)ss)$/,exclude:/\.module\.(s(a|c)ss)$/,oneOf:[{resourceQuery:/is_content_css_import=true/,use:await A(t,{loader:"sass-loader",mode:e,useMiniCssExtractPlugin:!1})},{use:await A(t,{loader:"sass-loader",mode:e,useMiniCssExtractPlugin:e==="production"})}]},{test:/\.module\.(s(a|c)ss)$/,oneOf:[{resourceQuery:/is_content_css_import=true/,use:await A(t,{loader:"sass-loader",mode:e,useMiniCssExtractPlugin:!1})},{use:await A(t,{loader:"sass-loader",mode:e,useMiniCssExtractPlugin:!0})}]}]}var ct=a(require("path")),ji=a(require("fs"));var Ei=!1;function je(t){let e=ct.default.join(t,"package.json"),s=ct.default.join(t,"manifest.json"),i=require(s).name||"Extension.js";if(!ji.default.existsSync(e))return!1;let n=require(e),o=n.devDependencies&&n.devDependencies.less,c=n.dependencies&&n.dependencies.less;return o||c?(Ei||(process.env.EXTENSION_ENV==="development"&&console.log(v(i,"LESS")),Ei=!0),!0):!1}async function $i(t,e){if(!je(t))return[];try{require.resolve("less-loader")}catch{let r=require(ct.default.join(t,"package.json")).name;await _(r,"LESS",["less","less-loader","resolve-url-loader"]),console.log(E(r,"LESS")),process.exit(0)}return[{test:/\.less$/,oneOf:[{resourceQuery:/is_content_css_import=true/,use:await A(t,{loader:"less-loader",mode:e,useMiniCssExtractPlugin:!1})},{use:await A(t,{loader:"less-loader",mode:e,useMiniCssExtractPlugin:e==="production"})}]}]}var le=a(require("path")),pt=a(require("fs"));var pe=!1;function Jp(t){let e=le.default.join(t,"package.json"),s=le.default.join(t,"manifest.json");if(!pt.default.existsSync(e))return!1;let r=[".postcssrc",".postcssrc.json",".postcssrc.yaml",".postcssrc.yml",".postcssrc.js",".postcssrc.cjs","postcss.config.js","postcss.config.cjs"],n=require(s).name||"Extension.js";if(pt.default.existsSync(e)){let o=require(e);if(o.dependencies&&o.dependencies.postcss||o.devDependencies&&o.devDependencies.postcss)return pe||(process.env.EXTENSION_ENV==="development"&&console.log(v(n,"PostCSS")),pe=!0),!0}for(let o of r)if(pt.default.existsSync(le.default.join(t,o)))return pe||(process.env.EXTENSION_ENV==="development"&&console.log(v(n,"PostCSS")),pe=!0),!0;return ot(t)?(pe||(process.env.EXTENSION_ENV==="development"&&console.log(v(n,"PostCSS")),pe=!0),!0):!1}async function Ci(t,e){if(!Jp(t))return{};try{require.resolve("postcss-loader")}catch{let r=require(le.default.join(t,"package.json")).name;!Ee(t)&&!je(t)&&await _(r,"PostCSS",["postcss","postcss-loader","postcss-scss","postcss-flexbugs-fixes","postcss-preset-env","postcss-normalize"]),console.log(E(r,"PostCSS")),process.exit(0)}return{loader:require.resolve("postcss-loader"),options:{postcssOptions:{parser:require.resolve("postcss-scss"),ident:"postcss",config:le.default.resolve(t,"postcss.config.js"),plugins:[require.resolve("postcss-flexbugs-fixes"),[require.resolve("postcss-preset-env"),{autoprefixer:{flexbox:"no-2009"},stage:3}].filter(Boolean),require.resolve("postcss-normalize")].filter(Boolean)},sourceMap:e.mode==="development"}}}var lt=a(require("path")),Fi=a(require("fs"));var Di=!1;function $e(t){let e=lt.default.join(t,"package.json"),s=lt.default.join(t,"manifest.json");if(!Fi.default.existsSync(e))return!1;let r=require(e),i=r.devDependencies&&r.devDependencies.vue,n=r.dependencies&&r.dependencies.vue;if((i||n)&&!Di){let c=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(c,"Vue")),Di=!0}return!!i||!!n}async function Li(t){if(!$e(t))return;try{require.resolve("vue-loader")}catch{let i=["typescript"],o=require(lt.default.join(t,"manifest.json")).name||"Extension.js";await _(o,"TypeScript",i),await _(o,"Vue",["vue-loader","@vue/compiler-sfc","vue-template-compiler","vue-style-loader"]),console.log(E(o,"Vue")),process.exit(0)}let e=[{test:/\.vue$/,loader:require.resolve("vue-loader"),include:t,exclude:/node_modules/}];return{plugins:[new(require("vue-loader")).VueLoaderPlugin],loaders:e,alias:void 0}}async function A(t,e){let s=Ii.default.loader,r=[e.useMiniCssExtractPlugin?s:$e(t)?require.resolve("vue-style-loader"):require.resolve("style-loader"),{loader:require.resolve("css-loader"),options:{importLoaders:1}}].filter(Boolean);if(ot(t)||Ee(t)||je(t)){let i=await Ci(t,e);i.loader&&r.push(i)}return e.loader&&r.push({loader:require.resolve("resolve-url-loader"),options:{sourceMap:e.mode==="development",root:t}},{loader:require.resolve(e.loader),options:{sourceMap:e.mode==="development"}}),r.filter(Boolean)}var C=a(require("path")),T=a(require("fs"));function Mi(t){let e=C.default.join(t,"stylelint.config.json"),s=C.default.join(t,".stylelintrc.js file"),r=C.default.join(t,"stylelint.config.mjs"),i=C.default.join(t,".stylelintrc.mjs"),n=C.default.join(t,"stylelint.config.cjs"),o=C.default.join(t,".stylelintrc.cjs"),c=C.default.join(t,".stylelintrc.json"),p=C.default.join(t,".stylelintrc"),l=C.default.join(t,".stylelintrc.yml"),u=C.default.join(t,".stylelintrc.yaml");if(T.default.existsSync(e))return e;if(T.default.existsSync(s))return s;if(T.default.existsSync(r))return r;if(T.default.existsSync(i))return i;if(T.default.existsSync(n))return n;if(T.default.existsSync(o))return o;if(T.default.existsSync(c))return c;if(T.default.existsSync(p))return p;if(T.default.existsSync(l))return l;if(T.default.existsSync(u))return u}var Oi=!1;function Ai(t){let e=C.default.join(t,"package.json"),s=C.default.join(t,"manifest.json");if(!T.default.existsSync(e))return!1;let i=!!Mi(t);if(i&&!Oi){let o=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(o,"Stylelint")),Oi=!0}return i}async function Ti(t){if(!Ai(t))return[];try{require.resolve("stylelint")}catch{let r=["stylelint","stylelint-webpack-plugin","stylelint-config-standard-scss"],i=require(C.default.join(t,"package.json")).name;await _(i,"Stylelint",r),console.log(E(i,"Stylelint")),process.exit(0)}let e=require("stylelint-webpack-plugin");return[new e({context:t,configFile:Ai(t)?Mi(t):C.default.join(__dirname,"stylelint.config.json"),files:"**/*.{css,scss,sass,less}",exclude:["node_modules",C.default.join(t,"node_modules")]})]}var ft=class t{static name="plugin-css";manifestPath;mode;constructor(e){this.manifestPath=e.manifestPath,this.mode=e.mode}async configureOptions(e){let s=Ri.default.dirname(this.manifestPath),r=[new Ni.default];r.forEach(p=>p.apply(e));let i=await Ti(s);r.push(...i);let n=[{test:/\.css$/,exclude:/\.module\.css$/,oneOf:[{resourceQuery:/is_content_css_import=true/,use:await A(s,{mode:this.mode,useMiniCssExtractPlugin:!1})},{use:await A(s,{mode:this.mode,useMiniCssExtractPlugin:this.mode==="production"})}]},{test:/\.module\.css$/,oneOf:[{resourceQuery:/is_content_css_import=true/,use:await A(s,{mode:this.mode,useMiniCssExtractPlugin:!1})},{use:await A(s,{mode:this.mode,useMiniCssExtractPlugin:this.mode==="production"})}]}];e.options.plugins=[...e.options.plugins,...r].filter(Boolean);let o=await ki(s,this.mode),c=await $i(s,this.mode);n.push(...o),n.push(...c),e.options.module.rules=[...e.options.module.rules,...n].filter(Boolean)}async apply(e){if(this.mode==="production"){e.hooks.beforeRun.tapPromise(t.name,async()=>await this.configureOptions(e));return}await this.configureOptions(e)}};var ut=class{static name="plugin-css";manifestPath;mode;constructor(e){this.manifestPath=e.manifestPath,this.mode=e.mode}async apply(e){let s={test:/\.svg$/i,type:"asset/resource",generator:{filename:"assets/[name][ext]"},parser:{dataUrlCondition:{maxSize:2048}}},i=[...e.options.module.rules.some(n=>n&&n.test instanceof RegExp&&n.test.test(".svg")&&n.use!==void 0)?[]:[s],{test:/\.(png|jpg|jpeg|gif|webp|avif|ico|bmp)$/i,type:"asset/resource",generator:{filename:"assets/[name][ext]"},parser:{dataUrlCondition:{maxSize:2*1024}}},{test:/\.(woff|woff2|eot|ttf|otf)$/i,type:"asset/resource",generator:{filename:"assets/[name][ext]"}},{test:/\.(txt|md|csv|tsv|xml|pdf|docx|doc|xls|xlsx|ppt|pptx|zip|gz|gzip|tgz)$/i,type:"asset/resource",generator:{filename:"assets/[name][ext]"},parser:{dataUrlCondition:{maxSize:2*1024}}},{test:/\.(csv|tsv)$/i,use:[require.resolve("csv-loader")],generator:{filename:"assets/[name][ext]"}}];e.options.module.rules=[...e.options.module.rules,...i].filter(Boolean)}};var Xs=a(require("path"));var ue=a(require("path")),gt=a(require("fs"));var mt=a(require("path")),Ui=a(require("fs"));var qi=!1;function X(t){let e=mt.default.join(t,"package.json"),s=mt.default.join(t,"manifest.json");if(!Ui.default.existsSync(e))return!1;let r=require(e),i=r.devDependencies&&r.devDependencies.preact,n=r.dependencies&&r.dependencies.preact;if((i||n)&&!qi){let c=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(c,"Preact")),qi=!0}return!!i||!!n}async function Wi(t){if(!X(t))return;try{require.resolve("@prefresh/webpack")}catch{let r=["@prefresh/webpack"],n=require(mt.default.join(t,"manifest.json")).name||"Extension.js";await _(n,"Preact",r),console.log(E(n,"Preact")),process.exit(0)}return{plugins:[new(require("@prefresh/webpack"))],loaders:void 0,alias:{react:"preact/compat","react-dom/test-utils":"preact/test-utils","react-dom":"preact/compat","react/jsx-runtime":"preact/jsx-runtime"}}}var fe=a(require("path")),dt=a(require("fs"));var Bi=!1;function R(t){let e=fe.default.join(t,"package.json");if(!dt.default.existsSync(e))return!1;let s=Hp(t),r=require(e),i=require(fe.default.join(t,"manifest.json")),n=i.name||"Extension.js",o=r.devDependencies&&r.devDependencies.typescript,c=r.dependencies&&r.dependencies.typescript;return Bi||((o||c)&&(s?process.env.EXTENSION_ENV==="development"&&console.log(v(n,"TypeScript")):(console.log(ai(i)),Vp(t))),Bi=!0),!!s&&!!(o||c)}function zp(t,e){return{compilerOptions:{allowJs:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,forceConsistentCasingInFileNames:!0,jsx:it(t)?"react-jsx":"preserve",lib:["dom","dom.iterable","esnext"],moduleResolution:"node",module:"esnext",resolveJsonModule:!0,strict:!0,target:"esnext",isolatedModules:!1,skipLibCheck:!0},exclude:["node_modules","dist"]}}function Hp(t){let e=fe.default.join(t,"tsconfig.json");if(dt.default.existsSync(e))return e}function Vp(t){dt.default.writeFileSync(fe.default.join(t,"tsconfig.json"),JSON.stringify(zp(t,{mode:"development"}),null,2))}async function Ji(t){if(!R(t))return!1;try{require.resolve("typescript")}catch{let s=["typescript"],i=require(fe.default.join(t,"manifest.json")).name||"Extension.js";await _(i,"TypeScript",s),console.log(E(i,"TypeScript")),process.exit(0)}return!0}var zi=!1,Hi=[".babelrc",".babelrc.json",".babelrc.js",".babelrc.cjs","babel.config.json","babel.config.js","babel.config.cjs"];function Gp(t){let e=ue.default.join(t,"package.json"),s=ue.default.join(t,"manifest.json");if(!gt.default.existsSync(e))return!1;let r=require(e),i=r.devDependencies&&r.devDependencies["babel-core"],n=r.dependencies&&r.dependencies["babel-core"],o=Hi.some(c=>gt.default.existsSync(ue.default.join(t,c)))||!!i||!!n;if(o&&!zi){let p=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&process.env.EXTENSION_ENV==="development"&&console.log(v(p,"Babel")),zi=!0}return o}function Xp(t){for(let e of Hi){let s=ue.default.join(t,e);if(gt.default.existsSync(s))return s}}function Zp(t,e){let s=require("babel-preset-modern-browser-extension").default;return{cacheDirectory:!1,cacheCompression:!1,babelrc:!1,configFile:Xp(t),compact:e.mode==="production",overrides:[s(e).overrides],presets:[...s(e).presets],plugins:[...s(e).plugins,process.env.NODE_ENV!=="test"&&e.mode==="development"&&X(t)&&require.resolve("react-refresh/babel")].filter(Boolean)}}async function Vi(t,e){if(!Gp(e))return;try{require.resolve("babel-loader")}catch{let o=["@babel/core","babel-loader","babel-preset-modern-browser-extension"],p=require(ue.default.join(e,"manifest.json")).name||"Extension.js";await _(p,"Babel",o),console.log(E(p,"Babel")),process.exit(0)}let s=R(e)?/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/:/\.(js|mjs|jsx|mjsx)$/,r=t.options.mode,i=await Ji(e);return{plugins:void 0,loaders:[{test:s,include:e,exclude:/node_modules/,loader:require.resolve("babel-loader"),options:Zp(e,{mode:r,typescript:i})}],alias:void 0}}var ht=a(require("path")),Xi=a(require("fs"));var Gi=!1;function me(t){let e=ht.default.join(t,"package.json"),s=ht.default.join(t,"manifest.json");if(!Xi.default.existsSync(e))return!1;let r=require(e),i=r.devDependencies&&r.devDependencies.react,n=r.dependencies&&r.dependencies.react;if((i||n)&&!Gi){let c=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(c,"React")),Gi=!0}return!!i||!!n}async function Zi(t){if(!me(t))return;try{require.resolve("@pmmmwh/react-refresh-webpack-plugin")}catch{let r=["react-refresh","@pmmmwh/react-refresh-webpack-plugin","react-refresh-typescript"],n=require(ht.default.join(t,"manifest.json")).name||"Extension.js";await _(n,"React",r),console.log(E(n,"React")),process.exit(0)}return{plugins:[new(require("@pmmmwh/react-refresh-webpack-plugin"))({overlay:!1})],loaders:void 0,alias:void 0}}var yt=class t{static name="plugin-js-frameworks";manifestPath;mode;constructor(e){this.manifestPath=e.manifestPath,this.mode=e.mode}async configureOptions(e){let s=Xs.default.dirname(this.manifestPath),r=await Vi(e,s),i=await Zi(s),n=await Wi(s),o=await Li(s);e.options.resolve.alias={...r?.alias||{},...i?.alias||{},...n?.alias||{},...o?.alias||{},...e.options.resolve.alias},e.options.module.rules=[{test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[Xs.default.dirname(this.manifestPath)],exclude:/node_modules/,use:{loader:require.resolve("swc-loader"),options:{sync:!0,module:{type:"es6"},minify:this.mode==="production",isModule:!0,jsc:{target:"es2016",parser:{syntax:R(s)?"typescript":"ecmascript",tsx:R(s)&&(me(s)||X(s)),jsx:!R(s)&&(me(s)||X(s)),dynamicImport:!0},transform:{react:{development:this.mode==="development",refresh:this.mode==="development",runtime:"automatic",importSource:"react"}}}}}},...r?.loaders||[],...i?.loaders||[],...n?.loaders||[],...o?.loaders||[],...e.options.module.rules].filter(Boolean),i?.plugins?.forEach(c=>c.apply(e)),n?.plugins?.forEach(c=>c.apply(e)),o?.plugins?.forEach(c=>c.apply(e))}async apply(e){if(this.mode==="production"){e.hooks.beforeRun.tapPromise(t.name,async()=>await this.configureOptions(e));return}await this.configureOptions(e)}};var Te=a(require("path"));var Mn=a(require("path"));var Yi=a(require("path"));function Ki(t,e){if(!e||!e.action||!e.action.default_popup)return;let s=e.action.default_popup;return Yi.default.join(t,s)}var Qi=a(require("path"));function en(t,e){if(!e||!e.browser_action||!e.browser_action.default_popup)return;let s=e.browser_action.default_popup;return Qi.default.join(t,s)}var bt=a(require("path"));function tn(t,e){let s={newtab:void 0};if(!e||!e.chrome_url_overrides)return{"chrome_url_overrides/newtab":void 0};if(e.chrome_url_overrides.history){let r=e.chrome_url_overrides.history;s={"chrome_url_overrides/history":bt.default.join(t,r)}}if(e.chrome_url_overrides.newtab){let r=e.chrome_url_overrides.newtab;s={"chrome_url_overrides/newtab":bt.default.join(t,r)}}if(e.chrome_url_overrides.bookmarks){let r=e.chrome_url_overrides.bookmarks;s={"chrome_url_overrides/bookmarks":bt.default.join(t,r)}}return s}var sn=a(require("path"));function rn(t,e){if(!e||!e.devtools_page)return;let s=e.devtools_page;return sn.default.join(t,s)}var Zs=a(require("path"));function nn(t,e){if(e.options_page){let r=e.options_page;return Zs.default.join(t,r)}if(!e||!e.options_ui||!e.options_ui.page)return;let s=e.options_ui.page;return Zs.default.join(t,s)}var on=a(require("path"));function an(t,e){if(!e||!e.page_action||!e.page_action.default_popup)return;let s=e.page_action.default_popup;return on.default.join(t,s)}var cn=a(require("path"));function pn(t,e){if(!e||!e.sandbox||!e.sandbox.pages)return{"sandbox/page-0":void 0};let s=e.sandbox.pages,r={};for(let[i,n]of s.entries())r[`sandbox/page-${i}`]=cn.default.join(t,n);return r}var ln=a(require("path"));function fn(t,e){if(!e||!e.side_panel||!e.side_panel.default_path)return;let s=e.side_panel.default_path;return ln.default.join(t,s)}var un=a(require("path"));function mn(t,e){if(!e||!e.sidebar_action||!e.sidebar_action.default_panel)return;let s=e.sidebar_action.default_panel;return un.default.join(t,s)}function Ce(t,e){return{"action/default_popup":Ki(t,e),"browser_action/default_popup":en(t,e),...tn(t,e),devtools_page:rn(t,e),"options_ui/page":nn(t,e),"page_action/default_popup":an(t,e),...pn(t,e),"side_panel/default_path":fn(t,e),"sidebar_action/default_panel":mn(t,e)}}var Ys=a(require("path"));function dn(t,e){if(!e||!e.action||!e.action.default_icon)return;if(typeof e.action.default_icon=="string")return Ys.default.join(t,e.action.default_icon);let s=[];for(let r in e.action.default_icon)s.push(Ys.default.join(t,e.action.default_icon[r]));return s}var Ks=a(require("path"));function gn(t,e){if(!e||!e.browser_action||!e.browser_action.default_icon)return;let s=[];if(typeof e.browser_action.default_icon=="string")return Ks.default.join(t,e.browser_action.default_icon);for(let r in e.browser_action.default_icon){let i=e.browser_action.default_icon[r]=Ks.default.join(t,e.browser_action.default_icon[r]);s.push(i)}return s}var Qs=a(require("path"));function hn(t,e){if(!(!e||!e.browser_action||!e.browser_action.theme_icons)){for(let s of e.browser_action.theme_icons)s.light&&(s.light=Qs.default.join(t,s.light)),s.dark&&(s.dark=Qs.default.join(t,s.dark)),s.size&&delete s.size;return e.browser_action.theme_icons}}var yn=a(require("path"));function bn(t,e){if(!e||!e.icons)return;let s=[];for(let r in e.icons){let i=yn.default.join(t,e.icons[r]);s.push(i)}return s}var er=a(require("path"));function wn(t,e){if(!e||!e.page_action||!e.page_action.default_icon)return;if(typeof e.page_action.default_icon=="string")return er.default.join(t,e.page_action.default_icon);let s=[];for(let r in e.page_action.default_icon){let i=er.default.join(t,e.page_action.default_icon[r]);s.push(i)}return s}var xn=a(require("path"));function vn(t,e){return!e||!e.sidebar_action||!e.sidebar_action.default_icon?void 0:xn.default.join(t,e.sidebar_action.default_icon)}function _n(t,e){return{action:dn(t,e),browser_action:gn(t,e),"browser_action/theme_icons":hn(t,e),icons:bn(t,e),page_action:wn(t,e),sidebar_action:vn(t,e)}}var Sn=a(require("path"));function Pn(t,e){let s={};return!e||!e.declarative_net_request||!e.declarative_net_request.rule_resources?{"declarative_net_request/rule_resources-0":void 0}:(e.declarative_net_request.rule_resources.forEach(i=>{s[`declarative_net_request/${i.id}`]=Sn.default.join(t,i.path)}),s)}var kn=a(require("path"));function En(t,e){if(!e||!e.storage||!e.storage.managed_schema)return;let s=e.storage.managed_schema;return kn.default.join(t,s)}function jn(t,e){return{...Pn(t,e),"storage/managed_schema":En(t,e)}}var $n=a(require("path"));function Cn(t,e){if(!e||!e.background)return;let s=e.background.scripts;if(s)return s.map(r=>$n.default.join(t,r))}var Dn=a(require("path"));function Fn(t,e){if(!e||!e.background)return;let s=e.background.service_worker;if(s)return Dn.default.join(t,s)}var tr=a(require("path"));function Ln(t,e){if(!e||!e.content_scripts)return{"content_scripts/content-0":void 0};let s=n=>{if(n.js?.length!==0)return n.js?.map(o=>tr.default.join(t,o))},r=n=>{if(n.css?.length!==0)return n.css?.map(o=>tr.default.join(t,o))},i={};for(let[n,o]of e.content_scripts.entries()){let c=s(o),p=r(o);i[`content_scripts/content-${n}`]=[...(c||[]).filter(l=>l!=null),...(p||[]).filter(l=>l!=null)]}return i}var In=a(require("path"));function On(t,e){if(!e||!e.user_scripts||!e.user_scripts.api_script)return;let s=e.user_scripts.api_script;return In.default.join(t,s)}function De(t,e){return{"background/scripts":Cn(t,e),"background/service_worker":Fn(t,e),...Ln(t,e),"user_scripts/api_script":On(t,e)}}function An(t){if(!(!t||!t.web_accessible_resources||!t.web_accessible_resources.length))return t.web_accessible_resources}function Yp(t){function e(s){let r={};for(let i in s)if(s.hasOwnProperty(i)){let n=i.includes(":")?i.split(":")[1]:i;typeof s[i]=="object"&&!Array.isArray(s[i])?r[n]=e(s[i]):r[n]=s[i]}return r}return e(t)}function Tn({manifestPath:t}){let e=Mn.default.dirname(t),s=require(t),r=Yp(s);return{html:Ce(e,r),icons:_n(e,r),json:jn(e,r),scripts:De(e,r),web_accessible_resources:An(r)}}var de=a(require("path"));var wt=a(require("fs")),Fe=a(require("path"));function xt(t,e){if(!wt.default.existsSync(t)||!wt.default.statSync(t).isDirectory())return[];let s=[];function r(i){let n=wt.default.readdirSync(i,{withFileTypes:!0});for(let o of n){let c=Fe.default.join(i,o.name);o.isDirectory()?r(c):o.isFile()&&e(o.name)&&s.push(c)}}return r(t),s}function vt(t,e,s=""){return!e||!e.length?{}:e.reduce((r,i)=>{let n=Fe.default.extname(i),o=Fe.default.basename(i,n),c=s?`${s}/${o}`:Fe.default.relative(t,i);return{...r,[c]:i}},{})}function Rn({manifestPath:t}){let e=de.default.dirname(t),s={public:de.default.join(e,"public"),pages:de.default.join(e,"pages"),scripts:de.default.join(e,"scripts")},r={public:xt(s.public,()=>!0),pages:xt(s.pages,n=>n.endsWith(".html")),scripts:xt(s.scripts,n=>[".js",".mjs",".jsx",".mjsx",".ts",".mts",".tsx",".mtsx"].includes(de.default.extname(n)))};return{public:vt(e,r.public),pages:vt(e,r.pages,"pages"),scripts:vt(e,r.scripts,"scripts")}}var _t=a(require("path")),Nn=a(require("webpack")),St=class{manifestPath;includeList;excludeList;loaderOptions;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList,this.loaderOptions=e.loaderOptions}apply(e){new Nn.default.ProvidePlugin({r:[_t.default.resolve(__dirname,"./resolver-module.js"),"default"]}).apply(e),e.options.module?.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,loader:require.resolve(_t.default.resolve(__dirname,"./resolver-loader.js")),include:[_t.default.dirname(this.manifestPath)],exclude:/node_modules/,options:{manifestPath:this.manifestPath,includeList:this.includeList,jsx:this.loaderOptions?this.loaderOptions.jsx:!1,typescript:this.loaderOptions?this.loaderOptions.typescript:!1,minify:this.loaderOptions?this.loaderOptions.minify:!1}})}};var qn=a(require("fs")),kt=a(require("webpack")),Un=require("webpack");var Pt=class{manifestPath;constructor(e){this.manifestPath=e.manifestPath}apply(e){e.hooks.compilation.tap("manifest:emit-manifest",s=>{s.hooks.processAssets.tap({name:"manifest:emit-manifest",stage:kt.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{let r=this.manifestPath,i;try{let c=qn.default.readFileSync(r,"utf-8");i=JSON.parse(c)}catch(c){let l=require(this.manifestPath).name||"Extension.js";s.errors.push(new kt.default.WebpackError(ii(l,c)));return}let n=JSON.stringify(i,null,2);s.emitAsset("manifest.json",new Un.sources.RawSource(n))})})}};var Ct=require("webpack");function Wn(t,e){return t.background&&t.background.scripts&&{background:{...t.background,...t.background.scripts&&{scripts:[...t.background.scripts.map(s=>h("background/scripts.js",s,e))]}}}}var Bn=a(require("path"));var Et=t=>Bn.default.basename(t);function Jn(t,e){return t.browser_action&&{browser_action:{...t.browser_action,...t.browser_action.default_popup&&{default_popup:h("browser_action/default_popup.html",t.browser_action.default_popup,e)},...t.browser_action.default_icon&&{default_icon:typeof t.browser_action.default_icon=="string"?h(`icons/${Et(t.browser_action.default_icon)}`,t.browser_action.default_icon,e):Object.fromEntries(Object.entries(t.browser_action.default_icon).map(([s,r])=>[s,h(`icons/${Et(r)}`,r,e)]))},...t.browser_action.theme_icons&&{theme_icons:t.browser_action.theme_icons.map(s=>({...s,...s.light&&{light:h(`browser_action/${Et(s.light)}`,s.light,e)},...s.dark&&{dark:h(`browser_action/${Et(s.dark)}`,s.dark,e)}}))}}}}function zn(t,e){return t.declarative_net_request&&{declarative_net_request:{...t.declarative_net_request,rule_resources:t.declarative_net_request.rule_resources.map(s=>({...s,path:s.path&&h(`declarative_net_request/${s.id}.json`,s.path,e)}))}}}function Hn(t,e){return{...Wn(t,e),...Jn(t,e),...zn(t,e)}}var Gn=a(require("path"));var Vn=t=>Gn.default.basename(t);function Xn(t,e){return t.action&&{action:{...t.action,...t.action.default_popup&&{default_popup:h("action/default_popup.html",t.action.default_popup,e)},...t.action.default_icon&&{default_icon:typeof t.action.default_icon=="string"?h(`action/${Vn(t.action.default_icon)}`,t.action.default_icon,e):Object.fromEntries(Object.entries(t.action.default_icon).map(([s,r])=>[s,h(`action/${Vn(r)}`,r,e)]))}}}}function Zn(t,e){return t.background&&t.background.service_worker&&{background:{...t.background,...t.background.service_worker&&{service_worker:h("background/service_worker.js",t.background.service_worker,e)}}}}function jt(t,e){return t.side_panel&&{side_panel:{...t.side_panel.default_path&&{default_path:h("side_panel/default_path.html",t.side_panel.default_path,e)}}}}function Yn(t,e){return{...Xn(t,e),...Zn(t,e),...jt(t,e)}}function Kn(t,e){return t.background&&t.background.page&&{background:{...t.background,...t.background.page&&{page:h("background/page.html",t.background.page,e)}}}}function Qn(t,e){return t.chrome_url_overrides&&{chrome_url_overrides:{...t.chrome_url_overrides.bookmarks&&{bookmarks:h("chrome_url_overrides/bookmarks.html",t.chrome_url_overrides.bookmarks,e)},...t.chrome_url_overrides.history&&{history:h("chrome_url_overrides/history.html",t.chrome_url_overrides.history,e)},...t.chrome_url_overrides.newtab&&{newtab:h("chrome_url_overrides/newtab.html",t.chrome_url_overrides.newtab,e)}}}}function eo(t,e){return t.content_scripts&&{content_scripts:t.content_scripts.map((s,r)=>{let i=[...new Set(s.js)],n=[...new Set(s.css)];return{...s,js:[...i.map(o=>h(`content_scripts/content-${r}.js`,o,e))],css:[...n.map(o=>h(`content_scripts/content-${r}.css`,o,e))]}})}}function to(t,e){return t.devtools_page&&{devtools_page:h("devtools_page.html",t.devtools_page,e)}}var so=a(require("path"));var Kp=t=>so.default.basename(t);function ro(t,e){return t.icons&&{icons:Object.fromEntries(Object.entries(t.icons).map(([s,r])=>[s,h(`icons/${Kp(r)}`,r,e)]))}}function io(t,e){return t.options_page&&{options_page:h("options_ui/page.html",t.options_page,e)}}function no(t,e){return t.options_ui&&{options_ui:{...t.options_ui,...t.options_ui.page&&{page:h("options_ui/page.html",t.options_ui.page,e)}}}}var ao=a(require("path"));var oo=t=>ao.default.basename(t);function co(t,e){return t.page_action&&{page_action:{...t.page_action,...t.page_action.default_popup&&{default_popup:h("page_action/default_popup.html",t.page_action.default_popup,e)},...t.page_action.default_icon&&{default_icon:typeof t.page_action.default_icon=="string"?h(`icons/${oo(t.page_action.default_icon)}`,t.page_action.default_icon,e):Object.fromEntries(Object.entries(t.page_action.default_icon).map(([s,r])=>[s,h(`icons/${oo(r)}`,r,e)]))}}}}function po(t,e){return t.sandbox&&{sandbox:{...t.sandbox,...t.sandbox.pages&&{pages:t.sandbox.pages.map((s,r)=>h(`sandbox/page-${r}.html`,s,e))}}}}var lo=a(require("path"));var Qp=t=>lo.default.basename(t);function fo(t,e){return t.sidebar_action&&{sidebar_action:{...t.sidebar_action,...t.sidebar_action.default_panel&&{default_panel:h("sidebar_action/default_panel.html",t.sidebar_action.default_panel,e)},...t.sidebar_action.default_icon&&{default_icon:h(`icons/${Qp(t.sidebar_action.default_icon)}`,t.sidebar_action.default_icon,e)}}}}function uo(t,e){return t.storage&&{storage:{...t.storage.managed_schema&&{managed_schema:h("storage/managed_schema.json",t.storage.managed_schema,e)}}}}var mo=a(require("path"));var el=t=>mo.default.basename(t);function go(t,e){return t.theme&&{theme:{...t.theme,...t.theme.images&&{images:{...t.theme.images,theme_frame:h(`theme/images/${el(t.theme.images.theme_frame)}`,t.theme.images.theme_frame,e)}}}}}function ho(t,e){return t.user_scripts&&{user_scripts:{...t.user_scripts,...t.user_scripts.api_script&&{api_script:h("user_scripts/api_script.js",t.user_scripts.api_script,e)}}}}function yo(t){return t.web_accessible_resources&&t.web_accessible_resources.length&&{web_accessible_resources:t.web_accessible_resources}}function bo(t,e){return{...Kn(t,e),...Qn(t,e),...eo(t,e),...to(t,e),...ro(t,e),...io(t,e),...no(t,e),...co(t,e),...po(t,e),...jt(t,e),...fo(t,e),...uo(t,e),...go(t,e),...ho(t,e),...yo(t)}}function wo(t,e,s){let r=e||require(t);return JSON.stringify({...r,...bo(r,s),...Hn(r,s),...Yn(r,s)},null,2)}var $t=class{manifestPath;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.excludeList=e.excludeList}applyDevOverrides(e){return e.content_scripts?e.content_scripts.map((s,r)=>(s.css.length&&!s.js.length&&(s.js=[h(`content_scripts-${r}`,"dev.js",{})]),s)):{}}apply(e){e.hooks.thisCompilation.tap("manifest:update-manifest",s=>{s.hooks.processAssets.tap({name:"manifest:update-manifest",stage:Ct.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},()=>{if(s.errors.length>0)return;let r=G(s,this.manifestPath),i=wo(this.manifestPath,r,this.excludeList||{}),n={...r,...JSON.parse(i)};e.options.mode!=="production"&&n.content_scripts&&(n.content_scripts=this.applyDevOverrides(n));let o=JSON.stringify(n,null,2),c=new Ct.sources.RawSource(o);s.updateAsset("manifest.json",c)})})}};var xo=a(require("fs")),Dt=class{dependencyList;constructor(e){this.dependencyList=e}apply(e){e.hooks.afterCompile.tap("ManifestPlugin (AddDependenciesPlugin)",s=>{if(s.errors?.length)return;let r=new Set(s.fileDependencies);this.dependencyList&&this.dependencyList.forEach(i=>{xo.default.existsSync(i)&&(r.has(i)||(r.add(i),s.fileDependencies.add(i)))})})}};var vo=a(require("fs")),_o=a(require("path")),Lt=a(require("webpack"));var Ft=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}extractPaths(e){let s=Array.isArray(e)?e:[e];if(typeof s[0]=="string")return s;let r=[];if(typeof e=="object"&&!Array.isArray(e)){let i=e;i.light&&r.push(i.light),i.dark&&r.push(i.dark)}return r}handleErrors(e,s){let r=[".png",".jpg",".jpeg",".svg",".gif",".webp"],i=[".json"],n=[".js",".ts",".jsx",".tsx",".mjs",".cjs"],o=".html",c=Object.entries(this.includeList||{});for(let[p,l]of c)if(l){let u=this.extractPaths(l);for(let d of u){let g=_o.default.extname(d),$=require(this.manifestPath).name||"Extension.js",k=oe($,p,d);vo.default.existsSync(d)||(r.includes(g)?e.errors.push(new s(k)):i.includes(g)?e.errors.push(new s(k)):n.includes(g)?e.errors.push(new s(k)):g===o?e.errors.push(new s(k)):e.errors.push(new s(k)))}}}apply(e){e.hooks.compilation.tap("manifest:check-manifest-files",s=>{s.hooks.processAssets.tap({name:"compatibility:check-manifest-files",stage:Lt.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_COUNT},()=>{let r=Lt.default.WebpackError;this.handleErrors(s,r)})})}};var So=a(require("fs")),Ot=a(require("webpack"));var It=class{manifestPath;browser;includeList;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.includeList=e.includeList}flattenAndSort(e){return e.flat(1/0).sort()}apply(e){e.hooks.watchRun.tapAsync("manifest:throw-if-recompile-is-needed",(s,r)=>{if((s.modifiedFiles||new Set).has(this.manifestPath)){let n=s.options.context||"",o=`${n}/package.json`;if(!So.default.existsSync(o)){r();return}let c=require(this.manifestPath),p=nt(c,this.browser),l=this.flattenAndSort(Object.values(Ce(n,p))),u=this.flattenAndSort(Object.values(De(n,p)));s.hooks.thisCompilation.tap("manifest:throw-if-recompile-is-needed",d=>{d.hooks.processAssets.tap({name:"manifest:check-manifest-files",stage:Ot.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_COMPATIBILITY},()=>{let y=d.getAsset("manifest.json")?.source.source().toString(),$=JSON.parse(y||"{}"),k=this.flattenAndSort(Object.values(Ce(n,$))),U=this.flattenAndSort(Object.values(De(n,$)));if(u.toString()!==U.toString()||l.toString()!==k.toString()){let W=l.filter(B=>!k.includes(B))[0],H=k.filter(B=>!l.includes(B))[0],_e=ni(H,W);d.errors.push(new Ot.default.WebpackError(_e))}})})}r()})}};var At=class{manifestPath;browser;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){new Pt({manifestPath:this.manifestPath}).apply(e),new Ft({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new $t({manifestPath:this.manifestPath,excludeList:this.excludeList}).apply(e),new Dt([this.manifestPath]).apply(e),new It({manifestPath:this.manifestPath,browser:this.browser,includeList:this.includeList}).apply(e)}};var or=a(require("path"));var rr=a(require("fs")),Rt=a(require("webpack")),$o=require("webpack");var Po=a(require("fs")),he=a(require("path")),ko=a(require("parse5-utils"));var ge=a(require("parse5-utils"));function Mt(t){try{return new URL(t),!0}catch{return!1}}function Le(t,e){let{childNodes:s=[]}=t;for(let r of s)if(r.nodeName==="script"){let i=ge.default.getAttribute(r,"src");if(!i||Mt(i))continue;e({filePath:i,childNode:r,assetType:"script"})}else if(r.nodeName==="link"){let i=ge.default.getAttribute(r,"href"),n=ge.default.getAttribute(r,"rel");if(!i||Mt(i))continue;e(n==="dns-prefetch"||n==="icon"||n==="manifest"||n==="modulepreload"||n==="preconnect"||n==="prefetch"||n==="preload"||n==="prerender"?{filePath:i,childNode:r,assetType:"staticHref"}:{filePath:i,childNode:r,assetType:"css"})}else if(r.nodeName==="a"||r.nodeName==="area"){let i=ge.default.getAttribute(r,"href");if(!i||Mt(i))continue;e({filePath:i,childNode:r,assetType:"staticHref"})}else if(r.nodeName==="audio"||r.nodeName==="embed"||r.nodeName==="iframe"||r.nodeName==="img"||r.nodeName==="input"||r.nodeName==="source"||r.nodeName==="track"||r.nodeName==="video"){let i=ge.default.getAttribute(r,"src");if(!i||Mt(i))continue;e({filePath:i,childNode:r,assetType:"staticSrc"})}else Le(r,e)}function D(t,e){let s={css:[],js:[],static:[]};if(!t)return s;let r=e||Po.default.readFileSync(t,{encoding:"utf8"}),i=ko.default.parse(r),n=(o,c)=>he.default.join(he.default.dirname(o),c.startsWith("/")?he.default.relative(he.default.dirname(o),c):c);for(let o of i.childNodes)if(o.nodeName==="html"){for(let c of o.childNodes)(c.nodeName==="head"||c.nodeName==="body")&&Le(c,({filePath:p,assetType:l})=>{let u=n(t,p);switch(l){case"script":s.js?.push(u);break;case"css":s.css?.push(u);break;case"staticSrc":case"staticHref":if(p.startsWith("#"))break;s.static?.push(u);break;default:break}});return{css:s.css,js:s.js,static:s.static}}}function Eo(t,e,s){let r=Object.keys(t).find(n=>{let o=t[n];return t[n]===e||D(o)?.js?.includes(e)||D(o)?.css?.includes(e)})||"",i=sr(e);return r?`/${r.replace(i,"")}${s}`:`${e.replace(i,"")}${s}`}function sr(t){switch(he.default.extname(t)){case".js":case".mjs":case".ts":case".tsx":return".js";case".css":case".scss":case".sass":case".less":return".css";case".html":return".html";default:return".js"}}function Z(t,e,s){return s?`/${t}${e}`:`${t}${e}`}function jo(t,e){return Object.values(e||{}).some(s=>s===t)}var Tt=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){let r=require(this.manifestPath).name||"Extension.js";e.hooks.thisCompilation.tap("html:emit-html-file",i=>{i.hooks.processAssets.tap({name:"AddAssetsToCompilationPlugin",stage:Rt.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL},()=>{let n=Object.entries(this.includeList||{});for(let o of n){let[c,p]=o;if(p){if(!rr.default.existsSync(p)){let u=oe(r,c,p);i.warnings.push(new Rt.default.WebpackError(u));return}let l=rr.default.readFileSync(p,"utf8");if(!P(p,this.excludeList)){let u=new $o.sources.RawSource(l),d=Z(c,".html");i.emitAsset(d,u)}}}})})}};var Nt=a(require("fs")),ye=a(require("path")),Co=a(require("webpack")),Ie=require("webpack");var qt=class{manifestPath;includeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList}apply(e){e.hooks.thisCompilation.tap("html:add-assets-to-compilation",s=>{s.hooks.processAssets.tap({name:"html:add-assets-to-compilation",stage:Ie.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL},()=>{if(s.errors.length>0)return;let r=Object.entries(this.includeList||{});for(let i of r){let[n,o]=i,c=n+".html";if(o){let p=s.getAsset(c);if(p){let l=p.source.source().toString(),u=D(o,l)?.static,d=[...new Set(u)];for(let g of d)if(!g.includes("public/")){if(!Nt.default.existsSync(g)&&!jo(g,this.includeList)&&!ye.default.basename(g).startsWith("#")){let W=Ze(require(this.manifestPath).name,o,g);s.warnings.push(new Co.default.WebpackError(W));return}let y=Nt.default.readFileSync(g),$=new Ie.sources.RawSource(y),k=ye.default.join("assets",ye.default.basename(g));if(!s.getAsset(k))if(g.endsWith(".html")){let U=D(g),W=[...U?.js||[],...U?.css||[],...U?.static||[]];s.emitAsset(k,$),W.forEach(H=>{let _e=Nt.default.readFileSync(H),B=new Ie.sources.RawSource(_e),Tr=ye.default.join("assets",ye.default.basename(H));s.getAsset(Tr)||s.emitAsset(Tr,B)})}else s.emitAsset(k,$)}}}}})})}};var Do=a(require("path")),ir=a(require("fs"));var Ut=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){let s=this.includeList||{};for(let r of Object.entries(s)){let[i,n]=r;if(n){if(!ir.default.existsSync(n))return;let o=D(n),c=o?.js||[],p=o?.css||[],l=[...c,...p].filter(u=>!P(u,this.excludeList));if(e.options.mode==="development"){let u=Do.default.resolve(__dirname,"minimum-script-file.mjs");l.push(u)}ir.default.existsSync(n)&&(P(n,this.excludeList)||(e.options.entry={...e.options.entry,[i]:{import:l}}))}}}};var Bt=require("webpack");var nr=a(require("fs")),Y=a(require("path")),F=a(require("parse5-utils"));function Fo(t,e,s,r,i){let n=nr.default.readFileSync(s,{encoding:"utf8"}),o=F.default.parse(n),c=!!t.getAsset(e+".css"),p=!1;for(let l of o.childNodes)if(l.nodeName==="html"){for(let u of l.childNodes){if((u.nodeName==="head"||u.nodeName==="body")&&Le(u,({filePath:d,childNode:g,assetType:y})=>{let $=Y.default.dirname(s),k=Y.default.resolve($,d),U=sr(k),W=P(Y.default.resolve($,d),i),H=Y.default.join("/",Y.default.normalize(d)),_e=wi(k,r);switch(y){case"script":{W?l=F.default.setAttribute(g,"src",H):(l=F.default.remove(g),p=!0);break}case"css":{W?l=F.default.setAttribute(g,"href",H):(l=F.default.remove(g),c=!0);break}case"staticHref":case"staticSrc":{if(W)l=F.default.setAttribute(g,y==="staticSrc"?"src":"href",H);else if(_e){let B=Eo(r,k,U);l=F.default.setAttribute(g,y==="staticSrc"?"src":"href",B)}else{let B=Y.default.join("assets",Y.default.basename(k,U));nr.default.existsSync(k)&&(l=F.default.setAttribute(g,y==="staticSrc"?"src":"href",Z(B,"",!0)))}break}default:break}}),u.nodeName==="head"&&c&&t.options.mode==="production"){let d=F.default.createNode("link");d.attrs=[{name:"rel",value:"stylesheet"},{name:"href",value:Z(e,".css",!0)}],F.default.append(u,d)}if(u.nodeName==="body"&&(p||t.options.mode!=="production")){let d=F.default.createNode("script");d.attrs=[{name:"src",value:Z(e,".js",!0)}],F.default.append(u,d)}}return F.default.serialize(o)}}var Wt=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){e.hooks.thisCompilation.tap("html:update-html-file",s=>{s.hooks.processAssets.tap({name:"html:update-html-file",stage:Bt.Compilation.PROCESS_ASSETS_STAGE_DERIVED},()=>{if(s.errors.length>0)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[n,o]=i;if(o){let c=Fo(s,n,o,r,this.excludeList||{});if(!P(o,this.excludeList)&&c){let p=new Bt.sources.RawSource(c),l=Z(n,".html");s.updateAsset(l,p)}}}})})}};var Lo=a(require("fs")),Io=require("webpack");var Jt=class{manifestPath;includeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList}apply(e){e.hooks.thisCompilation.tap("html:add-to-file-dependencies",s=>{s.hooks.processAssets.tap({name:"html:add-to-file-dependencies",stage:Io.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{if(s.errors?.length)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[,n]=i;if(n){let o=D(n),c=new Set(s.fileDependencies);if(Lo.default.existsSync(n)){let p=[n,...o?.static||[]];for(let l of p)c.has(l)||(c.add(l),l===n&&s.fileDependencies.add(l))}}}})})}};var Oo=a(require("fs"));var zt=class{manifestPath;includeList;initialHtmlAssets={};constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList}hasEntriesChanged(e,s){if(!s||!e||e.length!==s.length)return!0;for(let r=0;r<e.length;r++)if(e[r]!==s[r])return!0;return!1}storeInitialHtmlAssets(e){Object.entries(e).forEach(([s,r])=>{let i=r;if(i){if(!Oo.default.existsSync(i)){let o=require(this.manifestPath).name||"Extension.js";console.error(oe(o,s,i)),process.exit(1)}this.initialHtmlAssets[i]={js:D(i)?.js||[],css:D(i)?.css||[]}}})}apply(e){let s=this.includeList||{};this.storeInitialHtmlAssets(s),e.hooks.make.tapAsync("html:throw-if-recompile-is-needed",(r,i)=>{let n=e.modifiedFiles||new Set,o=Array.from(n)[0];if(o&&this.initialHtmlAssets[o]){let c=D(o)?.js||[],p=D(o)?.css||[],{js:l,css:u}=this.initialHtmlAssets[o];if(this.hasEntriesChanged(p,u)||this.hasEntriesChanged(c,l)){let d=require(this.manifestPath).name;console.log(fi(d,o))}}i()})}};var Ao=a(require("fs")),Mo=require("webpack");function sl(t,e,s){let r="Module not found: Error: Can't resolve ",n=s.message.replace(r,"").split("'")[1];if(s.message.includes(r))for(let o of Object.entries(e)){let[,c]=o;if(c){if(!Ao.default.existsSync(c))return null;let p=D(c),l=p?.js||[],u=p?.css||[];if(l.includes(n)||u.includes(n)){let d=Ze(require(t).name,c,n);return new Mo.WebpackError(d)}}}return null}var Ht=class{manifestPath;includeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList}apply(e){e.hooks.compilation.tap("html:handle-common-errors",s=>{s.hooks.afterSeal.tapPromise("html:handle-common-errors",async()=>{s.errors.forEach((r,i)=>{let n=sl(this.manifestPath,this.includeList||{},r);n&&(s.errors[i]=n)})})})}};var Vt=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){new Tt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new qt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new Ut({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new Wt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),e.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[or.default.dirname(this.manifestPath)],exclude:/node_modules/,use:[{loader:require.resolve(or.default.join(__dirname,"ensure-hmr-for-scripts.js")),options:{manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}}]}),new Jt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new zt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new Ht({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e)}};var se=a(require("path"));var ar=a(require("fs")),To=a(require("path"));function Ro(t,e){return(Array.isArray(t)?t||[]:t?[t]:[]).filter(i=>{let n=ar.default.existsSync(i)&&!P(i,e),o=To.default.extname(i);return n&&(o===".js"||o===".mjs"||o===".jsx"||o===".ts"||o===".tsx")})}function No(t,e){return(Array.isArray(t)?t||[]:t?[t]:[]).filter(i=>ar.default.existsSync(i)&&!P(i,e)&&(i.endsWith(".css")||i.endsWith(".scss")||i.endsWith(".sass")||i.endsWith(".less")))}var Gt=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList||{},this.excludeList=e.excludeList||{}}apply(e){let s=this.includeList||{};for(let r of Object.entries(s)){let[i,n]=r,o=Ro(n,this.excludeList),c=No(n,this.excludeList),p=[...o];e.options.mode==="production"&&p.push(...c),(c.length||o.length)&&(e.options.entry={...e.options.entry,[i]:{import:p}})}}};var te=require("webpack"),rl=['var isBrowser = !!(() => { try { return browser.runtime.getURL("/") } catch(e) {} })()','var isChrome = !!(() => { try { return chrome.runtime.getURL("/") } catch(e) {} })()'],il=[...rl,`var runtime = isBrowser ? browser : isChrome ? chrome : (typeof self === 'object' && self.addEventListener) ? { get runtime() { throw new Error("No chrome or browser runtime found") } } : { runtime: { getURL: x => x } }`],Xt=class t{apply(e){let{RuntimeGlobals:s}=e.webpack;e.hooks.compilation.tap("PublicPathRuntimeModule",r=>{r.hooks.runtimeRequirementInTree.for(s.publicPath).tap(t.name,i=>{let n=nl();return r.addRuntimeModule(i,n),!0})})}};function nl(){class t extends te.RuntimeModule{constructor(){super("publicPath",te.RuntimeModule.STAGE_BASIC)}generate(){let s=this.compilation?.outputOptions.publicPath;return te.Template.asString([...il,`var path = ${JSON.stringify(this.compilation?.getPath(s||"",{hash:this.compilation.hash||"XXXX"}))}`,`${te.RuntimeGlobals.publicPath} = typeof importScripts === 'function' || !(isBrowser || isChrome) ? path : runtime.runtime.getURL(path);`])}}return new t}var Zt=class{manifestPath;browser;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.includeList=e.includeList||{},this.excludeList=e.excludeList||{}}apply(e){let s=require(this.manifestPath);if(s.content_scripts?.some(r=>r.world&&r.world.toLowerCase()==="main")){if(s.id||(console.error(di(s.name||"")),process.exit(1)),this.browser==="firefox"){e.options.output.publicPath=`moz-extension://${s.id}/`;return}e.options.output.publicPath=`${this.browser}-extension://${s.id}/`}}};var Yt=class{manifestPath;browser;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){new Gt({manifestPath:this.manifestPath,includeList:this.includeList||{},excludeList:this.excludeList||{}}).apply(e),e.options.mode==="development"&&e.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[se.default.dirname(this.manifestPath)],exclude:/node_modules/,use:[{loader:require.resolve(se.default.join(__dirname,"inject-content-css-during-dev.js")),options:{manifestPath:this.manifestPath,includeList:this.includeList||{},excludeList:this.excludeList||{}}}]}),e.options.mode==="development"&&e.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[se.default.dirname(this.manifestPath)],exclude:/node_modules/,use:[{loader:require.resolve(se.default.join(__dirname,"add-hmr-accept-code.js")),options:{manifestPath:this.manifestPath,includeList:this.includeList||{},excludeList:this.excludeList||{}}}]}),e.options.mode==="production"&&new Xt().apply(e),new Zt({manifestPath:this.manifestPath,browser:this.browser||"chrome",includeList:this.includeList||{},excludeList:this.excludeList||{}}).apply(e),e.options.mode==="development"&&e.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[se.default.dirname(this.manifestPath)],exclude:/node_modules/,use:[{loader:se.default.resolve(__dirname,"./add-query-param-to-imported-css.js"),options:{manifestPath:this.manifestPath,includeList:this.includeList||{},excludeList:this.excludeList||{}}}]})}};var pr=a(require("path")),Oe=a(require("fs")),lr=a(require("webpack")),Ae=require("webpack");var be=a(require("path")),Kt=a(require("fs"));function cr(t){let e=be.default.join(be.default.dirname(t),"_locales"),s=[];if(Kt.default.existsSync(e))for(let r of Kt.default.readdirSync(e)){let i=be.default.join(e,r);for(let n of Kt.default.readdirSync(i))s.push(be.default.join(be.default.dirname(t),"_locales",r,n))}return s}var Qt=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){e.hooks.thisCompilation.tap("locales:module",s=>{s.hooks.processAssets.tap({name:"locales:module",stage:Ae.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{let i=require(this.manifestPath).name||"Extension.js";if(!Oe.default.existsSync(this.manifestPath)){s.errors.push(new lr.default.WebpackError(ri(i)));return}if(s.errors.length>0)return;let n=cr(this.manifestPath);for(let o of Object.entries(n||[])){let[c,p]=o,l=p;if(l){if(!Oe.default.existsSync(l)){s.warnings.push(new lr.default.WebpackError(Ye(i,c,l)));return}let u=Oe.default.readFileSync(l),d=new Ae.sources.RawSource(u),g=e.options.context||pr.default.dirname(this.manifestPath);if(!P(l,this.excludeList)){let y=pr.default.relative(g,l);s.emitAsset(y,d)}}}})}),e.hooks.thisCompilation.tap("locales:module",s=>{s.hooks.processAssets.tap({name:"locales:module",stage:Ae.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{if(s.errors?.length)return;let r=cr(this.manifestPath);for(let i of Object.entries(r||[])){let[,n]=i;if(n){let o=new Set(s.fileDependencies),c=r||[];for(let p of c)Oe.default.existsSync(p)&&(o.has(p)||(o.add(p),s.fileDependencies.add(p)))}}})})}};var es=a(require("fs")),qo=a(require("webpack")),Me=require("webpack");var ts=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){e.hooks.thisCompilation.tap("json:module",s=>{s.hooks.processAssets.tap({name:"json:module",stage:Me.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{if(s.errors.length>0)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[n,o]=i,c=Array.isArray(o)?o:[o];for(let p of c)if(p&&!P(p,this.excludeList)){if(!es.default.existsSync(p)){let g=require(this.manifestPath).name||"Extension.js";s.warnings.push(new qo.default.WebpackError(Ye(g,n,p)));return}let l=es.default.readFileSync(p),u=new Me.sources.RawSource(l);s.emitAsset(n+".json",u)}}})}),e.hooks.thisCompilation.tap("json:module",s=>{s.hooks.processAssets.tap({name:"json:module",stage:Me.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{if(s.errors?.length)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[,n]=i,o=Array.isArray(n)?n:[n];for(let c of o)if(c){let p=new Set(s.fileDependencies);P(c,this.excludeList)||es.default.existsSync(c)&&(p.has(c)||(p.add(c),s.fileDependencies.add(c)))}}})})}};var fr=a(require("fs")),Uo=a(require("path")),rs=require("webpack");var ss=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){e.hooks.thisCompilation.tap("icons:emit-file",s=>{s.hooks.processAssets.tap({name:"icons:emit-file",stage:rs.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER},()=>{if(s.errors.length>0)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[n,o]=i;if(o===void 0)continue;let c=Array.isArray(o)?typeof o[0]=="string"?o:o.map(Object.values).flat():[o];for(let p of c)if(p){if(!fr.default.existsSync(p))continue;if(!P(p,this.excludeList)){let l=fr.default.readFileSync(p),u=new rs.sources.RawSource(l),d=Uo.default.basename(p),y=`${n.endsWith("theme_icons")?n.replace("theme_icons",""):n}/${d}`;s.emitAsset(y,u)}}}})})}};var Wo=a(require("fs")),Bo=require("webpack"),is=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){e.hooks.thisCompilation.tap("icons:add-to-file-dependencies",s=>{s.hooks.processAssets.tap({name:"icons:add-to-file-dependencies",stage:Bo.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{if(s.errors?.length)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[,n]=i,o=Array.isArray(n)?typeof n[0]=="string"?n:n.map(Object.values).flat():[n];for(let c of o)if(c){let p=new Set(s.fileDependencies);Wo.default.existsSync(c)&&(p.has(c)||(p.add(c),s.fileDependencies.add(c)))}}})})}};var ns=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){new ss({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new is({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e)}};var as=require("webpack");var os=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}generateManifestPatches(e,s){let r=G(e,this.manifestPath),i=r.web_accessible_resources||[],n=r.web_accessible_resources||[];for(let[p,l]of Object.entries(s)){let u=r.content_scripts?.find(d=>d.js&&d.js.some(g=>g.includes(p)));if(u){let d=u.matches||[];if(r.manifest_version===3){let g=i.find(y=>y.matches.some($=>d.includes($)));g?l.forEach(y=>{g.resources.includes(y)||g.resources.push(y)}):i.push({resources:l.filter(y=>!y.endsWith(".map")),matches:d})}else l.forEach(g=>{n.includes(g)||n.push(g)})}}r.manifest_version===3?r.web_accessible_resources=i:r.web_accessible_resources=Array.from(new Set(n));let o=JSON.stringify(r,null,2),c=new as.sources.RawSource(o);e.getAsset("manifest.json")&&e.updateAsset("manifest.json",c)}apply(e){e.hooks.thisCompilation.tap("plugin-extension:feature-web-resources",s=>{s.hooks.processAssets.tap({name:"plugin-extension:feature-web-resources",stage:as.Compilation.PROCESS_ASSETS_STAGE_ANALYSE},()=>{let r=[],i=Object.keys(this.includeList||{});for(let c of i.filter(Boolean))c.startsWith("content_scripts")&&(Array.isArray(c)?r.push(...c):typeof c=="string"&&r.push(c));let n=s.chunkGraph,o={};s.entrypoints.forEach((c,p)=>{if(r.includes(p)){let l=[];c.chunks.forEach(u=>{Array.from(n.getChunkModulesIterable(u)).forEach(g=>{n.getModuleChunks(g).forEach(y=>{y.auxiliaryFiles.forEach($=>{l.includes($)||l.push($)})})})}),o[p]=l}}),this.generateManifestPatches(s,o)})})}};var L=a(require("fs")),I=a(require("path")),Jo=a(require("chokidar")),cs=class{options;constructor(e){this.options=e}ensureDirectoryExistence(e){let s=I.default.dirname(e);if(L.default.existsSync(s))return!0;L.default.mkdirSync(s,{recursive:!0})}copyFile(e,s){this.ensureDirectoryExistence(s),L.default.copyFileSync(e,s)}copyFolder(e,s){L.default.existsSync(s)||L.default.mkdirSync(s,{recursive:!0}),L.default.readdirSync(e).forEach(i=>{let n=I.default.join(e,i),o=I.default.join(s,i);L.default.statSync(n).isDirectory()?this.copyFolder(n,o):this.copyFile(n,o)})}apply(e){let s=I.default.dirname(this.options.manifestPath),r=I.default.join(s,"public"),i=e.options.output?.path||"";L.default.existsSync(r)&&(e.hooks.afterEmit.tap("special-folders:copy-public-folder",()=>{let n=I.default.join(i,"public");L.default.existsSync(n)||L.default.mkdirSync(n,{recursive:!0}),L.default.existsSync(r)&&this.copyFolder(r,n)}),e.options.mode!=="production"&&e.hooks.afterPlugins.tap("special-folders:copy-public-folder",()=>{let n=I.default.join(s,"public"),o=Jo.default.watch(n,{ignoreInitial:!0});o.on("add",c=>{let p=I.default.join(i,I.default.relative(s,c));this.copyFile(c,p)}),o.on("change",c=>{let p=I.default.join(i,I.default.relative(s,c));this.copyFile(c,p)}),o.on("unlink",c=>{let p=I.default.join(i,I.default.relative(s,c));L.default.existsSync(p)&&L.default.unlinkSync(p)}),e.hooks.watchClose.tap("special-folders:copy-public-folder",()=>{o.close().catch(console.error)})}))}};var N=a(require("path")),ur=a(require("chokidar"));var ps=class{manifestPath;constructor(e){this.manifestPath=e}throwCompilationError(e,s,r){let i=N.relative(process.cwd(),s),p=oi(r?"Adding":"Removing",r?"added":"removed",e,e==="pages"?"HTML pages":"script files",i);if(r){console.warn(p);return}console.error(p),process.exit(1)}apply(e){e.hooks.afterPlugins.tap("special-folders:warn-upon-folder-changes",()=>{let s=N.dirname(this.manifestPath),r=N.join(s,"pages"),i=N.join(s,"scripts"),n=ur.watch(r,{ignoreInitial:!0}),o=ur.watch(i,{ignoreInitial:!0}),c=e.options.resolve?.extensions;n.on("add",p=>{p.endsWith(".html")&&this.throwCompilationError("pages",p,!0)}),n.on("unlink",p=>{p.endsWith(".html")&&this.throwCompilationError("pages",p)}),o.on("add",p=>{c?.includes(N.extname(p))&&this.throwCompilationError("scripts",p,!0)}),o.on("unlink",p=>{c?.includes(N.extname(p))&&this.throwCompilationError("scripts",p)}),e.hooks.watchClose.tap("WarnUponFolderChanges",()=>{n.close().catch(console.error),o.close().catch(console.error)})})}};var ls=class{static name="plugin-special-folders";options;constructor(e){this.options=e}apply(e){let{manifestPath:s}=this.options;new cs({manifestPath:s}).apply(e),e.options.mode==="development"&&e.options.watchOptions&&new ps(s).apply(e)}};var fs=class{static name="plugin-extension";manifestPath;browser;mode;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.mode=e.mode}apply(e){let s=this.manifestPath,r=Tn({manifestPath:s}),i=Rn({manifestPath:s});new St({manifestPath:s,includeList:{...i?.pages||{},...i?.scripts||{}},excludeList:i.public,loaderOptions:{jsx:me(Te.default.dirname(this.manifestPath))||X(Te.default.dirname(this.manifestPath))||$e(Te.default.dirname(this.manifestPath)),typescript:R(Te.default.dirname(this.manifestPath)),minify:this.mode==="production"}}).apply(e),new At({browser:this.browser,manifestPath:s,includeList:{...r.html,...r.icons,...r.json,...r.scripts},excludeList:i.public}).apply(e),new Vt({manifestPath:s,includeList:{...r.html,...i.pages},excludeList:{...i.public,...i.scripts}}).apply(e),new Yt({manifestPath:s,browser:this.browser,includeList:{...r.scripts,...i.scripts},excludeList:{...i.public,...i.pages}}).apply(e),new Qt({manifestPath:s}).apply(e),new ts({manifestPath:s,includeList:r.json,excludeList:i.public}).apply(e),new ns({manifestPath:s,includeList:r.icons,excludeList:i.public}).apply(e),new os({manifestPath:s,includeList:{...r.scripts,...i.scripts},excludeList:i.public}).apply(e),new ls({manifestPath:s}).apply(e)}};var qe=a(require("path"));var zo=a(require("path")),Ho=a(require("ws")),ms=a(require("browser-extension-manifest-fields"));function us(t,e){t.clients.forEach(s=>{s.readyState===Ho.default.OPEN&&s.send(JSON.stringify(e))})}function Vo(t,e,s){if(!s||!e)return;let r=(0,ms.default)(e).locales,i=(0,ms.default)(e).scripts,n=(0,ms.default)(e).json;if(!t){process.env.EXTENSION_ENV==="development"&&console.error("WebSocket server is not running.");return}zo.default.basename(s)==="manifest.json"&&us(t,{changedFile:"manifest.json"}),r?.forEach(o=>{o.includes(s)&&us(t,{changedFile:"_locales"})}),Object.entries(i).forEach(([o,c])=>{let p=Array.isArray(c)?c:[c];Object.values(p).flatMap(u=>u).includes(s)&&o==="background/service_worker"&&us(t,{changedFile:"service_worker"})}),Object.entries(n).forEach(([o,c])=>{c?.includes(s)&&o==="declarative_net_request"&&us(t,{changedFile:"declarative_net_request"})})}var dr=a(require("path")),Yo=a(require("fs")),Ne=a(require("ws"));var Re=a(require("path")),ol=a(require("http")),Xo=a(require("https")),mr=a(require("fs"));var Go=t=>{if(!mr.default.existsSync(t))return;let e=Re.default.basename(t);return mr.default.readFileSync(Re.default.join(__dirname,"certs",e))};function Zo(t,e){let s={key:Go(Re.default.join(__dirname,"certs","localhost.key")),cert:Go(Re.default.join(__dirname,"certs","localhost.cert"))},r=Xo.default.createServer(s,(i,n)=>{n.writeHead(200),n.end()});return r.on("error",i=>{throw console.error(mi(t,e)),new Error(i.message)}),{server:r,port:e}}function al(t,e,s){switch(s){case"chrome":return new Ne.default.Server({host:"localhost",port:e});case"edge":return new Ne.default.Server({host:"localhost",port:e+1});case"firefox":return new Ne.default.Server({server:Zo(t,e+2).server});default:return new Ne.default.Server({host:"localhost",port:8888})}}async function Ko(t,e){let s=t.options.context||"",r=require(dr.default.join(s,"manifest.json")),i=r.name||"Extension.js",n=e.port||8e3,o=al(i,n,e.browser);if(o.on("connection",c=>{c.send(JSON.stringify({status:"serverReady"})),c.on("error",p=>{console.log(pi(i,p))}),c.on("message",p=>{let l=JSON.parse(p.toString());if(l.status==="clientReady"){let u=require(dr.default.join(s,"manifest.json"));setTimeout(()=>{console.log(zs(u,e.browser,l)),console.log("")},2500),xi(e.browser)&&setTimeout(()=>{console.log(ci(e.browser))},5e3)}})}),e.browser==="firefox"&&!Yo.default.existsSync(Xe)){let c=vi(r);console.log(zs(r,e.browser,c)),console.log(""),console.log(ui()),console.log("")}return o}var Qo=a(require("path")),gr=a(require("fs"));function ea(t,e){let s=Qo.default.resolve(__dirname,`./extensions/${t}-manager-extension/reload-service.js`);try{let r=gr.default.readFileSync(s,"utf8"),i=r.replace(/__RELOAD_PORT__/g,e.toString());i!==r&&gr.default.writeFileSync(s,i,"utf8")}catch(r){console.error(`Error processing file: ${r.message}`)}}process.on("SIGINT",()=>{process.exit()});process.on("SIGTERM",()=>{process.exit()});var Ue=class{manifestPath;port;browser;stats;constructor(e){this.manifestPath=e.manifestPath,this.port=e.port||8e3,this.browser=e.browser||"chrome",this.stats=e.stats}async apply(e){if(!this.manifestPath)return;ea(this.browser,this.port);let s=await Ko(e,{...this,mode:e.options.mode,browser:this.browser,stats:this.stats,port:this.port});e.hooks.watchRun.tapAsync("reload:create-web-socket-server",(r,i)=>{let o=(r.modifiedFiles||new Set).values().next().value;if(!o){i();return}let c=qe.default.relative(qe.default.dirname(this.manifestPath),o),p=qe.default.relative(process.cwd(),qe.default.dirname(o));process.env.EXTENSION_ENV==="development"&&console.info(`\u25BA\u25BA Updated file \`${c}\` (relative to ${p})`),this.manifestPath&&Vo(s,this.manifestPath,o),i()})}};var hr=a(require("path"));function ta(t,e,s){t.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[hr.default.dirname(s)],exclude:/node_modules/,use:[{loader:hr.default.resolve(__dirname,"./inject-chromium-client-loader"),options:{manifestPath:s,browser:e}}]})}var yr=a(require("path"));function sa(t,e,s){t.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[yr.default.dirname(s)],exclude:/node_modules/,use:[{loader:yr.default.resolve(__dirname,"./inject-firefox-client-loader"),options:{manifestPath:s,browser:e}}]})}var gs=require("webpack");var br=a(require("content-security-policy-parser"));function ra(t){let e=t.content_security_policy;if(!e)return"script-src 'self' 'unsafe-eval' blob: filesystem:; object-src 'self' blob: filesystem:; ";let s=(0,br.default)(e);e="",s.get("script-src")||s.set("script-src",["'self' 'unsafe-eval' blob: filesystem:"]),s.get("script-src")?.includes("'unsafe-eval'")||s.set("script-src",["unsafe-eval"]);for(let r in s)e+=`${r} ${s.get(r)?.join(" ")};`;return e}function ia(t){let e=t.content_security_policy;if(!e)return{extension_pages:"script-src 'self'; object-src 'self'; "};let s=(0,br.default)(e.extension_pages||""),r="";for(let i in s)r+=`${i} ${s.get(i)?.join(" ")}; `;return{extension_pages:r.trim()}}function na(t){let e=["/*.json","/*.js","/*.css"],s=t.web_accessible_resources;if(!s||s.length===0)return e;let r=new Set(s);for(let i of e)r.has(i)||r.add(i);return Array.from(r)}function oa(t){let e=["/*.json","/*.js","/*.css"];return[...t.web_accessible_resources||[],{resources:e,matches:["<all_urls>"]}]}function wr(t,e){return t.background?{background:{...t.background}}:e==="firefox"?{background:{...t.background||{},scripts:["background/script.js"]}}:t.manifest_version===2?{background:{...t.background||{},scripts:["background/script.js"]}}:{background:{...t.background||{},service_worker:"background/service_worker.js"}}}function xr(t){return t.externally_connectable&&!t.externally_connectable.ids?{externally_connectable:{...t.externally_connectable,ids:[...new Set(t.externally_connectable.ids||[]),"*"]}}:t.externally_connectable&&!t.externally_connectable.ids?{externally_connectable:{...t.externally_connectable,ids:["*"]}}:{}}var ds=class{manifestPath;browser;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome"}generateManifestPatches(e){let s=G(e,this.manifestPath),r={...s,content_security_policy:s.manifest_version===3?ia(s):ra(s),...s.manifest_version===3?s.permissions?{permissions:[...new Set(["scripting",...s.permissions])]}:{permissions:["scripting"]}:{},...wr(s,this.browser),...xr(s),web_accessible_resources:s.manifest_version===3?oa(s):na(s)},i=JSON.stringify(r,null,2),n=new gs.sources.RawSource(i);e.getAsset("manifest.json")&&e.updateAsset("manifest.json",n)}apply(e){e.hooks.thisCompilation.tap("run-chromium:apply-manifest-dev-defaults",s=>{s.hooks.processAssets.tap({name:"run-chromium:apply-manifest-dev-defaults",stage:gs.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},r=>{if(!this.manifestPath){let i="No manifest.json found in your extension bundle. Unable to patch manifest.json.";s&&e.webpack.WebpackError&&s.errors.push(new e.webpack.WebpackError(`run-chromium: ${i}`));return}this.generateManifestPatches(s)})})}};var vr=a(require("fs")),we=a(require("path")),aa=a(require("webpack-target-webextension"));var hs=class{manifestPath;browser;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome"}handleBackground(e,s,r){let i=we.default.resolve(__dirname,s==="firefox"?"minimum-firefox-file.mjs":"minimum-chromium-file.mjs"),n=we.default.dirname(this.manifestPath),o=r.background;if(s==="firefox"){o=r["gecko:background"]||r["firefox:background"]||o;let c=o?.scripts||o?.["gecko:scripts"]||o?.["firefox:scripts"];if(c&&c.length>0){let p=we.default.join(n,c[0]);this.ensureFileExists(p,"background.scripts")}else this.addDefaultEntry(e,"background/script",i)}else if(o=r["chromium:background"]||r["chrome:background"]||r["edge:background"]||o,r.manifest_version===3){let c=o?.service_worker||o?.["chromium:service_worker"]||o?.["chrome:service_worker"]||o?.["edge:service_worker"];if(c){let p=we.default.join(n,c);this.ensureFileExists(p,"background.service_worker")}else this.addDefaultEntry(e,"background/service_worker",i)}else if(r.manifest_version===2){let c=o?.scripts||o?.["chromium:scripts"]||o?.["chrome:scripts"]||o?.["edge:scripts"];if(c&&c.length>0){let p=we.default.join(n,c[0]);this.ensureFileExists(p,"background.scripts")}else this.addDefaultEntry(e,"background/script",i)}}ensureFileExists(e,s){if(!vr.default.existsSync(e)&&this.manifestPath){let i=require(this.manifestPath).name||"Extension.js",n=li(i,s,e);throw console.error(n),new Error(n)}}addDefaultEntry(e,s,r){e.options.entry={...e.options.entry,[s]:{import:[r]}}}getEntryName(e){if(e.background){if(e.manifest_version===3)return{serviceWorkerEntry:"background/service_worker"};if(e.manifest_version===2)return{pageEntry:"background/script"}}return{pageEntry:"background"}}apply(e){if(!this.manifestPath||!vr.default.lstatSync(this.manifestPath).isFile())return;let s=require(this.manifestPath);this.handleBackground(e,this.browser,s),new aa.default({background:this.getEntryName(s),weakRuntimeCheck:!0}).apply(e)}};var _r=class{manifestPath;browser;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome"}apply(e){Se.includes(this.browser)&&ta(e,this.browser,this.manifestPath),this.browser==="firefox"&&sa(e,this.browser,this.manifestPath),new ds({manifestPath:this.manifestPath,browser:this.browser}).apply(e),new hs({manifestPath:this.manifestPath,browser:this.browser}).apply(e)}},ca=_r;var ys=class{static name="plugin-reload";manifestPath;browser;port;stats;autoReload;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.port=e.port,this.stats=e.stats,this.autoReload=e.autoReload}apply(e){e.options.mode==="development"&&new Ue({manifestPath:this.manifestPath,browser:this.browser,port:this.port,stats:this.stats}).apply(e),e.options.mode==="development"&&new ca({manifestPath:this.manifestPath,browser:this.browser,autoReload:this.autoReload,stats:this.stats}).apply(e)}};var pa=a(require("webpack")),bs=class{manifestPath;browser;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser}apply(e){new pa.default.ProvidePlugin({browser:require.resolve("webextension-polyfill")}).apply(e)}};var xs=require("webpack");var ws=class{browser;manifestPath;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome"}patchManifest(e){let s=nt(e,this.browser);return JSON.stringify(s,null,2)}apply(e){e.hooks.compilation.tap("compatibility:browser-fields",s=>{s.hooks.processAssets.tap({name:"compatibility:browser-fields",stage:xs.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE},()=>{let r=G(s,this.manifestPath),i=this.patchManifest(r),n=new xs.sources.RawSource(i);s.updateAsset("manifest.json",n)})})}};var vs=class{static name="plugin-compatibility";manifestPath;browser;polyfill;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.polyfill=e.polyfill||!1}async apply(e){this.polyfill&&this.browser!=="firefox"&&new bs({manifestPath:this.manifestPath,browser:this.browser||"chrome"}).apply(e),new ws({manifestPath:this.manifestPath,browser:this.browser||"chrome"}).apply(e)}};var xa=a(require("fs"));var la=a(require("webpack")),fa=a(require("content-security-policy-parser"));function ua(t){let e=t.content_security_policy,s=t.content_security_policy?.extension_pages,r=i=>{if(!i)return;let n=(0,fa.default)(i);if(n.get("script-src")&&n.get("script-src")?.includes("'unsafe-eval'")){let o=t.name||"Extension.js";return Gr(o)}};if(t.manifest_version===3){let i=e?r(s):void 0;if(i)return new la.default.WebpackError(i)}return null}var Sr=a(require("webpack"));function ma(t,e){let s=t.web_accessible_resources;if(s){let r=s.some(o=>typeof o=="string"),i=s.some(o=>typeof o=="object"||o.resources||o.matches),n=t.name||"Extension.js";if(t.manifest_version===2&&!r)return new Sr.default.WebpackError(Zr(n,e));if(t.manifest_version===3&&!i)return new Sr.default.WebpackError(Yr(n,e))}return null}var da=a(require("webpack"));function ga(t,e){if(e==="firefox"&&t.background?.service_worker){let s=t.name||"Extension.js";return new da.default.WebpackError(Vr(s))}return null}var ha=a(require("path")),ya=a(require("fs")),ba=a(require("webpack"));function wa(t,e){let s=ha.default.join(e.options.context||"","_locales"),r=t.name||"Extension.js";return ya.default.existsSync(s)&&!t.default_locale?new ba.default.WebpackError(Xr(r)):null}var _s=class{options;constructor(e){this.options=e}handleRuntimeErrors(e,s,r){let i=ua(s),n=ma(s,r),o=ga(s,r),c=wa(s,e);i&&e.errors.push(i),n&&e.errors.push(n),o&&e.options.mode==="production"&&e.errors.push(o),c&&e.errors.push(c)}apply(e){e.hooks.afterCompile.tapAsync("CompatPlugin (module)",(s,r)=>{let i=this.options.manifestPath,n=JSON.parse(xa.default.readFileSync(i,"utf-8")),o=this.options.browser||"chrome";this.handleRuntimeErrors(s,n,o),r()})}};var Fa=a(require("fs")),La=a(require("ajv"));var va={$schema:"http://json-schema.org/draft-07/schema#",$id:"https://json.schemastore.org/chrome-manifest.json",additionalProperties:!0,definitions:{action_v2:{type:"object",properties:{default_title:{type:"string",description:"Tooltip for the main toolbar icon."},default_popup:{$ref:"#/definitions/uri",description:"The popup appears when the user clicks the icon."},default_icon:{anyOf:[{type:"string",description:"FIXME: String form is deprecated."},{type:"object",description:"Icon for the main toolbar.",properties:{"19":{$ref:"#/definitions/icon"},"38":{$ref:"#/definitions/icon"}}}]}},dependencies:{name:{not:{required:["name"]}},icons:{not:{required:["icons"]}},popup:{not:{required:["popup"]}}}},action_v3:{type:"object",properties:{default_title:{type:"string",description:"Tooltip for the main toolbar icon."},default_popup:{$ref:"#/definitions/uri",description:"The popup appears when the user clicks the icon."},default_icon:{type:"object",properties:{"16":{$ref:"#/definitions/icon"},"24":{$ref:"#/definitions/icon"},"32":{$ref:"#/definitions/icon"}}}},dependencies:{name:{not:{required:["name"]}},icons:{not:{required:["icons"]}},popup:{not:{required:["popup"]}}}},command:{type:"object",if:{$comment:"Global shortcuts change the acceptable pattern for the suggested_key.",properties:{global:{const:!0}},required:["global"]},then:{additionalProperties:!1,properties:{description:{type:"string"},global:{type:"boolean",description:"Whether this command should work while Chrome does not have focus. Keyboard shortcut suggestions for global commands are limited to Ctrl+Shift+[0..9]"},suggested_key:{type:"object",additionalProperties:!1,patternProperties:{"^(default|mac|windows|linux|chromeos)$":{type:"string",pattern:"^(Ctrl|Command|MacCtrl)\\+Shift\\+[0-9]"}}}}},else:{additionalProperties:!1,properties:{description:{type:"string"},global:{type:"boolean",description:"Whether this command should work while Chrome does not have focus. Keyboard shortcut suggestions for global commands are limited to Ctrl+Shift+[0..9]"},suggested_key:{type:"object",additionalProperties:!1,patternProperties:{"^(default|mac|windows|linux|chromeos)$":{type:"string",pattern:"^(Ctrl|Command|MacCtrl|Alt|Option)\\+(Shift\\+)?[A-Z]"}}}}}},content_security_policy:{type:"string",description:"This introduces some fairly strict policies that will make extensions more secure by default, and provides you with the ability to create and enforce rules governing the types of content that can be loaded and executed by your extensions and applications.",format:"content-security-policy",default:"script-src 'self'; object-src 'self'"},glob_pattern:{type:"string",format:"glob-pattern"},icon:{$ref:"#/definitions/uri"},match_pattern:{type:"string",format:"match-pattern",pattern:"^((\\*|http|https|file|ftp|chrome-extension):\\/\\/(\\*|\\*\\.[^\\/\\*]+|[^\\/\\*]+)?(\\/.*))|urn:(\\*|.*)|<all_urls>$"},mime_type:{type:"string",format:"mime-type",pattern:"^(?:application|audio|image|message|model|multipart|text|video)\\/[-+.\\w]+$"},page:{$ref:"#/definitions/uri"},permissions:{type:"array",uniqueItems:!0,items:{type:"string",format:"permission"}},scripts:{type:"array",minItems:1,uniqueItems:!0,items:{$ref:"#/definitions/uri"}},uri:{type:"string"},version_string:{type:"string",pattern:"^(?:\\d{1,5}\\.){0,3}\\d{1,5}$"},web_resource:{type:"object",required:["resources"],properties:{resources:{type:"array",description:`An array of resources to be exposed. Resources are specified as strings and may contain * for wildcard matches. For example, "/images/*" exposes everything in the extension's /images directory recursively while "*.png" exposes all PNG files.`,items:{$ref:"#/definitions/glob_pattern"}},matches:{type:"array",description:"A list of URL match patterns specifying which pages can access the resources. Only the origin is used to match URLs; subdomains patterns (*.google.com) and paths are ignored.",items:{$ref:"#/definitions/match_pattern"}},extension_ids:{type:"array",description:"A list of extension IDs, specifying which extensions can access the resources.",items:{type:"string"}},use_dynamic_url:{type:"boolean",description:"If true, only allow resources to be accessible through dynamic ID. The dynamic ID is generated per session. It's regenerated on browser restart or extension reload."}}}},dependencies:{content_scripts:{not:{required:["script_badge"]}},script_badge:{not:{required:["content_scripts"]}}},else:{properties:{background:{type:"object",description:"The background page is an HTML page that runs in the extension process. It exists for the lifetime of your extension, and only one instance of it at a time is active.",properties:{persistent:{type:"boolean",description:"When false, makes the background page an event page (loaded only when needed).",default:!0},page:{$ref:"#/definitions/page",description:"Specify the HTML of the background page.",default:"background.html"},scripts:{$ref:"#/definitions/scripts",description:"A background page will be generated by the extension system that includes each of the files listed in the scripts property.",default:["background.js"]}},dependencies:{page:{not:{required:["scripts"]}},scripts:{not:{required:["page"]}}}},browser_action:{$ref:"#/definitions/action_v2",description:"Use browser actions to put icons in the main Google Chrome toolbar, to the right of the address bar. In addition to its icon, a browser action can also have a tooltip, a badge, and a popup."},page_action:{$ref:"#/definitions/action_v2",description:"Use the chrome.pageAction API to put icons inside the address bar. Page actions represent actions that can be taken on the current page, but that aren't applicable to all pages."},content_security_policy:{$ref:"#/definitions/content_security_policy"},web_accessible_resources:{type:"array",description:"An array of strings specifying the paths (relative to the package root) of packaged resources that are expected to be usable in the context of a web page.",minItems:1,uniqueItems:!0,items:{$ref:"#/definitions/uri"}}},dependencies:{page_action:{not:{required:["browser_action"]}},browser_action:{not:{required:["page_action"]}}}},if:{properties:{manifest_version:{const:3}}},properties:{manifest_version:{type:"number",description:"One integer specifying the version of the manifest file format your package requires.",enum:[2,3]},name:{type:"string",description:"The name of the extension",maxLength:45},version:{$ref:"#/definitions/version_string",description:"One to four dot-separated integers identifying the version of this extension."},default_locale:{type:"string",description:"Specifies the subdirectory of _locales that contains the default strings for this extension.",default:"en"},description:{type:"string",description:"A plain text description of the extension",maxLength:132},icons:{type:"object",description:"One or more icons that represent the extension, app, or theme. Recommended format: PNG; also BMP, GIF, ICO, JPEG.",minProperties:1,properties:{"16":{$ref:"#/definitions/icon",description:"Used as the favicon for an extension's pages and infobar."},"48":{$ref:"#/definitions/icon",description:"Used on the extension management page (chrome://extensions)."},"128":{$ref:"#/definitions/icon",description:"Used during installation and in the Chrome Web Store."},"256":{$ref:"#/definitions/icon",description:"Used during installation and in the Chrome Web Store."}}},chrome_url_overrides:{type:"object",description:"Override pages are a way to substitute an HTML file from your extension for a page that Google Chrome normally provides.",additionalProperties:!1,maxProperties:1,properties:{bookmarks:{$ref:"#/definitions/page",description:"The page that appears when the user chooses the Bookmark Manager menu item from the Chrome menu or, on Mac, the Bookmark Manager item from the Bookmarks menu. You can also get to this page by entering the URL chrome://bookmarks.",default:"bookmarks.html"},history:{$ref:"#/definitions/page",description:"The page that appears when the user chooses the History menu item from the Chrome menu or, on Mac, the Show Full History item from the History menu. You can also get to this page by entering the URL chrome://history.",default:"history.html"},newtab:{$ref:"#/definitions/page",description:"The page that appears when the user creates a new tab or window. You can also get to this page by entering the URL chrome://newtab.",default:"newtab.html"}}},commands:{type:"object",description:"Use the commands API to add keyboard shortcuts that trigger actions in your extension, for example, an action to open the browser action or send a command to the extension.",patternProperties:{".*":{$ref:"#/definitions/command"},"^_execute_browser_action$":{$ref:"#/definitions/command"},"^_execute_page_action$":{$ref:"#/definitions/command"}}},content_scripts:{type:"array",description:"Content scripts are JavaScript files that run in the context of web pages.",minItems:1,uniqueItems:!0,items:{type:"object",required:["matches"],additionalProperties:!1,properties:{matches:{type:"array",description:"Specifies which pages this content script will be injected into.",minItems:1,uniqueItems:!0,items:{$ref:"#/definitions/match_pattern"}},exclude_matches:{type:"array",description:"Excludes pages that this content script would otherwise be injected into.",uniqueItems:!0,items:{$ref:"#/definitions/match_pattern"}},css:{type:"array",description:"The list of CSS files to be injected into matching pages. These are injected in the order they appear in this array, before any DOM is constructed or displayed for the page.",uniqueItems:!0,items:{$ref:"#/definitions/uri"}},js:{$ref:"#/definitions/scripts",description:"The list of JavaScript files to be injected into matching pages. These are injected in the order they appear in this array."},world:{type:"string",description:"The JavaScript world for a script to execute within.",enum:["ISOLATED","MAIN"],default:"ISOLATED"},run_at:{type:"string",description:"Controls when the files in js are injected.",enum:["document_start","document_end","document_idle"],default:"document_idle"},all_frames:{type:"boolean",description:"Controls whether the content script runs in all frames of the matching page, or only the top frame.",default:!1},include_globs:{type:"array",description:"Applied after matches to include only those URLs that also match this glob. Intended to emulate the @include Greasemonkey keyword.",uniqueItems:!0,items:{$ref:"#/definitions/glob_pattern"}},exclude_globs:{type:"array",description:"Applied after matches to exclude URLs that match this glob. Intended to emulate the @exclude Greasemonkey keyword.",uniqueItems:!0,items:{$ref:"#/definitions/glob_pattern"}},match_about_blank:{type:"boolean",description:"Whether to insert the content script on about:blank and about:srcdoc.",default:!1}}}},devtools_page:{$ref:"#/definitions/page",description:"A DevTools extension adds functionality to the Chrome DevTools. It can add new UI panels and sidebars, interact with the inspected page, get information about network requests, and more."},externally_connectable:{description:"Declares which extensions, apps, and web pages can connect to your extension via runtime.connect and runtime.sendMessage.",type:"object",additionalProperties:!1,properties:{ids:{type:"array",items:{type:"string",description:"The IDs of extensions or apps that are allowed to connect. If left empty or unspecified, no extensions or apps can connect."}},matches:{type:"array",items:{type:"string",description:"The URL patterns for web pages that are allowed to connect. This does not affect content scripts. If left empty or unspecified, no web pages can connect."}},accepts_tls_channel_id:{type:"boolean",default:!1,description:"Indicates that the extension would like to make use of the TLS channel ID of the web page connecting to it. The web page must also opt to send the TLS channel ID to the extension via setting includeTlsChannelId to true in runtime.connect's connectInfo or runtime.sendMessage's options."}}},file_browser_handlers:{type:"array",description:"You can use this API to enable users to upload files to your website.",minItems:1,items:{type:"object",required:["id","default_title","file_filters"],additionalProperties:!1,properties:{id:{type:"string",description:"Used by event handling code to differentiate between multiple file handlers"},default_title:{type:"string",description:"What the button will display."},file_filters:{type:"array",description:"Filetypes to match.",minItems:1,items:{type:"string"}}}}},homepage_url:{$ref:"#/definitions/uri",description:"The URL of the homepage for this extension."},incognito:{type:"string",description:"Specify how this extension will behave if allowed to run in incognito mode.",enum:["spanning","split","not_allowed"],default:"spanning"},input_components:{type:"array",description:"Allows your extension to handle keystrokes, set the composition, and manage the candidate window.",items:{type:"object",required:["name","type","id","description","language","layouts"],additionalProperties:!1,properties:{name:{type:"string"},type:{type:"string"},id:{type:"string"},description:{type:"string"},language:{type:"string"},layouts:{type:"array"}}}},key:{type:"string",description:"This value can be used to control the unique ID of an extension, app, or theme when it is loaded during development."},minimum_chrome_version:{$ref:"#/definitions/version_string",description:"The version of Chrome that your extension, app, or theme requires, if any."},nacl_modules:{type:"array",description:"One or more mappings from MIME types to the Native Client module that handles each type.",minItems:1,uniqueItems:!0,items:{type:"object",required:["path","mime_type"],additionalProperties:!1,properties:{path:{$ref:"#/definitions/uri",description:"The location of a Native Client manifest (a .nmf file) within the extension directory."},mime_type:{$ref:"#/definitions/mime_type",description:"The MIME type for which the Native Client module will be registered as content handler."}}}},oauth2:{type:"object",description:"Use the Chrome Identity API to authenticate users: the getAuthToken for users logged into their Google Account and the launchWebAuthFlow for users logged into a non-Google account.",required:["client_id","scopes"],additionalProperties:!1,properties:{client_id:{type:"string",description:"You need to register your app in the Google APIs Console to get the client ID."},scopes:{type:"array",minItems:1,items:{type:"string"}}}},offline_enabled:{type:"boolean",description:"Whether the app or extension is expected to work offline. When Chrome detects that it is offline, apps with this field set to true will be highlighted on the New Tab page."},omnibox:{type:"object",description:"The omnibox API allows you to register a keyword with Google Chrome's address bar, which is also known as the omnibox.",required:["keyword"],additionalProperties:!1,properties:{keyword:{type:"string",description:"The keyword that will trigger your extension."}}},optional_permissions:{$ref:"#/definitions/permissions",description:"Use the chrome.permissions API to request declared optional permissions at run time rather than install time, so users understand why the permissions are needed and grant only those that are necessary."},options_page:{$ref:"#/definitions/page",description:"To allow users to customize the behavior of your extension, you may wish to provide an options page. If you do, a link to it will be provided from the extensions management page at chrome://extensions. Clicking the Options link opens a new tab pointing at your options page.",default:"options.html"},options_ui:{type:"object",description:"To allow users to customize the behavior of your extension, you may wish to provide an options page. If you do, an Options link will be shown on the extensions management page at chrome://extensions which opens a dialogue containing your options page.",required:["page"],properties:{page:{type:"string",description:"The path to your options page, relative to your extension's root."},chrome_style:{type:"boolean",default:!0,description:"If true, a Chrome user agent stylesheet will be applied to your options page. The default value is false, but we recommend you enable it for a consistent UI with Chrome."},open_in_tab:{type:"boolean",default:!1,description:"If true, your extension's options page will be opened in a new tab rather than embedded in chrome://extensions. The default is false, and we recommend that you don't change it. This is only useful to delay the inevitable deprecation of the old options UI! It will be removed soon, so try not to use it. It will break."}}},permissions:{$ref:"#/definitions/permissions",description:"Permissions help to limit damage if your extension or app is compromised by malware. Some permissions are also displayed to users before installation, as detailed in Permission Warnings."},requirements:{type:"object",description:"Technologies required by the app or extension. Hosting sites such as the Chrome Web Store may use this list to dissuade users from installing apps or extensions that will not work on their computer.",additionalProperties:!1,properties:{plugins:{type:"object",description:"Indicates if an app or extension requires NPAPI to run. This requirement is enabled by default when the manifest includes the 'plugins' field.",required:["npapi"],additionalProperties:!1,properties:{npapi:{type:"boolean",default:!0}}},"3D":{type:"object",description:"The '3D' requirement denotes GPU hardware acceleration.",required:["features"],additionalProperties:!1,properties:{features:{type:"array",description:"List of the 3D-related features your app requires.",minItems:1,uniqueItems:!0,items:{type:"string",enum:["webgl"]}}}}}},sandbox:{type:"object",description:"Defines an collection of app or extension pages that are to be served in a sandboxed unique origin, and optionally a Content Security Policy to use with them.",required:["pages"],additionalProperties:!1,properties:{pages:{type:"array",minItems:1,uniqueItems:!0,items:{$ref:"#/definitions/page"}},content_security_policy:{$ref:"#/definitions/content_security_policy",default:"sandbox allow-scripts allow-forms"}}},short_name:{type:"string",description:"The short name is typically used where there is insufficient space to display the full name.",maxLength:12},update_url:{$ref:"#/definitions/uri",description:"If you publish using the Chrome Developer Dashboard, ignore this field. If you host your own extension or app: URL to an update manifest XML file."},tts_engine:{type:"object",description:"Register itself as a speech engine.",required:["voices"],additionalProperties:!1,properties:{voices:{type:"array",description:"Voices the extension can synthesize.",minItems:1,uniqueItems:!0,items:{type:"object",required:["voice_name","event_types"],additionalProperties:!1,properties:{voice_name:{type:"string",description:"Identifies the name of the voice and the engine used."},lang:{type:"string",description:"Almost always, a voice can synthesize speech in just a single language. When an engine supports more than one language, it can easily register a separate voice for each language."},gender:{type:"string",description:"If your voice corresponds to a male or female voice, you can use this parameter to help clients choose the most appropriate voice for their application."},event_types:{type:"array",description:"Events sent to update the client on the progress of speech synthesis.",minItems:1,uniqueItems:!0,items:{type:"string",description:"",enum:["start","word","sentence","marker","end","error"]}}}}}}},version_name:{type:"string",description:"In addition to the version field, which is used for update purposes, version_name can be set to a descriptive version string and will be used for display purposes if present."},chrome_settings_overrides:{},content_pack:{},current_locale:{},import:{},platforms:{},signature:{},spellcheck:{},storage:{},system_indicator:{}},required:["manifest_version","name","version"],then:{$comment:"browser_action and page_action are no longer present in v3",properties:{background:{type:"object",description:"The background page is an HTML page that runs in the extension process. It exists for the lifetime of your extension, and only one instance of it at a time is active.",properties:{service_worker:{type:"string",description:"The service worker js file."},type:{type:"string",enum:["module"]}},dependencies:{page:{not:{required:["scripts"]}},scripts:{not:{required:["page"]}}}},host_permissions:{$ref:"#/definitions/permissions"},action:{$ref:"#/definitions/action_v3",description:"Used to control the toolbar button for your extension in Chrome's UI."},content_security_policy:{type:"object",properties:{extension_pages:{$ref:"#/definitions/content_security_policy",description:"This policy covers pages in your extension, including html files and service workers."},sandbox:{$ref:"#/definitions/content_security_policy",description:"This policy covers any sandboxed extension pages that your extension uses."}}},web_accessible_resources:{type:"array",description:"An array of objects that declare resource access rules. Each object maps an array of extension resources to an array of URLs and/or extension IDs that can access those resources.",minItems:1,uniqueItems:!0,items:{$ref:"#/definitions/web_resource"}}},dependencies:{browser_action:{not:{required:["browser_action"]}},page_action:{not:{required:["page_action"]}}}},title:"JSON schema for Google Chrome extension manifest files",type:"object"};function _a(t){t.addFormat("permission",{type:"string",validate:e=>typeof e=="string"&&e.trim()!==""}),t.addFormat("content-security-policy",{type:"string",validate:e=>typeof e=="string"}),t.addFormat("glob-pattern",{type:"string",validate:e=>typeof e=="string"&&/[\*\?\[\]]/.test(e)}),t.addFormat("match-pattern",{type:"string",validate:e=>e==="<all_urls>"||e==="file:///"||e.startsWith("http://localhost")||e.startsWith("http:// ")||e.startsWith("http://*:*/*")?!0:typeof e=="string"&&/^(\*|http|https|file|ftp):\/\//.test(e)}),t.addFormat("uri",{type:"string",validate:e=>typeof e=="string"&&/^(\w+:)?\/\//.test(e)}),t.addFormat("mime-type",{type:"string",validate:e=>typeof e=="string"&&/^[a-z]+\/[a-z0-9\-\+]+$/.test(e)})}var Sa=a(require("path")),Pa=require("webpack");function ka(t,e,s){let r=t.options.context||"",i=Sa.default.join(r,"manifest.json"),o=require(i).name||"Extension.js",c=e?.params.missingProperty;t.errors.push(new Pa.WebpackError(ei(o,s,c)))}var Ea=a(require("path")),ja=require("webpack");function $a(t,e,s){let r=t.options.context||"",i=Ea.default.join(r,"manifest.json"),o=require(i).name||"Extension.js";t.warnings.push(new ja.WebpackError(Qr(o,e,s)))}var Ca=a(require("path")),Da=require("webpack");function Pr(t,e,s){let r=t.options.context||"",i=Ca.default.join(r,"manifest.json"),o=require(i).name||"Extension.js";t.warnings.push(new Da.WebpackError(Kr(o,s,e)))}var Ss=class{options;constructor(e){this.options=e}handleSchemaErrors(e,s,r){let i=new La.default;_a(i);let n={allOf:[va]},o=i.compile(n),c=o(s),p=s.manifest_version===3;if(!c&&o.errors){let l=o.errors[0];if(l?.keyword==="required"){ka(e,l,r);return}p&&(l?.keyword==="type"&&$a(e,l,r),l?.keyword==="not"&&Pr(e,l,r))}}apply(e){e.hooks.afterCompile.tapAsync("CompatPlugin (module)",(s,r)=>{let i=this.options.manifestPath,n=JSON.parse(Fa.default.readFileSync(i,"utf-8")),o=this.options.browser||"chrome";this.handleSchemaErrors(s,n,o),r()})}};var Aa=a(require("fs")),Er=a(require("path"));var kr=a(require("webpack"));function Ia(t,e){let s="Conflict: Multiple assets emit different content to the same filename ";if(e.message.includes(s)){let r=e.message.replace(s,"");if(r.startsWith("content_scripts"))return new kr.default.WebpackError(ti(t,r))}return null}function Oa(t,e){let s=require(t);return e.message.includes("Top-level-await is only supported in EcmaScript Modules")?new kr.default.WebpackError(si(s.name)):null}var Ps=class{manifestPath;constructor(e){this.manifestPath=e.manifestPath}apply(e){let s=Er.default.join(Er.default.dirname(this.manifestPath),"package.json");if(!Aa.default.existsSync(s))return;let r=require(s).name;e.hooks.compilation.tap("develop:common-errors",i=>{i.hooks.afterSeal.tapAsync("develop:common-errors",n=>{i.errors.forEach((o,c)=>{let p=Ia(r,o),l=Oa(r,o);p&&(i.errors[c]=p),l&&(i.errors[c]=l)}),n()})})}};var ks=class{static name="plugin-errors";manifestPath;browser;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome"}apply(e){new _s({manifestPath:this.manifestPath,browser:this.browser||"chrome"}).apply(e),new Ss({manifestPath:this.manifestPath,browser:this.browser||"chrome"}).apply(e),new Ps({manifestPath:this.manifestPath}).apply(e)}};var vc=a(require("os")),$r=a(require("path"));var ic=a(require("fs")),nc=require("child_process");var re=a(require("path")),Ds=a(require("fs"));var Ma={alternate_error_pages:{enabled:!1},autofill:{enabled:!1},browser:{check_default_browser:!1,default_browser_setting_enabled:!1},default_apps:"install",distribution:{alternate_shortcut_text:!1,auto_launch_chrome:!1,import_bookmarks:!1,import_history:!1,import_home_page:!1,import_search_engine:!1,suppress_first_run_bubble:!0,do_not_register_for_update_launch:!0,make_chrome_default:!1,make_chrome_default_for_user:!1,require_eula:!1,suppress_first_run_default_browser_prompt:!0},dns_prefetching:{enabled:!1},download:{default_directory:"/tmp/",directory_upgrade:!0,open_pdf_in_adobe_reader:!1,prompt_for_download:!0},enable_do_not_track:!0,extensions:{theme:{use_system:!1},toolbarsize:-1,ui:{developer_mode:!0}},plugins:{plugins_list:[{enabled:!1,name:"Java(TM)"}],show_details:!0},profile:{password_manager_enabled:!1},safebrowsing:{enabled:!1,safebrowsingextended_reporting_enabled:!1},savefile:{default_directory:"/tmp",type:0},search:{suggest_enabled:!1},session:{restore_on_startup:1},sync:{suppress_start:!0},sync_promo:{show_on_first_run_allowed:!1,show_ntp_bubble:!1},translate:{enabled:!1}},Ta={...Ma},Ra={...Ma};var x=require("@colors/colors/safe");function j(t,e){let s=e==="warn"?(0,x.brightYellow)("\u25BA\u25BA\u25BA"):e==="info"?(0,x.cyan)("\u25BA\u25BA\u25BA"):e==="error"?(0,x.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E"):(0,x.brightGreen)("\u25BA\u25BA\u25BA");return`${(0,x.gray)("")}${s}`}function We(t){return t.charAt(0).toUpperCase()+t.slice(1)}function Es(t,e){let s=t==="firefox"?"Add-on":"Extension";return`${j(t,"success")} ${We(t)} ${s} running in ${(0,x.cyan)(e||"unknown")} mode.`}function js(t,e){let s=We(t),r=e=="null"?`${s} browser is not installed.
|
|
127
|
+
Add an ${(0,f.brightYellow)("id")} field to your manifest.json file and try again.`}var Ke=class{manifestPath;constructor(e){this.manifestPath=e.manifestPath}apply(e){let s=M.default.dirname(this.manifestPath),i=require(this.manifestPath).name||"Extension.js";(V.default.existsSync(M.default.join(s,".env"))||V.default.existsSync(M.default.join(s,".env.example"))||V.default.existsSync(M.default.join(s,".env.local"))||V.default.existsSync(M.default.join(s,".env.defaults")))&&(console.log(Wr(i)),new di.default({path:V.default.existsSync(M.default.join(s,".env"))?M.default.join(s,".env"):V.default.existsSync(M.default.join(s,".env.local"))?M.default.join(s,".env.local"):M.default.join(s,".env.example"),allowEmptyValues:!0,defaults:V.default.existsSync(M.default.join(s,".env.defaults")),systemvars:!0}).apply(e))}};var zs=a(require("fs")),gi=a(require("path")),Qe=class{apply(e){let s=gi.default.join(e.options.output.path||"","hot");zs.default.existsSync(s)&&(zs.default.rmSync(s,{recursive:!0,force:!0}),process.env.EXTENSION_ENV==="development"&&console.log("[CleanHotUpdatesPlugin] Removed old hot-update files before compilation."))}};var et=class{static name="plugin-compilation";manifestPath;constructor(e){this.manifestPath=e.manifestPath}apply(e){new hi.default().apply(e),new Ke({manifestPath:this.manifestPath}).apply(e),new Qe().apply(e),e.hooks.done.tap("develop:brand",s=>{s.compilation.name=void 0;let r=s.endTime-s.startTime,i=require(this.manifestPath).name;console.log(qr(i,r,s))})}};var Ri=a(require("path")),Ni=a(require("mini-css-extract-plugin"));var Ii=a(require("mini-css-extract-plugin"));var ce=a(require("path")),ke=a(require("fs"));var ae=a(require("path")),tt=a(require("fs")),Hs=require("child_process"),bi=require("detect-package-manager");function wi(t,e){return Object.values(e||{}).some(s=>s===t)}function h(t,e,s){let r=ae.default.extname(e),n=P(e,s)?ae.default.normalize(e):t;return[".js",".jsx",".tsx",".ts"].includes(r)&&(n=n.replace(r,".js")),[".html",".njk",".nunjucks"].includes(r)&&(n=n.replace(r,".html")),[".css",".scss",".sass",".less"].includes(r)&&(n=n.replace(r,".css")),Vs(n||"")}function Vs(t){return t.replace(/\\/g,"/")}function P(t,e={}){if(!e)return!1;let s=ae.default.normalize(Vs(t));return Object.values(e).some(i=>typeof i!="string"?!1:Vs(i).includes(s))}function G(t,e){if(t.getAsset("manifest.json")||t.assets["manifest.json"]){let s=t.assets["manifest.json"].source().toString();return JSON.parse(s||"{}")}return require(e)}function st(){return process.env.npm_config_user_agent&&process.env.npm_config_user_agent.includes("pnpm")?"pnpm":!1}function yi(){return process.env.npm_execpath?"npm":!1}async function _(t,e,s){try{let r=await(0,bi.detect)();console.log(Ur(t,e,r));let i="";r==="yarn"?i=`yarn --silent add ${s.join(" ")} --cwd ${__dirname} --optional`:r==="npm"||yi()?i=`npm --silent install ${s.join(" ")} --prefix ${__dirname} --save-optional`:st()?i=`pnpm --silent add ${s.join(" ")} --prefix ${__dirname} --save-optional`:i=`${r} --silent install ${s.join(" ")} --cwd ${__dirname} --optional`,(0,Hs.execSync)(i,{stdio:"inherit"}),await new Promise(n=>setTimeout(n,2e3)),process.env.EXTENSION_ENV==="development"&&(console.log(Br(t,e)),r==="yarn"?i="yarn install --silent > /dev/null 2>&1":r==="npm"||yi()?i="npm install --silent > /dev/null 2>&1":st()?i="pnpm install --silent > /dev/null 2>&1":i=`${r} install --silent > /dev/null 2>&1`,(0,Hs.execSync)(i,{stdio:"inherit"})),console.log(Jr(t,e))}catch(r){console.error(zr(t,e,r))}}function rt(t){let e=ae.default.join(t,"package.json");if(!tt.default.existsSync(e))return!1;let s=JSON.parse(tt.default.readFileSync(e,"utf-8")),r=["react","vue","@angular/core","svelte","solid-js","preact"],i=s.dependencies||{},n=s.devDependencies||{};for(let o of r)if(i[o]||n[o])return!0;return!1}function xi(t){return!tt.default.existsSync(ae.default.resolve(__dirname,`run-${t}-profile`))}function vi(t){let e=t.name?.replace(/ /g,"-").toLowerCase();return{data:{id:`${e}@extension-js`,manifest:t,management:{id:`${e}@extension-js`,mayDisable:!0,optionsUrl:"",installType:"development",type:"extension",enabled:!0,name:t.name||"",description:t.description||"",version:t.version||"",hostPermissions:t.host_permissions||[],permissions:t.permissions||[],offlineEnabled:t.offline_enabled||!1,shortName:t.short_name||"",isApp:t.app&&t.app.background&&t.app.background.scripts}}}}function it(t,e){return JSON.parse(JSON.stringify(t),function(i,n){let o=i.indexOf(":");if(o===-1)return n;let c=i.substring(0,o);(c===e||c==="chromium"&&Se.includes(e))&&(this[i.substring(o+1)]=n)})}var _i=!1;function nt(t){let e=ce.default.join(t,"package.json"),s=ce.default.join(t,"manifest.json");if(!ke.default.existsSync(e))return!1;let r=Bp(t),i=require(e),n=i.devDependencies&&i.devDependencies.tailwindcss,o=i.dependencies&&i.dependencies.tailwindcss,c=!!r&&!!(n||o);if(c&&!_i){let l=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(l,"Tailwind")),_i=!0}return c}function Bp(t){let e=ce.default.join(t,"tailwind.config.mjs"),s=ce.default.join(t,"tailwind.config.cjs"),r=ce.default.join(t,"tailwind.config.js");if(ke.default.existsSync(e))return e;if(ke.default.existsSync(s))return s;if(ke.default.existsSync(r))return r}var ot=a(require("path")),Pi=a(require("fs"));var Si=!1;function Ee(t){let e=ot.default.join(t,"package.json"),s=ot.default.join(t,"manifest.json");if(!Pi.default.existsSync(e))return!1;let r=require(e),i=r.devDependencies&&r.devDependencies.sass,n=r.dependencies&&r.dependencies.sass;if(i||n){if(!Si){let c=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(c,"SASS")),Si=!0}return!0}return!1}async function ki(t,e){if(!Ee(t))return[];try{require.resolve("sass-loader")}catch{let r=["postcss-loader","postcss-scss","postcss-flexbugs-fixes","postcss-preset-env","postcss-normalize"],i=require(ot.default.join(t,"package.json")).name;await _(i,"PostCSS",r),await _(i,"SASS",["sass","sass-loader","resolve-url-loader"]),console.log(E(i,"SASS")),process.exit(0)}return[{test:/\.(s(a|c)ss)$/,exclude:/\.module\.(s(a|c)ss)$/,oneOf:[{resourceQuery:/is_content_css_import=true/,use:await A(t,{loader:"sass-loader",mode:e,useMiniCssExtractPlugin:!1})},{use:await A(t,{loader:"sass-loader",mode:e,useMiniCssExtractPlugin:e==="production"})}]},{test:/\.module\.(s(a|c)ss)$/,oneOf:[{resourceQuery:/is_content_css_import=true/,use:await A(t,{loader:"sass-loader",mode:e,useMiniCssExtractPlugin:!1})},{use:await A(t,{loader:"sass-loader",mode:e,useMiniCssExtractPlugin:!0})}]}]}var at=a(require("path")),ji=a(require("fs"));var Ei=!1;function je(t){let e=at.default.join(t,"package.json"),s=at.default.join(t,"manifest.json"),i=require(s).name||"Extension.js";if(!ji.default.existsSync(e))return!1;let n=require(e),o=n.devDependencies&&n.devDependencies.less,c=n.dependencies&&n.dependencies.less;return o||c?(Ei||(process.env.EXTENSION_ENV==="development"&&console.log(v(i,"LESS")),Ei=!0),!0):!1}async function $i(t,e){if(!je(t))return[];try{require.resolve("less-loader")}catch{let r=require(at.default.join(t,"package.json")).name;await _(r,"LESS",["less","less-loader","resolve-url-loader"]),console.log(E(r,"LESS")),process.exit(0)}return[{test:/\.less$/,oneOf:[{resourceQuery:/is_content_css_import=true/,use:await A(t,{loader:"less-loader",mode:e,useMiniCssExtractPlugin:!1})},{use:await A(t,{loader:"less-loader",mode:e,useMiniCssExtractPlugin:e==="production"})}]}]}var le=a(require("path")),ct=a(require("fs"));var pe=!1;function Jp(t){let e=le.default.join(t,"package.json"),s=le.default.join(t,"manifest.json");if(!ct.default.existsSync(e))return!1;let r=[".postcssrc",".postcssrc.json",".postcssrc.yaml",".postcssrc.yml",".postcssrc.js",".postcssrc.cjs","postcss.config.js","postcss.config.cjs"],n=require(s).name||"Extension.js";if(ct.default.existsSync(e)){let o=require(e);if(o.dependencies&&o.dependencies.postcss||o.devDependencies&&o.devDependencies.postcss)return pe||(process.env.EXTENSION_ENV==="development"&&console.log(v(n,"PostCSS")),pe=!0),!0}for(let o of r)if(ct.default.existsSync(le.default.join(t,o)))return pe||(process.env.EXTENSION_ENV==="development"&&console.log(v(n,"PostCSS")),pe=!0),!0;return nt(t)?(pe||(process.env.EXTENSION_ENV==="development"&&console.log(v(n,"PostCSS")),pe=!0),!0):!1}async function Ci(t,e){if(!Jp(t))return{};try{require.resolve("postcss-loader")}catch{let r=require(le.default.join(t,"package.json")).name;!Ee(t)&&!je(t)&&await _(r,"PostCSS",["postcss","postcss-loader","postcss-scss","postcss-flexbugs-fixes","postcss-preset-env","postcss-normalize"]),console.log(E(r,"PostCSS")),process.exit(0)}return{loader:require.resolve("postcss-loader"),options:{postcssOptions:{parser:require.resolve("postcss-scss"),ident:"postcss",config:le.default.resolve(t,"postcss.config.js"),plugins:[require.resolve("postcss-flexbugs-fixes"),[require.resolve("postcss-preset-env"),{autoprefixer:{flexbox:"no-2009"},stage:3}].filter(Boolean),require.resolve("postcss-normalize")].filter(Boolean)},sourceMap:e.mode==="development"}}}var pt=a(require("path")),Fi=a(require("fs"));var Di=!1;function $e(t){let e=pt.default.join(t,"package.json"),s=pt.default.join(t,"manifest.json");if(!Fi.default.existsSync(e))return!1;let r=require(e),i=r.devDependencies&&r.devDependencies.vue,n=r.dependencies&&r.dependencies.vue;if((i||n)&&!Di){let c=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(c,"Vue")),Di=!0}return!!i||!!n}async function Li(t){if(!$e(t))return;try{require.resolve("vue-loader")}catch{let i=["typescript"],o=require(pt.default.join(t,"manifest.json")).name||"Extension.js";await _(o,"TypeScript",i),await _(o,"Vue",["vue-loader","@vue/compiler-sfc","vue-template-compiler","vue-style-loader"]),console.log(E(o,"Vue")),process.exit(0)}let e=[{test:/\.vue$/,loader:require.resolve("vue-loader"),include:t,exclude:/node_modules/}];return{plugins:[new(require("vue-loader")).VueLoaderPlugin],loaders:e,alias:void 0}}async function A(t,e){let s=Ii.default.loader,r=[e.useMiniCssExtractPlugin?s:$e(t)?require.resolve("vue-style-loader"):require.resolve("style-loader"),{loader:require.resolve("css-loader"),options:{importLoaders:1}}].filter(Boolean);if(nt(t)||Ee(t)||je(t)){let i=await Ci(t,e);i.loader&&r.push(i)}return e.loader&&r.push({loader:require.resolve("resolve-url-loader"),options:{sourceMap:e.mode==="development",root:t}},{loader:require.resolve(e.loader),options:{sourceMap:e.mode==="development"}}),r.filter(Boolean)}var C=a(require("path")),T=a(require("fs"));function Mi(t){let e=C.default.join(t,"stylelint.config.json"),s=C.default.join(t,".stylelintrc.js file"),r=C.default.join(t,"stylelint.config.mjs"),i=C.default.join(t,".stylelintrc.mjs"),n=C.default.join(t,"stylelint.config.cjs"),o=C.default.join(t,".stylelintrc.cjs"),c=C.default.join(t,".stylelintrc.json"),p=C.default.join(t,".stylelintrc"),l=C.default.join(t,".stylelintrc.yml"),u=C.default.join(t,".stylelintrc.yaml");if(T.default.existsSync(e))return e;if(T.default.existsSync(s))return s;if(T.default.existsSync(r))return r;if(T.default.existsSync(i))return i;if(T.default.existsSync(n))return n;if(T.default.existsSync(o))return o;if(T.default.existsSync(c))return c;if(T.default.existsSync(p))return p;if(T.default.existsSync(l))return l;if(T.default.existsSync(u))return u}var Oi=!1;function Ai(t){let e=C.default.join(t,"package.json"),s=C.default.join(t,"manifest.json");if(!T.default.existsSync(e))return!1;let i=!!Mi(t);if(i&&!Oi){let o=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(o,"Stylelint")),Oi=!0}return i}async function Ti(t){if(!Ai(t))return[];try{require.resolve("stylelint")}catch{let r=["stylelint","stylelint-webpack-plugin","stylelint-config-standard-scss"],i=require(C.default.join(t,"package.json")).name;await _(i,"Stylelint",r),console.log(E(i,"Stylelint")),process.exit(0)}let e=require("stylelint-webpack-plugin");return[new e({context:t,configFile:Ai(t)?Mi(t):C.default.join(__dirname,"stylelint.config.json"),files:"**/*.{css,scss,sass,less}",exclude:["node_modules",C.default.join(t,"node_modules")]})]}var lt=class t{static name="plugin-css";manifestPath;mode;constructor(e){this.manifestPath=e.manifestPath,this.mode=e.mode}async configureOptions(e){let s=Ri.default.dirname(this.manifestPath),r=[new Ni.default];r.forEach(p=>p.apply(e));let i=await Ti(s);r.push(...i);let n=[{test:/\.css$/,exclude:/\.module\.css$/,oneOf:[{resourceQuery:/is_content_css_import=true/,use:await A(s,{mode:this.mode,useMiniCssExtractPlugin:!1})},{use:await A(s,{mode:this.mode,useMiniCssExtractPlugin:this.mode==="production"})}]},{test:/\.module\.css$/,oneOf:[{resourceQuery:/is_content_css_import=true/,use:await A(s,{mode:this.mode,useMiniCssExtractPlugin:!1})},{use:await A(s,{mode:this.mode,useMiniCssExtractPlugin:this.mode==="production"})}]}];e.options.plugins=[...e.options.plugins,...r].filter(Boolean);let o=await ki(s,this.mode),c=await $i(s,this.mode);n.push(...o),n.push(...c),e.options.module.rules=[...e.options.module.rules,...n].filter(Boolean)}async apply(e){if(this.mode==="production"){e.hooks.beforeRun.tapPromise(t.name,async()=>await this.configureOptions(e));return}await this.configureOptions(e)}};var ft=class{static name="plugin-css";manifestPath;mode;constructor(e){this.manifestPath=e.manifestPath,this.mode=e.mode}async apply(e){let s={test:/\.svg$/i,type:"asset/resource",generator:{filename:"assets/[name][ext]"},parser:{dataUrlCondition:{maxSize:2048}}},i=[...e.options.module.rules.some(n=>n&&n.test instanceof RegExp&&n.test.test(".svg")&&n.use!==void 0)?[]:[s],{test:/\.(png|jpg|jpeg|gif|webp|avif|ico|bmp)$/i,type:"asset/resource",generator:{filename:"assets/[name][ext]"},parser:{dataUrlCondition:{maxSize:2*1024}}},{test:/\.(woff|woff2|eot|ttf|otf)$/i,type:"asset/resource",generator:{filename:"assets/[name][ext]"}},{test:/\.(txt|md|csv|tsv|xml|pdf|docx|doc|xls|xlsx|ppt|pptx|zip|gz|gzip|tgz)$/i,type:"asset/resource",generator:{filename:"assets/[name][ext]"},parser:{dataUrlCondition:{maxSize:2*1024}}},{test:/\.(csv|tsv)$/i,use:[require.resolve("csv-loader")],generator:{filename:"assets/[name][ext]"}}];e.options.module.rules=[...e.options.module.rules,...i].filter(Boolean)}};var Gs=a(require("path"));var ue=a(require("path")),dt=a(require("fs"));var ut=a(require("path")),Ui=a(require("fs"));var qi=!1;function X(t){let e=ut.default.join(t,"package.json"),s=ut.default.join(t,"manifest.json");if(!Ui.default.existsSync(e))return!1;let r=require(e),i=r.devDependencies&&r.devDependencies.preact,n=r.dependencies&&r.dependencies.preact;if((i||n)&&!qi){let c=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(c,"Preact")),qi=!0}return!!i||!!n}async function Wi(t){if(!X(t))return;try{require.resolve("@prefresh/webpack")}catch{let r=["@prefresh/webpack"],n=require(ut.default.join(t,"manifest.json")).name||"Extension.js";await _(n,"Preact",r),console.log(E(n,"Preact")),process.exit(0)}return{plugins:[new(require("@prefresh/webpack"))],loaders:void 0,alias:{react:"preact/compat","react-dom/test-utils":"preact/test-utils","react-dom":"preact/compat","react/jsx-runtime":"preact/jsx-runtime"}}}var fe=a(require("path")),mt=a(require("fs"));var Bi=!1;function R(t){let e=fe.default.join(t,"package.json");if(!mt.default.existsSync(e))return!1;let s=Hp(t),r=require(e),i=require(fe.default.join(t,"manifest.json")),n=i.name||"Extension.js",o=r.devDependencies&&r.devDependencies.typescript,c=r.dependencies&&r.dependencies.typescript;return Bi||((o||c)&&(s?process.env.EXTENSION_ENV==="development"&&console.log(v(n,"TypeScript")):(console.log(oi(i)),Vp(t))),Bi=!0),!!s&&!!(o||c)}function zp(t,e){return{compilerOptions:{allowJs:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,forceConsistentCasingInFileNames:!0,jsx:rt(t)?"react-jsx":"preserve",lib:["dom","dom.iterable","esnext"],moduleResolution:"node",module:"esnext",resolveJsonModule:!0,strict:!0,target:"esnext",isolatedModules:!1,skipLibCheck:!0},exclude:["node_modules","dist"]}}function Hp(t){let e=fe.default.join(t,"tsconfig.json");if(mt.default.existsSync(e))return e}function Vp(t){mt.default.writeFileSync(fe.default.join(t,"tsconfig.json"),JSON.stringify(zp(t,{mode:"development"}),null,2))}async function Ji(t){if(!R(t))return!1;try{require.resolve("typescript")}catch{let s=["typescript"],i=require(fe.default.join(t,"manifest.json")).name||"Extension.js";await _(i,"TypeScript",s),console.log(E(i,"TypeScript")),process.exit(0)}return!0}var zi=!1,Hi=[".babelrc",".babelrc.json",".babelrc.js",".babelrc.cjs","babel.config.json","babel.config.js","babel.config.cjs"];function Gp(t){let e=ue.default.join(t,"package.json"),s=ue.default.join(t,"manifest.json");if(!dt.default.existsSync(e))return!1;let r=require(e),i=r.devDependencies&&r.devDependencies["babel-core"],n=r.dependencies&&r.dependencies["babel-core"],o=Hi.some(c=>dt.default.existsSync(ue.default.join(t,c)))||!!i||!!n;if(o&&!zi){let p=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&process.env.EXTENSION_ENV==="development"&&console.log(v(p,"Babel")),zi=!0}return o}function Xp(t){for(let e of Hi){let s=ue.default.join(t,e);if(dt.default.existsSync(s))return s}}function Zp(t,e){let s=require("babel-preset-modern-browser-extension").default;return{cacheDirectory:!1,cacheCompression:!1,babelrc:!1,configFile:Xp(t),compact:e.mode==="production",overrides:[s(e).overrides],presets:[...s(e).presets],plugins:[...s(e).plugins,process.env.NODE_ENV!=="test"&&e.mode==="development"&&X(t)&&require.resolve("react-refresh/babel")].filter(Boolean)}}async function Vi(t,e){if(!Gp(e))return;try{require.resolve("babel-loader")}catch{let o=["@babel/core","babel-loader","babel-preset-modern-browser-extension"],p=require(ue.default.join(e,"manifest.json")).name||"Extension.js";await _(p,"Babel",o),console.log(E(p,"Babel")),process.exit(0)}let s=R(e)?/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/:/\.(js|mjs|jsx|mjsx)$/,r=t.options.mode,i=await Ji(e);return{plugins:void 0,loaders:[{test:s,include:e,exclude:/node_modules/,loader:require.resolve("babel-loader"),options:Zp(e,{mode:r,typescript:i})}],alias:void 0}}var gt=a(require("path")),Xi=a(require("fs"));var Gi=!1;function me(t){let e=gt.default.join(t,"package.json"),s=gt.default.join(t,"manifest.json");if(!Xi.default.existsSync(e))return!1;let r=require(e),i=r.devDependencies&&r.devDependencies.react,n=r.dependencies&&r.dependencies.react;if((i||n)&&!Gi){let c=require(s).name||"Extension.js";process.env.EXTENSION_ENV==="development"&&console.log(v(c,"React")),Gi=!0}return!!i||!!n}async function Zi(t){if(!me(t))return;try{require.resolve("@pmmmwh/react-refresh-webpack-plugin")}catch{let r=["react-refresh","@pmmmwh/react-refresh-webpack-plugin","react-refresh-typescript"],n=require(gt.default.join(t,"manifest.json")).name||"Extension.js";await _(n,"React",r),console.log(E(n,"React")),process.exit(0)}return{plugins:[new(require("@pmmmwh/react-refresh-webpack-plugin"))({overlay:!1})],loaders:void 0,alias:void 0}}var ht=class t{static name="plugin-js-frameworks";manifestPath;mode;constructor(e){this.manifestPath=e.manifestPath,this.mode=e.mode}async configureOptions(e){let s=Gs.default.dirname(this.manifestPath),r=await Vi(e,s),i=await Zi(s),n=await Wi(s),o=await Li(s);e.options.resolve.alias={...r?.alias||{},...i?.alias||{},...n?.alias||{},...o?.alias||{},...e.options.resolve.alias},e.options.module.rules=[{test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[Gs.default.dirname(this.manifestPath)],exclude:/node_modules/,use:{loader:require.resolve("swc-loader"),options:{sync:!0,module:{type:"es6"},minify:this.mode==="production",isModule:!0,jsc:{target:"es2016",parser:{syntax:R(s)?"typescript":"ecmascript",tsx:R(s)&&(me(s)||X(s)),jsx:!R(s)&&(me(s)||X(s)),dynamicImport:!0},transform:{react:{development:this.mode==="development",refresh:this.mode==="development",runtime:"automatic",importSource:"react"}}}}}},...r?.loaders||[],...i?.loaders||[],...n?.loaders||[],...o?.loaders||[],...e.options.module.rules].filter(Boolean),i?.plugins?.forEach(c=>c.apply(e)),n?.plugins?.forEach(c=>c.apply(e)),o?.plugins?.forEach(c=>c.apply(e))}async apply(e){if(this.mode==="production"){e.hooks.beforeRun.tapPromise(t.name,async()=>await this.configureOptions(e));return}await this.configureOptions(e)}};var Te=a(require("path"));var Mn=a(require("path"));var Yi=a(require("path"));function Ki(t,e){if(!e||!e.action||!e.action.default_popup)return;let s=e.action.default_popup;return Yi.default.join(t,s)}var Qi=a(require("path"));function en(t,e){if(!e||!e.browser_action||!e.browser_action.default_popup)return;let s=e.browser_action.default_popup;return Qi.default.join(t,s)}var yt=a(require("path"));function tn(t,e){let s={newtab:void 0};if(!e||!e.chrome_url_overrides)return{"chrome_url_overrides/newtab":void 0};if(e.chrome_url_overrides.history){let r=e.chrome_url_overrides.history;s={"chrome_url_overrides/history":yt.default.join(t,r)}}if(e.chrome_url_overrides.newtab){let r=e.chrome_url_overrides.newtab;s={"chrome_url_overrides/newtab":yt.default.join(t,r)}}if(e.chrome_url_overrides.bookmarks){let r=e.chrome_url_overrides.bookmarks;s={"chrome_url_overrides/bookmarks":yt.default.join(t,r)}}return s}var sn=a(require("path"));function rn(t,e){if(!e||!e.devtools_page)return;let s=e.devtools_page;return sn.default.join(t,s)}var Xs=a(require("path"));function nn(t,e){if(e.options_page){let r=e.options_page;return Xs.default.join(t,r)}if(!e||!e.options_ui||!e.options_ui.page)return;let s=e.options_ui.page;return Xs.default.join(t,s)}var on=a(require("path"));function an(t,e){if(!e||!e.page_action||!e.page_action.default_popup)return;let s=e.page_action.default_popup;return on.default.join(t,s)}var cn=a(require("path"));function pn(t,e){if(!e||!e.sandbox||!e.sandbox.pages)return{"sandbox/page-0":void 0};let s=e.sandbox.pages,r={};for(let[i,n]of s.entries())r[`sandbox/page-${i}`]=cn.default.join(t,n);return r}var ln=a(require("path"));function fn(t,e){if(!e||!e.side_panel||!e.side_panel.default_path)return;let s=e.side_panel.default_path;return ln.default.join(t,s)}var un=a(require("path"));function mn(t,e){if(!e||!e.sidebar_action||!e.sidebar_action.default_panel)return;let s=e.sidebar_action.default_panel;return un.default.join(t,s)}function Ce(t,e){return{"action/default_popup":Ki(t,e),"browser_action/default_popup":en(t,e),...tn(t,e),devtools_page:rn(t,e),"options_ui/page":nn(t,e),"page_action/default_popup":an(t,e),...pn(t,e),"side_panel/default_path":fn(t,e),"sidebar_action/default_panel":mn(t,e)}}var Zs=a(require("path"));function dn(t,e){if(!e||!e.action||!e.action.default_icon)return;if(typeof e.action.default_icon=="string")return Zs.default.join(t,e.action.default_icon);let s=[];for(let r in e.action.default_icon)s.push(Zs.default.join(t,e.action.default_icon[r]));return s}var Ys=a(require("path"));function gn(t,e){if(!e||!e.browser_action||!e.browser_action.default_icon)return;let s=[];if(typeof e.browser_action.default_icon=="string")return Ys.default.join(t,e.browser_action.default_icon);for(let r in e.browser_action.default_icon){let i=e.browser_action.default_icon[r]=Ys.default.join(t,e.browser_action.default_icon[r]);s.push(i)}return s}var Ks=a(require("path"));function hn(t,e){if(!(!e||!e.browser_action||!e.browser_action.theme_icons)){for(let s of e.browser_action.theme_icons)s.light&&(s.light=Ks.default.join(t,s.light)),s.dark&&(s.dark=Ks.default.join(t,s.dark)),s.size&&delete s.size;return e.browser_action.theme_icons}}var yn=a(require("path"));function bn(t,e){if(!e||!e.icons)return;let s=[];for(let r in e.icons){let i=yn.default.join(t,e.icons[r]);s.push(i)}return s}var Qs=a(require("path"));function wn(t,e){if(!e||!e.page_action||!e.page_action.default_icon)return;if(typeof e.page_action.default_icon=="string")return Qs.default.join(t,e.page_action.default_icon);let s=[];for(let r in e.page_action.default_icon){let i=Qs.default.join(t,e.page_action.default_icon[r]);s.push(i)}return s}var xn=a(require("path"));function vn(t,e){return!e||!e.sidebar_action||!e.sidebar_action.default_icon?void 0:xn.default.join(t,e.sidebar_action.default_icon)}function _n(t,e){return{action:dn(t,e),browser_action:gn(t,e),"browser_action/theme_icons":hn(t,e),icons:bn(t,e),page_action:wn(t,e),sidebar_action:vn(t,e)}}var Sn=a(require("path"));function Pn(t,e){let s={};return!e||!e.declarative_net_request||!e.declarative_net_request.rule_resources?{"declarative_net_request/rule_resources-0":void 0}:(e.declarative_net_request.rule_resources.forEach(i=>{s[`declarative_net_request/${i.id}`]=Sn.default.join(t,i.path)}),s)}var kn=a(require("path"));function En(t,e){if(!e||!e.storage||!e.storage.managed_schema)return;let s=e.storage.managed_schema;return kn.default.join(t,s)}function jn(t,e){return{...Pn(t,e),"storage/managed_schema":En(t,e)}}var $n=a(require("path"));function Cn(t,e){if(!e||!e.background)return;let s=e.background.scripts;if(s)return s.map(r=>$n.default.join(t,r))}var Dn=a(require("path"));function Fn(t,e){if(!e||!e.background)return;let s=e.background.service_worker;if(s)return Dn.default.join(t,s)}var er=a(require("path"));function Ln(t,e){if(!e||!e.content_scripts)return{"content_scripts/content-0":void 0};let s=n=>{if(n.js?.length!==0)return n.js?.map(o=>er.default.join(t,o))},r=n=>{if(n.css?.length!==0)return n.css?.map(o=>er.default.join(t,o))},i={};for(let[n,o]of e.content_scripts.entries()){let c=s(o),p=r(o);i[`content_scripts/content-${n}`]=[...(c||[]).filter(l=>l!=null),...(p||[]).filter(l=>l!=null)]}return i}var In=a(require("path"));function On(t,e){if(!e||!e.user_scripts||!e.user_scripts.api_script)return;let s=e.user_scripts.api_script;return In.default.join(t,s)}function De(t,e){return{"background/scripts":Cn(t,e),"background/service_worker":Fn(t,e),...Ln(t,e),"user_scripts/api_script":On(t,e)}}function An(t){if(!(!t||!t.web_accessible_resources||!t.web_accessible_resources.length))return t.web_accessible_resources}function Yp(t){function e(s){let r={};for(let i in s)if(s.hasOwnProperty(i)){let n=i.includes(":")?i.split(":")[1]:i;typeof s[i]=="object"&&!Array.isArray(s[i])?r[n]=e(s[i]):r[n]=s[i]}return r}return e(t)}function Tn({manifestPath:t}){let e=Mn.default.dirname(t),s=require(t),r=Yp(s);return{html:Ce(e,r),icons:_n(e,r),json:jn(e,r),scripts:De(e,r),web_accessible_resources:An(r)}}var de=a(require("path"));var bt=a(require("fs")),Fe=a(require("path"));function wt(t,e){if(!bt.default.existsSync(t)||!bt.default.statSync(t).isDirectory())return[];let s=[];function r(i){let n=bt.default.readdirSync(i,{withFileTypes:!0});for(let o of n){let c=Fe.default.join(i,o.name);o.isDirectory()?r(c):o.isFile()&&e(o.name)&&s.push(c)}}return r(t),s}function xt(t,e,s=""){return!e||!e.length?{}:e.reduce((r,i)=>{let n=Fe.default.extname(i),o=Fe.default.basename(i,n),c=s?`${s}/${o}`:Fe.default.relative(t,i);return{...r,[c]:i}},{})}function Rn({manifestPath:t}){let e=de.default.dirname(t),s={public:de.default.join(e,"public"),pages:de.default.join(e,"pages"),scripts:de.default.join(e,"scripts")},r={public:wt(s.public,()=>!0),pages:wt(s.pages,n=>n.endsWith(".html")),scripts:wt(s.scripts,n=>[".js",".mjs",".jsx",".mjsx",".ts",".mts",".tsx",".mtsx"].includes(de.default.extname(n)))};return{public:xt(e,r.public),pages:xt(e,r.pages,"pages"),scripts:xt(e,r.scripts,"scripts")}}var vt=a(require("path")),Nn=a(require("webpack")),_t=class{manifestPath;includeList;excludeList;loaderOptions;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList,this.loaderOptions=e.loaderOptions}apply(e){new Nn.default.ProvidePlugin({r:[vt.default.resolve(__dirname,"./resolver-module.js"),"default"]}).apply(e),e.options.module?.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,loader:require.resolve(vt.default.resolve(__dirname,"./resolver-loader.js")),include:[vt.default.dirname(this.manifestPath)],exclude:/node_modules/,options:{manifestPath:this.manifestPath,includeList:this.includeList,jsx:this.loaderOptions?this.loaderOptions.jsx:!1,typescript:this.loaderOptions?this.loaderOptions.typescript:!1,minify:this.loaderOptions?this.loaderOptions.minify:!1}})}};var qn=a(require("fs")),Pt=a(require("webpack")),Un=require("webpack");var St=class{manifestPath;constructor(e){this.manifestPath=e.manifestPath}apply(e){e.hooks.compilation.tap("manifest:emit-manifest",s=>{s.hooks.processAssets.tap({name:"manifest:emit-manifest",stage:Pt.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{let r=this.manifestPath,i;try{let c=qn.default.readFileSync(r,"utf-8");i=JSON.parse(c)}catch(c){let l=require(this.manifestPath).name||"Extension.js";s.errors.push(new Pt.default.WebpackError(ri(l,c)));return}let n=JSON.stringify(i,null,2);s.emitAsset("manifest.json",new Un.sources.RawSource(n))})})}};var $t=require("webpack");function Wn(t,e){return t.background&&t.background.scripts&&{background:{...t.background,...t.background.scripts&&{scripts:[...t.background.scripts.map(s=>h("background/scripts.js",s,e))]}}}}var Bn=a(require("path"));var kt=t=>Bn.default.basename(t);function Jn(t,e){return t.browser_action&&{browser_action:{...t.browser_action,...t.browser_action.default_popup&&{default_popup:h("browser_action/default_popup.html",t.browser_action.default_popup,e)},...t.browser_action.default_icon&&{default_icon:typeof t.browser_action.default_icon=="string"?h(`icons/${kt(t.browser_action.default_icon)}`,t.browser_action.default_icon,e):Object.fromEntries(Object.entries(t.browser_action.default_icon).map(([s,r])=>[s,h(`icons/${kt(r)}`,r,e)]))},...t.browser_action.theme_icons&&{theme_icons:t.browser_action.theme_icons.map(s=>({...s,...s.light&&{light:h(`browser_action/${kt(s.light)}`,s.light,e)},...s.dark&&{dark:h(`browser_action/${kt(s.dark)}`,s.dark,e)}}))}}}}function zn(t,e){return t.declarative_net_request&&{declarative_net_request:{...t.declarative_net_request,rule_resources:t.declarative_net_request.rule_resources.map(s=>({...s,path:s.path&&h(`declarative_net_request/${s.id}.json`,s.path,e)}))}}}function Hn(t,e){return{...Wn(t,e),...Jn(t,e),...zn(t,e)}}var Gn=a(require("path"));var Vn=t=>Gn.default.basename(t);function Xn(t,e){return t.action&&{action:{...t.action,...t.action.default_popup&&{default_popup:h("action/default_popup.html",t.action.default_popup,e)},...t.action.default_icon&&{default_icon:typeof t.action.default_icon=="string"?h(`action/${Vn(t.action.default_icon)}`,t.action.default_icon,e):Object.fromEntries(Object.entries(t.action.default_icon).map(([s,r])=>[s,h(`action/${Vn(r)}`,r,e)]))}}}}function Zn(t,e){return t.background&&t.background.service_worker&&{background:{...t.background,...t.background.service_worker&&{service_worker:h("background/service_worker.js",t.background.service_worker,e)}}}}function Et(t,e){return t.side_panel&&{side_panel:{...t.side_panel.default_path&&{default_path:h("side_panel/default_path.html",t.side_panel.default_path,e)}}}}function Yn(t,e){return{...Xn(t,e),...Zn(t,e),...Et(t,e)}}function Kn(t,e){return t.background&&t.background.page&&{background:{...t.background,...t.background.page&&{page:h("background/page.html",t.background.page,e)}}}}function Qn(t,e){return t.chrome_url_overrides&&{chrome_url_overrides:{...t.chrome_url_overrides.bookmarks&&{bookmarks:h("chrome_url_overrides/bookmarks.html",t.chrome_url_overrides.bookmarks,e)},...t.chrome_url_overrides.history&&{history:h("chrome_url_overrides/history.html",t.chrome_url_overrides.history,e)},...t.chrome_url_overrides.newtab&&{newtab:h("chrome_url_overrides/newtab.html",t.chrome_url_overrides.newtab,e)}}}}function eo(t,e){return t.content_scripts&&{content_scripts:t.content_scripts.map((s,r)=>{let i=[...new Set(s.js)],n=[...new Set(s.css)];return{...s,js:[...i.map(o=>h(`content_scripts/content-${r}.js`,o,e))],css:[...n.map(o=>h(`content_scripts/content-${r}.css`,o,e))]}})}}function to(t,e){return t.devtools_page&&{devtools_page:h("devtools_page.html",t.devtools_page,e)}}var so=a(require("path"));var Kp=t=>so.default.basename(t);function ro(t,e){return t.icons&&{icons:Object.fromEntries(Object.entries(t.icons).map(([s,r])=>[s,h(`icons/${Kp(r)}`,r,e)]))}}function io(t,e){return t.options_page&&{options_page:h("options_ui/page.html",t.options_page,e)}}function no(t,e){return t.options_ui&&{options_ui:{...t.options_ui,...t.options_ui.page&&{page:h("options_ui/page.html",t.options_ui.page,e)}}}}var ao=a(require("path"));var oo=t=>ao.default.basename(t);function co(t,e){return t.page_action&&{page_action:{...t.page_action,...t.page_action.default_popup&&{default_popup:h("page_action/default_popup.html",t.page_action.default_popup,e)},...t.page_action.default_icon&&{default_icon:typeof t.page_action.default_icon=="string"?h(`icons/${oo(t.page_action.default_icon)}`,t.page_action.default_icon,e):Object.fromEntries(Object.entries(t.page_action.default_icon).map(([s,r])=>[s,h(`icons/${oo(r)}`,r,e)]))}}}}function po(t,e){return t.sandbox&&{sandbox:{...t.sandbox,...t.sandbox.pages&&{pages:t.sandbox.pages.map((s,r)=>h(`sandbox/page-${r}.html`,s,e))}}}}var lo=a(require("path"));var Qp=t=>lo.default.basename(t);function fo(t,e){return t.sidebar_action&&{sidebar_action:{...t.sidebar_action,...t.sidebar_action.default_panel&&{default_panel:h("sidebar_action/default_panel.html",t.sidebar_action.default_panel,e)},...t.sidebar_action.default_icon&&{default_icon:h(`icons/${Qp(t.sidebar_action.default_icon)}`,t.sidebar_action.default_icon,e)}}}}function uo(t,e){return t.storage&&{storage:{...t.storage.managed_schema&&{managed_schema:h("storage/managed_schema.json",t.storage.managed_schema,e)}}}}var mo=a(require("path"));var el=t=>mo.default.basename(t);function go(t,e){return t.theme&&{theme:{...t.theme,...t.theme.images&&{images:{...t.theme.images,theme_frame:h(`theme/images/${el(t.theme.images.theme_frame)}`,t.theme.images.theme_frame,e)}}}}}function ho(t,e){return t.user_scripts&&{user_scripts:{...t.user_scripts,...t.user_scripts.api_script&&{api_script:h("user_scripts/api_script.js",t.user_scripts.api_script,e)}}}}function yo(t){return t.web_accessible_resources&&t.web_accessible_resources.length&&{web_accessible_resources:t.web_accessible_resources}}function bo(t,e){return{...Kn(t,e),...Qn(t,e),...eo(t,e),...to(t,e),...ro(t,e),...io(t,e),...no(t,e),...co(t,e),...po(t,e),...Et(t,e),...fo(t,e),...uo(t,e),...go(t,e),...ho(t,e),...yo(t)}}function wo(t,e,s){let r=e||require(t);return JSON.stringify({...r,...bo(r,s),...Hn(r,s),...Yn(r,s)},null,2)}var jt=class{manifestPath;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.excludeList=e.excludeList}applyDevOverrides(e){return e.content_scripts?e.content_scripts.map((s,r)=>(s.css.length&&!s.js.length&&(s.js=[h(`content_scripts-${r}`,"dev.js",{})]),s)):{}}apply(e){e.hooks.thisCompilation.tap("manifest:update-manifest",s=>{s.hooks.processAssets.tap({name:"manifest:update-manifest",stage:$t.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},()=>{if(s.errors.length>0)return;let r=G(s,this.manifestPath),i=wo(this.manifestPath,r,this.excludeList||{}),n={...r,...JSON.parse(i)};e.options.mode!=="production"&&n.content_scripts&&(n.content_scripts=this.applyDevOverrides(n));let o=JSON.stringify(n,null,2),c=new $t.sources.RawSource(o);s.updateAsset("manifest.json",c)})})}};var xo=a(require("fs")),Ct=class{dependencyList;constructor(e){this.dependencyList=e}apply(e){e.hooks.afterCompile.tap("ManifestPlugin (AddDependenciesPlugin)",s=>{if(s.errors?.length)return;let r=new Set(s.fileDependencies);this.dependencyList&&this.dependencyList.forEach(i=>{xo.default.existsSync(i)&&(r.has(i)||(r.add(i),s.fileDependencies.add(i)))})})}};var vo=a(require("fs")),_o=a(require("path")),Ft=a(require("webpack"));var Dt=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}extractPaths(e){let s=Array.isArray(e)?e:[e];if(typeof s[0]=="string")return s;let r=[];if(typeof e=="object"&&!Array.isArray(e)){let i=e;i.light&&r.push(i.light),i.dark&&r.push(i.dark)}return r}handleErrors(e,s){let r=[".png",".jpg",".jpeg",".svg",".gif",".webp"],i=[".json"],n=[".js",".ts",".jsx",".tsx",".mjs",".cjs"],o=".html",c=Object.entries(this.includeList||{});for(let[p,l]of c)if(l){let u=this.extractPaths(l);for(let d of u){let g=_o.default.extname(d),$=require(this.manifestPath).name||"Extension.js",k=oe($,p,d);vo.default.existsSync(d)||(r.includes(g)?e.errors.push(new s(k)):i.includes(g)?e.errors.push(new s(k)):n.includes(g)?e.errors.push(new s(k)):g===o?e.errors.push(new s(k)):e.errors.push(new s(k)))}}}apply(e){e.hooks.compilation.tap("manifest:check-manifest-files",s=>{s.hooks.processAssets.tap({name:"compatibility:check-manifest-files",stage:Ft.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_COUNT},()=>{let r=Ft.default.WebpackError;this.handleErrors(s,r)})})}};var So=a(require("fs")),It=a(require("webpack"));var Lt=class{manifestPath;browser;includeList;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.includeList=e.includeList}flattenAndSort(e){return e.flat(1/0).sort()}apply(e){e.hooks.watchRun.tapAsync("manifest:throw-if-recompile-is-needed",(s,r)=>{if((s.modifiedFiles||new Set).has(this.manifestPath)){let n=s.options.context||"",o=`${n}/package.json`;if(!So.default.existsSync(o)){r();return}let c=require(this.manifestPath),p=it(c,this.browser),l=this.flattenAndSort(Object.values(Ce(n,p))),u=this.flattenAndSort(Object.values(De(n,p)));s.hooks.thisCompilation.tap("manifest:throw-if-recompile-is-needed",d=>{d.hooks.processAssets.tap({name:"manifest:check-manifest-files",stage:It.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_COMPATIBILITY},()=>{let y=d.getAsset("manifest.json")?.source.source().toString(),$=JSON.parse(y||"{}"),k=this.flattenAndSort(Object.values(Ce(n,$))),U=this.flattenAndSort(Object.values(De(n,$)));if(u.toString()!==U.toString()||l.toString()!==k.toString()){let W=l.filter(B=>!k.includes(B))[0],H=k.filter(B=>!l.includes(B))[0],_e=ii(H,W);d.errors.push(new It.default.WebpackError(_e))}})})}r()})}};var Ot=class{manifestPath;browser;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){new St({manifestPath:this.manifestPath}).apply(e),new Dt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new jt({manifestPath:this.manifestPath,excludeList:this.excludeList}).apply(e),new Ct([this.manifestPath]).apply(e),new Lt({manifestPath:this.manifestPath,browser:this.browser,includeList:this.includeList}).apply(e)}};var nr=a(require("path"));var sr=a(require("fs")),Tt=a(require("webpack")),$o=require("webpack");var Po=a(require("fs")),he=a(require("path")),ko=a(require("parse5-utils"));var ge=a(require("parse5-utils"));function At(t){try{return new URL(t),!0}catch{return!1}}function Le(t,e){let{childNodes:s=[]}=t;for(let r of s)if(r.nodeName==="script"){let i=ge.default.getAttribute(r,"src");if(!i||At(i))continue;e({filePath:i,childNode:r,assetType:"script"})}else if(r.nodeName==="link"){let i=ge.default.getAttribute(r,"href"),n=ge.default.getAttribute(r,"rel");if(!i||At(i))continue;e(n==="dns-prefetch"||n==="icon"||n==="manifest"||n==="modulepreload"||n==="preconnect"||n==="prefetch"||n==="preload"||n==="prerender"?{filePath:i,childNode:r,assetType:"staticHref"}:{filePath:i,childNode:r,assetType:"css"})}else if(r.nodeName==="a"||r.nodeName==="area"){let i=ge.default.getAttribute(r,"href");if(!i||At(i))continue;e({filePath:i,childNode:r,assetType:"staticHref"})}else if(r.nodeName==="audio"||r.nodeName==="embed"||r.nodeName==="iframe"||r.nodeName==="img"||r.nodeName==="input"||r.nodeName==="source"||r.nodeName==="track"||r.nodeName==="video"){let i=ge.default.getAttribute(r,"src");if(!i||At(i))continue;e({filePath:i,childNode:r,assetType:"staticSrc"})}else Le(r,e)}function D(t,e){let s={css:[],js:[],static:[]};if(!t)return s;let r=e||Po.default.readFileSync(t,{encoding:"utf8"}),i=ko.default.parse(r),n=(o,c)=>he.default.join(he.default.dirname(o),c.startsWith("/")?he.default.relative(he.default.dirname(o),c):c);for(let o of i.childNodes)if(o.nodeName==="html"){for(let c of o.childNodes)(c.nodeName==="head"||c.nodeName==="body")&&Le(c,({filePath:p,assetType:l})=>{let u=n(t,p);switch(l){case"script":s.js?.push(u);break;case"css":s.css?.push(u);break;case"staticSrc":case"staticHref":if(p.startsWith("#"))break;s.static?.push(u);break;default:break}});return{css:s.css,js:s.js,static:s.static}}}function Eo(t,e,s){let r=Object.keys(t).find(n=>{let o=t[n];return t[n]===e||D(o)?.js?.includes(e)||D(o)?.css?.includes(e)})||"",i=tr(e);return r?`/${r.replace(i,"")}${s}`:`${e.replace(i,"")}${s}`}function tr(t){switch(he.default.extname(t)){case".js":case".mjs":case".ts":case".tsx":return".js";case".css":case".scss":case".sass":case".less":return".css";case".html":return".html";default:return".js"}}function Z(t,e,s){return s?`/${t}${e}`:`${t}${e}`}function jo(t,e){return Object.values(e||{}).some(s=>s===t)}var Mt=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){let r=require(this.manifestPath).name||"Extension.js";e.hooks.thisCompilation.tap("html:emit-html-file",i=>{i.hooks.processAssets.tap({name:"AddAssetsToCompilationPlugin",stage:Tt.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL},()=>{let n=Object.entries(this.includeList||{});for(let o of n){let[c,p]=o;if(p){if(!sr.default.existsSync(p)){let u=oe(r,c,p);i.warnings.push(new Tt.default.WebpackError(u));return}let l=sr.default.readFileSync(p,"utf8");if(!P(p,this.excludeList)){let u=new $o.sources.RawSource(l),d=Z(c,".html");i.emitAsset(d,u)}}}})})}};var Rt=a(require("fs")),ye=a(require("path")),Co=a(require("webpack")),Ie=require("webpack");var Nt=class{manifestPath;includeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList}apply(e){e.hooks.thisCompilation.tap("html:add-assets-to-compilation",s=>{s.hooks.processAssets.tap({name:"html:add-assets-to-compilation",stage:Ie.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL},()=>{if(s.errors.length>0)return;let r=Object.entries(this.includeList||{});for(let i of r){let[n,o]=i,c=n+".html";if(o){let p=s.getAsset(c);if(p){let l=p.source.source().toString(),u=D(o,l)?.static,d=[...new Set(u)];for(let g of d)if(!g.includes("public/")){if(!Rt.default.existsSync(g)&&!jo(g,this.includeList)&&!ye.default.basename(g).startsWith("#")){let W=Ze(require(this.manifestPath).name,o,g);s.warnings.push(new Co.default.WebpackError(W));return}let y=Rt.default.readFileSync(g),$=new Ie.sources.RawSource(y),k=ye.default.join("assets",ye.default.basename(g));if(!s.getAsset(k))if(g.endsWith(".html")){let U=D(g),W=[...U?.js||[],...U?.css||[],...U?.static||[]];s.emitAsset(k,$),W.forEach(H=>{let _e=Rt.default.readFileSync(H),B=new Ie.sources.RawSource(_e),Mr=ye.default.join("assets",ye.default.basename(H));s.getAsset(Mr)||s.emitAsset(Mr,B)})}else s.emitAsset(k,$)}}}}})})}};var Do=a(require("path")),rr=a(require("fs"));var qt=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){let s=this.includeList||{};for(let r of Object.entries(s)){let[i,n]=r;if(n){if(!rr.default.existsSync(n))return;let o=D(n),c=o?.js||[],p=o?.css||[],l=[...c,...p].filter(u=>!P(u,this.excludeList));if(e.options.mode==="development"){let u=Do.default.resolve(__dirname,"minimum-script-file.mjs");l.push(u)}rr.default.existsSync(n)&&(P(n,this.excludeList)||(e.options.entry={...e.options.entry,[i]:{import:l}}))}}}};var Wt=require("webpack");var ir=a(require("fs")),Y=a(require("path")),F=a(require("parse5-utils"));function Fo(t,e,s,r,i){let n=ir.default.readFileSync(s,{encoding:"utf8"}),o=F.default.parse(n),c=!!t.getAsset(e+".css"),p=!1;for(let l of o.childNodes)if(l.nodeName==="html"){for(let u of l.childNodes){if((u.nodeName==="head"||u.nodeName==="body")&&Le(u,({filePath:d,childNode:g,assetType:y})=>{let $=Y.default.dirname(s),k=Y.default.resolve($,d),U=tr(k),W=P(Y.default.resolve($,d),i),H=Y.default.join("/",Y.default.normalize(d)),_e=wi(k,r);switch(y){case"script":{W?l=F.default.setAttribute(g,"src",H):(l=F.default.remove(g),p=!0);break}case"css":{W?l=F.default.setAttribute(g,"href",H):(l=F.default.remove(g),c=!0);break}case"staticHref":case"staticSrc":{if(W)l=F.default.setAttribute(g,y==="staticSrc"?"src":"href",H);else if(_e){let B=Eo(r,k,U);l=F.default.setAttribute(g,y==="staticSrc"?"src":"href",B)}else{let B=Y.default.join("assets",Y.default.basename(k,U));ir.default.existsSync(k)&&(l=F.default.setAttribute(g,y==="staticSrc"?"src":"href",Z(B,"",!0)))}break}default:break}}),u.nodeName==="head"&&c&&t.options.mode==="production"){let d=F.default.createNode("link");d.attrs=[{name:"rel",value:"stylesheet"},{name:"href",value:Z(e,".css",!0)}],F.default.append(u,d)}if(u.nodeName==="body"&&(p||t.options.mode!=="production")){let d=F.default.createNode("script");d.attrs=[{name:"src",value:Z(e,".js",!0)}],F.default.append(u,d)}}return F.default.serialize(o)}}var Ut=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){e.hooks.thisCompilation.tap("html:update-html-file",s=>{s.hooks.processAssets.tap({name:"html:update-html-file",stage:Wt.Compilation.PROCESS_ASSETS_STAGE_DERIVED},()=>{if(s.errors.length>0)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[n,o]=i;if(o){let c=Fo(s,n,o,r,this.excludeList||{});if(!P(o,this.excludeList)&&c){let p=new Wt.sources.RawSource(c),l=Z(n,".html");s.updateAsset(l,p)}}}})})}};var Lo=a(require("fs")),Io=require("webpack");var Bt=class{manifestPath;includeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList}apply(e){e.hooks.thisCompilation.tap("html:add-to-file-dependencies",s=>{s.hooks.processAssets.tap({name:"html:add-to-file-dependencies",stage:Io.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{if(s.errors?.length)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[,n]=i;if(n){let o=D(n),c=new Set(s.fileDependencies);if(Lo.default.existsSync(n)){let p=[n,...o?.static||[]];for(let l of p)c.has(l)||(c.add(l),l===n&&s.fileDependencies.add(l))}}}})})}};var Oo=a(require("fs"));var Jt=class{manifestPath;includeList;initialHtmlAssets={};constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList}hasEntriesChanged(e,s){if(!s||!e||e.length!==s.length)return!0;for(let r=0;r<e.length;r++)if(e[r]!==s[r])return!0;return!1}storeInitialHtmlAssets(e){Object.entries(e).forEach(([s,r])=>{let i=r;if(i){if(!Oo.default.existsSync(i)){let o=require(this.manifestPath).name||"Extension.js";console.error(oe(o,s,i)),process.exit(1)}this.initialHtmlAssets[i]={js:D(i)?.js||[],css:D(i)?.css||[]}}})}apply(e){let s=this.includeList||{};this.storeInitialHtmlAssets(s),e.hooks.make.tapAsync("html:throw-if-recompile-is-needed",(r,i)=>{let n=e.modifiedFiles||new Set,o=Array.from(n)[0];if(o&&this.initialHtmlAssets[o]){let c=D(o)?.js||[],p=D(o)?.css||[],{js:l,css:u}=this.initialHtmlAssets[o];if(this.hasEntriesChanged(p,u)||this.hasEntriesChanged(c,l)){let d=require(this.manifestPath).name;console.log(li(d,o))}}i()})}};var Ao=a(require("fs")),Mo=require("webpack");function sl(t,e,s){let r="Module not found: Error: Can't resolve ",n=s.message.replace(r,"").split("'")[1];if(s.message.includes(r))for(let o of Object.entries(e)){let[,c]=o;if(c){if(!Ao.default.existsSync(c))return null;let p=D(c),l=p?.js||[],u=p?.css||[];if(l.includes(n)||u.includes(n)){let d=Ze(require(t).name,c,n);return new Mo.WebpackError(d)}}}return null}var zt=class{manifestPath;includeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList}apply(e){e.hooks.compilation.tap("html:handle-common-errors",s=>{s.hooks.afterSeal.tapPromise("html:handle-common-errors",async()=>{s.errors.forEach((r,i)=>{let n=sl(this.manifestPath,this.includeList||{},r);n&&(s.errors[i]=n)})})})}};var Ht=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){new Mt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new Nt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new qt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new Ut({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),e.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[nr.default.dirname(this.manifestPath)],exclude:/node_modules/,use:[{loader:require.resolve(nr.default.join(__dirname,"ensure-hmr-for-scripts.js")),options:{manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}}]}),new Bt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new Jt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new zt({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e)}};var se=a(require("path"));var or=a(require("fs")),To=a(require("path"));function Ro(t,e){return(Array.isArray(t)?t||[]:t?[t]:[]).filter(i=>{let n=or.default.existsSync(i)&&!P(i,e),o=To.default.extname(i);return n&&(o===".js"||o===".mjs"||o===".jsx"||o===".ts"||o===".tsx")})}function No(t,e){return(Array.isArray(t)?t||[]:t?[t]:[]).filter(i=>or.default.existsSync(i)&&!P(i,e)&&(i.endsWith(".css")||i.endsWith(".scss")||i.endsWith(".sass")||i.endsWith(".less")))}var Vt=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList||{},this.excludeList=e.excludeList||{}}apply(e){let s=this.includeList||{};for(let r of Object.entries(s)){let[i,n]=r,o=Ro(n,this.excludeList),c=No(n,this.excludeList),p=[...o];e.options.mode==="production"&&p.push(...c),(c.length||o.length)&&(e.options.entry={...e.options.entry,[i]:{import:p}})}}};var te=require("webpack"),rl=['var isBrowser = !!(() => { try { return browser.runtime.getURL("/") } catch(e) {} })()','var isChrome = !!(() => { try { return chrome.runtime.getURL("/") } catch(e) {} })()'],il=[...rl,`var runtime = isBrowser ? browser : isChrome ? chrome : (typeof self === 'object' && self.addEventListener) ? { get runtime() { throw new Error("No chrome or browser runtime found") } } : { runtime: { getURL: x => x } }`],Gt=class t{apply(e){let{RuntimeGlobals:s}=e.webpack;e.hooks.compilation.tap("PublicPathRuntimeModule",r=>{r.hooks.runtimeRequirementInTree.for(s.publicPath).tap(t.name,i=>{let n=nl();return r.addRuntimeModule(i,n),!0})})}};function nl(){class t extends te.RuntimeModule{constructor(){super("publicPath",te.RuntimeModule.STAGE_BASIC)}generate(){let s=this.compilation?.outputOptions.publicPath;return te.Template.asString([...il,`var path = ${JSON.stringify(this.compilation?.getPath(s||"",{hash:this.compilation.hash||"XXXX"}))}`,`${te.RuntimeGlobals.publicPath} = typeof importScripts === 'function' || !(isBrowser || isChrome) ? path : runtime.runtime.getURL(path);`])}}return new t}var Xt=class{manifestPath;browser;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.includeList=e.includeList||{},this.excludeList=e.excludeList||{}}apply(e){let s=require(this.manifestPath);if(s.content_scripts?.some(r=>r.world&&r.world.toLowerCase()==="main")){if(s.id||(console.error(mi(s.name||"")),process.exit(1)),this.browser==="firefox"){e.options.output.publicPath=`moz-extension://${s.id}/`;return}e.options.output.publicPath=`${this.browser}-extension://${s.id}/`}}};var Zt=class{manifestPath;browser;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){new Vt({manifestPath:this.manifestPath,includeList:this.includeList||{},excludeList:this.excludeList||{}}).apply(e),e.options.mode==="development"&&e.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[se.default.dirname(this.manifestPath)],exclude:/node_modules/,use:[{loader:require.resolve(se.default.join(__dirname,"inject-content-css-during-dev.js")),options:{manifestPath:this.manifestPath,includeList:this.includeList||{},excludeList:this.excludeList||{}}}]}),e.options.mode==="development"&&e.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[se.default.dirname(this.manifestPath)],exclude:/node_modules/,use:[{loader:require.resolve(se.default.join(__dirname,"add-hmr-accept-code.js")),options:{manifestPath:this.manifestPath,includeList:this.includeList||{},excludeList:this.excludeList||{}}}]}),e.options.mode==="production"&&new Gt().apply(e),new Xt({manifestPath:this.manifestPath,browser:this.browser||"chrome",includeList:this.includeList||{},excludeList:this.excludeList||{}}).apply(e),e.options.mode==="development"&&e.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[se.default.dirname(this.manifestPath)],exclude:/node_modules/,use:[{loader:se.default.resolve(__dirname,"./add-query-param-to-imported-css.js"),options:{manifestPath:this.manifestPath,includeList:this.includeList||{},excludeList:this.excludeList||{}}}]})}};var cr=a(require("path")),Oe=a(require("fs")),pr=a(require("webpack")),Ae=require("webpack");var be=a(require("path")),Yt=a(require("fs"));function ar(t){let e=be.default.join(be.default.dirname(t),"_locales"),s=[];if(Yt.default.existsSync(e))for(let r of Yt.default.readdirSync(e)){let i=be.default.join(e,r);for(let n of Yt.default.readdirSync(i))s.push(be.default.join(be.default.dirname(t),"_locales",r,n))}return s}var Kt=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){e.hooks.thisCompilation.tap("locales:module",s=>{s.hooks.processAssets.tap({name:"locales:module",stage:Ae.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{let i=require(this.manifestPath).name||"Extension.js";if(!Oe.default.existsSync(this.manifestPath)){s.errors.push(new pr.default.WebpackError(si(i)));return}if(s.errors.length>0)return;let n=ar(this.manifestPath);for(let o of Object.entries(n||[])){let[c,p]=o,l=p;if(l){if(!Oe.default.existsSync(l)){s.warnings.push(new pr.default.WebpackError(Ye(i,c,l)));return}let u=Oe.default.readFileSync(l),d=new Ae.sources.RawSource(u),g=e.options.context||cr.default.dirname(this.manifestPath);if(!P(l,this.excludeList)){let y=cr.default.relative(g,l);s.emitAsset(y,d)}}}})}),e.hooks.thisCompilation.tap("locales:module",s=>{s.hooks.processAssets.tap({name:"locales:module",stage:Ae.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{if(s.errors?.length)return;let r=ar(this.manifestPath);for(let i of Object.entries(r||[])){let[,n]=i;if(n){let o=new Set(s.fileDependencies),c=r||[];for(let p of c)Oe.default.existsSync(p)&&(o.has(p)||(o.add(p),s.fileDependencies.add(p)))}}})})}};var Qt=a(require("fs")),qo=a(require("webpack")),Me=require("webpack");var es=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){e.hooks.thisCompilation.tap("json:module",s=>{s.hooks.processAssets.tap({name:"json:module",stage:Me.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{if(s.errors.length>0)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[n,o]=i,c=Array.isArray(o)?o:[o];for(let p of c)if(p&&!P(p,this.excludeList)){if(!Qt.default.existsSync(p)){let g=require(this.manifestPath).name||"Extension.js";s.warnings.push(new qo.default.WebpackError(Ye(g,n,p)));return}let l=Qt.default.readFileSync(p),u=new Me.sources.RawSource(l);s.emitAsset(n+".json",u)}}})}),e.hooks.thisCompilation.tap("json:module",s=>{s.hooks.processAssets.tap({name:"json:module",stage:Me.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{if(s.errors?.length)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[,n]=i,o=Array.isArray(n)?n:[n];for(let c of o)if(c){let p=new Set(s.fileDependencies);P(c,this.excludeList)||Qt.default.existsSync(c)&&(p.has(c)||(p.add(c),s.fileDependencies.add(c)))}}})})}};var lr=a(require("fs")),Uo=a(require("path")),ss=require("webpack");var ts=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){e.hooks.thisCompilation.tap("icons:emit-file",s=>{s.hooks.processAssets.tap({name:"icons:emit-file",stage:ss.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER},()=>{if(s.errors.length>0)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[n,o]=i;if(o===void 0)continue;let c=Array.isArray(o)?typeof o[0]=="string"?o:o.map(Object.values).flat():[o];for(let p of c)if(p){if(!lr.default.existsSync(p))continue;if(!P(p,this.excludeList)){let l=lr.default.readFileSync(p),u=new ss.sources.RawSource(l),d=Uo.default.basename(p),y=`${n.endsWith("theme_icons")?n.replace("theme_icons",""):n}/${d}`;s.emitAsset(y,u)}}}})})}};var Wo=a(require("fs")),Bo=require("webpack"),rs=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){e.hooks.thisCompilation.tap("icons:add-to-file-dependencies",s=>{s.hooks.processAssets.tap({name:"icons:add-to-file-dependencies",stage:Bo.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},()=>{if(s.errors?.length)return;let r=this.includeList||{};for(let i of Object.entries(r)){let[,n]=i,o=Array.isArray(n)?typeof n[0]=="string"?n:n.map(Object.values).flat():[n];for(let c of o)if(c){let p=new Set(s.fileDependencies);Wo.default.existsSync(c)&&(p.has(c)||(p.add(c),s.fileDependencies.add(c)))}}})})}};var is=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}apply(e){new ts({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e),new rs({manifestPath:this.manifestPath,includeList:this.includeList,excludeList:this.excludeList}).apply(e)}};var os=require("webpack");var ns=class{manifestPath;includeList;excludeList;constructor(e){this.manifestPath=e.manifestPath,this.includeList=e.includeList,this.excludeList=e.excludeList}generateManifestPatches(e,s){let r=G(e,this.manifestPath),i=r.web_accessible_resources||[],n=r.web_accessible_resources||[];for(let[p,l]of Object.entries(s)){let u=r.content_scripts?.find(d=>d.js&&d.js.some(g=>g.includes(p)));if(u){let d=u.matches||[];if(r.manifest_version===3){let g=i.find(y=>y.matches.some($=>d.includes($)));g?l.forEach(y=>{g.resources.includes(y)||g.resources.push(y)}):i.push({resources:l.filter(y=>!y.endsWith(".map")),matches:d})}else l.forEach(g=>{n.includes(g)||n.push(g)})}}r.manifest_version===3?r.web_accessible_resources=i:r.web_accessible_resources=Array.from(new Set(n));let o=JSON.stringify(r,null,2),c=new os.sources.RawSource(o);e.getAsset("manifest.json")&&e.updateAsset("manifest.json",c)}apply(e){e.hooks.thisCompilation.tap("plugin-extension:feature-web-resources",s=>{s.hooks.processAssets.tap({name:"plugin-extension:feature-web-resources",stage:os.Compilation.PROCESS_ASSETS_STAGE_ANALYSE},()=>{let r=[],i=Object.keys(this.includeList||{});for(let c of i.filter(Boolean))c.startsWith("content_scripts")&&(Array.isArray(c)?r.push(...c):typeof c=="string"&&r.push(c));let n=s.chunkGraph,o={};s.entrypoints.forEach((c,p)=>{if(r.includes(p)){let l=[];c.chunks.forEach(u=>{Array.from(n.getChunkModulesIterable(u)).forEach(g=>{n.getModuleChunks(g).forEach(y=>{y.auxiliaryFiles.forEach($=>{l.includes($)||l.push($)})})})}),o[p]=l}}),this.generateManifestPatches(s,o)})})}};var L=a(require("fs")),I=a(require("path")),Jo=a(require("chokidar")),as=class{options;constructor(e){this.options=e}ensureDirectoryExistence(e){let s=I.default.dirname(e);if(L.default.existsSync(s))return!0;L.default.mkdirSync(s,{recursive:!0})}copyFile(e,s){this.ensureDirectoryExistence(s),L.default.copyFileSync(e,s)}copyFolder(e,s){L.default.existsSync(s)||L.default.mkdirSync(s,{recursive:!0}),L.default.readdirSync(e).forEach(i=>{let n=I.default.join(e,i),o=I.default.join(s,i);L.default.statSync(n).isDirectory()?this.copyFolder(n,o):this.copyFile(n,o)})}apply(e){let s=I.default.dirname(this.options.manifestPath),r=I.default.join(s,"public"),i=e.options.output?.path||"";L.default.existsSync(r)&&(e.hooks.afterEmit.tap("special-folders:copy-public-folder",()=>{let n=I.default.join(i,"public");L.default.existsSync(n)||L.default.mkdirSync(n,{recursive:!0}),L.default.existsSync(r)&&this.copyFolder(r,n)}),e.options.mode!=="production"&&e.hooks.afterPlugins.tap("special-folders:copy-public-folder",()=>{let n=I.default.join(s,"public"),o=Jo.default.watch(n,{ignoreInitial:!0});o.on("add",c=>{let p=I.default.join(i,I.default.relative(s,c));this.copyFile(c,p)}),o.on("change",c=>{let p=I.default.join(i,I.default.relative(s,c));this.copyFile(c,p)}),o.on("unlink",c=>{let p=I.default.join(i,I.default.relative(s,c));L.default.existsSync(p)&&L.default.unlinkSync(p)}),e.hooks.watchClose.tap("special-folders:copy-public-folder",()=>{o.close().catch(console.error)})}))}};var N=a(require("path")),fr=a(require("chokidar"));var cs=class{manifestPath;constructor(e){this.manifestPath=e}throwCompilationError(e,s,r){let i=N.relative(process.cwd(),s),p=ni(r?"Adding":"Removing",r?"added":"removed",e,e==="pages"?"HTML pages":"script files",i);if(r){console.warn(p);return}console.error(p),process.exit(1)}apply(e){e.hooks.afterPlugins.tap("special-folders:warn-upon-folder-changes",()=>{let s=N.dirname(this.manifestPath),r=N.join(s,"pages"),i=N.join(s,"scripts"),n=fr.watch(r,{ignoreInitial:!0}),o=fr.watch(i,{ignoreInitial:!0}),c=e.options.resolve?.extensions;n.on("add",p=>{p.endsWith(".html")&&this.throwCompilationError("pages",p,!0)}),n.on("unlink",p=>{p.endsWith(".html")&&this.throwCompilationError("pages",p)}),o.on("add",p=>{c?.includes(N.extname(p))&&this.throwCompilationError("scripts",p,!0)}),o.on("unlink",p=>{c?.includes(N.extname(p))&&this.throwCompilationError("scripts",p)}),e.hooks.watchClose.tap("WarnUponFolderChanges",()=>{n.close().catch(console.error),o.close().catch(console.error)})})}};var ps=class{static name="plugin-special-folders";options;constructor(e){this.options=e}apply(e){let{manifestPath:s}=this.options;new as({manifestPath:s}).apply(e),e.options.mode==="development"&&e.options.watchOptions&&new cs(s).apply(e)}};var ls=class{static name="plugin-extension";manifestPath;browser;mode;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.mode=e.mode}apply(e){let s=this.manifestPath,r=Tn({manifestPath:s}),i=Rn({manifestPath:s});new _t({manifestPath:s,includeList:{...i?.pages||{},...i?.scripts||{}},excludeList:i.public,loaderOptions:{jsx:me(Te.default.dirname(this.manifestPath))||X(Te.default.dirname(this.manifestPath))||$e(Te.default.dirname(this.manifestPath)),typescript:R(Te.default.dirname(this.manifestPath)),minify:this.mode==="production"}}).apply(e),new Ot({browser:this.browser,manifestPath:s,includeList:{...r.html,...r.icons,...r.json,...r.scripts},excludeList:i.public}).apply(e),new Ht({manifestPath:s,includeList:{...r.html,...i.pages},excludeList:{...i.public,...i.scripts}}).apply(e),new Zt({manifestPath:s,browser:this.browser,includeList:{...r.scripts,...i.scripts},excludeList:{...i.public,...i.pages}}).apply(e),new Kt({manifestPath:s}).apply(e),new es({manifestPath:s,includeList:r.json,excludeList:i.public}).apply(e),new is({manifestPath:s,includeList:r.icons,excludeList:i.public}).apply(e),new ns({manifestPath:s,includeList:{...r.scripts,...i.scripts},excludeList:i.public}).apply(e),new ps({manifestPath:s}).apply(e)}};var qe=a(require("path"));var zo=a(require("path")),Ho=a(require("ws")),us=a(require("browser-extension-manifest-fields"));function fs(t,e){t.clients.forEach(s=>{s.readyState===Ho.default.OPEN&&s.send(JSON.stringify(e))})}function Vo(t,e,s){if(!s||!e)return;let r=(0,us.default)(e).locales,i=(0,us.default)(e).scripts,n=(0,us.default)(e).json;if(!t){process.env.EXTENSION_ENV==="development"&&console.error("WebSocket server is not running.");return}zo.default.basename(s)==="manifest.json"&&fs(t,{changedFile:"manifest.json"}),r?.forEach(o=>{o.includes(s)&&fs(t,{changedFile:"_locales"})}),Object.entries(i).forEach(([o,c])=>{let p=Array.isArray(c)?c:[c];Object.values(p).flatMap(u=>u).includes(s)&&o==="background/service_worker"&&fs(t,{changedFile:"service_worker"})}),Object.entries(n).forEach(([o,c])=>{c?.includes(s)&&o==="declarative_net_request"&&fs(t,{changedFile:"declarative_net_request"})})}var mr=a(require("path")),Yo=a(require("fs")),Ne=a(require("ws"));var Re=a(require("path")),ol=a(require("http")),Xo=a(require("https")),ur=a(require("fs"));var Go=t=>{if(!ur.default.existsSync(t))return;let e=Re.default.basename(t);return ur.default.readFileSync(Re.default.join(__dirname,"certs",e))};function Zo(t,e){let s={key:Go(Re.default.join(__dirname,"certs","localhost.key")),cert:Go(Re.default.join(__dirname,"certs","localhost.cert"))},r=Xo.default.createServer(s,(i,n)=>{n.writeHead(200),n.end()});return r.on("error",i=>{throw console.error(ui(t,e)),new Error(i.message)}),{server:r,port:e}}function al(t,e,s){switch(s){case"chrome":return new Ne.default.Server({host:"localhost",port:e});case"edge":return new Ne.default.Server({host:"localhost",port:e+1});case"firefox":return new Ne.default.Server({server:Zo(t,e+2).server});default:return new Ne.default.Server({host:"localhost",port:8888})}}async function Ko(t,e){let s=t.options.context||"",r=require(mr.default.join(s,"manifest.json")),i=r.name||"Extension.js",n=e.port||8e3,o=al(i,n,e.browser);if(o.on("connection",c=>{c.send(JSON.stringify({status:"serverReady"})),c.on("error",p=>{console.log(ci(i,p))}),c.on("message",p=>{let l=JSON.parse(p.toString());if(l.status==="clientReady"){let u=require(mr.default.join(s,"manifest.json"));setTimeout(()=>{console.log(Js(u,e.browser,l)),console.log("")},2500),xi(e.browser)&&setTimeout(()=>{console.log(ai(e.browser))},5e3)}})}),e.browser==="firefox"&&!Yo.default.existsSync(Xe)){let c=vi(r);console.log(Js(r,e.browser,c)),console.log(""),console.log(fi()),console.log("")}return o}var Qo=a(require("path")),dr=a(require("fs"));function ea(t,e){let s=Qo.default.resolve(__dirname,`./extensions/${t}-manager-extension/reload-service.js`);try{let r=dr.default.readFileSync(s,"utf8"),i=r.replace(/__RELOAD_PORT__/g,e.toString());i!==r&&dr.default.writeFileSync(s,i,"utf8")}catch(r){console.error(`Error processing file: ${r.message}`)}}process.on("SIGINT",()=>{process.exit()});process.on("SIGTERM",()=>{process.exit()});var Ue=class{manifestPath;port;browser;stats;constructor(e){this.manifestPath=e.manifestPath,this.port=e.port||8e3,this.browser=e.browser||"chrome",this.stats=e.stats}async apply(e){if(!this.manifestPath)return;ea(this.browser,this.port);let s=await Ko(e,{...this,mode:e.options.mode,browser:this.browser,stats:this.stats,port:this.port});e.hooks.watchRun.tapAsync("reload:create-web-socket-server",(r,i)=>{let o=(r.modifiedFiles||new Set).values().next().value;if(!o){i();return}let c=qe.default.relative(qe.default.dirname(this.manifestPath),o),p=qe.default.relative(process.cwd(),qe.default.dirname(o));process.env.EXTENSION_ENV==="development"&&console.info(`\u25BA\u25BA Updated file \`${c}\` (relative to ${p})`),this.manifestPath&&Vo(s,this.manifestPath,o),i()})}};var gr=a(require("path"));function ta(t,e,s){t.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[gr.default.dirname(s)],exclude:/node_modules/,use:[{loader:gr.default.resolve(__dirname,"./inject-chromium-client-loader"),options:{manifestPath:s,browser:e}}]})}var hr=a(require("path"));function sa(t,e,s){t.options.module.rules.push({test:/\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/,include:[hr.default.dirname(s)],exclude:/node_modules/,use:[{loader:hr.default.resolve(__dirname,"./inject-firefox-client-loader"),options:{manifestPath:s,browser:e}}]})}var ds=require("webpack");var yr=a(require("content-security-policy-parser"));function ra(t){let e=t.content_security_policy;if(!e)return"script-src 'self' 'unsafe-eval' blob: filesystem:; object-src 'self' blob: filesystem:; ";let s=(0,yr.default)(e);e="",s.get("script-src")||s.set("script-src",["'self' 'unsafe-eval' blob: filesystem:"]),s.get("script-src")?.includes("'unsafe-eval'")||s.set("script-src",["unsafe-eval"]);for(let r in s)e+=`${r} ${s.get(r)?.join(" ")};`;return e}function ia(t){let e=t.content_security_policy;if(!e)return{extension_pages:"script-src 'self'; object-src 'self'; "};let s=(0,yr.default)(e.extension_pages||""),r="";for(let i in s)r+=`${i} ${s.get(i)?.join(" ")}; `;return{extension_pages:r.trim()}}function na(t){let e=["/*.json","/*.js","/*.css"],s=t.web_accessible_resources;if(!s||s.length===0)return e;let r=new Set(s);for(let i of e)r.has(i)||r.add(i);return Array.from(r)}function oa(t){let e=["/*.json","/*.js","/*.css"];return[...t.web_accessible_resources||[],{resources:e,matches:["<all_urls>"]}]}function br(t,e){return t.background?{background:{...t.background}}:e==="firefox"?{background:{...t.background||{},scripts:["background/script.js"]}}:t.manifest_version===2?{background:{...t.background||{},scripts:["background/script.js"]}}:{background:{...t.background||{},service_worker:"background/service_worker.js"}}}function wr(t){return t.externally_connectable&&!t.externally_connectable.ids?{externally_connectable:{...t.externally_connectable,ids:[...new Set(t.externally_connectable.ids||[]),"*"]}}:t.externally_connectable&&!t.externally_connectable.ids?{externally_connectable:{...t.externally_connectable,ids:["*"]}}:{}}var ms=class{manifestPath;browser;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome"}generateManifestPatches(e){let s=G(e,this.manifestPath),r={...s,content_security_policy:s.manifest_version===3?ia(s):ra(s),...s.manifest_version===3?s.permissions?{permissions:[...new Set(["scripting",...s.permissions])]}:{permissions:["scripting"]}:{},...br(s,this.browser),...wr(s),web_accessible_resources:s.manifest_version===3?oa(s):na(s)},i=JSON.stringify(r,null,2),n=new ds.sources.RawSource(i);e.getAsset("manifest.json")&&e.updateAsset("manifest.json",n)}apply(e){e.hooks.thisCompilation.tap("run-chromium:apply-manifest-dev-defaults",s=>{s.hooks.processAssets.tap({name:"run-chromium:apply-manifest-dev-defaults",stage:ds.Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},r=>{if(!this.manifestPath){let i="No manifest.json found in your extension bundle. Unable to patch manifest.json.";s&&e.webpack.WebpackError&&s.errors.push(new e.webpack.WebpackError(`run-chromium: ${i}`));return}this.generateManifestPatches(s)})})}};var xr=a(require("fs")),we=a(require("path")),aa=a(require("webpack-target-webextension"));var gs=class{manifestPath;browser;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome"}handleBackground(e,s,r){let i=we.default.resolve(__dirname,s==="firefox"?"minimum-firefox-file.mjs":"minimum-chromium-file.mjs"),n=we.default.dirname(this.manifestPath),o=r.background;if(s==="firefox"){o=r["gecko:background"]||r["firefox:background"]||o;let c=o?.scripts||o?.["gecko:scripts"]||o?.["firefox:scripts"];if(c&&c.length>0){let p=we.default.join(n,c[0]);this.ensureFileExists(p,"background.scripts")}else this.addDefaultEntry(e,"background/script",i)}else if(o=r["chromium:background"]||r["chrome:background"]||r["edge:background"]||o,r.manifest_version===3){let c=o?.service_worker||o?.["chromium:service_worker"]||o?.["chrome:service_worker"]||o?.["edge:service_worker"];if(c){let p=we.default.join(n,c);this.ensureFileExists(p,"background.service_worker")}else this.addDefaultEntry(e,"background/service_worker",i)}else if(r.manifest_version===2){let c=o?.scripts||o?.["chromium:scripts"]||o?.["chrome:scripts"]||o?.["edge:scripts"];if(c&&c.length>0){let p=we.default.join(n,c[0]);this.ensureFileExists(p,"background.scripts")}else this.addDefaultEntry(e,"background/script",i)}}ensureFileExists(e,s){if(!xr.default.existsSync(e)&&this.manifestPath){let i=require(this.manifestPath).name||"Extension.js",n=pi(i,s,e);throw console.error(n),new Error(n)}}addDefaultEntry(e,s,r){e.options.entry={...e.options.entry,[s]:{import:[r]}}}getEntryName(e){if(e.background){if(e.manifest_version===3)return{serviceWorkerEntry:"background/service_worker"};if(e.manifest_version===2)return{pageEntry:"background/script"}}return{pageEntry:"background"}}apply(e){if(!this.manifestPath||!xr.default.lstatSync(this.manifestPath).isFile())return;let s=require(this.manifestPath);this.handleBackground(e,this.browser,s),new aa.default({background:this.getEntryName(s),weakRuntimeCheck:!0}).apply(e)}};var vr=class{manifestPath;browser;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome"}apply(e){Se.includes(this.browser)&&ta(e,this.browser,this.manifestPath),this.browser==="firefox"&&sa(e,this.browser,this.manifestPath),new ms({manifestPath:this.manifestPath,browser:this.browser}).apply(e),new gs({manifestPath:this.manifestPath,browser:this.browser}).apply(e)}},ca=vr;var hs=class{static name="plugin-reload";manifestPath;browser;port;stats;autoReload;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.port=e.port,this.stats=e.stats,this.autoReload=e.autoReload}apply(e){e.options.mode==="development"&&new Ue({manifestPath:this.manifestPath,browser:this.browser,port:this.port,stats:this.stats}).apply(e),e.options.mode==="development"&&new ca({manifestPath:this.manifestPath,browser:this.browser,autoReload:this.autoReload,stats:this.stats}).apply(e)}};var pa=a(require("webpack")),ys=class{manifestPath;browser;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser}apply(e){new pa.default.ProvidePlugin({browser:require.resolve("webextension-polyfill")}).apply(e)}};var ws=require("webpack");var bs=class{browser;manifestPath;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome"}patchManifest(e){let s=it(e,this.browser);return JSON.stringify(s,null,2)}apply(e){e.hooks.compilation.tap("compatibility:browser-fields",s=>{s.hooks.processAssets.tap({name:"compatibility:browser-fields",stage:ws.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE},()=>{let r=G(s,this.manifestPath),i=this.patchManifest(r),n=new ws.sources.RawSource(i);s.updateAsset("manifest.json",n)})})}};var xs=class{static name="plugin-compatibility";manifestPath;browser;polyfill;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome",this.polyfill=e.polyfill||!1}async apply(e){this.polyfill&&this.browser!=="firefox"&&new ys({manifestPath:this.manifestPath,browser:this.browser||"chrome"}).apply(e),new bs({manifestPath:this.manifestPath,browser:this.browser||"chrome"}).apply(e)}};var xa=a(require("fs"));var la=a(require("webpack")),fa=a(require("content-security-policy-parser"));function ua(t){let e=t.content_security_policy,s=t.content_security_policy?.extension_pages,r=i=>{if(!i)return;let n=(0,fa.default)(i);if(n.get("script-src")&&n.get("script-src")?.includes("'unsafe-eval'")){let o=t.name||"Extension.js";return Vr(o)}};if(t.manifest_version===3){let i=e?r(s):void 0;if(i)return new la.default.WebpackError(i)}return null}var _r=a(require("webpack"));function ma(t,e){let s=t.web_accessible_resources;if(s){let r=s.some(o=>typeof o=="string"),i=s.some(o=>typeof o=="object"||o.resources||o.matches),n=t.name||"Extension.js";if(t.manifest_version===2&&!r)return new _r.default.WebpackError(Xr(n,e));if(t.manifest_version===3&&!i)return new _r.default.WebpackError(Zr(n,e))}return null}var da=a(require("webpack"));function ga(t,e){if(e==="firefox"&&t.background?.service_worker){let s=t.name||"Extension.js";return new da.default.WebpackError(Hr(s))}return null}var ha=a(require("path")),ya=a(require("fs")),ba=a(require("webpack"));function wa(t,e){let s=ha.default.join(e.options.context||"","_locales"),r=t.name||"Extension.js";return ya.default.existsSync(s)&&!t.default_locale?new ba.default.WebpackError(Gr(r)):null}var vs=class{options;constructor(e){this.options=e}handleRuntimeErrors(e,s,r){let i=ua(s),n=ma(s,r),o=ga(s,r),c=wa(s,e);i&&e.errors.push(i),n&&e.errors.push(n),o&&e.options.mode==="production"&&e.errors.push(o),c&&e.errors.push(c)}apply(e){e.hooks.afterCompile.tapAsync("CompatPlugin (module)",(s,r)=>{let i=this.options.manifestPath,n=JSON.parse(xa.default.readFileSync(i,"utf-8")),o=this.options.browser||"chrome";this.handleRuntimeErrors(s,n,o),r()})}};var Fa=a(require("fs")),La=a(require("ajv"));var va={$schema:"http://json-schema.org/draft-07/schema#",$id:"https://json.schemastore.org/chrome-manifest.json",additionalProperties:!0,definitions:{action_v2:{type:"object",properties:{default_title:{type:"string",description:"Tooltip for the main toolbar icon."},default_popup:{$ref:"#/definitions/uri",description:"The popup appears when the user clicks the icon."},default_icon:{anyOf:[{type:"string",description:"FIXME: String form is deprecated."},{type:"object",description:"Icon for the main toolbar.",properties:{"19":{$ref:"#/definitions/icon"},"38":{$ref:"#/definitions/icon"}}}]}},dependencies:{name:{not:{required:["name"]}},icons:{not:{required:["icons"]}},popup:{not:{required:["popup"]}}}},action_v3:{type:"object",properties:{default_title:{type:"string",description:"Tooltip for the main toolbar icon."},default_popup:{$ref:"#/definitions/uri",description:"The popup appears when the user clicks the icon."},default_icon:{type:"object",properties:{"16":{$ref:"#/definitions/icon"},"24":{$ref:"#/definitions/icon"},"32":{$ref:"#/definitions/icon"}}}},dependencies:{name:{not:{required:["name"]}},icons:{not:{required:["icons"]}},popup:{not:{required:["popup"]}}}},command:{type:"object",if:{$comment:"Global shortcuts change the acceptable pattern for the suggested_key.",properties:{global:{const:!0}},required:["global"]},then:{additionalProperties:!1,properties:{description:{type:"string"},global:{type:"boolean",description:"Whether this command should work while Chrome does not have focus. Keyboard shortcut suggestions for global commands are limited to Ctrl+Shift+[0..9]"},suggested_key:{type:"object",additionalProperties:!1,patternProperties:{"^(default|mac|windows|linux|chromeos)$":{type:"string",pattern:"^(Ctrl|Command|MacCtrl)\\+Shift\\+[0-9]"}}}}},else:{additionalProperties:!1,properties:{description:{type:"string"},global:{type:"boolean",description:"Whether this command should work while Chrome does not have focus. Keyboard shortcut suggestions for global commands are limited to Ctrl+Shift+[0..9]"},suggested_key:{type:"object",additionalProperties:!1,patternProperties:{"^(default|mac|windows|linux|chromeos)$":{type:"string",pattern:"^(Ctrl|Command|MacCtrl|Alt|Option)\\+(Shift\\+)?[A-Z]"}}}}}},content_security_policy:{type:"string",description:"This introduces some fairly strict policies that will make extensions more secure by default, and provides you with the ability to create and enforce rules governing the types of content that can be loaded and executed by your extensions and applications.",format:"content-security-policy",default:"script-src 'self'; object-src 'self'"},glob_pattern:{type:"string",format:"glob-pattern"},icon:{$ref:"#/definitions/uri"},match_pattern:{type:"string",format:"match-pattern",pattern:"^((\\*|http|https|file|ftp|chrome-extension):\\/\\/(\\*|\\*\\.[^\\/\\*]+|[^\\/\\*]+)?(\\/.*))|urn:(\\*|.*)|<all_urls>$"},mime_type:{type:"string",format:"mime-type",pattern:"^(?:application|audio|image|message|model|multipart|text|video)\\/[-+.\\w]+$"},page:{$ref:"#/definitions/uri"},permissions:{type:"array",uniqueItems:!0,items:{type:"string",format:"permission"}},scripts:{type:"array",minItems:1,uniqueItems:!0,items:{$ref:"#/definitions/uri"}},uri:{type:"string"},version_string:{type:"string",pattern:"^(?:\\d{1,5}\\.){0,3}\\d{1,5}$"},web_resource:{type:"object",required:["resources"],properties:{resources:{type:"array",description:`An array of resources to be exposed. Resources are specified as strings and may contain * for wildcard matches. For example, "/images/*" exposes everything in the extension's /images directory recursively while "*.png" exposes all PNG files.`,items:{$ref:"#/definitions/glob_pattern"}},matches:{type:"array",description:"A list of URL match patterns specifying which pages can access the resources. Only the origin is used to match URLs; subdomains patterns (*.google.com) and paths are ignored.",items:{$ref:"#/definitions/match_pattern"}},extension_ids:{type:"array",description:"A list of extension IDs, specifying which extensions can access the resources.",items:{type:"string"}},use_dynamic_url:{type:"boolean",description:"If true, only allow resources to be accessible through dynamic ID. The dynamic ID is generated per session. It's regenerated on browser restart or extension reload."}}}},dependencies:{content_scripts:{not:{required:["script_badge"]}},script_badge:{not:{required:["content_scripts"]}}},else:{properties:{background:{type:"object",description:"The background page is an HTML page that runs in the extension process. It exists for the lifetime of your extension, and only one instance of it at a time is active.",properties:{persistent:{type:"boolean",description:"When false, makes the background page an event page (loaded only when needed).",default:!0},page:{$ref:"#/definitions/page",description:"Specify the HTML of the background page.",default:"background.html"},scripts:{$ref:"#/definitions/scripts",description:"A background page will be generated by the extension system that includes each of the files listed in the scripts property.",default:["background.js"]}},dependencies:{page:{not:{required:["scripts"]}},scripts:{not:{required:["page"]}}}},browser_action:{$ref:"#/definitions/action_v2",description:"Use browser actions to put icons in the main Google Chrome toolbar, to the right of the address bar. In addition to its icon, a browser action can also have a tooltip, a badge, and a popup."},page_action:{$ref:"#/definitions/action_v2",description:"Use the chrome.pageAction API to put icons inside the address bar. Page actions represent actions that can be taken on the current page, but that aren't applicable to all pages."},content_security_policy:{$ref:"#/definitions/content_security_policy"},web_accessible_resources:{type:"array",description:"An array of strings specifying the paths (relative to the package root) of packaged resources that are expected to be usable in the context of a web page.",minItems:1,uniqueItems:!0,items:{$ref:"#/definitions/uri"}}},dependencies:{page_action:{not:{required:["browser_action"]}},browser_action:{not:{required:["page_action"]}}}},if:{properties:{manifest_version:{const:3}}},properties:{manifest_version:{type:"number",description:"One integer specifying the version of the manifest file format your package requires.",enum:[2,3]},name:{type:"string",description:"The name of the extension",maxLength:45},version:{$ref:"#/definitions/version_string",description:"One to four dot-separated integers identifying the version of this extension."},default_locale:{type:"string",description:"Specifies the subdirectory of _locales that contains the default strings for this extension.",default:"en"},description:{type:"string",description:"A plain text description of the extension",maxLength:132},icons:{type:"object",description:"One or more icons that represent the extension, app, or theme. Recommended format: PNG; also BMP, GIF, ICO, JPEG.",minProperties:1,properties:{"16":{$ref:"#/definitions/icon",description:"Used as the favicon for an extension's pages and infobar."},"48":{$ref:"#/definitions/icon",description:"Used on the extension management page (chrome://extensions)."},"128":{$ref:"#/definitions/icon",description:"Used during installation and in the Chrome Web Store."},"256":{$ref:"#/definitions/icon",description:"Used during installation and in the Chrome Web Store."}}},chrome_url_overrides:{type:"object",description:"Override pages are a way to substitute an HTML file from your extension for a page that Google Chrome normally provides.",additionalProperties:!1,maxProperties:1,properties:{bookmarks:{$ref:"#/definitions/page",description:"The page that appears when the user chooses the Bookmark Manager menu item from the Chrome menu or, on Mac, the Bookmark Manager item from the Bookmarks menu. You can also get to this page by entering the URL chrome://bookmarks.",default:"bookmarks.html"},history:{$ref:"#/definitions/page",description:"The page that appears when the user chooses the History menu item from the Chrome menu or, on Mac, the Show Full History item from the History menu. You can also get to this page by entering the URL chrome://history.",default:"history.html"},newtab:{$ref:"#/definitions/page",description:"The page that appears when the user creates a new tab or window. You can also get to this page by entering the URL chrome://newtab.",default:"newtab.html"}}},commands:{type:"object",description:"Use the commands API to add keyboard shortcuts that trigger actions in your extension, for example, an action to open the browser action or send a command to the extension.",patternProperties:{".*":{$ref:"#/definitions/command"},"^_execute_browser_action$":{$ref:"#/definitions/command"},"^_execute_page_action$":{$ref:"#/definitions/command"}}},content_scripts:{type:"array",description:"Content scripts are JavaScript files that run in the context of web pages.",minItems:1,uniqueItems:!0,items:{type:"object",required:["matches"],additionalProperties:!1,properties:{matches:{type:"array",description:"Specifies which pages this content script will be injected into.",minItems:1,uniqueItems:!0,items:{$ref:"#/definitions/match_pattern"}},exclude_matches:{type:"array",description:"Excludes pages that this content script would otherwise be injected into.",uniqueItems:!0,items:{$ref:"#/definitions/match_pattern"}},css:{type:"array",description:"The list of CSS files to be injected into matching pages. These are injected in the order they appear in this array, before any DOM is constructed or displayed for the page.",uniqueItems:!0,items:{$ref:"#/definitions/uri"}},js:{$ref:"#/definitions/scripts",description:"The list of JavaScript files to be injected into matching pages. These are injected in the order they appear in this array."},world:{type:"string",description:"The JavaScript world for a script to execute within.",enum:["ISOLATED","MAIN"],default:"ISOLATED"},run_at:{type:"string",description:"Controls when the files in js are injected.",enum:["document_start","document_end","document_idle"],default:"document_idle"},all_frames:{type:"boolean",description:"Controls whether the content script runs in all frames of the matching page, or only the top frame.",default:!1},include_globs:{type:"array",description:"Applied after matches to include only those URLs that also match this glob. Intended to emulate the @include Greasemonkey keyword.",uniqueItems:!0,items:{$ref:"#/definitions/glob_pattern"}},exclude_globs:{type:"array",description:"Applied after matches to exclude URLs that match this glob. Intended to emulate the @exclude Greasemonkey keyword.",uniqueItems:!0,items:{$ref:"#/definitions/glob_pattern"}},match_about_blank:{type:"boolean",description:"Whether to insert the content script on about:blank and about:srcdoc.",default:!1}}}},devtools_page:{$ref:"#/definitions/page",description:"A DevTools extension adds functionality to the Chrome DevTools. It can add new UI panels and sidebars, interact with the inspected page, get information about network requests, and more."},externally_connectable:{description:"Declares which extensions, apps, and web pages can connect to your extension via runtime.connect and runtime.sendMessage.",type:"object",additionalProperties:!1,properties:{ids:{type:"array",items:{type:"string",description:"The IDs of extensions or apps that are allowed to connect. If left empty or unspecified, no extensions or apps can connect."}},matches:{type:"array",items:{type:"string",description:"The URL patterns for web pages that are allowed to connect. This does not affect content scripts. If left empty or unspecified, no web pages can connect."}},accepts_tls_channel_id:{type:"boolean",default:!1,description:"Indicates that the extension would like to make use of the TLS channel ID of the web page connecting to it. The web page must also opt to send the TLS channel ID to the extension via setting includeTlsChannelId to true in runtime.connect's connectInfo or runtime.sendMessage's options."}}},file_browser_handlers:{type:"array",description:"You can use this API to enable users to upload files to your website.",minItems:1,items:{type:"object",required:["id","default_title","file_filters"],additionalProperties:!1,properties:{id:{type:"string",description:"Used by event handling code to differentiate between multiple file handlers"},default_title:{type:"string",description:"What the button will display."},file_filters:{type:"array",description:"Filetypes to match.",minItems:1,items:{type:"string"}}}}},homepage_url:{$ref:"#/definitions/uri",description:"The URL of the homepage for this extension."},incognito:{type:"string",description:"Specify how this extension will behave if allowed to run in incognito mode.",enum:["spanning","split","not_allowed"],default:"spanning"},input_components:{type:"array",description:"Allows your extension to handle keystrokes, set the composition, and manage the candidate window.",items:{type:"object",required:["name","type","id","description","language","layouts"],additionalProperties:!1,properties:{name:{type:"string"},type:{type:"string"},id:{type:"string"},description:{type:"string"},language:{type:"string"},layouts:{type:"array"}}}},key:{type:"string",description:"This value can be used to control the unique ID of an extension, app, or theme when it is loaded during development."},minimum_chrome_version:{$ref:"#/definitions/version_string",description:"The version of Chrome that your extension, app, or theme requires, if any."},nacl_modules:{type:"array",description:"One or more mappings from MIME types to the Native Client module that handles each type.",minItems:1,uniqueItems:!0,items:{type:"object",required:["path","mime_type"],additionalProperties:!1,properties:{path:{$ref:"#/definitions/uri",description:"The location of a Native Client manifest (a .nmf file) within the extension directory."},mime_type:{$ref:"#/definitions/mime_type",description:"The MIME type for which the Native Client module will be registered as content handler."}}}},oauth2:{type:"object",description:"Use the Chrome Identity API to authenticate users: the getAuthToken for users logged into their Google Account and the launchWebAuthFlow for users logged into a non-Google account.",required:["client_id","scopes"],additionalProperties:!1,properties:{client_id:{type:"string",description:"You need to register your app in the Google APIs Console to get the client ID."},scopes:{type:"array",minItems:1,items:{type:"string"}}}},offline_enabled:{type:"boolean",description:"Whether the app or extension is expected to work offline. When Chrome detects that it is offline, apps with this field set to true will be highlighted on the New Tab page."},omnibox:{type:"object",description:"The omnibox API allows you to register a keyword with Google Chrome's address bar, which is also known as the omnibox.",required:["keyword"],additionalProperties:!1,properties:{keyword:{type:"string",description:"The keyword that will trigger your extension."}}},optional_permissions:{$ref:"#/definitions/permissions",description:"Use the chrome.permissions API to request declared optional permissions at run time rather than install time, so users understand why the permissions are needed and grant only those that are necessary."},options_page:{$ref:"#/definitions/page",description:"To allow users to customize the behavior of your extension, you may wish to provide an options page. If you do, a link to it will be provided from the extensions management page at chrome://extensions. Clicking the Options link opens a new tab pointing at your options page.",default:"options.html"},options_ui:{type:"object",description:"To allow users to customize the behavior of your extension, you may wish to provide an options page. If you do, an Options link will be shown on the extensions management page at chrome://extensions which opens a dialogue containing your options page.",required:["page"],properties:{page:{type:"string",description:"The path to your options page, relative to your extension's root."},chrome_style:{type:"boolean",default:!0,description:"If true, a Chrome user agent stylesheet will be applied to your options page. The default value is false, but we recommend you enable it for a consistent UI with Chrome."},open_in_tab:{type:"boolean",default:!1,description:"If true, your extension's options page will be opened in a new tab rather than embedded in chrome://extensions. The default is false, and we recommend that you don't change it. This is only useful to delay the inevitable deprecation of the old options UI! It will be removed soon, so try not to use it. It will break."}}},permissions:{$ref:"#/definitions/permissions",description:"Permissions help to limit damage if your extension or app is compromised by malware. Some permissions are also displayed to users before installation, as detailed in Permission Warnings."},requirements:{type:"object",description:"Technologies required by the app or extension. Hosting sites such as the Chrome Web Store may use this list to dissuade users from installing apps or extensions that will not work on their computer.",additionalProperties:!1,properties:{plugins:{type:"object",description:"Indicates if an app or extension requires NPAPI to run. This requirement is enabled by default when the manifest includes the 'plugins' field.",required:["npapi"],additionalProperties:!1,properties:{npapi:{type:"boolean",default:!0}}},"3D":{type:"object",description:"The '3D' requirement denotes GPU hardware acceleration.",required:["features"],additionalProperties:!1,properties:{features:{type:"array",description:"List of the 3D-related features your app requires.",minItems:1,uniqueItems:!0,items:{type:"string",enum:["webgl"]}}}}}},sandbox:{type:"object",description:"Defines an collection of app or extension pages that are to be served in a sandboxed unique origin, and optionally a Content Security Policy to use with them.",required:["pages"],additionalProperties:!1,properties:{pages:{type:"array",minItems:1,uniqueItems:!0,items:{$ref:"#/definitions/page"}},content_security_policy:{$ref:"#/definitions/content_security_policy",default:"sandbox allow-scripts allow-forms"}}},short_name:{type:"string",description:"The short name is typically used where there is insufficient space to display the full name.",maxLength:12},update_url:{$ref:"#/definitions/uri",description:"If you publish using the Chrome Developer Dashboard, ignore this field. If you host your own extension or app: URL to an update manifest XML file."},tts_engine:{type:"object",description:"Register itself as a speech engine.",required:["voices"],additionalProperties:!1,properties:{voices:{type:"array",description:"Voices the extension can synthesize.",minItems:1,uniqueItems:!0,items:{type:"object",required:["voice_name","event_types"],additionalProperties:!1,properties:{voice_name:{type:"string",description:"Identifies the name of the voice and the engine used."},lang:{type:"string",description:"Almost always, a voice can synthesize speech in just a single language. When an engine supports more than one language, it can easily register a separate voice for each language."},gender:{type:"string",description:"If your voice corresponds to a male or female voice, you can use this parameter to help clients choose the most appropriate voice for their application."},event_types:{type:"array",description:"Events sent to update the client on the progress of speech synthesis.",minItems:1,uniqueItems:!0,items:{type:"string",description:"",enum:["start","word","sentence","marker","end","error"]}}}}}}},version_name:{type:"string",description:"In addition to the version field, which is used for update purposes, version_name can be set to a descriptive version string and will be used for display purposes if present."},chrome_settings_overrides:{},content_pack:{},current_locale:{},import:{},platforms:{},signature:{},spellcheck:{},storage:{},system_indicator:{}},required:["manifest_version","name","version"],then:{$comment:"browser_action and page_action are no longer present in v3",properties:{background:{type:"object",description:"The background page is an HTML page that runs in the extension process. It exists for the lifetime of your extension, and only one instance of it at a time is active.",properties:{service_worker:{type:"string",description:"The service worker js file."},type:{type:"string",enum:["module"]}},dependencies:{page:{not:{required:["scripts"]}},scripts:{not:{required:["page"]}}}},host_permissions:{$ref:"#/definitions/permissions"},action:{$ref:"#/definitions/action_v3",description:"Used to control the toolbar button for your extension in Chrome's UI."},content_security_policy:{type:"object",properties:{extension_pages:{$ref:"#/definitions/content_security_policy",description:"This policy covers pages in your extension, including html files and service workers."},sandbox:{$ref:"#/definitions/content_security_policy",description:"This policy covers any sandboxed extension pages that your extension uses."}}},web_accessible_resources:{type:"array",description:"An array of objects that declare resource access rules. Each object maps an array of extension resources to an array of URLs and/or extension IDs that can access those resources.",minItems:1,uniqueItems:!0,items:{$ref:"#/definitions/web_resource"}}},dependencies:{browser_action:{not:{required:["browser_action"]}},page_action:{not:{required:["page_action"]}}}},title:"JSON schema for Google Chrome extension manifest files",type:"object"};function _a(t){t.addFormat("permission",{type:"string",validate:e=>typeof e=="string"&&e.trim()!==""}),t.addFormat("content-security-policy",{type:"string",validate:e=>typeof e=="string"}),t.addFormat("glob-pattern",{type:"string",validate:e=>typeof e=="string"&&/[\*\?\[\]]/.test(e)}),t.addFormat("match-pattern",{type:"string",validate:e=>e==="<all_urls>"||e==="file:///"||e.startsWith("http://localhost")||e.startsWith("http:// ")||e.startsWith("http://*:*/*")?!0:typeof e=="string"&&/^(\*|http|https|file|ftp):\/\//.test(e)}),t.addFormat("uri",{type:"string",validate:e=>typeof e=="string"&&/^(\w+:)?\/\//.test(e)}),t.addFormat("mime-type",{type:"string",validate:e=>typeof e=="string"&&/^[a-z]+\/[a-z0-9\-\+]+$/.test(e)})}var Sa=a(require("path")),Pa=require("webpack");function ka(t,e,s){let r=t.options.context||"",i=Sa.default.join(r,"manifest.json"),o=require(i).name||"Extension.js",c=e?.params.missingProperty;t.errors.push(new Pa.WebpackError(Qr(o,s,c)))}var Ea=a(require("path")),ja=require("webpack");function $a(t,e,s){let r=t.options.context||"",i=Ea.default.join(r,"manifest.json"),o=require(i).name||"Extension.js";t.warnings.push(new ja.WebpackError(Kr(o,e,s)))}var Ca=a(require("path")),Da=require("webpack");function Sr(t,e,s){let r=t.options.context||"",i=Ca.default.join(r,"manifest.json"),o=require(i).name||"Extension.js";t.warnings.push(new Da.WebpackError(Yr(o,s,e)))}var _s=class{options;constructor(e){this.options=e}handleSchemaErrors(e,s,r){let i=new La.default;_a(i);let n={allOf:[va]},o=i.compile(n),c=o(s),p=s.manifest_version===3;if(!c&&o.errors){let l=o.errors[0];if(l?.keyword==="required"){ka(e,l,r);return}p&&(l?.keyword==="type"&&$a(e,l,r),l?.keyword==="not"&&Sr(e,l,r))}}apply(e){e.hooks.afterCompile.tapAsync("CompatPlugin (module)",(s,r)=>{let i=this.options.manifestPath,n=JSON.parse(Fa.default.readFileSync(i,"utf-8")),o=this.options.browser||"chrome";this.handleSchemaErrors(s,n,o),r()})}};var Aa=a(require("fs")),kr=a(require("path"));var Pr=a(require("webpack"));function Ia(t,e){let s="Conflict: Multiple assets emit different content to the same filename ";if(e.message.includes(s)){let r=e.message.replace(s,"");if(r.startsWith("content_scripts"))return new Pr.default.WebpackError(ei(t,r))}return null}function Oa(t,e){let s=require(t);return e.message.includes("Top-level-await is only supported in EcmaScript Modules")?new Pr.default.WebpackError(ti(s.name)):null}var Ss=class{manifestPath;constructor(e){this.manifestPath=e.manifestPath}apply(e){let s=kr.default.join(kr.default.dirname(this.manifestPath),"package.json");if(!Aa.default.existsSync(s))return;let r=require(s).name;e.hooks.compilation.tap("develop:common-errors",i=>{i.hooks.afterSeal.tapAsync("develop:common-errors",n=>{i.errors.forEach((o,c)=>{let p=Ia(r,o),l=Oa(r,o);p&&(i.errors[c]=p),l&&(i.errors[c]=l)}),n()})})}};var Ps=class{static name="plugin-errors";manifestPath;browser;constructor(e){this.manifestPath=e.manifestPath,this.browser=e.browser||"chrome"}apply(e){new vs({manifestPath:this.manifestPath,browser:this.browser||"chrome"}).apply(e),new _s({manifestPath:this.manifestPath,browser:this.browser||"chrome"}).apply(e),new Ss({manifestPath:this.manifestPath}).apply(e)}};var vc=a(require("os")),jr=a(require("path"));var ic=a(require("fs")),nc=require("child_process");var re=a(require("path")),Cs=a(require("fs"));var Ma={alternate_error_pages:{enabled:!1},autofill:{enabled:!1},browser:{check_default_browser:!1,default_browser_setting_enabled:!1},default_apps:"install",distribution:{alternate_shortcut_text:!1,auto_launch_chrome:!1,import_bookmarks:!1,import_history:!1,import_home_page:!1,import_search_engine:!1,suppress_first_run_bubble:!0,do_not_register_for_update_launch:!0,make_chrome_default:!1,make_chrome_default_for_user:!1,require_eula:!1,suppress_first_run_default_browser_prompt:!0},dns_prefetching:{enabled:!1},download:{default_directory:"/tmp/",directory_upgrade:!0,open_pdf_in_adobe_reader:!1,prompt_for_download:!0},enable_do_not_track:!0,extensions:{theme:{use_system:!1},toolbarsize:-1,ui:{developer_mode:!0}},plugins:{plugins_list:[{enabled:!1,name:"Java(TM)"}],show_details:!0},profile:{password_manager_enabled:!1},safebrowsing:{enabled:!1,safebrowsingextended_reporting_enabled:!1},savefile:{default_directory:"/tmp",type:0},search:{suggest_enabled:!1},session:{restore_on_startup:1},sync:{suppress_start:!0},sync_promo:{show_on_first_run_allowed:!1,show_ntp_bubble:!1},translate:{enabled:!1}},Ta={...Ma},Ra={...Ma};var x=require("@colors/colors/safe");function j(t,e){let s=e==="warn"?(0,x.brightYellow)("\u25BA\u25BA\u25BA"):e==="info"?(0,x.cyan)("\u25BA\u25BA\u25BA"):e==="error"?(0,x.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E"):(0,x.brightGreen)("\u25BA\u25BA\u25BA");return`${(0,x.gray)("")}${s}`}function We(t){return t.charAt(0).toUpperCase()+t.slice(1)}function ks(t,e){let s=t==="firefox"?"Add-on":"Extension";return`${j(t,"success")} ${We(t)} ${s} running in ${(0,x.cyan)(e||"unknown")} mode.`}function Es(t,e){let s=We(t),r=e=="null"?`${s} browser is not installed.
|
|
128
128
|
|
|
129
129
|
`:`Path to ${s} browser is not found.
|
|
130
130
|
|
|
131
131
|
${(0,x.red)("NOT FOUND")} ${(0,x.underline)(e)}
|
|
132
132
|
|
|
133
|
-
`;return`${j(t,"error")} ${r}Either install the ${s} or choose a different browser via ${(0,x.brightYellow)("--browser")} flag.`}function
|
|
133
|
+
`;return`${j(t,"error")} ${r}Either install the ${s} or choose a different browser via ${(0,x.brightYellow)("--browser")} flag.`}function js(t){let e=We(t);return`${j(t,"info")} Creating new ${e} user profile...`}function Na(t){return`${j(t,"success")} Instance already running.`}function qa(t){return`${j(t,"info")} Instance exited.`}function Ua(t){return`${j(t,"error")} No Service Worker Support
|
|
134
134
|
|
|
135
135
|
Firefox does not support the ${(0,x.brightYellow)("background.service_worker")} field yet.
|
|
136
136
|
Update your manifest.json file to use ${(0,x.brightYellow)("background.scripts")} instead.
|
|
@@ -141,14 +141,14 @@ ${(0,x.red)(e)}`}function Ba(t,e){return`${j(t,"error")} ${(0,x.red)(e.stack)}`}
|
|
|
141
141
|
|
|
142
142
|
${(0,x.gray)("PATH")} ${(0,x.underline)(e)}
|
|
143
143
|
|
|
144
|
-
Please provide a valid directory path.`}function Va(t){return`${j(t,"error")} Error parsing message length.`}function Ga(t){return`${j(t,"error")} MessagingClient connection closed.`}function Xa(t,e){return`${j(t,"error")} Unexpected MessagingClient request without target actor: ${(0,x.brightYellow)(e)}`}function Za(t){return`${j(t,"error")} MessagingClient connection closed.`}function Ya(t,e){return`${j(t,"error")} Target actor ${(0,x.brightYellow)(e)} already has an active request.`}function Ka(t,e){return`${j(t,"error")} Error parsing packet: ${(0,x.red)(e)}`}function Qa(t,e){return`${j(t,"error")} Message received without a sender actor: ${(0,x.brightYellow)(JSON.stringify(e))}`}function ec(t,e){return`${j(t,"error")} Received unexpected message: ${(0,x.red)(e)}`}var tc=a(require("progress"));function Cs(t,e){let r=new tc.default(`${t} [:bar] :percent :etas`,{complete:"=",incomplete:" ",width:50,total:131072}),i=setInterval(()=>{let n=Math.random()*10*1024;r.tick(n),r.complete&&(clearInterval(i),e())},50)}function sc(t,e,s){if(Ds.default.existsSync(re.default.resolve(__dirname,`run-${t}-profile`)))return e||re.default.resolve(__dirname,`run-${t}-profile`);let i=JSON.stringify(t==="chrome"?Ta:Ra);return s||Cs($s(t),()=>{let n=re.default.resolve(__dirname,`run-${t}-profile`),o=re.default.join(n,"Default");Ds.default.mkdirSync(o,{recursive:!0});let c=re.default.join(o,"Preferences");Ds.default.writeFileSync(c,i,"utf8")}),re.default.resolve(__dirname,`run-${t}-profile`)}function rc(t){let e=Array.isArray(t.extension)?t.extension:[t.extension],s=sc(t.browser,t.profile,!1);return[`--load-extension=${e.join()}`,`--user-data-dir=${s}`,"--no-first-run","--disable-client-side-phishing-detection","--disable-component-extensions-with-background-pages","--disable-default-apps","--disable-features=InterestFeedContentSuggestions","--disable-features=Translate","--hide-scrollbars","--mute-audio","--no-default-browser-check","--no-first-run","--ash-no-nudges","--disable-search-engine-choice-screen","--disable-features=MediaRoute","--use-mock-keychain","--disable-background-networking","--disable-breakpad","--disable-component-update","--disable-domain-reliability","--disable-features=AutofillServerCommunicatio","--disable-features=CertificateTransparencyComponentUpdate","--disable-sync","--disable-features=OptimizationHints","--disable-features=DialMediaRouteProvider","--no-pings","--enable-features=SidePanelUpdates",...t.browserFlags||[]]}process.on("SIGINT",()=>{process.exit()});process.on("SIGTERM",()=>{process.exit()});var ve=class{extension;browser;browserFlags;userDataDir;profile;preferences;startingUrl;autoReload;stats;constructor(e){this.extension=e.extension,this.browser=e.browser,this.browserFlags=e.browserFlags||[],this.userDataDir=e.userDataDir,this.profile=e.profile||e.userDataDir,this.preferences=e.preferences,this.startingUrl=e.startingUrl}launchChromium(e){let s;switch(e){case"chrome":s=require(`${e}-location`);break;case"edge":s=require(`${e}-location`)();break;default:s=require(`${e}`);break}ic.default.existsSync(s)||(console.error(js(e,s)),process.exit());let r=rc(this),i=this.startingUrl?[this.startingUrl,...r]:[...r],n=process.env.EXTENSION_ENV==="development"?"inherit":"ignore",o=(0,nc.spawn)(s,i,{stdio:n});process.env.EXTENSION_ENV==="development"&&(o.stdout?.pipe(process.stdout),o.stderr?.pipe(process.stderr))}apply(e){let s=!1;e.hooks.done.tapAsync("run-browsers:module",(r,i)=>{if(r.compilation.errors.length>0){i();return}if(s){i();return}this.launchChromium(this.browser),setTimeout(()=>{console.log(Es(this.browser,r.compilation.options.mode))},2e3),s=!0,i()})}};var wc=a(require("fs")),xc=require("child_process");var Be=a(require("fs")),Fs=a(require("path")),oc=a(require("os")),ac=a(require("which")),cc=process.platform==="darwin",pl=process.platform==="win32",ll=!cc&&!pl;function fl(){if(ll)try{return ac.default.sync("firefox")}catch{return null}else if(cc){let t="/Applications/Firefox.app/Contents/MacOS/firefox",e=Fs.default.join(oc.default.homedir(),t.slice(1));return Be.default.existsSync(t)?t:Be.default.existsSync(e)?e:null}else{let t=Fs.default.join("Mozilla Firefox","firefox.exe"),e=[process.env.LOCALAPPDATA,process.env.PROGRAMFILES,process.env["PROGRAMFILES(X86)"]];for(let r of e)if(r){let i=Fs.default.join(r,t);if(Be.default.existsSync(i))return i}let s=["C:\\Program Files\\Mozilla Firefox\\firefox.exe","C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"];for(let r of s)if(Be.default.existsSync(r))return r;return null}}var Ls=fl();var lc=a(require("path")),Is=a(require("fs")),jr=a(require("firefox-profile"));var ul={"app.update.enabled":!1,"browser.dom.window.dump.enabled":!0,"browser.formfill.enable":!1,"browser.link.open_newwindow":3,"browser.sessionstore.enabled":!1,"browser.shell.checkDefaultBrowser":!1,"browser.sync.enabled":!1,"browser.startup.page":0,"browser.startup.homepage_welcome_url":"about:blank","browser.startup.homepage_welcome_url_additional":"about:blank","browser.urlbar.suggest.bookmark":!1,"browser.urlbar.suggest.clipboard":!1,"browser.urlbar.suggest.history":!1,"browser.urlbar.suggest.openpage":!1,"browser.urlbar.suggest.remotetab":!1,"browser.urlbar.suggest.searches":!1,"browser.urlbar.suggest.topsites":!1,"browser.urlbar.suggest.engines":!1,"browser.urlbar.suggest.calculator":!1,"browser.urlbar.suggest.recentsearches":!1,"datareporting.policy.dataSubmissionEnabled":!1,"datareporting.policy.firstRunURL":"","devtools.browserconsole.contentMessages":!0,"devtools.chrome.enabled":!0,"devtools.debugger.prompt-connection":!1,"devtools.debugger.remote-enabled":!0,"devtools.errorconsole.enabled":!0,"extensions.installDistroAddons":!1,"extensions.autoDisableScopes":10,"extensions.chrome.enabled":!0,"extensions.logging.enabled":!1,"extensions.checkCompatibility.nightly":!1,"extensions.update.enabled":!1,"extensions.update.notifyUser":!1,"extensions.enabledScopes":5,"extensions.getAddons.cache.enabled":!1,"network.prefetch.next":!1,"network.speculative.preconnect.enabled":!1,"toolkit.telemetry.enabled":!1,"toolkit.telemetry.archive.enabled":!1,"toolkit.telemetry.newProfilePing.enabled":!1,"toolkit.recovery.enabled":!1,"urlclassifier.updateinterval":172800,"security.enterprise_roots.enabled":!0,"xpinstall.signatures.required":!1};function pc(t){return{...ul,...t}}function fc(t,e){let s=pc(e);Object.keys(s).forEach(n=>{t.setPreference(n,s[n])});let i=Object.keys(e);return i.length>0&&i.forEach(n=>{t.setPreference(n,e[n])}),t.updatePreferences(),t}function ml(t,e){let s=new jr.default({destinationDirectory:t});return fc(s,e)}function dl(t,e,s){let r;if(Is.default.statSync(e).isDirectory())r=e;else throw new Error(Ha(t,e));let n=new jr.default({destinationDirectory:r});return fc(n,s)}function uc(t,e,s,r){let i,n=e||lc.default.resolve(__dirname,"run-firefox-data-dir");return Is.default.existsSync(n)?i=dl(t,n,s||{}):(r||Cs($s(t),()=>{}),Is.default.mkdirSync(n,{recursive:!0}),i=ml(n,s||{})),i}async function mc(t,e){let{browser:s,startingUrl:r,preferences:i,userDataDir:n,browserConsole:o=!1,browserFlags:c=[]}=e,p=uc(s,n,i),l=[];r&&l.push(`--url "${r}"`),o&&l.push("--jsconsole"),c&&l.push(...c);let u=t.options.devServer?.port?t.options.devServer?.port+100:9222;return[`--binary-args "${c.join(" ")}"`,`--profile "${p.path()}"`,`--listen ${u}`,"--verbose"].join(" ")}var bc=a(require("path"));var dc=a(require("net")),gc=a(require("events"));function gl(t,e){let s=e.toString(),r=s.indexOf(":");if(r<1)return{remainingData:e};let i=parseInt(s.substring(0,r),10);if(isNaN(i))return{remainingData:e,error:new Error(Va(t)),fatal:!0};if(e.length-(r+1)<i)return{remainingData:e};let n=e.slice(r+1,r+1+i),o=e.slice(r+1+i);try{let c=JSON.parse(n.toString());return{remainingData:o,parsedMessage:c}}catch(c){return{remainingData:o,error:c,fatal:!1}}}var Os=class extends gc.default{incomingData=Buffer.alloc(0);pendingRequests=[];activeRequests=new Map;connection;async connect(e){await new Promise((s,r)=>{try{let i={port:e,host:"127.0.0.1"},n=dc.default.createConnection(i,()=>{s()});this.connection=n,n.on("data",this.onData.bind(this)),n.on("error",r),n.on("end",this.onEnd.bind(this)),n.on("timeout",this.onTimeout.bind(this)),this.expectReply("root",{resolve:s,reject:r})}catch(i){r(i)}})}disconnect(){this.connection&&(this.connection.removeAllListeners(),this.connection.end(),this.rejectAllRequests(new Error(Ga("firefox"))))}rejectAllRequests(e){this.activeRequests.forEach(s=>{s.reject(e)}),this.activeRequests.clear(),this.pendingRequests.forEach(({deferred:s})=>{s.reject(e)}),this.pendingRequests=[]}async request(e){let s=typeof e=="string"?{to:"root",type:e}:e;if(!s.to)throw new Error(Xa("firefox",s.type));return await new Promise((r,i)=>{let n={resolve:r,reject:i};this.pendingRequests.push({request:s,deferred:n}),this.flushPendingRequests()})}flushPendingRequests(){this.pendingRequests=this.pendingRequests.filter(({request:e,deferred:s})=>{if(this.activeRequests.has(e.to))return!0;if(!this.connection)throw new Error(Za("firefox"));try{let r=`${Buffer.from(JSON.stringify(e)).length}:${JSON.stringify(e)}`;this.connection.write(r),this.expectReply(e.to,s)}catch(r){s.reject(r)}return!1})}expectReply(e,s){if(this.activeRequests.has(e))throw new Error(Ya("firefox",e));this.activeRequests.set(e,s)}onData(e){for(this.incomingData=Buffer.concat([this.incomingData,e]);this.readMessage(););}readMessage(){let{remainingData:e,parsedMessage:s,error:r,fatal:i}=gl("firefox",this.incomingData);return this.incomingData=e,r?(this.emit("error",new Error(Ka("firefox",r))),i&&this.disconnect(),!i):s?(this.handleMessage(s),!0):!1}handleMessage(e){if(!e.from){this.emit("error",new Error(Qa("firefox",e)));return}let s=this.activeRequests.get(e.from);s?(this.activeRequests.delete(e.from),e.error?s.reject(e):s.resolve(e),this.flushPendingRequests()):this.emit("error",new Error(ec("firefox",JSON.stringify(e))))}onError(e){this.emit("error",e)}onEnd(){this.emit("end")}onTimeout(){this.emit("timeout")}};function hc(t){return t instanceof Error?String(t):`${t.error}: ${t.message}`}function yc(t,e){return Array.isArray(t)&&t.includes(e.code)?!0:e.code===t}var hl=150,yl=1e3,As=class{options;constructor(e){this.options=e}async connectClient(e){let s;for(let r of Array.from({length:hl}))try{let i=new Os;return await i.connect(e),i}catch(i){if(yc("ECONNREFUSED",i))await new Promise(n=>setTimeout(n,yl)),s=i;else throw console.error(Ba(this.options.browser,i.stack)),i}throw console.error(Ja(this.options.browser)),s}async installAddons(e){let{devtools:s}=this.options,r=Array.isArray(this.options.extension)?this.options.extension:[this.options.extension],i=e.options.devServer?.port,n=i?i+100:9222,o=await this.connectClient(n);for(let[c,p]of r.entries()){let l=bc.default.join(p.replace(/"/g,"")),u=c===0&&s;try{let d=await o.request({to:"root",type:"getRoot"});await o.request({to:d.addonsActor,type:"installTemporaryAddon",addonPath:l,openDevTools:u})}catch(d){let g=hc(d);throw new Error(za(this.options.browser,g))}}}};var ie=null;process.on("SIGINT",()=>{ie&&ie.kill("SIGINT"),process.exit()});process.on("SIGTERM",()=>{ie&&ie.kill("SIGTERM"),process.exit()});var Ms=class{extension;browser;browserFlags;userDataDir;profile;preferences;startingUrl;autoReload;stats;constructor(e){this.extension=e.extension,this.browser=e.browser||"firefox",this.browserFlags=e.browserFlags||[],this.userDataDir=e.userDataDir,this.profile=e.profile,this.preferences=e.preferences,this.startingUrl=e.startingUrl}async launchFirefox(e){let s=`fx-runner start --binary "${Ls}" --foreground --no-remote`;wc.default.existsSync(Ls)||(console.error(js(this.browser,Ls)),process.exit());let r=await mc(e,this),i=`${s} ${r}`;ie=(0,xc.exec)(i,(o,c,p)=>{if(o!=null)throw o;p.includes("Unable to move the cache")?console.log(Na(this.browser)):(console.log(qa(this.browser)),process.exit())}),process.env.EXTENSION_ENV==="development"&&(ie.stdout?.pipe(process.stdout),ie.stderr?.pipe(process.stderr));let n=new As(this);try{await n.installAddons(e)}catch(o){o?.toString()?.includes("background.service_worker is currently disabled")&&(console.error(Ua(this.browser)),process.exit(1)),console.error(Wa(this.browser,o)),process.exit(1)}}apply(e){let s=!1;e.hooks.done.tapAsync("run-firefox:module",async(r,i)=>{if(r.compilation.errors.length>0){i();return}if(s){i();return}setTimeout(()=>{console.log(Es(this.browser,r.compilation.options.mode))},2e3),await this.launchFirefox(e),s=!0,i()})}};var Ts=class{static name="plugin-browsers";extension;browser;browserFlags;userDataDir;profile;preferences;startingUrl;constructor(e){this.extension=[...e.extension,...e.browserFlags?.filter(s=>!s.startsWith("--load-extension="))||[]],this.browser=e.browser,this.browserFlags=e.browserFlags?.filter(s=>!s.startsWith("--load-extension="))||[],this.userDataDir=e.userDataDir,this.profile=e.profile||"",this.preferences=e.preferences||{},this.startingUrl=e.startingUrl||""}getProfilePath(e,s,r){return r||(e.options.mode==="production"?$r.default.join(vc.default.tmpdir(),"extension-js",s,"profile"):$r.default.resolve(__dirname,`run-${s}-profile`))}apply(e){let s={stats:!0,extension:this.extension,browser:this.browser,browserFlags:this.browserFlags||[],userDataDir:this.getProfilePath(e,this.browser,this.userDataDir||this.profile)};switch(this.browser){case"chrome":{new ve({...s,browser:"chrome"}).apply(e);break}case"edge":new ve({...s,browser:"edge"}).apply(e);break;case"firefox":new Ms({...s,browser:"firefox"}).apply(e);break;default:{new ve({...s,browser:this.browser}).apply(e);break}}}};function J(t,e){let s=Je.default.join(t,"manifest.json"),r=Je.default.join(t,`dist/${e.browser}`),i=require(s);return{mode:e.mode||"development",entry:{},target:"web",context:t,devtool:i.manifest_version===3?"cheap-source-map":"eval-cheap-source-map",output:{clean:{keep(n){return!n.startsWith("hot/background")}},path:r,publicPath:"/",hotUpdateChunkFilename:"hot/[id].[fullhash].hot-update.js",hotUpdateMainFilename:"hot/[runtime].[fullhash].hot-update.json",environment:{bigIntLiteral:!0,dynamicImport:!0}},resolve:{modules:["node_modules",Je.default.join(t,"node_modules")],extensions:[".js",".mjs",".jsx",".ts",".mts",".tsx",".json",".wasm",".less",".css",".sass",".scss"]},watchOptions:{ignored:/node_modules|dist/},module:{rules:[]},plugins:[new et({manifestPath:s}),new ut({manifestPath:s,mode:e.mode}),new ft({manifestPath:s,mode:e.mode}),new yt({manifestPath:s,mode:e.mode}),process.env.EXTENSION_ENV==="development"&&new ks({manifestPath:s,browser:e.browser}),new vs({manifestPath:s,browser:e.browser,polyfill:e.polyfill}),new fs({manifestPath:s,browser:e.browser,mode:e.mode}),new ys({manifestPath:s,browser:e.browser,stats:!0,port:e.port||8e3}),!e.noOpen&&new Ts({extension:[r,Je.default.join(__dirname,"extensions",`${e.browser}-manager-extension`)],browser:e.browser,startingUrl:e.startingUrl,profile:e.profile||e.userDataDir,preferences:e.preferences,browserFlags:e.browserFlags})].filter(Boolean),stats:{all:!1,errors:!0,warnings:!0},infrastructureLogging:{level:"none"},performance:{hints:!1,maxAssetSize:999e3,maxEntrypointSize:999e3},optimization:{minimize:e.mode==="production"},experiments:{asyncWebAssembly:!0}}}var He=a(require("path")),Kc=a(require("go-git-it"));var ze=a(require("path")),Rs=a(require("fs")),m=require("@colors/colors/safe");function S(t){return`${t==="warn"?(0,m.brightYellow)("\u25BA\u25BA\u25BA"):t==="info"?(0,m.magenta)("\u25BA\u25BA\u25BA"):t==="error"?(0,m.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E"):(0,m.brightGreen)("\u25BA\u25BA\u25BA")}`}function K(){return`${S("error")} Manifest file not found. Ensure the path to your extension exists and try again.`}function Ns(t){let e=t==="firefox"?"Add-on":"Extension";return`${S("info")} Building ${ne(t)} ${e} package...`}function qs(t,e){let s=ze.default.join(t,"dist",e.browser||"chrome"),r=ze.default.join(s,"manifest.json"),i=require(r),{name:n,version:o,hostPermissions:c,permissions:p}=i,l=_c(t,i).defaultLocale,u=_c(t,i).otherLocales.join(", "),d=`${l} ${u&&", "+u}`,g=c&&c.length,y=p&&p.length,$=Bs().version;return`
|
|
144
|
+
Please provide a valid directory path.`}function Va(t){return`${j(t,"error")} Error parsing message length.`}function Ga(t){return`${j(t,"error")} MessagingClient connection closed.`}function Xa(t,e){return`${j(t,"error")} Unexpected MessagingClient request without target actor: ${(0,x.brightYellow)(e)}`}function Za(t){return`${j(t,"error")} MessagingClient connection closed.`}function Ya(t,e){return`${j(t,"error")} Target actor ${(0,x.brightYellow)(e)} already has an active request.`}function Ka(t,e){return`${j(t,"error")} Error parsing packet: ${(0,x.red)(e)}`}function Qa(t,e){return`${j(t,"error")} Message received without a sender actor: ${(0,x.brightYellow)(JSON.stringify(e))}`}function ec(t,e){return`${j(t,"error")} Received unexpected message: ${(0,x.red)(e)}`}var tc=a(require("progress"));function $s(t,e){let r=new tc.default(`${t} [:bar] :percent :etas`,{complete:"=",incomplete:" ",width:50,total:131072}),i=setInterval(()=>{let n=Math.random()*10*1024;r.tick(n),r.complete&&(clearInterval(i),e())},50)}function sc(t,e,s){if(Cs.default.existsSync(re.default.resolve(__dirname,`run-${t}-profile`)))return e||re.default.resolve(__dirname,`run-${t}-profile`);let i=JSON.stringify(t==="chrome"?Ta:Ra);return s||$s(js(t),()=>{let n=re.default.resolve(__dirname,`run-${t}-profile`),o=re.default.join(n,"Default");Cs.default.mkdirSync(o,{recursive:!0});let c=re.default.join(o,"Preferences");Cs.default.writeFileSync(c,i,"utf8")}),re.default.resolve(__dirname,`run-${t}-profile`)}function rc(t){let e=Array.isArray(t.extension)?t.extension:[t.extension],s=sc(t.browser,t.profile,!1);return[`--load-extension=${e.join()}`,`--user-data-dir=${s}`,"--no-first-run","--disable-client-side-phishing-detection","--disable-component-extensions-with-background-pages","--disable-default-apps","--disable-features=InterestFeedContentSuggestions","--disable-features=Translate","--hide-scrollbars","--mute-audio","--no-default-browser-check","--no-first-run","--ash-no-nudges","--disable-search-engine-choice-screen","--disable-features=MediaRoute","--use-mock-keychain","--disable-background-networking","--disable-breakpad","--disable-component-update","--disable-domain-reliability","--disable-features=AutofillServerCommunicatio","--disable-features=CertificateTransparencyComponentUpdate","--disable-sync","--disable-features=OptimizationHints","--disable-features=DialMediaRouteProvider","--no-pings","--enable-features=SidePanelUpdates",...t.browserFlags||[]]}process.on("SIGINT",()=>{process.exit()});process.on("SIGTERM",()=>{process.exit()});var ve=class{extension;browser;browserFlags;userDataDir;profile;preferences;startingUrl;autoReload;stats;constructor(e){this.extension=e.extension,this.browser=e.browser,this.browserFlags=e.browserFlags||[],this.userDataDir=e.userDataDir,this.profile=e.profile||e.userDataDir,this.preferences=e.preferences,this.startingUrl=e.startingUrl}launchChromium(e){let s;switch(e){case"chrome":s=require(`${e}-location`);break;case"edge":s=require(`${e}-location`)();break;default:s=require(`${e}`);break}ic.default.existsSync(s)||(console.error(Es(e,s)),process.exit());let r=rc(this),i=this.startingUrl?[this.startingUrl,...r]:[...r],n=process.env.EXTENSION_ENV==="development"?"inherit":"ignore",o=(0,nc.spawn)(s,i,{stdio:n});process.env.EXTENSION_ENV==="development"&&(o.stdout?.pipe(process.stdout),o.stderr?.pipe(process.stderr))}apply(e){let s=!1;e.hooks.done.tapAsync("run-browsers:module",(r,i)=>{if(r.compilation.errors.length>0){i();return}if(s){i();return}this.launchChromium(this.browser),setTimeout(()=>{console.log(ks(this.browser,r.compilation.options.mode))},2e3),s=!0,i()})}};var wc=a(require("fs")),xc=require("child_process");var Be=a(require("fs")),Ds=a(require("path")),oc=a(require("os")),ac=a(require("which")),cc=process.platform==="darwin",pl=process.platform==="win32",ll=!cc&&!pl;function fl(){if(ll)try{return ac.default.sync("firefox")}catch{return null}else if(cc){let t="/Applications/Firefox.app/Contents/MacOS/firefox",e=Ds.default.join(oc.default.homedir(),t.slice(1));return Be.default.existsSync(t)?t:Be.default.existsSync(e)?e:null}else{let t=Ds.default.join("Mozilla Firefox","firefox.exe"),e=[process.env.LOCALAPPDATA,process.env.PROGRAMFILES,process.env["PROGRAMFILES(X86)"]];for(let r of e)if(r){let i=Ds.default.join(r,t);if(Be.default.existsSync(i))return i}let s=["C:\\Program Files\\Mozilla Firefox\\firefox.exe","C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"];for(let r of s)if(Be.default.existsSync(r))return r;return null}}var Fs=fl();var lc=a(require("path")),Ls=a(require("fs")),Er=a(require("firefox-profile"));var ul={"app.update.enabled":!1,"browser.dom.window.dump.enabled":!0,"browser.formfill.enable":!1,"browser.link.open_newwindow":3,"browser.sessionstore.enabled":!1,"browser.shell.checkDefaultBrowser":!1,"browser.sync.enabled":!1,"browser.startup.page":0,"browser.startup.homepage_welcome_url":"about:blank","browser.startup.homepage_welcome_url_additional":"about:blank","browser.urlbar.suggest.bookmark":!1,"browser.urlbar.suggest.clipboard":!1,"browser.urlbar.suggest.history":!1,"browser.urlbar.suggest.openpage":!1,"browser.urlbar.suggest.remotetab":!1,"browser.urlbar.suggest.searches":!1,"browser.urlbar.suggest.topsites":!1,"browser.urlbar.suggest.engines":!1,"browser.urlbar.suggest.calculator":!1,"browser.urlbar.suggest.recentsearches":!1,"datareporting.policy.dataSubmissionEnabled":!1,"datareporting.policy.firstRunURL":"","devtools.browserconsole.contentMessages":!0,"devtools.chrome.enabled":!0,"devtools.debugger.prompt-connection":!1,"devtools.debugger.remote-enabled":!0,"devtools.errorconsole.enabled":!0,"extensions.installDistroAddons":!1,"extensions.autoDisableScopes":10,"extensions.chrome.enabled":!0,"extensions.logging.enabled":!1,"extensions.checkCompatibility.nightly":!1,"extensions.update.enabled":!1,"extensions.update.notifyUser":!1,"extensions.enabledScopes":5,"extensions.getAddons.cache.enabled":!1,"network.prefetch.next":!1,"network.speculative.preconnect.enabled":!1,"toolkit.telemetry.enabled":!1,"toolkit.telemetry.archive.enabled":!1,"toolkit.telemetry.newProfilePing.enabled":!1,"toolkit.recovery.enabled":!1,"urlclassifier.updateinterval":172800,"security.enterprise_roots.enabled":!0,"xpinstall.signatures.required":!1};function pc(t){return{...ul,...t}}function fc(t,e){let s=pc(e);Object.keys(s).forEach(n=>{t.setPreference(n,s[n])});let i=Object.keys(e);return i.length>0&&i.forEach(n=>{t.setPreference(n,e[n])}),t.updatePreferences(),t}function ml(t,e){let s=new Er.default({destinationDirectory:t});return fc(s,e)}function dl(t,e,s){let r;if(Ls.default.statSync(e).isDirectory())r=e;else throw new Error(Ha(t,e));let n=new Er.default({destinationDirectory:r});return fc(n,s)}function uc(t,e,s,r){let i,n=e||lc.default.resolve(__dirname,"run-firefox-data-dir");return Ls.default.existsSync(n)?i=dl(t,n,s||{}):(r||$s(js(t),()=>{}),Ls.default.mkdirSync(n,{recursive:!0}),i=ml(n,s||{})),i}async function mc(t,e){let{browser:s,startingUrl:r,preferences:i,userDataDir:n,browserConsole:o=!1,browserFlags:c=[]}=e,p=uc(s,n,i),l=[];r&&l.push(`--url "${r}"`),o&&l.push("--jsconsole"),c&&l.push(...c);let u=t.options.devServer?.port?t.options.devServer?.port+100:9222;return[`--binary-args "${c.join(" ")}"`,`--profile "${p.path()}"`,`--listen ${u}`,"--verbose"].join(" ")}var bc=a(require("path"));var dc=a(require("net")),gc=a(require("events"));function gl(t,e){let s=e.toString(),r=s.indexOf(":");if(r<1)return{remainingData:e};let i=parseInt(s.substring(0,r),10);if(isNaN(i))return{remainingData:e,error:new Error(Va(t)),fatal:!0};if(e.length-(r+1)<i)return{remainingData:e};let n=e.slice(r+1,r+1+i),o=e.slice(r+1+i);try{let c=JSON.parse(n.toString());return{remainingData:o,parsedMessage:c}}catch(c){return{remainingData:o,error:c,fatal:!1}}}var Is=class extends gc.default{incomingData=Buffer.alloc(0);pendingRequests=[];activeRequests=new Map;connection;async connect(e){await new Promise((s,r)=>{try{let i={port:e,host:"127.0.0.1"},n=dc.default.createConnection(i,()=>{s()});this.connection=n,n.on("data",this.onData.bind(this)),n.on("error",r),n.on("end",this.onEnd.bind(this)),n.on("timeout",this.onTimeout.bind(this)),this.expectReply("root",{resolve:s,reject:r})}catch(i){r(i)}})}disconnect(){this.connection&&(this.connection.removeAllListeners(),this.connection.end(),this.rejectAllRequests(new Error(Ga("firefox"))))}rejectAllRequests(e){this.activeRequests.forEach(s=>{s.reject(e)}),this.activeRequests.clear(),this.pendingRequests.forEach(({deferred:s})=>{s.reject(e)}),this.pendingRequests=[]}async request(e){let s=typeof e=="string"?{to:"root",type:e}:e;if(!s.to)throw new Error(Xa("firefox",s.type));return await new Promise((r,i)=>{let n={resolve:r,reject:i};this.pendingRequests.push({request:s,deferred:n}),this.flushPendingRequests()})}flushPendingRequests(){this.pendingRequests=this.pendingRequests.filter(({request:e,deferred:s})=>{if(this.activeRequests.has(e.to))return!0;if(!this.connection)throw new Error(Za("firefox"));try{let r=`${Buffer.from(JSON.stringify(e)).length}:${JSON.stringify(e)}`;this.connection.write(r),this.expectReply(e.to,s)}catch(r){s.reject(r)}return!1})}expectReply(e,s){if(this.activeRequests.has(e))throw new Error(Ya("firefox",e));this.activeRequests.set(e,s)}onData(e){for(this.incomingData=Buffer.concat([this.incomingData,e]);this.readMessage(););}readMessage(){let{remainingData:e,parsedMessage:s,error:r,fatal:i}=gl("firefox",this.incomingData);return this.incomingData=e,r?(this.emit("error",new Error(Ka("firefox",r))),i&&this.disconnect(),!i):s?(this.handleMessage(s),!0):!1}handleMessage(e){if(!e.from){this.emit("error",new Error(Qa("firefox",e)));return}let s=this.activeRequests.get(e.from);s?(this.activeRequests.delete(e.from),e.error?s.reject(e):s.resolve(e),this.flushPendingRequests()):this.emit("error",new Error(ec("firefox",JSON.stringify(e))))}onError(e){this.emit("error",e)}onEnd(){this.emit("end")}onTimeout(){this.emit("timeout")}};function hc(t){return t instanceof Error?String(t):`${t.error}: ${t.message}`}function yc(t,e){return Array.isArray(t)&&t.includes(e.code)?!0:e.code===t}var hl=150,yl=1e3,Os=class{options;constructor(e){this.options=e}async connectClient(e){let s;for(let r of Array.from({length:hl}))try{let i=new Is;return await i.connect(e),i}catch(i){if(yc("ECONNREFUSED",i))await new Promise(n=>setTimeout(n,yl)),s=i;else throw console.error(Ba(this.options.browser,i.stack)),i}throw console.error(Ja(this.options.browser)),s}async installAddons(e){let{devtools:s}=this.options,r=Array.isArray(this.options.extension)?this.options.extension:[this.options.extension],i=e.options.devServer?.port,n=i?i+100:9222,o=await this.connectClient(n);for(let[c,p]of r.entries()){let l=bc.default.join(p.replace(/"/g,"")),u=c===0&&s;try{let d=await o.request({to:"root",type:"getRoot"});await o.request({to:d.addonsActor,type:"installTemporaryAddon",addonPath:l,openDevTools:u})}catch(d){let g=hc(d);throw new Error(za(this.options.browser,g))}}}};var ie=null;process.on("SIGINT",()=>{ie&&ie.kill("SIGINT"),process.exit()});process.on("SIGTERM",()=>{ie&&ie.kill("SIGTERM"),process.exit()});var As=class{extension;browser;browserFlags;userDataDir;profile;preferences;startingUrl;autoReload;stats;constructor(e){this.extension=e.extension,this.browser=e.browser||"firefox",this.browserFlags=e.browserFlags||[],this.userDataDir=e.userDataDir,this.profile=e.profile,this.preferences=e.preferences,this.startingUrl=e.startingUrl}async launchFirefox(e){let s=`fx-runner start --binary "${Fs}" --foreground --no-remote`;wc.default.existsSync(Fs)||(console.error(Es(this.browser,Fs)),process.exit());let r=await mc(e,this),i=`${s} ${r}`;ie=(0,xc.exec)(i,(o,c,p)=>{if(o!=null)throw o;p.includes("Unable to move the cache")?console.log(Na(this.browser)):(console.log(qa(this.browser)),process.exit())}),process.env.EXTENSION_ENV==="development"&&(ie.stdout?.pipe(process.stdout),ie.stderr?.pipe(process.stderr));let n=new Os(this);try{await n.installAddons(e)}catch(o){o?.toString()?.includes("background.service_worker is currently disabled")&&(console.error(Ua(this.browser)),process.exit(1)),console.error(Wa(this.browser,o)),process.exit(1)}}apply(e){let s=!1;e.hooks.done.tapAsync("run-firefox:module",async(r,i)=>{if(r.compilation.errors.length>0){i();return}if(s){i();return}setTimeout(()=>{console.log(ks(this.browser,r.compilation.options.mode))},2e3),await this.launchFirefox(e),s=!0,i()})}};var Ms=class{static name="plugin-browsers";extension;browser;browserFlags;userDataDir;profile;preferences;startingUrl;constructor(e){this.extension=[...e.extension,...e.browserFlags?.filter(s=>!s.startsWith("--load-extension="))||[]],this.browser=e.browser,this.browserFlags=e.browserFlags?.filter(s=>!s.startsWith("--load-extension="))||[],this.userDataDir=e.userDataDir,this.profile=e.profile||"",this.preferences=e.preferences||{},this.startingUrl=e.startingUrl||""}getProfilePath(e,s,r){return r||(e.options.mode==="production"?jr.default.join(vc.default.tmpdir(),"extension-js",s,"profile"):jr.default.resolve(__dirname,`run-${s}-profile`))}apply(e){let s={stats:!0,extension:this.extension,browser:this.browser,browserFlags:this.browserFlags||[],userDataDir:this.getProfilePath(e,this.browser,this.userDataDir||this.profile)};switch(this.browser){case"chrome":{new ve({...s,browser:"chrome"}).apply(e);break}case"edge":new ve({...s,browser:"edge"}).apply(e);break;case"firefox":new As({...s,browser:"firefox"}).apply(e);break;default:{new ve({...s,browser:this.browser}).apply(e);break}}}};function J(t,e){let s=Je.default.join(t,"manifest.json"),r=Je.default.join(t,`dist/${e.browser}`),i=require(s);return{mode:e.mode||"development",entry:{},target:"web",context:t,devtool:i.manifest_version===3?"cheap-source-map":"eval-cheap-source-map",output:{clean:{keep(n){return!n.startsWith("hot/background")}},path:r,publicPath:"/",hotUpdateChunkFilename:"hot/[id].[fullhash].hot-update.js",hotUpdateMainFilename:"hot/[runtime].[fullhash].hot-update.json",environment:{bigIntLiteral:!0,dynamicImport:!0}},resolve:{modules:["node_modules",Je.default.join(t,"node_modules")],extensions:[".js",".mjs",".jsx",".ts",".mts",".tsx",".json",".wasm",".less",".css",".sass",".scss"]},watchOptions:{ignored:/node_modules|dist/},module:{rules:[]},plugins:[new et({manifestPath:s}),new ft({manifestPath:s,mode:e.mode}),new lt({manifestPath:s,mode:e.mode}),new ht({manifestPath:s,mode:e.mode}),process.env.EXTENSION_ENV==="development"&&new Ps({manifestPath:s,browser:e.browser}),new xs({manifestPath:s,browser:e.browser,polyfill:e.polyfill}),new ls({manifestPath:s,browser:e.browser,mode:e.mode}),new hs({manifestPath:s,browser:e.browser,stats:!0,port:e.port||8e3}),!e.noOpen&&new Ms({extension:[r,Je.default.join(__dirname,"extensions",`${e.browser}-manager-extension`)],browser:e.browser,startingUrl:e.startingUrl,profile:e.profile||e.userDataDir,preferences:e.preferences,browserFlags:e.browserFlags})].filter(Boolean),stats:{all:!1,errors:!0,warnings:!0},infrastructureLogging:{level:"none"},performance:{hints:!1,maxAssetSize:999e3,maxEntrypointSize:999e3},optimization:{minimize:e.mode==="production"},experiments:{asyncWebAssembly:!0}}}var He=a(require("path")),Kc=a(require("go-git-it"));var ze=a(require("path")),Ts=a(require("fs")),m=require("@colors/colors/safe");function S(t){return`${t==="warn"?(0,m.brightYellow)("\u25BA\u25BA\u25BA"):t==="info"?(0,m.magenta)("\u25BA\u25BA\u25BA"):t==="error"?(0,m.red)("\u2716\uFE0E\u2716\uFE0E\u2716\uFE0E"):(0,m.brightGreen)("\u25BA\u25BA\u25BA")}`}function K(){return`${S("error")} Manifest file not found. Ensure the path to your extension exists and try again.`}function Rs(t){let e=t==="firefox"?"Add-on":"Extension";return`${S("info")} Building ${ne(t)} ${e} package...`}function Ns(t,e){let s=ze.default.join(t,"dist",e.browser||"chrome"),r=ze.default.join(s,"manifest.json"),i=require(r),{name:n,version:o,hostPermissions:c,permissions:p}=i,l=_c(t,i).defaultLocale,u=_c(t,i).otherLocales.join(", "),d=`${l} ${u&&", "+u}`,g=c&&c.length,y=p&&p.length,$=Ws().version;return`
|
|
145
145
|
\u{1F9E9} ${(0,m.brightGreen)("Extension.js")} ${(0,m.gray)(`${$}`)}
|
|
146
146
|
Extension Name ${(0,m.gray)(n)}
|
|
147
147
|
Extension Version ${(0,m.gray)(o)}
|
|
148
148
|
Locales ${(0,m.gray)(d)}
|
|
149
149
|
Host Permissions ${(0,m.gray)(g?c.join(", "):"Browser defaults")}
|
|
150
150
|
Permissions ${(0,m.gray)(y?p.join(", "):"Browser defaults")}
|
|
151
|
-
`}function Sc(t,e){let s=t==="production"?m.magenta:m.magenta,r=e==="firefox"?"Add-on":"Extension";return`${S("success")} ${ne(e)} ${r} ready for ${s(t||"unknown")}.`}function Pc(t,e,s){let r=e?.toJson(),i=ze.default.join(t,"manifest.json"),n=JSON.parse(
|
|
151
|
+
`}function Sc(t,e){let s=t==="production"?m.magenta:m.magenta,r=e==="firefox"?"Add-on":"Extension";return`${S("success")} ${ne(e)} ${r} ready for ${s(t||"unknown")}.`}function Pc(t,e,s){let r=e?.toJson(),i=ze.default.join(t,"manifest.json"),n=JSON.parse(Ts.default.readFileSync(i,"utf8")),o=r?.assets,c=`${S("info")} Building ${(0,m.cyan)(n.name)} extension using ${ne(s)} defaults...
|
|
152
152
|
|
|
153
153
|
`,p=`
|
|
154
154
|
Build completed in ${((r?.time||0)/1e3).toFixed(2)} seconds.`,l=`Build Target: ${(0,m.gray)(ne(s))}
|
|
@@ -173,9 +173,9 @@ ${(0,m.gray)("PATH")} ${(0,m.underline)(t)}`}function Lc(t,e,s,r){return`\u{1F4E
|
|
|
173
173
|
${(0,m.gray)("\u2514\u2500")} ${(0,m.underline)(`${r}`)} ${(0,m.gray)("(distribution)")}`}function Oc(t,e,s,r){return`\u{1F4E6} Package name: ${(0,m.brightYellow)(`${t}-source.${e}`)}, Target Browser: ${`${ne(s)}`}
|
|
174
174
|
${(0,m.gray)("\u2514\u2500")} ${(0,m.underline)(`${r}`)} (source)`}function Ac(t){return`${S("error")} Failed to compress extension package. ${t}`}function Mc(t){return`${S("info")} ${t.name} (v${t.version}) has no type definitions. Writing...`}function Tc(t){return`${S("error")} Failed to write the extension type definition. ${(0,m.red)(t)}`}function Rc(t){return`${S("info")} Downloading extension...
|
|
175
175
|
${(0,m.gray)("URL")} ${(0,m.underline)(t)}`}function Nc(t){return`${S("info")} Unpackaging browser extension...
|
|
176
|
-
${(0,m.gray)("PATH")} ${(0,m.underline)(t)}`}function qc(){return`${S("info")} Browser extension unpackaged ${(0,m.brightGreen)("successfully")}. Compiling...`}function Uc(t){return`${S("error")} Failed to download or extract ZIP file. ${(0,m.red)(t)}`}function ne(t){return t.charAt(0).toUpperCase()+t.slice(1)}function _c(t,e){let s=e.default_locale,r=ze.default.join(t,"_locales");if(!
|
|
176
|
+
${(0,m.gray)("PATH")} ${(0,m.underline)(t)}`}function qc(){return`${S("info")} Browser extension unpackaged ${(0,m.brightGreen)("successfully")}. Compiling...`}function Uc(t){return`${S("error")} Failed to download or extract ZIP file. ${(0,m.red)(t)}`}function ne(t){return t.charAt(0).toUpperCase()+t.slice(1)}function _c(t,e){let s=e.default_locale,r=ze.default.join(t,"_locales");if(!Ts.default.existsSync(r))return{defaultLocale:"Browser defaults",otherLocales:[]};let i=Ts.default.readdirSync(r).filter(n=>n!==s);return{defaultLocale:s,otherLocales:i}}function Wc(t){return`${(t/1024).toFixed(2)}KB`}function bl(t){let e=0;return t?.forEach(s=>{e+=s.size}),Wc(e)}function Bc(t,e=""){let s="";return Object.keys(t).forEach((r,i,n)=>{let o=i===n.length-1,c=o?"\u2514\u2500":"\u251C\u2500",p=t[r].size?` (${Wc(t[r].size)})`:"";s+=`${(0,m.gray)(e)}${(0,m.gray)(c)} ${r}${(0,m.gray)(p)}
|
|
177
177
|
`,typeof t[r]=="object"&&!t[r].size&&(s+=Bc(t[r],`${e}${o?" ":(0,m.gray)("\u2502 ")}`))}),s}function wl(t){let e={};return t?.forEach(s=>{let r=s.name.split("/"),i=e;r.forEach((n,o)=>{i[n]||(i[n]={}),o===r.length-1?i[n]={size:s.size}:i=i[n]})}),`.
|
|
178
|
-
${Bc(e)}`}function Jc(t){return`${S("info")} is using ${(0,m.magenta)(t)}. ${(0,m.brightYellow)("This is very experimental")}.`}function zc(t){return`${S("info")} Installing ${(0,m.cyan)(t)} dependencies...`}function Hc(t,e,s){return`Command ${t} ${e.join(" ")} failed with exit code ${s}`}function Vc(t){return`${S("info")} Can't install project dependencies. ${t.message||t.toString()}`}var
|
|
178
|
+
${Bc(e)}`}function Jc(t){return`${S("info")} is using ${(0,m.magenta)(t)}. ${(0,m.brightYellow)("This is very experimental")}.`}function zc(t){return`${S("info")} Installing ${(0,m.cyan)(t)} dependencies...`}function Hc(t,e,s){return`Command ${t} ${e.join(" ")} failed with exit code ${s}`}function Vc(t){return`${S("info")} Can't install project dependencies. ${t.message||t.toString()}`}var qs=a(require("path")),Gc=a(require("axios")),Xc=a(require("adm-zip"));var $r=a(require("stream")),Zc=require("util"),xl=(0,Zc.promisify)($r.default.pipeline);async function Yc(t,e){let s=t.split("?")[0];try{console.log(Rc(s));let r=await(0,Gc.default)({url:t,method:"GET",responseType:"stream"}),i=qs.default.extname(s),n=qs.default.basename(s,i),o=qs.default.join(e,n);console.log(Nc(o));let c=[];await xl(r.data,new $r.default.Writable({write(u,d,g){c.push(u),g()}}));let p=Buffer.concat(c);return new Xc.default(p).extractAllTo(o,!0),console.log(qc()),o}catch(r){throw console.error(Uc(r)),r}}var vl=t=>{try{return new URL(t),!0}catch{return!1}};async function _l(t,e){return await(0,Kc.default)(t,process.cwd(),e),He.default.resolve(process.cwd(),He.default.basename(t))}async function Sl(t){return await Yc(t,process.cwd())}async function Q(t){if(!t)return process.cwd();if(vl(t)){let e=new URL(t);if(e.protocol.startsWith("http")){if(e.origin!=="https://github.com")return await Sl(t);let s=e.pathname.split("/"),r=s.slice(1,3)[0],i=s.slice(1,3)[1];console.log(Ec(r,i));let n=He.default.basename(e.pathname),o=await _l(t,jc(n));return console.log($c(n)),o}}return He.default.resolve(process.cwd(),t)}var z=a(require("path")),Qc=a(require("fs")),ep=a(require("ignore")),tp=a(require("tiny-glob")),Cr=a(require("adm-zip")),sp=a(require("slugify"));function Pl(t){try{return Qc.default.readFileSync(t,"utf8")}catch{return""}}function kl(t){return(0,sp.default)(t,{replacement:"-",remove:/[^a-zA-Z0-9 ]/g,lower:!0})}function El(t){switch(t){case"opera":return"crx";case"firefox":return"xpi";default:return"zip"}}function jl(t,e){let s=kl(e.zipFilename||t.name);return e.zipFilename?s:`${s}-${t.version}`}async function $l(t){let e=z.default.join(t,".gitignore"),s=Pl(e),r=(0,ep.default)();return s?r.add(s):console.log(Cc(t)),(await(0,tp.default)("**/*",{cwd:t,dot:!0})).filter(n=>!r.ignores(n))}async function rp(t,{browser:e="chrome",...s}){try{let r=z.default.join(t,"dist"),i=z.default.join(r,e),n=s.zipSource?t:i,o=require(z.default.join(n,"manifest.json")),c=jl(o,s),p=El(e),l=z.default.join(i,`${c}.${p}`),u=z.default.join(r,`${c}-source.${p}`);if(s.zipSource){console.log(""),console.log(Dc(e));let d=new Cr.default;(await $l(t)).forEach(y=>{d.addLocalFile(z.default.join(t,y),z.default.dirname(y))}),d.writeZip(u)}if(s.zip){console.log(""),console.log(Fc(l));let d=new Cr.default;d.addLocalFolder(i),d.writeZip(l)}s.zip&&s.zipSource?(console.log(""),console.log(Lc(e,c,u,l))):s.zip?(console.log(""),console.log(Ic(c,p,e,l))):s.zipSource&&(console.log(""),console.log(Oc(c,p,e,u)))}catch(r){throw console.error(Ac(r)),r}}var Dr=a(require("fs")),Fr=a(require("path"));function ee(t){let e=Fr.default.join(t,"extension.config.js");if(Dr.default.existsSync(e)&&Cl(t)){let s=require(e);if(s&&s!=null&&s&&typeof s.config=="function")return s.config}return s=>s}function Cl(t){let e=Fr.default.join(t,"extension.config.js");return Dr.default.existsSync(e)?(console.log(Jc("extension.config.js")),!0):!1}async function cp(t,e){let s=await Q(t);!t?.startsWith("http")&&!ip.default.existsSync(np.default.join(s,"manifest.json"))&&(console.log(K()),process.exit(1));try{let r=e?.browser||"chrome",i=J(s,{...e,browser:r,mode:"production"}),n=i.plugins?.filter(u=>u?.constructor.name!=="plugin-browsers"&&u?.constructor.name!=="plugin-reload"),c=ee(s)({...i,plugins:n}),p=(0,ap.merge)(c),l=(0,op.default)(p);await new Promise((u,d)=>{l.run(async(g,y)=>{if(g)return console.error(g.stack||g),d(g);console.log(Pc(s,y,r)),(e?.zip||e?.zipSource)&&await rp(s,{...e,browser:r}),y?.hasErrors()?(console.log(y.toString({colors:!0})),process.exit(1)):(console.log(kc()),u())})})}catch(r){process.env.EXTENSION_ENV==="development"&&console.error(r),process.exit(1)}}var Or=a(require("fs")),Ar=a(require("path"));var Ir=a(require("path")),pp=a(require("webpack")),lp=a(require("webpack-dev-server")),fp=require("webpack-merge");function Lr(t){t.stop().then(()=>{process.exit()}).catch(e=>{console.log(`Error in the Extension.js runner: ${e.stack||""}`)})}async function up(t,{...e}){let s=J(t,{...e,mode:"development"}),i=ee(t)(s),n=(0,fp.merge)(i),o=(0,pp.default)(n),c={host:"127.0.0.1",allowedHosts:"all",static:Ir.default.join(t,"public"),compress:!1,devMiddleware:{writeToDisk:!0},watchFiles:rt(t)?void 0:{paths:[Ir.default.join(t,"**/*.html")],options:{usePolling:!0,interval:1e3}},client:{logging:process.env.EXTENSION_ENV==="development"?"error":"none",progress:!1,overlay:!1},headers:{"Access-Control-Allow-Origin":"*"},port:"auto",hot:"only"},p=new lp.default(c,o);p.startCallback(l=>{l!=null&&console.log(`Error in the Extension.js runner: ${l.stack||""}`)}),process.on("ERROR",()=>{Lr(p)}),process.on("SIGINT",()=>{Lr(p)}),process.on("SIGTERM",()=>{Lr(p)})}var Us=a(require("path")),Ve=a(require("fs/promises"));async function mp(t){let e=Us.default.join(t,"extension-env.d.ts"),s=process.env.EXTENSION_ENV==="development"?Us.default.resolve(process.cwd(),"programs/cli/types"):"extension/dist/types",r=`// Required Extension.js types for TypeScript projects.
|
|
179
179
|
// This file is auto-generated and should not be excluded.
|
|
180
180
|
// If you need additional types, consider creating a new *.d.ts file and
|
|
181
181
|
// referencing it in the "include" array of your tsconfig.json file.
|
|
@@ -184,4 +184,4 @@ ${Bc(e)}`}function Jc(t){return`${S("info")} is using ${(0,m.magenta)(t)}. ${(0,
|
|
|
184
184
|
|
|
185
185
|
// Polyfill types for browser.* APIs.
|
|
186
186
|
/// <reference types="${s}/polyfill.d.ts" />
|
|
187
|
-
`;try{await Ve.default.access(e),(await Ve.default.readFile(e,"utf8")).includes("develop/dist/types")&&await Ve.default.writeFile(e,r)}catch{let n=require(
|
|
187
|
+
`;try{await Ve.default.access(e),(await Ve.default.readFile(e,"utf8")).includes("develop/dist/types")&&await Ve.default.writeFile(e,r)}catch{let n=require(Us.default.join(t,"manifest.json"));console.log(Mc(n));try{await Ve.default.writeFile(e,r)}catch(o){console.log(Tc(o))}}}var dp=a(require("path")),gp=require("cross-spawn"),hp=a(require("fs")),yp=require("detect-package-manager");async function Dl(){let t=await(0,yp.detect)(),e="npm";if(st())return"pnpm";switch(t){case"yarn":e="yarn";break;case"pnpm":e="pnpm";break;default:e="npm"}return e}function Fl(){return["install"]}async function bp(t){let e=dp.default.join(t,"node_modules"),s=await Dl(),r=Fl(),i=process.cwd();try{process.chdir(t),await hp.default.promises.mkdir(e,{recursive:!0});let n=process.env.EXTENSION_ENV==="development"?"inherit":"ignore",o=(0,gp.spawn)(s,r,{stdio:n});await new Promise((c,p)=>{o.on("close",l=>{l!==0?p(new Error(Hc(s,r,l))):c()}),o.on("error",l=>{p(l)})})}catch(n){console.error(Vc(n)),process.exit(1)}finally{process.chdir(i)}}async function wp(t,e){let s=await Q(t),r=Ar.default.join(s,"manifest.json");!t?.startsWith("http")&&!Or.default.existsSync(r)&&(console.log(K()),process.exit(1));try{R(s)&&await mp(s);let i=Ar.default.join(s,"node_modules");if(!Or.default.existsSync(i)){let n=require(r).name;console.log(zc(n)),await bp(s)}setTimeout(async()=>{await up(s,{...e,mode:"development",browser:e.browser||"chrome"})},50)}catch(i){process.env.EXTENSION_ENV==="development"&&console.error(i),process.exit(1)}}var xp=a(require("fs")),vp=a(require("path")),_p=a(require("webpack")),Sp=require("webpack-merge");async function Pp(t,e){let s=await Q(t);!t?.startsWith("http")&&!xp.default.existsSync(vp.default.join(s,"manifest.json"))&&(console.log(K()),process.exit(1));try{let r=e.browser||"chrome",i=J(s,{...e,browser:r,mode:"production"}),n=i.plugins?.filter(u=>u?.constructor.name==="plugin-browsers");console.log(Rs(r));let c=ee(s)({...i,plugins:n}),p=(0,Sp.merge)(c);(0,_p.default)(p).run(async(u,d)=>{u&&(console.error(u.stack||u),process.exit(1)),d?.hasErrors()?(console.log(d.toString({colors:!0})),process.exit(1)):console.log(Ns(s,{browser:r,mode:"production"}))})}catch(r){process.env.EXTENSION_ENV==="development"&&console.error(r),process.exit(1)}}var kp=a(require("fs")),Ep=a(require("path")),jp=a(require("webpack")),$p=require("webpack-merge");async function Cp(t,e){let s=await Q(t);!t?.startsWith("http")&&!kp.default.existsSync(Ep.default.join(s,"manifest.json"))&&(console.log(K()),process.exit(1));try{let r=e.browser||"chrome",i=J(s,{...e,browser:r,mode:"production"}),n=i.plugins?.filter(u=>u?.constructor.name!=="plugin-reload");console.log(Rs(r));let c=ee(s)({...i,plugins:n}),p=(0,$p.merge)(c);(0,jp.default)(p).run((u,d)=>{u&&(console.error(u.stack||u),process.exit(1)),d?.hasErrors()?(console.log(d.toString({colors:!0})),process.exit(1)):(console.log(Ns(s,e)),setTimeout(()=>{console.log(Sc("production",r))},1500))})}catch(r){process.env.EXTENSION_ENV==="development"&&console.error(r),process.exit(1)}}0&&(module.exports={extensionBuild,extensionDev,extensionPreview,extensionStart});
|