wxt 0.20.13 → 0.20.15

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.
Files changed (280) hide show
  1. package/dist/browser.d.mts +20 -0
  2. package/dist/browser.mjs +18 -3
  3. package/dist/builtin-modules/index.mjs +7 -2
  4. package/dist/builtin-modules/unimport.mjs +69 -75
  5. package/dist/cli/cli-utils.mjs +54 -50
  6. package/dist/cli/commands.mjs +78 -103
  7. package/dist/cli/index.d.mts +1 -0
  8. package/dist/cli/index.mjs +9 -4
  9. package/dist/core/{build.d.ts → build.d.mts} +6 -2
  10. package/dist/core/build.mjs +23 -4
  11. package/dist/core/builders/vite/index.mjs +293 -343
  12. package/dist/core/builders/vite/plugins/bundleAnalysis.mjs +11 -12
  13. package/dist/core/builders/vite/plugins/cssEntrypoints.mjs +27 -20
  14. package/dist/core/builders/vite/plugins/defineImportMeta.mjs +17 -12
  15. package/dist/core/builders/vite/plugins/devHtmlPrerender.mjs +105 -136
  16. package/dist/core/builders/vite/plugins/devServerGlobals.mjs +15 -14
  17. package/dist/core/builders/vite/plugins/download.mjs +23 -12
  18. package/dist/core/builders/vite/plugins/entrypointGroupGlobals.mjs +18 -14
  19. package/dist/core/builders/vite/plugins/extensionApiMock.mjs +31 -33
  20. package/dist/core/builders/vite/plugins/globals.mjs +14 -13
  21. package/dist/core/builders/vite/plugins/iifeFooter.mjs +17 -11
  22. package/dist/core/builders/vite/plugins/index.mjs +18 -16
  23. package/dist/core/builders/vite/plugins/noopBackground.mjs +21 -15
  24. package/dist/core/builders/vite/plugins/removeEntrypointMainFunction.mjs +26 -23
  25. package/dist/core/builders/vite/plugins/resolveAppConfig.mjs +26 -24
  26. package/dist/core/builders/vite/plugins/resolveVirtualModules.mjs +28 -26
  27. package/dist/core/builders/vite/plugins/tsconfigPaths.mjs +11 -11
  28. package/dist/core/builders/vite/plugins/wxtPluginLoader.mjs +42 -47
  29. package/dist/core/{clean.d.ts → clean.d.mts} +7 -3
  30. package/dist/core/clean.mjs +38 -35
  31. package/dist/core/{create-server.d.ts → create-server.d.mts} +6 -2
  32. package/dist/core/create-server.mjs +236 -247
  33. package/dist/core/define-config.d.mts +6 -0
  34. package/dist/core/define-config.mjs +6 -2
  35. package/dist/core/define-web-ext-config.d.mts +13 -0
  36. package/dist/core/define-web-ext-config.mjs +16 -7
  37. package/dist/core/generate-wxt-dir.mjs +110 -148
  38. package/dist/core/index.d.mts +9 -0
  39. package/dist/core/index.mjs +12 -8
  40. package/dist/core/initialize.d.mts +8 -0
  41. package/dist/core/initialize.mjs +110 -124
  42. package/dist/core/keyboard-shortcuts.mjs +30 -28
  43. package/dist/core/package-managers/bun.mjs +18 -16
  44. package/dist/core/package-managers/deno.mjs +12 -8
  45. package/dist/core/package-managers/index.mjs +52 -60
  46. package/dist/core/package-managers/npm.mjs +51 -52
  47. package/dist/core/package-managers/pnpm.mjs +21 -18
  48. package/dist/core/package-managers/yarn.mjs +31 -28
  49. package/dist/core/prepare.d.mts +6 -0
  50. package/dist/core/prepare.mjs +12 -7
  51. package/dist/core/resolve-config.mjs +393 -462
  52. package/dist/core/runners/index.mjs +15 -10
  53. package/dist/core/runners/manual.mjs +13 -14
  54. package/dist/core/runners/safari.mjs +13 -14
  55. package/dist/core/runners/web-ext.mjs +62 -83
  56. package/dist/core/runners/wsl.mjs +13 -14
  57. package/dist/core/utils/arrays.mjs +23 -12
  58. package/dist/core/utils/building/build-entrypoints.mjs +44 -40
  59. package/dist/core/utils/building/detect-dev-changes.mjs +84 -105
  60. package/dist/core/utils/building/find-entrypoints.mjs +278 -359
  61. package/dist/core/utils/building/group-entrypoints.mjs +42 -35
  62. package/dist/core/utils/building/index.mjs +8 -6
  63. package/dist/core/utils/building/internal-build.mjs +86 -102
  64. package/dist/core/utils/building/rebuild.mjs +50 -30
  65. package/dist/core/utils/cache.mjs +29 -18
  66. package/dist/core/utils/constants.mjs +9 -1
  67. package/dist/core/utils/content-scripts.mjs +56 -54
  68. package/dist/core/utils/content-security-policy.mjs +36 -39
  69. package/dist/core/utils/entrypoints.mjs +51 -28
  70. package/dist/core/utils/env.mjs +22 -17
  71. package/dist/core/utils/environments/browser-environment.mjs +13 -12
  72. package/dist/core/utils/environments/environment.mjs +36 -33
  73. package/dist/core/utils/environments/extension-environment.mjs +15 -10
  74. package/dist/core/utils/environments/index.mjs +4 -2
  75. package/dist/core/utils/eslint.mjs +11 -10
  76. package/dist/core/utils/fs.mjs +23 -11
  77. package/dist/core/utils/globals.mjs +53 -51
  78. package/dist/core/utils/i18n.mjs +41 -32
  79. package/dist/core/utils/index.mjs +3 -0
  80. package/dist/core/utils/log/index.mjs +6 -4
  81. package/dist/core/utils/log/printBuildSummary.mjs +20 -25
  82. package/dist/core/utils/log/printFileList.mjs +30 -33
  83. package/dist/core/utils/log/printHeader.mjs +9 -5
  84. package/dist/core/utils/log/printTable.mjs +19 -21
  85. package/dist/core/utils/manifest.mjs +366 -479
  86. package/dist/core/utils/minimatch-multiple.mjs +26 -15
  87. package/dist/core/utils/network.mjs +27 -33
  88. package/dist/core/utils/number.mjs +7 -3
  89. package/dist/core/utils/package.mjs +20 -13
  90. package/dist/core/utils/paths.d.mts +8 -0
  91. package/dist/core/utils/paths.mjs +26 -7
  92. package/dist/core/utils/strings.mjs +19 -14
  93. package/dist/core/utils/syntax-errors.mjs +14 -16
  94. package/dist/core/utils/time.mjs +19 -15
  95. package/dist/core/utils/transform.mjs +129 -160
  96. package/dist/core/utils/types.d.mts +6 -0
  97. package/dist/core/utils/validation.mjs +43 -50
  98. package/dist/core/utils/virtual-modules.mjs +20 -12
  99. package/dist/core/utils/wsl.mjs +11 -3
  100. package/dist/core/wxt.mjs +65 -60
  101. package/dist/core/{zip.d.ts → zip.d.mts} +6 -2
  102. package/dist/core/zip.mjs +118 -140
  103. package/dist/index.d.mts +13 -0
  104. package/dist/index.mjs +13 -3
  105. package/dist/{modules.d.ts → modules.d.mts} +14 -16
  106. package/dist/modules.mjs +179 -51
  107. package/dist/testing/fake-browser.d.mts +2 -0
  108. package/dist/testing/fake-browser.mjs +3 -1
  109. package/dist/testing/index.d.mts +3 -0
  110. package/dist/testing/index.mjs +4 -2
  111. package/dist/testing/{wxt-vitest-plugin.d.ts → wxt-vitest-plugin.d.mts} +7 -9
  112. package/dist/testing/wxt-vitest-plugin.mjs +38 -19
  113. package/dist/types.d.mts +1475 -0
  114. package/dist/utils/app-config.d.mts +6 -0
  115. package/dist/utils/app-config.mjs +8 -2
  116. package/dist/utils/content-script-context.d.mts +134 -0
  117. package/dist/utils/content-script-context.mjs +187 -175
  118. package/dist/utils/content-script-ui/iframe.d.mts +42 -0
  119. package/dist/utils/content-script-ui/iframe.mjs +42 -27
  120. package/dist/utils/content-script-ui/integrated.d.mts +37 -0
  121. package/dist/utils/content-script-ui/integrated.mjs +36 -29
  122. package/dist/utils/content-script-ui/shadow-root.d.mts +80 -0
  123. package/dist/utils/content-script-ui/shadow-root.mjs +75 -82
  124. package/dist/utils/content-script-ui/shared.mjs +115 -150
  125. package/dist/utils/content-script-ui/types.d.mts +107 -0
  126. package/dist/utils/content-script-ui/types.mjs +1 -0
  127. package/dist/utils/{define-app-config.d.ts → define-app-config.d.mts} +5 -3
  128. package/dist/utils/define-app-config.mjs +22 -2
  129. package/dist/utils/define-background.d.mts +7 -0
  130. package/dist/utils/define-background.mjs +7 -3
  131. package/dist/utils/define-content-script.d.mts +6 -0
  132. package/dist/utils/define-content-script.mjs +6 -2
  133. package/dist/utils/define-unlisted-script.d.mts +7 -0
  134. package/dist/utils/define-unlisted-script.mjs +7 -3
  135. package/dist/utils/define-wxt-plugin.d.mts +6 -0
  136. package/dist/utils/define-wxt-plugin.mjs +6 -2
  137. package/dist/utils/inject-script.d.mts +41 -0
  138. package/dist/utils/inject-script.mjs +44 -34
  139. package/dist/utils/internal/custom-events.d.mts +9 -0
  140. package/dist/utils/internal/custom-events.mjs +18 -10
  141. package/dist/utils/internal/location-watcher.mjs +23 -20
  142. package/dist/utils/internal/logger.mjs +15 -12
  143. package/dist/utils/match-patterns.d.mts +1 -0
  144. package/dist/utils/match-patterns.mjs +3 -1
  145. package/dist/utils/{split-shadow-root-css.d.ts → split-shadow-root-css.d.mts} +6 -3
  146. package/dist/utils/split-shadow-root-css.mjs +16 -7
  147. package/dist/utils/storage.d.mts +1 -0
  148. package/dist/utils/storage.mjs +3 -1
  149. package/dist/version.d.mts +4 -0
  150. package/dist/version.mjs +5 -1
  151. package/dist/virtual/background-entrypoint.d.mts +4 -0
  152. package/dist/virtual/background-entrypoint.mjs +143 -161
  153. package/dist/virtual/content-script-isolated-world-entrypoint.d.mts +4 -0
  154. package/dist/virtual/content-script-isolated-world-entrypoint.mjs +26 -27
  155. package/dist/virtual/content-script-main-world-entrypoint.d.mts +4 -0
  156. package/dist/virtual/content-script-main-world-entrypoint.mjs +24 -24
  157. package/dist/virtual/mock-browser.d.mts +6 -0
  158. package/dist/virtual/mock-browser.mjs +5 -3
  159. package/dist/virtual/reload-html.d.mts +1 -0
  160. package/dist/virtual/reload-html.mjs +57 -53
  161. package/dist/virtual/unlisted-script-entrypoint.d.mts +4 -0
  162. package/dist/virtual/unlisted-script-entrypoint.mjs +35 -43
  163. package/package.json +56 -50
  164. package/dist/browser.d.ts +0 -30
  165. package/dist/builtin-modules/index.d.ts +0 -2
  166. package/dist/builtin-modules/unimport.d.ts +0 -5
  167. package/dist/cli/cli-utils.d.ts +0 -25
  168. package/dist/cli/commands.d.ts +0 -2
  169. package/dist/cli/index.d.ts +0 -1
  170. package/dist/core/builders/vite/index.d.ts +0 -7
  171. package/dist/core/builders/vite/plugins/bundleAnalysis.d.ts +0 -7
  172. package/dist/core/builders/vite/plugins/cssEntrypoints.d.ts +0 -13
  173. package/dist/core/builders/vite/plugins/defineImportMeta.d.ts +0 -14
  174. package/dist/core/builders/vite/plugins/devHtmlPrerender.d.ts +0 -7
  175. package/dist/core/builders/vite/plugins/devServerGlobals.d.ts +0 -6
  176. package/dist/core/builders/vite/plugins/download.d.ts +0 -10
  177. package/dist/core/builders/vite/plugins/entrypointGroupGlobals.d.ts +0 -6
  178. package/dist/core/builders/vite/plugins/extensionApiMock.d.ts +0 -6
  179. package/dist/core/builders/vite/plugins/globals.d.ts +0 -3
  180. package/dist/core/builders/vite/plugins/iifeFooter.d.ts +0 -8
  181. package/dist/core/builders/vite/plugins/index.d.ts +0 -16
  182. package/dist/core/builders/vite/plugins/noopBackground.d.ts +0 -6
  183. package/dist/core/builders/vite/plugins/removeEntrypointMainFunction.d.ts +0 -6
  184. package/dist/core/builders/vite/plugins/resolveAppConfig.d.ts +0 -6
  185. package/dist/core/builders/vite/plugins/resolveVirtualModules.d.ts +0 -6
  186. package/dist/core/builders/vite/plugins/tsconfigPaths.d.ts +0 -3
  187. package/dist/core/builders/vite/plugins/wxtPluginLoader.d.ts +0 -6
  188. package/dist/core/define-config.d.ts +0 -2
  189. package/dist/core/define-web-ext-config.d.ts +0 -9
  190. package/dist/core/generate-wxt-dir.d.ts +0 -5
  191. package/dist/core/index.d.ts +0 -8
  192. package/dist/core/initialize.d.ts +0 -5
  193. package/dist/core/keyboard-shortcuts.d.ts +0 -12
  194. package/dist/core/package-managers/bun.d.ts +0 -2
  195. package/dist/core/package-managers/deno.d.ts +0 -2
  196. package/dist/core/package-managers/index.d.ts +0 -2
  197. package/dist/core/package-managers/npm.d.ts +0 -17
  198. package/dist/core/package-managers/pnpm.d.ts +0 -2
  199. package/dist/core/package-managers/types.d.ts +0 -2
  200. package/dist/core/package-managers/types.mjs +0 -0
  201. package/dist/core/package-managers/yarn.d.ts +0 -2
  202. package/dist/core/prepare.d.ts +0 -2
  203. package/dist/core/resolve-config.d.ts +0 -11
  204. package/dist/core/runners/index.d.ts +0 -2
  205. package/dist/core/runners/manual.d.ts +0 -5
  206. package/dist/core/runners/safari.d.ts +0 -5
  207. package/dist/core/runners/web-ext.d.ts +0 -5
  208. package/dist/core/runners/wsl.d.ts +0 -5
  209. package/dist/core/utils/arrays.d.ts +0 -13
  210. package/dist/core/utils/building/build-entrypoints.d.ts +0 -3
  211. package/dist/core/utils/building/detect-dev-changes.d.ts +0 -61
  212. package/dist/core/utils/building/find-entrypoints.d.ts +0 -5
  213. package/dist/core/utils/building/group-entrypoints.d.ts +0 -8
  214. package/dist/core/utils/building/index.d.ts +0 -6
  215. package/dist/core/utils/building/internal-build.d.ts +0 -12
  216. package/dist/core/utils/building/rebuild.d.ts +0 -23
  217. package/dist/core/utils/cache.d.ts +0 -8
  218. package/dist/core/utils/cli.d.ts +0 -3
  219. package/dist/core/utils/cli.mjs +0 -26
  220. package/dist/core/utils/constants.d.ts +0 -5
  221. package/dist/core/utils/content-scripts.d.ts +0 -12
  222. package/dist/core/utils/content-security-policy.d.ts +0 -14
  223. package/dist/core/utils/entrypoints.d.ts +0 -31
  224. package/dist/core/utils/env.d.ts +0 -5
  225. package/dist/core/utils/environments/browser-environment.d.ts +0 -3
  226. package/dist/core/utils/environments/environment.d.ts +0 -8
  227. package/dist/core/utils/environments/extension-environment.d.ts +0 -6
  228. package/dist/core/utils/environments/index.d.ts +0 -2
  229. package/dist/core/utils/eslint.d.ts +0 -1
  230. package/dist/core/utils/fs.d.ts +0 -13
  231. package/dist/core/utils/globals.d.ts +0 -11
  232. package/dist/core/utils/i18n.d.ts +0 -11
  233. package/dist/core/utils/log/index.d.ts +0 -4
  234. package/dist/core/utils/log/printBuildSummary.d.ts +0 -2
  235. package/dist/core/utils/log/printFileList.d.ts +0 -1
  236. package/dist/core/utils/log/printHeader.d.ts +0 -1
  237. package/dist/core/utils/log/printTable.d.ts +0 -1
  238. package/dist/core/utils/manifest.d.ts +0 -40
  239. package/dist/core/utils/minimatch-multiple.d.ts +0 -15
  240. package/dist/core/utils/network.d.ts +0 -7
  241. package/dist/core/utils/number.d.ts +0 -1
  242. package/dist/core/utils/package.d.ts +0 -6
  243. package/dist/core/utils/paths.d.ts +0 -11
  244. package/dist/core/utils/strings.d.ts +0 -14
  245. package/dist/core/utils/syntax-errors.d.ts +0 -11
  246. package/dist/core/utils/testing/fake-objects.d.ts +0 -11665
  247. package/dist/core/utils/testing/fake-objects.mjs +0 -326
  248. package/dist/core/utils/time.d.ts +0 -9
  249. package/dist/core/utils/transform.d.ts +0 -11
  250. package/dist/core/utils/types.d.ts +0 -13
  251. package/dist/core/utils/types.mjs +0 -0
  252. package/dist/core/utils/validation.d.ts +0 -15
  253. package/dist/core/utils/virtual-modules.d.ts +0 -22
  254. package/dist/core/utils/wsl.d.ts +0 -4
  255. package/dist/core/wxt.d.ts +0 -24
  256. package/dist/index.d.ts +0 -11
  257. package/dist/testing/fake-browser.d.ts +0 -10
  258. package/dist/testing/index.d.ts +0 -10
  259. package/dist/types.d.ts +0 -1459
  260. package/dist/types.mjs +0 -0
  261. package/dist/utils/app-config.d.ts +0 -2
  262. package/dist/utils/content-script-context.d.ts +0 -134
  263. package/dist/utils/content-script-ui/iframe.d.ts +0 -32
  264. package/dist/utils/content-script-ui/integrated.d.ts +0 -34
  265. package/dist/utils/content-script-ui/shadow-root.d.ts +0 -76
  266. package/dist/utils/content-script-ui/shared.d.ts +0 -5
  267. package/dist/utils/content-script-ui/types.d.ts +0 -104
  268. package/dist/utils/define-background.d.ts +0 -4
  269. package/dist/utils/define-content-script.d.ts +0 -3
  270. package/dist/utils/define-unlisted-script.d.ts +0 -4
  271. package/dist/utils/define-wxt-plugin.d.ts +0 -3
  272. package/dist/utils/inject-script.d.ts +0 -36
  273. package/dist/utils/internal/custom-events.d.ts +0 -10
  274. package/dist/utils/internal/dev-server-websocket.d.ts +0 -21
  275. package/dist/utils/internal/dev-server-websocket.mjs +0 -37
  276. package/dist/utils/internal/location-watcher.d.ts +0 -12
  277. package/dist/utils/internal/logger.d.ts +0 -9
  278. package/dist/utils/match-patterns.d.ts +0 -5
  279. package/dist/utils/storage.d.ts +0 -5
  280. package/dist/version.d.ts +0 -1
@@ -1,193 +1,175 @@
1
- import definition from 'virtual:user-background-entrypoint';
2
- import { initPlugins } from 'virtual:wxt-plugins';
3
- import { browser } from 'wxt/browser';
4
- import { MatchPattern } from 'wxt/utils/match-patterns';
1
+ import definition from "virtual:user-background-entrypoint";
2
+ import { initPlugins } from "virtual:wxt-plugins";
3
+ import { browser } from "wxt/browser";
4
+ import { MatchPattern } from "wxt/utils/match-patterns";
5
5
 
6
+ //#region src/utils/internal/logger.ts
6
7
  function print(method, ...args) {
7
- if (import.meta.env.MODE === "production") return;
8
- if (typeof args[0] === "string") {
9
- const message = args.shift();
10
- method(`[wxt] ${message}`, ...args);
11
- } else {
12
- method("[wxt]", ...args);
13
- }
8
+ if (import.meta.env.MODE === "production") return;
9
+ if (typeof args[0] === "string") method(`[wxt] ${args.shift()}`, ...args);
10
+ else method("[wxt]", ...args);
14
11
  }
12
+ /**
13
+ * Wrapper around `console` with a "[wxt]" prefix
14
+ */
15
15
  const logger = {
16
- debug: (...args) => print(console.debug, ...args),
17
- log: (...args) => print(console.log, ...args),
18
- warn: (...args) => print(console.warn, ...args),
19
- error: (...args) => print(console.error, ...args)
16
+ debug: (...args) => print(console.debug, ...args),
17
+ log: (...args) => print(console.log, ...args),
18
+ warn: (...args) => print(console.warn, ...args),
19
+ error: (...args) => print(console.error, ...args)
20
20
  };
21
21
 
22
+ //#endregion
23
+ //#region src/utils/internal/dev-server-websocket.ts
22
24
  let ws;
25
+ /**
26
+ * Connect to the websocket and listen for messages.
27
+ */
23
28
  function getDevServerWebSocket() {
24
- if (import.meta.env.COMMAND !== "serve")
25
- throw Error(
26
- "Must be running WXT dev command to connect to call getDevServerWebSocket()"
27
- );
28
- if (ws == null) {
29
- const serverUrl = __DEV_SERVER_ORIGIN__;
30
- logger.debug("Connecting to dev server @", serverUrl);
31
- ws = new WebSocket(serverUrl, "vite-hmr");
32
- ws.addWxtEventListener = ws.addEventListener.bind(ws);
33
- ws.sendCustom = (event, payload) => ws?.send(JSON.stringify({ type: "custom", event, payload }));
34
- ws.addEventListener("open", () => {
35
- logger.debug("Connected to dev server");
36
- });
37
- ws.addEventListener("close", () => {
38
- logger.debug("Disconnected from dev server");
39
- });
40
- ws.addEventListener("error", (event) => {
41
- logger.error("Failed to connect to dev server", event);
42
- });
43
- ws.addEventListener("message", (e) => {
44
- try {
45
- const message = JSON.parse(e.data);
46
- if (message.type === "custom") {
47
- ws?.dispatchEvent(
48
- new CustomEvent(message.event, { detail: message.data })
49
- );
50
- }
51
- } catch (err) {
52
- logger.error("Failed to handle message", err);
53
- }
54
- });
55
- }
56
- return ws;
29
+ if (import.meta.env.COMMAND !== "serve") throw Error("Must be running WXT dev command to connect to call getDevServerWebSocket()");
30
+ if (ws == null) {
31
+ const serverUrl = __DEV_SERVER_ORIGIN__;
32
+ logger.debug("Connecting to dev server @", serverUrl);
33
+ ws = new WebSocket(serverUrl, "vite-hmr");
34
+ ws.addWxtEventListener = ws.addEventListener.bind(ws);
35
+ ws.sendCustom = (event, payload) => ws?.send(JSON.stringify({
36
+ type: "custom",
37
+ event,
38
+ payload
39
+ }));
40
+ ws.addEventListener("open", () => {
41
+ logger.debug("Connected to dev server");
42
+ });
43
+ ws.addEventListener("close", () => {
44
+ logger.debug("Disconnected from dev server");
45
+ });
46
+ ws.addEventListener("error", (event) => {
47
+ logger.error("Failed to connect to dev server", event);
48
+ });
49
+ ws.addEventListener("message", (e) => {
50
+ try {
51
+ const message = JSON.parse(e.data);
52
+ if (message.type === "custom") ws?.dispatchEvent(new CustomEvent(message.event, { detail: message.data }));
53
+ } catch (err) {
54
+ logger.error("Failed to handle message", err);
55
+ }
56
+ });
57
+ }
58
+ return ws;
57
59
  }
58
60
 
61
+ //#endregion
62
+ //#region src/virtual/utils/keep-service-worker-alive.ts
63
+ /**
64
+ * https://developer.chrome.com/blog/longer-esw-lifetimes/
65
+ */
59
66
  function keepServiceWorkerAlive() {
60
- setInterval(async () => {
61
- await browser.runtime.getPlatformInfo();
62
- }, 5e3);
67
+ setInterval(async () => {
68
+ await browser.runtime.getPlatformInfo();
69
+ }, 5e3);
63
70
  }
64
71
 
72
+ //#endregion
73
+ //#region src/virtual/utils/reload-content-scripts.ts
65
74
  function reloadContentScript(payload) {
66
- const manifest = browser.runtime.getManifest();
67
- if (manifest.manifest_version == 2) {
68
- void reloadContentScriptMv2();
69
- } else {
70
- void reloadContentScriptMv3(payload);
71
- }
75
+ if (browser.runtime.getManifest().manifest_version == 2) reloadContentScriptMv2(payload);
76
+ else reloadContentScriptMv3(payload);
72
77
  }
73
- async function reloadContentScriptMv3({
74
- registration,
75
- contentScript
76
- }) {
77
- if (registration === "runtime") {
78
- await reloadRuntimeContentScriptMv3(contentScript);
79
- } else {
80
- await reloadManifestContentScriptMv3(contentScript);
81
- }
78
+ async function reloadContentScriptMv3({ registration, contentScript }) {
79
+ if (registration === "runtime") await reloadRuntimeContentScriptMv3(contentScript);
80
+ else await reloadManifestContentScriptMv3(contentScript);
82
81
  }
83
82
  async function reloadManifestContentScriptMv3(contentScript) {
84
- const id = `wxt:${contentScript.js[0]}`;
85
- logger.log("Reloading content script:", contentScript);
86
- const registered = await browser.scripting.getRegisteredContentScripts();
87
- logger.debug("Existing scripts:", registered);
88
- const existing = registered.find((cs) => cs.id === id);
89
- if (existing) {
90
- logger.debug("Updating content script", existing);
91
- await browser.scripting.updateContentScripts([
92
- {
93
- ...contentScript,
94
- id,
95
- css: contentScript.css ?? []
96
- }
97
- ]);
98
- } else {
99
- logger.debug("Registering new content script...");
100
- await browser.scripting.registerContentScripts([
101
- {
102
- ...contentScript,
103
- id,
104
- css: contentScript.css ?? []
105
- }
106
- ]);
107
- }
108
- await reloadTabsForContentScript(contentScript);
83
+ const id = `wxt:${contentScript.js[0]}`;
84
+ logger.log("Reloading content script:", contentScript);
85
+ const registered = await browser.scripting.getRegisteredContentScripts();
86
+ logger.debug("Existing scripts:", registered);
87
+ const existing = registered.find((cs) => cs.id === id);
88
+ if (existing) {
89
+ logger.debug("Updating content script", existing);
90
+ await browser.scripting.updateContentScripts([{
91
+ ...contentScript,
92
+ id,
93
+ css: contentScript.css ?? []
94
+ }]);
95
+ } else {
96
+ logger.debug("Registering new content script...");
97
+ await browser.scripting.registerContentScripts([{
98
+ ...contentScript,
99
+ id,
100
+ css: contentScript.css ?? []
101
+ }]);
102
+ }
103
+ await reloadTabsForContentScript(contentScript);
109
104
  }
110
105
  async function reloadRuntimeContentScriptMv3(contentScript) {
111
- logger.log("Reloading content script:", contentScript);
112
- const registered = await browser.scripting.getRegisteredContentScripts();
113
- logger.debug("Existing scripts:", registered);
114
- const matches = registered.filter((cs) => {
115
- const hasJs = contentScript.js?.find((js) => cs.js?.includes(js));
116
- const hasCss = contentScript.css?.find((css) => cs.css?.includes(css));
117
- return hasJs || hasCss;
118
- });
119
- if (matches.length === 0) {
120
- logger.log(
121
- "Content script is not registered yet, nothing to reload",
122
- contentScript
123
- );
124
- return;
125
- }
126
- await browser.scripting.updateContentScripts(matches);
127
- await reloadTabsForContentScript(contentScript);
106
+ logger.log("Reloading content script:", contentScript);
107
+ const registered = await browser.scripting.getRegisteredContentScripts();
108
+ logger.debug("Existing scripts:", registered);
109
+ const matches = registered.filter((cs) => {
110
+ const hasJs = contentScript.js?.find((js) => cs.js?.includes(js));
111
+ const hasCss = contentScript.css?.find((css) => cs.css?.includes(css));
112
+ return hasJs || hasCss;
113
+ });
114
+ if (matches.length === 0) {
115
+ logger.log("Content script is not registered yet, nothing to reload", contentScript);
116
+ return;
117
+ }
118
+ await browser.scripting.updateContentScripts(matches);
119
+ await reloadTabsForContentScript(contentScript);
128
120
  }
129
121
  async function reloadTabsForContentScript(contentScript) {
130
- const allTabs = await browser.tabs.query({});
131
- const matchPatterns = contentScript.matches.map(
132
- (match) => new MatchPattern(match)
133
- );
134
- const matchingTabs = allTabs.filter((tab) => {
135
- const url = tab.url;
136
- if (!url) return false;
137
- return !!matchPatterns.find((pattern) => pattern.includes(url));
138
- });
139
- await Promise.all(
140
- matchingTabs.map(async (tab) => {
141
- try {
142
- await browser.tabs.reload(tab.id);
143
- } catch (err) {
144
- logger.warn("Failed to reload tab:", err);
145
- }
146
- })
147
- );
122
+ const allTabs = await browser.tabs.query({});
123
+ const matchPatterns = contentScript.matches.map((match) => new MatchPattern(match));
124
+ const matchingTabs = allTabs.filter((tab) => {
125
+ const url = tab.url;
126
+ if (!url) return false;
127
+ return !!matchPatterns.find((pattern) => pattern.includes(url));
128
+ });
129
+ await Promise.all(matchingTabs.map(async (tab) => {
130
+ try {
131
+ await browser.tabs.reload(tab.id);
132
+ } catch (err) {
133
+ logger.warn("Failed to reload tab:", err);
134
+ }
135
+ }));
148
136
  }
149
137
  async function reloadContentScriptMv2(_payload) {
150
- throw Error("TODO: reloadContentScriptMv2");
138
+ throw Error("TODO: reloadContentScriptMv2");
151
139
  }
152
140
 
141
+ //#endregion
142
+ //#region src/virtual/background-entrypoint.ts
153
143
  if (import.meta.env.COMMAND === "serve") {
154
- try {
155
- const ws = getDevServerWebSocket();
156
- ws.addWxtEventListener("wxt:reload-extension", () => {
157
- browser.runtime.reload();
158
- });
159
- ws.addWxtEventListener("wxt:reload-content-script", (event) => {
160
- reloadContentScript(event.detail);
161
- });
162
- if (import.meta.env.MANIFEST_VERSION === 3) {
163
- ws.addEventListener(
164
- "open",
165
- () => ws.sendCustom("wxt:background-initialized")
166
- );
167
- keepServiceWorkerAlive();
168
- }
169
- } catch (err) {
170
- logger.error("Failed to setup web socket connection with dev server", err);
171
- }
172
- browser.commands.onCommand.addListener((command) => {
173
- if (command === "wxt:reload-extension") {
174
- browser.runtime.reload();
175
- }
176
- });
144
+ try {
145
+ const ws = getDevServerWebSocket();
146
+ ws.addWxtEventListener("wxt:reload-extension", () => {
147
+ browser.runtime.reload();
148
+ });
149
+ ws.addWxtEventListener("wxt:reload-content-script", (event) => {
150
+ reloadContentScript(event.detail);
151
+ });
152
+ if (import.meta.env.MANIFEST_VERSION === 3) {
153
+ ws.addEventListener("open", () => ws.sendCustom("wxt:background-initialized"));
154
+ keepServiceWorkerAlive();
155
+ }
156
+ } catch (err) {
157
+ logger.error("Failed to setup web socket connection with dev server", err);
158
+ }
159
+ browser.commands.onCommand.addListener((command) => {
160
+ if (command === "wxt:reload-extension") browser.runtime.reload();
161
+ });
177
162
  }
178
163
  let result;
179
164
  try {
180
- initPlugins();
181
- result = definition.main();
182
- if (result instanceof Promise) {
183
- console.warn(
184
- "The background's main() function return a promise, but it must be synchronous"
185
- );
186
- }
165
+ initPlugins();
166
+ result = definition.main();
167
+ if (result instanceof Promise) console.warn("The background's main() function return a promise, but it must be synchronous");
187
168
  } catch (err) {
188
- logger.error("The background crashed on startup!");
189
- throw err;
169
+ logger.error("The background crashed on startup!");
170
+ throw err;
190
171
  }
191
- const result$1 = result;
172
+ var background_entrypoint_default = result;
192
173
 
193
- export { result$1 as default };
174
+ //#endregion
175
+ export { background_entrypoint_default as default };
@@ -0,0 +1,4 @@
1
+ //#region src/virtual/content-script-isolated-world-entrypoint.d.ts
2
+ declare const result: Promise<any>;
3
+ //#endregion
4
+ export { result as default };
@@ -1,36 +1,35 @@
1
- import definition from 'virtual:user-content-script-isolated-world-entrypoint';
2
- import { ContentScriptContext } from 'wxt/utils/content-script-context';
3
- import { initPlugins } from 'virtual:wxt-plugins';
1
+ import definition from "virtual:user-content-script-isolated-world-entrypoint";
2
+ import { ContentScriptContext } from "wxt/utils/content-script-context";
3
+ import { initPlugins } from "virtual:wxt-plugins";
4
4
 
5
+ //#region src/utils/internal/logger.ts
5
6
  function print(method, ...args) {
6
- if (import.meta.env.MODE === "production") return;
7
- if (typeof args[0] === "string") {
8
- const message = args.shift();
9
- method(`[wxt] ${message}`, ...args);
10
- } else {
11
- method("[wxt]", ...args);
12
- }
7
+ if (import.meta.env.MODE === "production") return;
8
+ if (typeof args[0] === "string") method(`[wxt] ${args.shift()}`, ...args);
9
+ else method("[wxt]", ...args);
13
10
  }
11
+ /**
12
+ * Wrapper around `console` with a "[wxt]" prefix
13
+ */
14
14
  const logger = {
15
- debug: (...args) => print(console.debug, ...args),
16
- log: (...args) => print(console.log, ...args),
17
- warn: (...args) => print(console.warn, ...args),
18
- error: (...args) => print(console.error, ...args)
15
+ debug: (...args) => print(console.debug, ...args),
16
+ log: (...args) => print(console.log, ...args),
17
+ warn: (...args) => print(console.warn, ...args),
18
+ error: (...args) => print(console.error, ...args)
19
19
  };
20
20
 
21
+ //#endregion
22
+ //#region src/virtual/content-script-isolated-world-entrypoint.ts
21
23
  const result = (async () => {
22
- try {
23
- initPlugins();
24
- const { main, ...options } = definition;
25
- const ctx = new ContentScriptContext(import.meta.env.ENTRYPOINT, options);
26
- return await main(ctx);
27
- } catch (err) {
28
- logger.error(
29
- `The content script "${import.meta.env.ENTRYPOINT}" crashed on startup!`,
30
- err
31
- );
32
- throw err;
33
- }
24
+ try {
25
+ initPlugins();
26
+ const { main, ...options } = definition;
27
+ return await main(new ContentScriptContext(import.meta.env.ENTRYPOINT, options));
28
+ } catch (err) {
29
+ logger.error(`The content script "${import.meta.env.ENTRYPOINT}" crashed on startup!`, err);
30
+ throw err;
31
+ }
34
32
  })();
35
33
 
36
- export { result as default };
34
+ //#endregion
35
+ export { result as default };
@@ -0,0 +1,4 @@
1
+ //#region src/virtual/content-script-main-world-entrypoint.d.ts
2
+ declare const result: Promise<any>;
3
+ //#endregion
4
+ export { result as default };
@@ -1,33 +1,33 @@
1
- import definition from 'virtual:user-content-script-main-world-entrypoint';
2
- import { initPlugins } from 'virtual:wxt-plugins';
1
+ import definition from "virtual:user-content-script-main-world-entrypoint";
2
+ import { initPlugins } from "virtual:wxt-plugins";
3
3
 
4
+ //#region src/utils/internal/logger.ts
4
5
  function print(method, ...args) {
5
- if (import.meta.env.MODE === "production") return;
6
- if (typeof args[0] === "string") {
7
- const message = args.shift();
8
- method(`[wxt] ${message}`, ...args);
9
- } else {
10
- method("[wxt]", ...args);
11
- }
6
+ if (import.meta.env.MODE === "production") return;
7
+ if (typeof args[0] === "string") method(`[wxt] ${args.shift()}`, ...args);
8
+ else method("[wxt]", ...args);
12
9
  }
10
+ /**
11
+ * Wrapper around `console` with a "[wxt]" prefix
12
+ */
13
13
  const logger = {
14
- debug: (...args) => print(console.debug, ...args),
15
- log: (...args) => print(console.log, ...args),
16
- warn: (...args) => print(console.warn, ...args),
17
- error: (...args) => print(console.error, ...args)
14
+ debug: (...args) => print(console.debug, ...args),
15
+ log: (...args) => print(console.log, ...args),
16
+ warn: (...args) => print(console.warn, ...args),
17
+ error: (...args) => print(console.error, ...args)
18
18
  };
19
19
 
20
+ //#endregion
21
+ //#region src/virtual/content-script-main-world-entrypoint.ts
20
22
  const result = (async () => {
21
- try {
22
- initPlugins();
23
- return await definition.main();
24
- } catch (err) {
25
- logger.error(
26
- `The content script "${import.meta.env.ENTRYPOINT}" crashed on startup!`,
27
- err
28
- );
29
- throw err;
30
- }
23
+ try {
24
+ initPlugins();
25
+ return await definition.main();
26
+ } catch (err) {
27
+ logger.error(`The content script "${import.meta.env.ENTRYPOINT}" crashed on startup!`, err);
28
+ throw err;
29
+ }
31
30
  })();
32
31
 
33
- export { result as default };
32
+ //#endregion
33
+ export { result as default };
@@ -0,0 +1,6 @@
1
+ import { fakeBrowser } from "wxt/testing";
2
+
3
+ //#region src/virtual/mock-browser.d.ts
4
+ declare const browser: any;
5
+ //#endregion
6
+ export { browser, fakeBrowser as default };
@@ -1,6 +1,8 @@
1
- import { fakeBrowser } from 'wxt/testing';
2
- export { fakeBrowser as default } from 'wxt/testing';
1
+ import { fakeBrowser } from "wxt/testing";
3
2
 
3
+ //#region src/virtual/mock-browser.ts
4
4
  const browser = fakeBrowser;
5
+ var mock_browser_default = fakeBrowser;
5
6
 
6
- export { browser };
7
+ //#endregion
8
+ export { browser, mock_browser_default as default };
@@ -0,0 +1 @@
1
+ export { };
@@ -1,63 +1,67 @@
1
+ //#region src/utils/internal/logger.ts
1
2
  function print(method, ...args) {
2
- if (import.meta.env.MODE === "production") return;
3
- if (typeof args[0] === "string") {
4
- const message = args.shift();
5
- method(`[wxt] ${message}`, ...args);
6
- } else {
7
- method("[wxt]", ...args);
8
- }
3
+ if (import.meta.env.MODE === "production") return;
4
+ if (typeof args[0] === "string") method(`[wxt] ${args.shift()}`, ...args);
5
+ else method("[wxt]", ...args);
9
6
  }
7
+ /**
8
+ * Wrapper around `console` with a "[wxt]" prefix
9
+ */
10
10
  const logger = {
11
- debug: (...args) => print(console.debug, ...args),
12
- log: (...args) => print(console.log, ...args),
13
- warn: (...args) => print(console.warn, ...args),
14
- error: (...args) => print(console.error, ...args)
11
+ debug: (...args) => print(console.debug, ...args),
12
+ log: (...args) => print(console.log, ...args),
13
+ warn: (...args) => print(console.warn, ...args),
14
+ error: (...args) => print(console.error, ...args)
15
15
  };
16
16
 
17
+ //#endregion
18
+ //#region src/utils/internal/dev-server-websocket.ts
17
19
  let ws;
20
+ /**
21
+ * Connect to the websocket and listen for messages.
22
+ */
18
23
  function getDevServerWebSocket() {
19
- if (import.meta.env.COMMAND !== "serve")
20
- throw Error(
21
- "Must be running WXT dev command to connect to call getDevServerWebSocket()"
22
- );
23
- if (ws == null) {
24
- const serverUrl = __DEV_SERVER_ORIGIN__;
25
- logger.debug("Connecting to dev server @", serverUrl);
26
- ws = new WebSocket(serverUrl, "vite-hmr");
27
- ws.addWxtEventListener = ws.addEventListener.bind(ws);
28
- ws.sendCustom = (event, payload) => ws?.send(JSON.stringify({ type: "custom", event, payload }));
29
- ws.addEventListener("open", () => {
30
- logger.debug("Connected to dev server");
31
- });
32
- ws.addEventListener("close", () => {
33
- logger.debug("Disconnected from dev server");
34
- });
35
- ws.addEventListener("error", (event) => {
36
- logger.error("Failed to connect to dev server", event);
37
- });
38
- ws.addEventListener("message", (e) => {
39
- try {
40
- const message = JSON.parse(e.data);
41
- if (message.type === "custom") {
42
- ws?.dispatchEvent(
43
- new CustomEvent(message.event, { detail: message.data })
44
- );
45
- }
46
- } catch (err) {
47
- logger.error("Failed to handle message", err);
48
- }
49
- });
50
- }
51
- return ws;
24
+ if (import.meta.env.COMMAND !== "serve") throw Error("Must be running WXT dev command to connect to call getDevServerWebSocket()");
25
+ if (ws == null) {
26
+ const serverUrl = __DEV_SERVER_ORIGIN__;
27
+ logger.debug("Connecting to dev server @", serverUrl);
28
+ ws = new WebSocket(serverUrl, "vite-hmr");
29
+ ws.addWxtEventListener = ws.addEventListener.bind(ws);
30
+ ws.sendCustom = (event, payload) => ws?.send(JSON.stringify({
31
+ type: "custom",
32
+ event,
33
+ payload
34
+ }));
35
+ ws.addEventListener("open", () => {
36
+ logger.debug("Connected to dev server");
37
+ });
38
+ ws.addEventListener("close", () => {
39
+ logger.debug("Disconnected from dev server");
40
+ });
41
+ ws.addEventListener("error", (event) => {
42
+ logger.error("Failed to connect to dev server", event);
43
+ });
44
+ ws.addEventListener("message", (e) => {
45
+ try {
46
+ const message = JSON.parse(e.data);
47
+ if (message.type === "custom") ws?.dispatchEvent(new CustomEvent(message.event, { detail: message.data }));
48
+ } catch (err) {
49
+ logger.error("Failed to handle message", err);
50
+ }
51
+ });
52
+ }
53
+ return ws;
52
54
  }
53
55
 
54
- if (import.meta.env.COMMAND === "serve") {
55
- try {
56
- const ws = getDevServerWebSocket();
57
- ws.addWxtEventListener("wxt:reload-page", (event) => {
58
- if (event.detail === location.pathname.substring(1)) location.reload();
59
- });
60
- } catch (err) {
61
- logger.error("Failed to setup web socket connection with dev server", err);
62
- }
56
+ //#endregion
57
+ //#region src/virtual/reload-html.ts
58
+ if (import.meta.env.COMMAND === "serve") try {
59
+ getDevServerWebSocket().addWxtEventListener("wxt:reload-page", (event) => {
60
+ if (event.detail === location.pathname.substring(1)) location.reload();
61
+ });
62
+ } catch (err) {
63
+ logger.error("Failed to setup web socket connection with dev server", err);
63
64
  }
65
+
66
+ //#endregion
67
+ export { };
@@ -0,0 +1,4 @@
1
+ //#region src/virtual/unlisted-script-entrypoint.d.ts
2
+ declare const result: any;
3
+ //#endregion
4
+ export { result as default };