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,492 +1,423 @@
1
- import { loadConfig } from "c12";
2
- import { resolve as esmResolve } from "import-meta-resolve";
3
- import path from "node:path";
4
- import { createFsCache } from "./utils/cache.mjs";
5
- import consola, { LogLevels } from "consola";
6
- import defu from "defu";
7
- import fs from "fs-extra";
8
1
  import { normalizePath } from "./utils/paths.mjs";
9
- import glob from "fast-glob";
2
+ import { createFsCache } from "./utils/cache.mjs";
3
+ import "./utils/index.mjs";
10
4
  import { builtinModules } from "../builtin-modules/index.mjs";
11
5
  import { getEslintVersion } from "./utils/eslint.mjs";
12
6
  import { safeStringToNumber } from "./utils/number.mjs";
13
7
  import { loadEnv } from "./utils/env.mjs";
8
+ import fs from "fs-extra";
9
+ import glob from "fast-glob";
10
+ import path from "node:path";
11
+ import { loadConfig } from "c12";
12
+ import { resolve as resolve$1 } from "import-meta-resolve";
13
+ import consola, { LogLevels } from "consola";
14
+ import defu from "defu";
14
15
  import { getPort } from "get-port-please";
15
16
  import { fileURLToPath, pathToFileURL } from "node:url";
16
- export async function resolveConfig(inlineConfig, command) {
17
- let userConfig = {};
18
- let userConfigMetadata;
19
- if (inlineConfig.configFile !== false) {
20
- const { config: loadedConfig, ...metadata } = await loadConfig({
21
- configFile: inlineConfig.configFile,
22
- name: "wxt",
23
- cwd: inlineConfig.root ?? process.cwd()
24
- });
25
- userConfig = loadedConfig ?? {};
26
- userConfigMetadata = metadata;
27
- }
28
- const mergedConfig = await mergeInlineConfig(inlineConfig, userConfig);
29
- const debug = mergedConfig.debug ?? false;
30
- const logger = mergedConfig.logger ?? consola;
31
- if (debug) logger.level = LogLevels.debug;
32
- const browser = mergedConfig.browser ?? "chrome";
33
- const targetBrowsers = mergedConfig.targetBrowsers ?? [];
34
- if (targetBrowsers.length > 0 && !targetBrowsers.includes(browser)) {
35
- throw new Error(
36
- `Current target browser \`${browser}\` is not in your \`targetBrowsers\` list!`
37
- );
38
- }
39
- const manifestVersion = mergedConfig.manifestVersion ?? (browser === "firefox" || browser === "safari" ? 2 : 3);
40
- const mode = mergedConfig.mode ?? COMMAND_MODES[command];
41
- const env = { browser, command, manifestVersion, mode };
42
- loadEnv(mode, browser);
43
- const root = path.resolve(
44
- inlineConfig.root ?? userConfig.root ?? process.cwd()
45
- );
46
- const wxtDir = path.resolve(root, ".wxt");
47
- const wxtModuleDir = resolveWxtModuleDir();
48
- const srcDir = path.resolve(root, mergedConfig.srcDir ?? root);
49
- const entrypointsDir = path.resolve(
50
- srcDir,
51
- mergedConfig.entrypointsDir ?? "entrypoints"
52
- );
53
- if (await isDirMissing(entrypointsDir)) {
54
- logMissingDir(logger, "Entrypoints", entrypointsDir);
55
- }
56
- const modulesDir = path.resolve(root, mergedConfig.modulesDir ?? "modules");
57
- const filterEntrypoints = mergedConfig.filterEntrypoints?.length ? new Set(mergedConfig.filterEntrypoints) : void 0;
58
- const publicDir = path.resolve(root, mergedConfig.publicDir ?? "public");
59
- const typesDir = path.resolve(wxtDir, "types");
60
- const outBaseDir = path.resolve(root, mergedConfig.outDir ?? ".output");
61
- const modeSuffixes = {
62
- production: "",
63
- development: "-dev"
64
- };
65
- const modeSuffix = modeSuffixes[mode] ?? `-${mode}`;
66
- const outDirTemplate = (mergedConfig.outDirTemplate ?? `${browser}-mv${manifestVersion}${modeSuffix}`).replaceAll("{{browser}}", browser).replaceAll("{{manifestVersion}}", manifestVersion.toString()).replaceAll("{{modeSuffix}}", modeSuffix).replaceAll("{{mode}}", mode).replaceAll("{{command}}", command);
67
- const outDir = path.resolve(outBaseDir, outDirTemplate);
68
- const reloadCommand = mergedConfig.dev?.reloadCommand ?? "Alt+R";
69
- if (inlineConfig.runner != null || userConfig.runner != null) {
70
- logger.warn(
71
- "`InlineConfig#runner` is deprecated, use `InlineConfig#webExt` instead. See https://wxt.dev/guide/resources/upgrading.html#v0-19-0-rarr-v0-20-0"
72
- );
73
- }
74
- const runnerConfig = await loadConfig({
75
- name: "web-ext",
76
- cwd: root,
77
- globalRc: true,
78
- rcFile: ".webextrc",
79
- overrides: inlineConfig.webExt ?? inlineConfig.runner,
80
- defaults: userConfig.webExt ?? userConfig.runner
81
- });
82
- const alias = Object.fromEntries(
83
- Object.entries({
84
- ...mergedConfig.alias,
85
- "@": srcDir,
86
- "~": srcDir,
87
- "@@": root,
88
- "~~": root
89
- }).map(([key, value]) => [key, path.resolve(root, value)])
90
- );
91
- let devServerConfig;
92
- if (command === "serve") {
93
- if (mergedConfig.dev?.server?.hostname)
94
- logger.warn(
95
- `The 'hostname' option is deprecated, please use 'host' or 'origin' depending on your circumstances.`
96
- );
97
- const host = mergedConfig.dev?.server?.host ?? mergedConfig.dev?.server?.hostname ?? "localhost";
98
- let port = mergedConfig.dev?.server?.port;
99
- const origin = mergedConfig.dev?.server?.origin ?? mergedConfig.dev?.server?.hostname ?? "localhost";
100
- if (port == null || !isFinite(port)) {
101
- port = await getPort({
102
- // Passing host required for Mac, unsure of Windows/Linux
103
- host,
104
- port: 3e3,
105
- portRange: [3001, 3010]
106
- });
107
- }
108
- const originWithProtocolAndPort = [
109
- origin.match(/^https?:\/\//) ? "" : "http://",
110
- origin,
111
- origin.match(/:[0-9]+$/) ? "" : `:${port}`
112
- ].join("");
113
- devServerConfig = {
114
- host,
115
- port,
116
- origin: originWithProtocolAndPort,
117
- watchDebounce: safeStringToNumber(process.env.WXT_WATCH_DEBOUNCE) ?? 800
118
- };
119
- }
120
- const userModules = await resolveWxtUserModules(
121
- root,
122
- modulesDir,
123
- mergedConfig.modules
124
- );
125
- const moduleOptions = userModules.reduce(
126
- (map, module) => {
127
- if (module.configKey) {
128
- map[module.configKey] = // @ts-expect-error
129
- mergedConfig[module.configKey];
130
- }
131
- return map;
132
- },
133
- {}
134
- );
135
- return {
136
- browser,
137
- targetBrowsers,
138
- command,
139
- debug,
140
- entrypointsDir,
141
- modulesDir,
142
- filterEntrypoints,
143
- env,
144
- fsCache: createFsCache(wxtDir),
145
- imports: await getUnimportOptions(wxtDir, srcDir, logger, mergedConfig),
146
- logger,
147
- manifest: await resolveManifestConfig(env, mergedConfig.manifest),
148
- manifestVersion,
149
- mode,
150
- outBaseDir,
151
- outDir,
152
- publicDir,
153
- wxtModuleDir,
154
- root,
155
- runnerConfig,
156
- srcDir,
157
- typesDir,
158
- wxtDir,
159
- zip: resolveZipConfig(root, browser, outBaseDir, mergedConfig),
160
- analysis: resolveAnalysisConfig(root, mergedConfig),
161
- userConfigMetadata: userConfigMetadata ?? {},
162
- alias,
163
- experimental: defu(mergedConfig.experimental, {}),
164
- dev: {
165
- server: devServerConfig,
166
- reloadCommand
167
- },
168
- hooks: mergedConfig.hooks ?? {},
169
- vite: mergedConfig.vite ?? (() => ({})),
170
- builtinModules,
171
- userModules,
172
- plugins: [],
173
- ...moduleOptions
174
- };
17
+
18
+ //#region src/core/resolve-config.ts
19
+ /**
20
+ * Given an inline config, discover the config file if necessary, merge the results, resolve any
21
+ * relative paths, and apply any defaults.
22
+ *
23
+ * Inline config always has priority over user config. Cli flags are passed as inline config if set.
24
+ * If unset, undefined is passed in, letting this function decide default values.
25
+ */
26
+ async function resolveConfig(inlineConfig, command) {
27
+ let userConfig = {};
28
+ let userConfigMetadata;
29
+ if (inlineConfig.configFile !== false) {
30
+ const { config: loadedConfig, ...metadata } = await loadConfig({
31
+ configFile: inlineConfig.configFile,
32
+ name: "wxt",
33
+ cwd: inlineConfig.root ?? process.cwd()
34
+ });
35
+ userConfig = loadedConfig ?? {};
36
+ userConfigMetadata = metadata;
37
+ }
38
+ const mergedConfig = await mergeInlineConfig(inlineConfig, userConfig);
39
+ const debug = mergedConfig.debug ?? false;
40
+ const logger = mergedConfig.logger ?? consola;
41
+ if (debug) logger.level = LogLevels.debug;
42
+ const browser = mergedConfig.browser ?? "chrome";
43
+ const targetBrowsers = mergedConfig.targetBrowsers ?? [];
44
+ if (targetBrowsers.length > 0 && !targetBrowsers.includes(browser)) throw new Error(`Current target browser \`${browser}\` is not in your \`targetBrowsers\` list!`);
45
+ const manifestVersion = mergedConfig.manifestVersion ?? (browser === "firefox" || browser === "safari" ? 2 : 3);
46
+ const mode = mergedConfig.mode ?? COMMAND_MODES[command];
47
+ const env = {
48
+ browser,
49
+ command,
50
+ manifestVersion,
51
+ mode
52
+ };
53
+ loadEnv(mode, browser);
54
+ const root = path.resolve(inlineConfig.root ?? userConfig.root ?? process.cwd());
55
+ const wxtDir = path.resolve(root, ".wxt");
56
+ const wxtModuleDir = resolveWxtModuleDir();
57
+ const srcDir = path.resolve(root, mergedConfig.srcDir ?? root);
58
+ const entrypointsDir = path.resolve(srcDir, mergedConfig.entrypointsDir ?? "entrypoints");
59
+ if (await isDirMissing(entrypointsDir)) logMissingDir(logger, "Entrypoints", entrypointsDir);
60
+ const modulesDir = path.resolve(root, mergedConfig.modulesDir ?? "modules");
61
+ const filterEntrypoints = mergedConfig.filterEntrypoints?.length ? new Set(mergedConfig.filterEntrypoints) : void 0;
62
+ const publicDir = path.resolve(root, mergedConfig.publicDir ?? "public");
63
+ const typesDir = path.resolve(wxtDir, "types");
64
+ const outBaseDir = path.resolve(root, mergedConfig.outDir ?? ".output");
65
+ const modeSuffix = {
66
+ production: "",
67
+ development: "-dev"
68
+ }[mode] ?? `-${mode}`;
69
+ const outDirTemplate = (mergedConfig.outDirTemplate ?? `${browser}-mv${manifestVersion}${modeSuffix}`).replaceAll("{{browser}}", browser).replaceAll("{{manifestVersion}}", manifestVersion.toString()).replaceAll("{{modeSuffix}}", modeSuffix).replaceAll("{{mode}}", mode).replaceAll("{{command}}", command);
70
+ const outDir = path.resolve(outBaseDir, outDirTemplate);
71
+ const reloadCommand = mergedConfig.dev?.reloadCommand ?? "Alt+R";
72
+ if (inlineConfig.runner != null || userConfig.runner != null) logger.warn("`InlineConfig#runner` is deprecated, use `InlineConfig#webExt` instead. See https://wxt.dev/guide/resources/upgrading.html#v0-19-0-rarr-v0-20-0");
73
+ const runnerConfig = await loadConfig({
74
+ name: "web-ext",
75
+ cwd: root,
76
+ globalRc: true,
77
+ rcFile: ".webextrc",
78
+ overrides: inlineConfig.webExt ?? inlineConfig.runner,
79
+ defaults: userConfig.webExt ?? userConfig.runner
80
+ });
81
+ const alias = Object.fromEntries(Object.entries({
82
+ ...mergedConfig.alias,
83
+ "@": srcDir,
84
+ "~": srcDir,
85
+ "@@": root,
86
+ "~~": root
87
+ }).map(([key, value]) => [key, path.resolve(root, value)]));
88
+ let devServerConfig;
89
+ if (command === "serve") {
90
+ if (mergedConfig.dev?.server?.hostname) logger.warn(`The 'hostname' option is deprecated, please use 'host' or 'origin' depending on your circumstances.`);
91
+ const host = mergedConfig.dev?.server?.host ?? mergedConfig.dev?.server?.hostname ?? "localhost";
92
+ let port = mergedConfig.dev?.server?.port;
93
+ const origin = mergedConfig.dev?.server?.origin ?? mergedConfig.dev?.server?.hostname ?? "localhost";
94
+ if (port == null || !isFinite(port)) port = await getPort({
95
+ host,
96
+ port: 3e3,
97
+ portRange: [3001, 3010]
98
+ });
99
+ const originWithProtocolAndPort = [
100
+ origin.match(/^https?:\/\//) ? "" : "http://",
101
+ origin,
102
+ origin.match(/:[0-9]+$/) ? "" : `:${port}`
103
+ ].join("");
104
+ devServerConfig = {
105
+ host,
106
+ port,
107
+ origin: originWithProtocolAndPort,
108
+ watchDebounce: safeStringToNumber(process.env.WXT_WATCH_DEBOUNCE) ?? 800
109
+ };
110
+ }
111
+ const userModules = await resolveWxtUserModules(root, modulesDir, mergedConfig.modules);
112
+ const moduleOptions = userModules.reduce((map, module) => {
113
+ if (module.configKey) map[module.configKey] = mergedConfig[module.configKey];
114
+ return map;
115
+ }, {});
116
+ return {
117
+ browser,
118
+ targetBrowsers,
119
+ command,
120
+ debug,
121
+ entrypointsDir,
122
+ modulesDir,
123
+ filterEntrypoints,
124
+ env,
125
+ fsCache: createFsCache(wxtDir),
126
+ imports: await getUnimportOptions(wxtDir, srcDir, logger, mergedConfig),
127
+ logger,
128
+ manifest: await resolveManifestConfig(env, mergedConfig.manifest),
129
+ manifestVersion,
130
+ mode,
131
+ outBaseDir,
132
+ outDir,
133
+ publicDir,
134
+ wxtModuleDir,
135
+ root,
136
+ runnerConfig,
137
+ srcDir,
138
+ typesDir,
139
+ wxtDir,
140
+ zip: resolveZipConfig(root, browser, outBaseDir, mergedConfig),
141
+ analysis: resolveAnalysisConfig(root, mergedConfig),
142
+ userConfigMetadata: userConfigMetadata ?? {},
143
+ alias,
144
+ experimental: defu(mergedConfig.experimental, {}),
145
+ dev: {
146
+ server: devServerConfig,
147
+ reloadCommand
148
+ },
149
+ hooks: mergedConfig.hooks ?? {},
150
+ vite: mergedConfig.vite ?? (() => ({})),
151
+ builtinModules,
152
+ userModules,
153
+ plugins: [],
154
+ ...moduleOptions
155
+ };
175
156
  }
176
157
  async function resolveManifestConfig(env, manifest) {
177
- return typeof manifest === "function" ? await manifest(env) : await (manifest ?? {});
158
+ return typeof manifest === "function" ? await manifest(env) : await (manifest ?? {});
178
159
  }
160
+ /**
161
+ * Merge the inline config and user config. Inline config is given priority. Defaults are not applied here.
162
+ */
179
163
  async function mergeInlineConfig(inlineConfig, userConfig) {
180
- const imports = inlineConfig.imports === false || userConfig.imports === false ? false : userConfig.imports == null && inlineConfig.imports == null ? void 0 : defu(inlineConfig.imports ?? {}, userConfig.imports ?? {});
181
- const manifest = async (env) => {
182
- const user = await resolveManifestConfig(env, userConfig.manifest);
183
- const inline = await resolveManifestConfig(env, inlineConfig.manifest);
184
- return defu(inline, user);
185
- };
186
- const merged = defu(inlineConfig, userConfig);
187
- const builderConfig = await mergeBuilderConfig(
188
- merged.logger ?? consola,
189
- inlineConfig,
190
- userConfig
191
- );
192
- return {
193
- ...merged,
194
- // Custom merge values
195
- imports,
196
- manifest,
197
- ...builderConfig
198
- };
164
+ const imports = inlineConfig.imports === false || userConfig.imports === false ? false : userConfig.imports == null && inlineConfig.imports == null ? void 0 : defu(inlineConfig.imports ?? {}, userConfig.imports ?? {});
165
+ const manifest = async (env) => {
166
+ const user = await resolveManifestConfig(env, userConfig.manifest);
167
+ return defu(await resolveManifestConfig(env, inlineConfig.manifest), user);
168
+ };
169
+ const merged = defu(inlineConfig, userConfig);
170
+ const builderConfig = await mergeBuilderConfig(merged.logger ?? consola, inlineConfig, userConfig);
171
+ return {
172
+ ...merged,
173
+ imports,
174
+ manifest,
175
+ ...builderConfig
176
+ };
199
177
  }
200
178
  function resolveZipConfig(root, browser, outBaseDir, mergedConfig) {
201
- const downloadedPackagesDir = path.resolve(root, ".wxt/local_modules");
202
- return {
203
- name: void 0,
204
- sourcesTemplate: "{{name}}-{{version}}-sources.zip",
205
- artifactTemplate: "{{name}}-{{version}}-{{browser}}.zip",
206
- sourcesRoot: root,
207
- includeSources: [],
208
- compressionLevel: 9,
209
- ...mergedConfig.zip,
210
- zipSources: mergedConfig.zip?.zipSources ?? ["firefox", "opera"].includes(browser),
211
- exclude: mergedConfig.zip?.exclude ?? [],
212
- excludeSources: [
213
- "**/node_modules",
214
- // WXT files
215
- "**/web-ext.config.ts",
216
- // Hidden files
217
- "**/.*",
218
- // Tests
219
- "**/__tests__/**",
220
- "**/*.+(test|spec).?(c|m)+(j|t)s?(x)",
221
- // Output directory
222
- `${path.relative(root, outBaseDir)}/**`,
223
- // From user
224
- ...mergedConfig.zip?.excludeSources ?? []
225
- ],
226
- downloadPackages: mergedConfig.zip?.downloadPackages ?? [],
227
- downloadedPackagesDir
228
- };
179
+ const downloadedPackagesDir = path.resolve(root, ".wxt/local_modules");
180
+ return {
181
+ name: void 0,
182
+ sourcesTemplate: "{{name}}-{{version}}-sources.zip",
183
+ artifactTemplate: "{{name}}-{{version}}-{{browser}}.zip",
184
+ sourcesRoot: root,
185
+ includeSources: [],
186
+ compressionLevel: 9,
187
+ ...mergedConfig.zip,
188
+ zipSources: mergedConfig.zip?.zipSources ?? ["firefox", "opera"].includes(browser),
189
+ exclude: mergedConfig.zip?.exclude ?? [],
190
+ excludeSources: [
191
+ "**/node_modules",
192
+ "**/web-ext.config.ts",
193
+ "**/.*",
194
+ "**/__tests__/**",
195
+ "**/*.+(test|spec).?(c|m)+(j|t)s?(x)",
196
+ `${path.relative(root, outBaseDir)}/**`,
197
+ ...mergedConfig.zip?.excludeSources ?? []
198
+ ],
199
+ downloadPackages: mergedConfig.zip?.downloadPackages ?? [],
200
+ downloadedPackagesDir
201
+ };
229
202
  }
230
203
  function resolveAnalysisConfig(root, mergedConfig) {
231
- const analysisOutputFile = path.resolve(
232
- root,
233
- mergedConfig.analysis?.outputFile ?? "stats.html"
234
- );
235
- const analysisOutputDir = path.dirname(analysisOutputFile);
236
- const analysisOutputName = path.parse(analysisOutputFile).name;
237
- return {
238
- enabled: mergedConfig.analysis?.enabled ?? false,
239
- open: mergedConfig.analysis?.open ?? false,
240
- template: mergedConfig.analysis?.template ?? "treemap",
241
- outputFile: analysisOutputFile,
242
- outputDir: analysisOutputDir,
243
- outputName: analysisOutputName,
244
- keepArtifacts: mergedConfig.analysis?.keepArtifacts ?? false
245
- };
204
+ const analysisOutputFile = path.resolve(root, mergedConfig.analysis?.outputFile ?? "stats.html");
205
+ const analysisOutputDir = path.dirname(analysisOutputFile);
206
+ const analysisOutputName = path.parse(analysisOutputFile).name;
207
+ return {
208
+ enabled: mergedConfig.analysis?.enabled ?? false,
209
+ open: mergedConfig.analysis?.open ?? false,
210
+ template: mergedConfig.analysis?.template ?? "treemap",
211
+ outputFile: analysisOutputFile,
212
+ outputDir: analysisOutputDir,
213
+ outputName: analysisOutputName,
214
+ keepArtifacts: mergedConfig.analysis?.keepArtifacts ?? false
215
+ };
246
216
  }
247
217
  async function getUnimportOptions(wxtDir, srcDir, logger, config) {
248
- const disabled = config.imports === false;
249
- const eslintrc = await getUnimportEslintOptions(wxtDir, config.imports);
250
- const invalidExports = ["options"];
251
- const defineImportsAndTypes = (imports, typeImports) => [
252
- ...imports,
253
- ...typeImports.map((name) => ({ name, type: true }))
254
- ];
255
- const defaultOptions = {
256
- imports: [{ name: "fakeBrowser", from: "wxt/testing" }],
257
- presets: [
258
- {
259
- from: "wxt/browser",
260
- imports: defineImportsAndTypes(["browser"], ["Browser"])
261
- },
262
- {
263
- from: "wxt/utils/storage",
264
- imports: defineImportsAndTypes(
265
- ["storage"],
266
- [
267
- "StorageArea",
268
- "WxtStorage",
269
- "WxtStorageItem",
270
- "StorageArea",
271
- "StorageItemKey",
272
- "StorageAreaChanges",
273
- "MigrationError"
274
- ]
275
- )
276
- },
277
- {
278
- from: "wxt/utils/app-config",
279
- imports: defineImportsAndTypes(["useAppConfig"], [])
280
- },
281
- {
282
- from: "wxt/utils/content-script-context",
283
- imports: defineImportsAndTypes(
284
- ["ContentScriptContext"],
285
- ["WxtWindowEventMap"]
286
- )
287
- },
288
- {
289
- from: "wxt/utils/content-script-ui/iframe",
290
- imports: defineImportsAndTypes(
291
- ["createIframeUi"],
292
- ["IframeContentScriptUi", "IframeContentScriptUiOptions"]
293
- ),
294
- ignore: invalidExports
295
- },
296
- {
297
- from: "wxt/utils/content-script-ui/integrated",
298
- imports: defineImportsAndTypes(
299
- ["createIntegratedUi"],
300
- ["IntegratedContentScriptUi", "IntegratedContentScriptUiOptions"]
301
- ),
302
- ignore: invalidExports
303
- },
304
- {
305
- from: "wxt/utils/content-script-ui/shadow-root",
306
- imports: defineImportsAndTypes(
307
- ["createShadowRootUi"],
308
- ["ShadowRootContentScriptUi", "ShadowRootContentScriptUiOptions"]
309
- ),
310
- ignore: invalidExports
311
- },
312
- {
313
- from: "wxt/utils/content-script-ui/types",
314
- imports: defineImportsAndTypes(
315
- [],
316
- [
317
- "ContentScriptUi",
318
- "ContentScriptUiOptions",
319
- "ContentScriptOverlayAlignment",
320
- "ContentScriptAppendMode",
321
- "ContentScriptInlinePositioningOptions",
322
- "ContentScriptOverlayPositioningOptions",
323
- "ContentScriptModalPositioningOptions",
324
- "ContentScriptPositioningOptions",
325
- "ContentScriptAnchoredOptions",
326
- "AutoMountOptions",
327
- "StopAutoMount",
328
- "AutoMount"
329
- ]
330
- )
331
- },
332
- {
333
- from: "wxt/utils/define-app-config",
334
- imports: defineImportsAndTypes(["defineAppConfig"], ["WxtAppConfig"])
335
- },
336
- {
337
- from: "wxt/utils/define-background",
338
- imports: defineImportsAndTypes(["defineBackground"], [])
339
- },
340
- {
341
- from: "wxt/utils/define-content-script",
342
- imports: defineImportsAndTypes(["defineContentScript"], [])
343
- },
344
- {
345
- from: "wxt/utils/define-unlisted-script",
346
- imports: defineImportsAndTypes(["defineUnlistedScript"], [])
347
- },
348
- {
349
- from: "wxt/utils/define-wxt-plugin",
350
- imports: defineImportsAndTypes(["defineWxtPlugin"], [])
351
- },
352
- {
353
- from: "wxt/utils/inject-script",
354
- imports: defineImportsAndTypes(
355
- ["injectScript"],
356
- ["ScriptPublicPath", "InjectScriptOptions"]
357
- ),
358
- ignore: invalidExports
359
- },
360
- {
361
- from: "wxt/utils/match-patterns",
362
- imports: defineImportsAndTypes(
363
- ["InvalidMatchPattern", "MatchPattern"],
364
- []
365
- )
366
- }
367
- ],
368
- virtualImports: ["#imports"],
369
- debugLog: logger.debug,
370
- warn: logger.warn,
371
- dirsScanOptions: {
372
- cwd: srcDir
373
- },
374
- eslintrc,
375
- dirs: disabled ? [] : ["components", "composables", "hooks", "utils"],
376
- disabled
377
- };
378
- return defu(
379
- config.imports ?? {},
380
- defaultOptions
381
- );
218
+ const disabled = config.imports === false;
219
+ const eslintrc = await getUnimportEslintOptions(wxtDir, config.imports);
220
+ const invalidExports = ["options"];
221
+ const defineImportsAndTypes = (imports, typeImports) => [...imports, ...typeImports.map((name) => ({
222
+ name,
223
+ type: true
224
+ }))];
225
+ const defaultOptions = {
226
+ imports: [{
227
+ name: "fakeBrowser",
228
+ from: "wxt/testing"
229
+ }],
230
+ presets: [
231
+ {
232
+ from: "wxt/browser",
233
+ imports: defineImportsAndTypes(["browser"], ["Browser"])
234
+ },
235
+ {
236
+ from: "wxt/utils/storage",
237
+ imports: defineImportsAndTypes(["storage"], [
238
+ "StorageArea",
239
+ "WxtStorage",
240
+ "WxtStorageItem",
241
+ "StorageArea",
242
+ "StorageItemKey",
243
+ "StorageAreaChanges",
244
+ "MigrationError"
245
+ ])
246
+ },
247
+ {
248
+ from: "wxt/utils/app-config",
249
+ imports: defineImportsAndTypes(["useAppConfig"], [])
250
+ },
251
+ {
252
+ from: "wxt/utils/content-script-context",
253
+ imports: defineImportsAndTypes(["ContentScriptContext"], ["WxtWindowEventMap"])
254
+ },
255
+ {
256
+ from: "wxt/utils/content-script-ui/iframe",
257
+ imports: defineImportsAndTypes(["createIframeUi"], ["IframeContentScriptUi", "IframeContentScriptUiOptions"]),
258
+ ignore: invalidExports
259
+ },
260
+ {
261
+ from: "wxt/utils/content-script-ui/integrated",
262
+ imports: defineImportsAndTypes(["createIntegratedUi"], ["IntegratedContentScriptUi", "IntegratedContentScriptUiOptions"]),
263
+ ignore: invalidExports
264
+ },
265
+ {
266
+ from: "wxt/utils/content-script-ui/shadow-root",
267
+ imports: defineImportsAndTypes(["createShadowRootUi"], ["ShadowRootContentScriptUi", "ShadowRootContentScriptUiOptions"]),
268
+ ignore: invalidExports
269
+ },
270
+ {
271
+ from: "wxt/utils/content-script-ui/types",
272
+ imports: defineImportsAndTypes([], [
273
+ "ContentScriptUi",
274
+ "ContentScriptUiOptions",
275
+ "ContentScriptOverlayAlignment",
276
+ "ContentScriptAppendMode",
277
+ "ContentScriptInlinePositioningOptions",
278
+ "ContentScriptOverlayPositioningOptions",
279
+ "ContentScriptModalPositioningOptions",
280
+ "ContentScriptPositioningOptions",
281
+ "ContentScriptAnchoredOptions",
282
+ "AutoMountOptions",
283
+ "StopAutoMount",
284
+ "AutoMount"
285
+ ])
286
+ },
287
+ {
288
+ from: "wxt/utils/define-app-config",
289
+ imports: defineImportsAndTypes(["defineAppConfig"], ["WxtAppConfig"])
290
+ },
291
+ {
292
+ from: "wxt/utils/define-background",
293
+ imports: defineImportsAndTypes(["defineBackground"], [])
294
+ },
295
+ {
296
+ from: "wxt/utils/define-content-script",
297
+ imports: defineImportsAndTypes(["defineContentScript"], [])
298
+ },
299
+ {
300
+ from: "wxt/utils/define-unlisted-script",
301
+ imports: defineImportsAndTypes(["defineUnlistedScript"], [])
302
+ },
303
+ {
304
+ from: "wxt/utils/define-wxt-plugin",
305
+ imports: defineImportsAndTypes(["defineWxtPlugin"], [])
306
+ },
307
+ {
308
+ from: "wxt/utils/inject-script",
309
+ imports: defineImportsAndTypes(["injectScript"], ["ScriptPublicPath", "InjectScriptOptions"]),
310
+ ignore: invalidExports
311
+ },
312
+ {
313
+ from: "wxt/utils/match-patterns",
314
+ imports: defineImportsAndTypes(["InvalidMatchPattern", "MatchPattern"], [])
315
+ }
316
+ ],
317
+ virtualImports: ["#imports"],
318
+ debugLog: logger.debug,
319
+ warn: logger.warn,
320
+ dirsScanOptions: { cwd: srcDir },
321
+ eslintrc,
322
+ dirs: disabled ? [] : [
323
+ "components",
324
+ "composables",
325
+ "hooks",
326
+ "utils"
327
+ ],
328
+ disabled
329
+ };
330
+ return defu(config.imports ?? {}, defaultOptions);
382
331
  }
383
332
  async function getUnimportEslintOptions(wxtDir, options) {
384
- const inlineEnabled = options === false ? false : options?.eslintrc?.enabled ?? "auto";
385
- let enabled;
386
- switch (inlineEnabled) {
387
- case "auto":
388
- const version = await getEslintVersion();
389
- let major = parseInt(version[0]);
390
- if (isNaN(major)) enabled = false;
391
- if (major <= 8) enabled = 8;
392
- else if (major >= 9) enabled = 9;
393
- else enabled = false;
394
- break;
395
- case true:
396
- enabled = 8;
397
- break;
398
- default:
399
- enabled = inlineEnabled;
400
- }
401
- return {
402
- enabled,
403
- filePath: path.resolve(
404
- wxtDir,
405
- enabled === 9 ? "eslint-auto-imports.mjs" : "eslintrc-auto-import.json"
406
- ),
407
- globalsPropValue: true
408
- };
333
+ const inlineEnabled = options === false ? false : options?.eslintrc?.enabled ?? "auto";
334
+ let enabled;
335
+ switch (inlineEnabled) {
336
+ case "auto":
337
+ const version = await getEslintVersion();
338
+ let major = parseInt(version[0]);
339
+ if (isNaN(major)) enabled = false;
340
+ if (major <= 8) enabled = 8;
341
+ else if (major >= 9) enabled = 9;
342
+ else enabled = false;
343
+ break;
344
+ case true:
345
+ enabled = 8;
346
+ break;
347
+ default: enabled = inlineEnabled;
348
+ }
349
+ return {
350
+ enabled,
351
+ filePath: path.resolve(wxtDir, enabled === 9 ? "eslint-auto-imports.mjs" : "eslintrc-auto-import.json"),
352
+ globalsPropValue: true
353
+ };
409
354
  }
355
+ /**
356
+ * Returns the path to `node_modules/wxt`.
357
+ */
410
358
  function resolveWxtModuleDir() {
411
- const importer = typeof __filename === "string" ? pathToFileURL(__filename).href : import.meta.url;
412
- const url = esmResolve("wxt", importer);
413
- return path.resolve(fileURLToPath(url), "../..");
359
+ const url = resolve$1("wxt", import.meta.url);
360
+ return path.resolve(fileURLToPath(url), "../..");
414
361
  }
415
362
  async function isDirMissing(dir) {
416
- return !await fs.exists(dir);
363
+ return !await fs.pathExists(dir);
417
364
  }
418
365
  function logMissingDir(logger, name, expected) {
419
- logger.warn(
420
- `${name} directory not found: ./${normalizePath(
421
- path.relative(process.cwd(), expected)
422
- )}`
423
- );
366
+ logger.warn(`${name} directory not found: ./${normalizePath(path.relative(process.cwd(), expected))}`);
424
367
  }
368
+ /**
369
+ * Map of `ConfigEnv` commands to their default modes.
370
+ */
425
371
  const COMMAND_MODES = {
426
- build: "production",
427
- serve: "development"
372
+ build: "production",
373
+ serve: "development"
428
374
  };
429
- export async function mergeBuilderConfig(logger, inlineConfig, userConfig) {
430
- const vite = await import("vite").catch((err) => {
431
- logger.debug("Failed to import vite:", err);
432
- });
433
- if (vite) {
434
- return {
435
- vite: async (env) => {
436
- const resolvedInlineConfig = await inlineConfig.vite?.(env) ?? {};
437
- const resolvedUserConfig = await userConfig.vite?.(env) ?? {};
438
- return vite.mergeConfig(resolvedUserConfig, resolvedInlineConfig);
439
- }
440
- };
441
- }
442
- throw Error("Builder not found. Make sure vite is installed.");
375
+ async function mergeBuilderConfig(logger, inlineConfig, userConfig) {
376
+ const vite = await import("vite").catch((err) => {
377
+ logger.debug("Failed to import vite:", err);
378
+ });
379
+ if (vite) return { vite: async (env) => {
380
+ const [resolvedInlineConfig = {}, resolvedUserConfig = {}] = await Promise.all([inlineConfig.vite?.(env), userConfig.vite?.(env)]);
381
+ return vite.mergeConfig(resolvedUserConfig, resolvedInlineConfig);
382
+ } };
383
+ throw Error("Builder not found. Make sure vite is installed.");
443
384
  }
444
- export async function resolveWxtUserModules(root, modulesDir, modules = []) {
445
- const importer = pathToFileURL(path.join(root, "index.js")).href;
446
- const npmModules = await Promise.all(
447
- modules.map(async (moduleId) => {
448
- const resolvedModulePath = esmResolve(moduleId, importer);
449
- const mod = await import(
450
- /* @vite-ignore */
451
- resolvedModulePath
452
- );
453
- if (mod.default == null) {
454
- throw Error("Module missing default export: " + moduleId);
455
- }
456
- return {
457
- ...mod.default,
458
- type: "node_module",
459
- id: moduleId
460
- };
461
- })
462
- );
463
- const localModulePaths = await glob(["*.[tj]s", "*/index.[tj]s"], {
464
- cwd: modulesDir,
465
- onlyFiles: true
466
- }).catch(() => []);
467
- localModulePaths.sort();
468
- const localModules = await Promise.all(
469
- localModulePaths.map(async (file) => {
470
- const absolutePath = normalizePath(path.resolve(modulesDir, file));
471
- const { config } = await loadConfig({
472
- configFile: absolutePath,
473
- globalRc: false,
474
- rcFile: false,
475
- packageJson: false,
476
- envName: false,
477
- dotenv: false
478
- });
479
- if (config == null)
480
- throw Error(
481
- `No config found for ${file}. Did you forget to add a default export?`
482
- );
483
- config.name ??= file;
484
- return {
485
- ...config,
486
- type: "local",
487
- id: absolutePath
488
- };
489
- })
490
- );
491
- return [...npmModules, ...localModules];
385
+ async function resolveWxtUserModules(root, modulesDir, modules = []) {
386
+ const importer = pathToFileURL(path.join(root, "index.js")).href;
387
+ const npmModules = await Promise.all(modules.map(async (moduleId) => {
388
+ const mod = await import(resolve$1(moduleId, importer));
389
+ if (mod.default == null) throw Error("Module missing default export: " + moduleId);
390
+ return {
391
+ ...mod.default,
392
+ type: "node_module",
393
+ id: moduleId
394
+ };
395
+ }));
396
+ const localModulePaths = await glob(["*.[tj]s", "*/index.[tj]s"], {
397
+ cwd: modulesDir,
398
+ onlyFiles: true
399
+ }).catch(() => []);
400
+ localModulePaths.sort();
401
+ const localModules = await Promise.all(localModulePaths.map(async (file) => {
402
+ const absolutePath = normalizePath(path.resolve(modulesDir, file));
403
+ const { config } = await loadConfig({
404
+ configFile: absolutePath,
405
+ globalRc: false,
406
+ rcFile: false,
407
+ packageJson: false,
408
+ envName: false,
409
+ dotenv: false
410
+ });
411
+ if (config == null) throw Error(`No config found for ${file}. Did you forget to add a default export?`);
412
+ config.name ??= file;
413
+ return {
414
+ ...config,
415
+ type: "local",
416
+ id: absolutePath
417
+ };
418
+ }));
419
+ return [...npmModules, ...localModules];
492
420
  }
421
+
422
+ //#endregion
423
+ export { resolveConfig };