wxt 0.20.13 → 0.20.14

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 (278) 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 +52 -50
  6. package/dist/cli/commands.mjs +77 -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 +292 -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 +104 -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 +25 -23
  25. package/dist/core/builders/vite/plugins/resolveAppConfig.mjs +25 -23
  26. package/dist/core/builders/vite/plugins/resolveVirtualModules.mjs +27 -26
  27. package/dist/core/builders/vite/plugins/tsconfigPaths.mjs +11 -11
  28. package/dist/core/builders/vite/plugins/wxtPluginLoader.mjs +41 -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 +109 -148
  38. package/dist/core/index.d.mts +8 -0
  39. package/dist/core/index.mjs +10 -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 +11 -6
  53. package/dist/core/runners/manual.mjs +16 -14
  54. package/dist/core/runners/safari.mjs +16 -14
  55. package/dist/core/runners/web-ext.mjs +62 -83
  56. package/dist/core/runners/wsl.mjs +16 -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 +275 -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 +87 -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/log/index.mjs +6 -4
  80. package/dist/core/utils/log/printBuildSummary.mjs +20 -25
  81. package/dist/core/utils/log/printFileList.mjs +30 -33
  82. package/dist/core/utils/log/printHeader.mjs +10 -5
  83. package/dist/core/utils/log/printTable.mjs +19 -21
  84. package/dist/core/utils/manifest.mjs +364 -479
  85. package/dist/core/utils/minimatch-multiple.mjs +26 -15
  86. package/dist/core/utils/network.mjs +30 -33
  87. package/dist/core/utils/number.mjs +7 -3
  88. package/dist/core/utils/package.mjs +20 -13
  89. package/dist/core/utils/paths.mjs +26 -7
  90. package/dist/core/utils/strings.mjs +19 -14
  91. package/dist/core/utils/syntax-errors.mjs +14 -16
  92. package/dist/core/utils/time.mjs +19 -15
  93. package/dist/core/utils/transform.mjs +129 -160
  94. package/dist/core/utils/types.d.mts +6 -0
  95. package/dist/core/utils/validation.mjs +43 -50
  96. package/dist/core/utils/virtual-modules.mjs +20 -12
  97. package/dist/core/utils/wsl.mjs +10 -3
  98. package/dist/core/wxt.mjs +66 -60
  99. package/dist/core/{zip.d.ts → zip.d.mts} +6 -2
  100. package/dist/core/zip.mjs +116 -140
  101. package/dist/index.d.mts +12 -0
  102. package/dist/index.mjs +12 -3
  103. package/dist/{modules.d.ts → modules.d.mts} +14 -16
  104. package/dist/modules.mjs +181 -51
  105. package/dist/testing/fake-browser.d.mts +2 -0
  106. package/dist/testing/fake-browser.mjs +3 -1
  107. package/dist/testing/index.d.mts +3 -0
  108. package/dist/testing/index.mjs +4 -2
  109. package/dist/testing/{wxt-vitest-plugin.d.ts → wxt-vitest-plugin.d.mts} +7 -9
  110. package/dist/testing/wxt-vitest-plugin.mjs +38 -19
  111. package/dist/types.d.mts +1453 -0
  112. package/dist/utils/app-config.d.mts +6 -0
  113. package/dist/utils/app-config.mjs +8 -2
  114. package/dist/utils/content-script-context.d.mts +137 -0
  115. package/dist/utils/content-script-context.mjs +192 -175
  116. package/dist/utils/content-script-ui/iframe.d.mts +42 -0
  117. package/dist/utils/content-script-ui/iframe.mjs +42 -27
  118. package/dist/utils/content-script-ui/integrated.d.mts +37 -0
  119. package/dist/utils/content-script-ui/integrated.mjs +36 -29
  120. package/dist/utils/content-script-ui/shadow-root.d.mts +80 -0
  121. package/dist/utils/content-script-ui/shadow-root.mjs +75 -82
  122. package/dist/utils/content-script-ui/shared.mjs +117 -150
  123. package/dist/utils/content-script-ui/types.d.mts +107 -0
  124. package/dist/utils/content-script-ui/types.mjs +1 -0
  125. package/dist/utils/{define-app-config.d.ts → define-app-config.d.mts} +5 -3
  126. package/dist/utils/define-app-config.mjs +22 -2
  127. package/dist/utils/define-background.d.mts +7 -0
  128. package/dist/utils/define-background.mjs +7 -3
  129. package/dist/utils/define-content-script.d.mts +6 -0
  130. package/dist/utils/define-content-script.mjs +6 -2
  131. package/dist/utils/define-unlisted-script.d.mts +7 -0
  132. package/dist/utils/define-unlisted-script.mjs +7 -3
  133. package/dist/utils/define-wxt-plugin.d.mts +6 -0
  134. package/dist/utils/define-wxt-plugin.mjs +6 -2
  135. package/dist/utils/inject-script.d.mts +41 -0
  136. package/dist/utils/inject-script.mjs +44 -34
  137. package/dist/utils/internal/custom-events.d.mts +9 -0
  138. package/dist/utils/internal/custom-events.mjs +18 -10
  139. package/dist/utils/internal/location-watcher.mjs +23 -20
  140. package/dist/utils/internal/logger.mjs +15 -12
  141. package/dist/utils/match-patterns.d.mts +1 -0
  142. package/dist/utils/match-patterns.mjs +3 -1
  143. package/dist/utils/{split-shadow-root-css.d.ts → split-shadow-root-css.d.mts} +6 -3
  144. package/dist/utils/split-shadow-root-css.mjs +16 -7
  145. package/dist/utils/storage.d.mts +1 -0
  146. package/dist/utils/storage.mjs +3 -1
  147. package/dist/version.d.mts +4 -0
  148. package/dist/version.mjs +5 -1
  149. package/dist/virtual/background-entrypoint.d.mts +4 -0
  150. package/dist/virtual/background-entrypoint.mjs +146 -161
  151. package/dist/virtual/content-script-isolated-world-entrypoint.d.mts +4 -0
  152. package/dist/virtual/content-script-isolated-world-entrypoint.mjs +26 -27
  153. package/dist/virtual/content-script-main-world-entrypoint.d.mts +4 -0
  154. package/dist/virtual/content-script-main-world-entrypoint.mjs +24 -24
  155. package/dist/virtual/mock-browser.d.mts +6 -0
  156. package/dist/virtual/mock-browser.mjs +5 -3
  157. package/dist/virtual/reload-html.d.mts +1 -0
  158. package/dist/virtual/reload-html.mjs +60 -53
  159. package/dist/virtual/unlisted-script-entrypoint.d.mts +4 -0
  160. package/dist/virtual/unlisted-script-entrypoint.mjs +35 -43
  161. package/package.json +47 -49
  162. package/dist/browser.d.ts +0 -30
  163. package/dist/builtin-modules/index.d.ts +0 -2
  164. package/dist/builtin-modules/unimport.d.ts +0 -5
  165. package/dist/cli/cli-utils.d.ts +0 -25
  166. package/dist/cli/commands.d.ts +0 -2
  167. package/dist/cli/index.d.ts +0 -1
  168. package/dist/core/builders/vite/index.d.ts +0 -7
  169. package/dist/core/builders/vite/plugins/bundleAnalysis.d.ts +0 -7
  170. package/dist/core/builders/vite/plugins/cssEntrypoints.d.ts +0 -13
  171. package/dist/core/builders/vite/plugins/defineImportMeta.d.ts +0 -14
  172. package/dist/core/builders/vite/plugins/devHtmlPrerender.d.ts +0 -7
  173. package/dist/core/builders/vite/plugins/devServerGlobals.d.ts +0 -6
  174. package/dist/core/builders/vite/plugins/download.d.ts +0 -10
  175. package/dist/core/builders/vite/plugins/entrypointGroupGlobals.d.ts +0 -6
  176. package/dist/core/builders/vite/plugins/extensionApiMock.d.ts +0 -6
  177. package/dist/core/builders/vite/plugins/globals.d.ts +0 -3
  178. package/dist/core/builders/vite/plugins/iifeFooter.d.ts +0 -8
  179. package/dist/core/builders/vite/plugins/index.d.ts +0 -16
  180. package/dist/core/builders/vite/plugins/noopBackground.d.ts +0 -6
  181. package/dist/core/builders/vite/plugins/removeEntrypointMainFunction.d.ts +0 -6
  182. package/dist/core/builders/vite/plugins/resolveAppConfig.d.ts +0 -6
  183. package/dist/core/builders/vite/plugins/resolveVirtualModules.d.ts +0 -6
  184. package/dist/core/builders/vite/plugins/tsconfigPaths.d.ts +0 -3
  185. package/dist/core/builders/vite/plugins/wxtPluginLoader.d.ts +0 -6
  186. package/dist/core/define-config.d.ts +0 -2
  187. package/dist/core/define-web-ext-config.d.ts +0 -9
  188. package/dist/core/generate-wxt-dir.d.ts +0 -5
  189. package/dist/core/index.d.ts +0 -8
  190. package/dist/core/initialize.d.ts +0 -5
  191. package/dist/core/keyboard-shortcuts.d.ts +0 -12
  192. package/dist/core/package-managers/bun.d.ts +0 -2
  193. package/dist/core/package-managers/deno.d.ts +0 -2
  194. package/dist/core/package-managers/index.d.ts +0 -2
  195. package/dist/core/package-managers/npm.d.ts +0 -17
  196. package/dist/core/package-managers/pnpm.d.ts +0 -2
  197. package/dist/core/package-managers/types.d.ts +0 -2
  198. package/dist/core/package-managers/types.mjs +0 -0
  199. package/dist/core/package-managers/yarn.d.ts +0 -2
  200. package/dist/core/prepare.d.ts +0 -2
  201. package/dist/core/resolve-config.d.ts +0 -11
  202. package/dist/core/runners/index.d.ts +0 -2
  203. package/dist/core/runners/manual.d.ts +0 -5
  204. package/dist/core/runners/safari.d.ts +0 -5
  205. package/dist/core/runners/web-ext.d.ts +0 -5
  206. package/dist/core/runners/wsl.d.ts +0 -5
  207. package/dist/core/utils/arrays.d.ts +0 -13
  208. package/dist/core/utils/building/build-entrypoints.d.ts +0 -3
  209. package/dist/core/utils/building/detect-dev-changes.d.ts +0 -61
  210. package/dist/core/utils/building/find-entrypoints.d.ts +0 -5
  211. package/dist/core/utils/building/group-entrypoints.d.ts +0 -8
  212. package/dist/core/utils/building/index.d.ts +0 -6
  213. package/dist/core/utils/building/internal-build.d.ts +0 -12
  214. package/dist/core/utils/building/rebuild.d.ts +0 -23
  215. package/dist/core/utils/cache.d.ts +0 -8
  216. package/dist/core/utils/cli.d.ts +0 -3
  217. package/dist/core/utils/cli.mjs +0 -26
  218. package/dist/core/utils/constants.d.ts +0 -5
  219. package/dist/core/utils/content-scripts.d.ts +0 -12
  220. package/dist/core/utils/content-security-policy.d.ts +0 -14
  221. package/dist/core/utils/entrypoints.d.ts +0 -31
  222. package/dist/core/utils/env.d.ts +0 -5
  223. package/dist/core/utils/environments/browser-environment.d.ts +0 -3
  224. package/dist/core/utils/environments/environment.d.ts +0 -8
  225. package/dist/core/utils/environments/extension-environment.d.ts +0 -6
  226. package/dist/core/utils/environments/index.d.ts +0 -2
  227. package/dist/core/utils/eslint.d.ts +0 -1
  228. package/dist/core/utils/fs.d.ts +0 -13
  229. package/dist/core/utils/globals.d.ts +0 -11
  230. package/dist/core/utils/i18n.d.ts +0 -11
  231. package/dist/core/utils/log/index.d.ts +0 -4
  232. package/dist/core/utils/log/printBuildSummary.d.ts +0 -2
  233. package/dist/core/utils/log/printFileList.d.ts +0 -1
  234. package/dist/core/utils/log/printHeader.d.ts +0 -1
  235. package/dist/core/utils/log/printTable.d.ts +0 -1
  236. package/dist/core/utils/manifest.d.ts +0 -40
  237. package/dist/core/utils/minimatch-multiple.d.ts +0 -15
  238. package/dist/core/utils/network.d.ts +0 -7
  239. package/dist/core/utils/number.d.ts +0 -1
  240. package/dist/core/utils/package.d.ts +0 -6
  241. package/dist/core/utils/paths.d.ts +0 -11
  242. package/dist/core/utils/strings.d.ts +0 -14
  243. package/dist/core/utils/syntax-errors.d.ts +0 -11
  244. package/dist/core/utils/testing/fake-objects.d.ts +0 -11665
  245. package/dist/core/utils/testing/fake-objects.mjs +0 -326
  246. package/dist/core/utils/time.d.ts +0 -9
  247. package/dist/core/utils/transform.d.ts +0 -11
  248. package/dist/core/utils/types.d.ts +0 -13
  249. package/dist/core/utils/types.mjs +0 -0
  250. package/dist/core/utils/validation.d.ts +0 -15
  251. package/dist/core/utils/virtual-modules.d.ts +0 -22
  252. package/dist/core/utils/wsl.d.ts +0 -4
  253. package/dist/core/wxt.d.ts +0 -24
  254. package/dist/index.d.ts +0 -11
  255. package/dist/testing/fake-browser.d.ts +0 -10
  256. package/dist/testing/index.d.ts +0 -10
  257. package/dist/types.d.ts +0 -1459
  258. package/dist/types.mjs +0 -0
  259. package/dist/utils/app-config.d.ts +0 -2
  260. package/dist/utils/content-script-context.d.ts +0 -134
  261. package/dist/utils/content-script-ui/iframe.d.ts +0 -32
  262. package/dist/utils/content-script-ui/integrated.d.ts +0 -34
  263. package/dist/utils/content-script-ui/shadow-root.d.ts +0 -76
  264. package/dist/utils/content-script-ui/shared.d.ts +0 -5
  265. package/dist/utils/content-script-ui/types.d.ts +0 -104
  266. package/dist/utils/define-background.d.ts +0 -4
  267. package/dist/utils/define-content-script.d.ts +0 -3
  268. package/dist/utils/define-unlisted-script.d.ts +0 -4
  269. package/dist/utils/define-wxt-plugin.d.ts +0 -3
  270. package/dist/utils/inject-script.d.ts +0 -36
  271. package/dist/utils/internal/custom-events.d.ts +0 -10
  272. package/dist/utils/internal/dev-server-websocket.d.ts +0 -21
  273. package/dist/utils/internal/dev-server-websocket.mjs +0 -37
  274. package/dist/utils/internal/location-watcher.d.ts +0 -12
  275. package/dist/utils/internal/logger.d.ts +0 -9
  276. package/dist/utils/match-patterns.d.ts +0 -5
  277. package/dist/utils/storage.d.ts +0 -5
  278. 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";
10
3
  import { builtinModules } from "../builtin-modules/index.mjs";
11
4
  import { getEslintVersion } from "./utils/eslint.mjs";
12
5
  import { safeStringToNumber } from "./utils/number.mjs";
13
6
  import { loadEnv } from "./utils/env.mjs";
7
+ import fs from "fs-extra";
8
+ import glob from "fast-glob";
9
+ import path from "node:path";
10
+ import { loadConfig } from "c12";
11
+ import { resolve as resolve$1 } from "import-meta-resolve";
12
+ import consola, { LogLevels } from "consola";
13
+ import defu from "defu";
14
14
  import { getPort } from "get-port-please";
15
15
  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
- };
16
+
17
+ //#region src/core/resolve-config.ts
18
+ /**
19
+ * Given an inline config, discover the config file if necessary, merge the results, resolve any
20
+ * relative paths, and apply any defaults.
21
+ *
22
+ * Inline config always has priority over user config. Cli flags are passed as inline config if set.
23
+ * If unset, undefined is passed in, letting this function decide default values.
24
+ */
25
+ async function resolveConfig(inlineConfig, command) {
26
+ let userConfig = {};
27
+ let userConfigMetadata;
28
+ if (inlineConfig.configFile !== false) {
29
+ const { config: loadedConfig, ...metadata } = await loadConfig({
30
+ configFile: inlineConfig.configFile,
31
+ name: "wxt",
32
+ cwd: inlineConfig.root ?? process.cwd()
33
+ });
34
+ userConfig = loadedConfig ?? {};
35
+ userConfigMetadata = metadata;
36
+ }
37
+ const mergedConfig = await mergeInlineConfig(inlineConfig, userConfig);
38
+ const debug = mergedConfig.debug ?? false;
39
+ const logger = mergedConfig.logger ?? consola;
40
+ if (debug) logger.level = LogLevels.debug;
41
+ const browser = mergedConfig.browser ?? "chrome";
42
+ const targetBrowsers = mergedConfig.targetBrowsers ?? [];
43
+ if (targetBrowsers.length > 0 && !targetBrowsers.includes(browser)) throw new Error(`Current target browser \`${browser}\` is not in your \`targetBrowsers\` list!`);
44
+ const manifestVersion = mergedConfig.manifestVersion ?? (browser === "firefox" || browser === "safari" ? 2 : 3);
45
+ const mode = mergedConfig.mode ?? COMMAND_MODES[command];
46
+ const env = {
47
+ browser,
48
+ command,
49
+ manifestVersion,
50
+ mode
51
+ };
52
+ loadEnv(mode, browser);
53
+ const root = path.resolve(inlineConfig.root ?? userConfig.root ?? process.cwd());
54
+ const wxtDir = path.resolve(root, ".wxt");
55
+ const wxtModuleDir = resolveWxtModuleDir();
56
+ const srcDir = path.resolve(root, mergedConfig.srcDir ?? root);
57
+ const entrypointsDir = path.resolve(srcDir, mergedConfig.entrypointsDir ?? "entrypoints");
58
+ if (await isDirMissing(entrypointsDir)) logMissingDir(logger, "Entrypoints", entrypointsDir);
59
+ const modulesDir = path.resolve(root, mergedConfig.modulesDir ?? "modules");
60
+ const filterEntrypoints = mergedConfig.filterEntrypoints?.length ? new Set(mergedConfig.filterEntrypoints) : void 0;
61
+ const publicDir = path.resolve(root, mergedConfig.publicDir ?? "public");
62
+ const typesDir = path.resolve(wxtDir, "types");
63
+ const outBaseDir = path.resolve(root, mergedConfig.outDir ?? ".output");
64
+ const modeSuffix = {
65
+ production: "",
66
+ development: "-dev"
67
+ }[mode] ?? `-${mode}`;
68
+ const outDirTemplate = (mergedConfig.outDirTemplate ?? `${browser}-mv${manifestVersion}${modeSuffix}`).replaceAll("{{browser}}", browser).replaceAll("{{manifestVersion}}", manifestVersion.toString()).replaceAll("{{modeSuffix}}", modeSuffix).replaceAll("{{mode}}", mode).replaceAll("{{command}}", command);
69
+ const outDir = path.resolve(outBaseDir, outDirTemplate);
70
+ const reloadCommand = mergedConfig.dev?.reloadCommand ?? "Alt+R";
71
+ 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");
72
+ const runnerConfig = await loadConfig({
73
+ name: "web-ext",
74
+ cwd: root,
75
+ globalRc: true,
76
+ rcFile: ".webextrc",
77
+ overrides: inlineConfig.webExt ?? inlineConfig.runner,
78
+ defaults: userConfig.webExt ?? userConfig.runner
79
+ });
80
+ const alias = Object.fromEntries(Object.entries({
81
+ ...mergedConfig.alias,
82
+ "@": srcDir,
83
+ "~": srcDir,
84
+ "@@": root,
85
+ "~~": root
86
+ }).map(([key, value]) => [key, path.resolve(root, value)]));
87
+ let devServerConfig;
88
+ if (command === "serve") {
89
+ if (mergedConfig.dev?.server?.hostname) logger.warn(`The 'hostname' option is deprecated, please use 'host' or 'origin' depending on your circumstances.`);
90
+ const host = mergedConfig.dev?.server?.host ?? mergedConfig.dev?.server?.hostname ?? "localhost";
91
+ let port = mergedConfig.dev?.server?.port;
92
+ const origin = mergedConfig.dev?.server?.origin ?? mergedConfig.dev?.server?.hostname ?? "localhost";
93
+ if (port == null || !isFinite(port)) port = await getPort({
94
+ host,
95
+ port: 3e3,
96
+ portRange: [3001, 3010]
97
+ });
98
+ const originWithProtocolAndPort = [
99
+ origin.match(/^https?:\/\//) ? "" : "http://",
100
+ origin,
101
+ origin.match(/:[0-9]+$/) ? "" : `:${port}`
102
+ ].join("");
103
+ devServerConfig = {
104
+ host,
105
+ port,
106
+ origin: originWithProtocolAndPort,
107
+ watchDebounce: safeStringToNumber(process.env.WXT_WATCH_DEBOUNCE) ?? 800
108
+ };
109
+ }
110
+ const userModules = await resolveWxtUserModules(root, modulesDir, mergedConfig.modules);
111
+ const moduleOptions = userModules.reduce((map, module) => {
112
+ if (module.configKey) map[module.configKey] = mergedConfig[module.configKey];
113
+ return map;
114
+ }, {});
115
+ return {
116
+ browser,
117
+ targetBrowsers,
118
+ command,
119
+ debug,
120
+ entrypointsDir,
121
+ modulesDir,
122
+ filterEntrypoints,
123
+ env,
124
+ fsCache: createFsCache(wxtDir),
125
+ imports: await getUnimportOptions(wxtDir, srcDir, logger, mergedConfig),
126
+ logger,
127
+ manifest: await resolveManifestConfig(env, mergedConfig.manifest),
128
+ manifestVersion,
129
+ mode,
130
+ outBaseDir,
131
+ outDir,
132
+ publicDir,
133
+ wxtModuleDir,
134
+ root,
135
+ runnerConfig,
136
+ srcDir,
137
+ typesDir,
138
+ wxtDir,
139
+ zip: resolveZipConfig(root, browser, outBaseDir, mergedConfig),
140
+ analysis: resolveAnalysisConfig(root, mergedConfig),
141
+ userConfigMetadata: userConfigMetadata ?? {},
142
+ alias,
143
+ experimental: defu(mergedConfig.experimental, {}),
144
+ dev: {
145
+ server: devServerConfig,
146
+ reloadCommand
147
+ },
148
+ hooks: mergedConfig.hooks ?? {},
149
+ vite: mergedConfig.vite ?? (() => ({})),
150
+ builtinModules,
151
+ userModules,
152
+ plugins: [],
153
+ ...moduleOptions
154
+ };
175
155
  }
176
156
  async function resolveManifestConfig(env, manifest) {
177
- return typeof manifest === "function" ? await manifest(env) : await (manifest ?? {});
157
+ return typeof manifest === "function" ? await manifest(env) : await (manifest ?? {});
178
158
  }
159
+ /**
160
+ * Merge the inline config and user config. Inline config is given priority. Defaults are not applied here.
161
+ */
179
162
  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
- };
163
+ const imports = inlineConfig.imports === false || userConfig.imports === false ? false : userConfig.imports == null && inlineConfig.imports == null ? void 0 : defu(inlineConfig.imports ?? {}, userConfig.imports ?? {});
164
+ const manifest = async (env) => {
165
+ const user = await resolveManifestConfig(env, userConfig.manifest);
166
+ return defu(await resolveManifestConfig(env, inlineConfig.manifest), user);
167
+ };
168
+ const merged = defu(inlineConfig, userConfig);
169
+ const builderConfig = await mergeBuilderConfig(merged.logger ?? consola, inlineConfig, userConfig);
170
+ return {
171
+ ...merged,
172
+ imports,
173
+ manifest,
174
+ ...builderConfig
175
+ };
199
176
  }
200
177
  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
- };
178
+ const downloadedPackagesDir = path.resolve(root, ".wxt/local_modules");
179
+ return {
180
+ name: void 0,
181
+ sourcesTemplate: "{{name}}-{{version}}-sources.zip",
182
+ artifactTemplate: "{{name}}-{{version}}-{{browser}}.zip",
183
+ sourcesRoot: root,
184
+ includeSources: [],
185
+ compressionLevel: 9,
186
+ ...mergedConfig.zip,
187
+ zipSources: mergedConfig.zip?.zipSources ?? ["firefox", "opera"].includes(browser),
188
+ exclude: mergedConfig.zip?.exclude ?? [],
189
+ excludeSources: [
190
+ "**/node_modules",
191
+ "**/web-ext.config.ts",
192
+ "**/.*",
193
+ "**/__tests__/**",
194
+ "**/*.+(test|spec).?(c|m)+(j|t)s?(x)",
195
+ `${path.relative(root, outBaseDir)}/**`,
196
+ ...mergedConfig.zip?.excludeSources ?? []
197
+ ],
198
+ downloadPackages: mergedConfig.zip?.downloadPackages ?? [],
199
+ downloadedPackagesDir
200
+ };
229
201
  }
230
202
  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
- };
203
+ const analysisOutputFile = path.resolve(root, mergedConfig.analysis?.outputFile ?? "stats.html");
204
+ const analysisOutputDir = path.dirname(analysisOutputFile);
205
+ const analysisOutputName = path.parse(analysisOutputFile).name;
206
+ return {
207
+ enabled: mergedConfig.analysis?.enabled ?? false,
208
+ open: mergedConfig.analysis?.open ?? false,
209
+ template: mergedConfig.analysis?.template ?? "treemap",
210
+ outputFile: analysisOutputFile,
211
+ outputDir: analysisOutputDir,
212
+ outputName: analysisOutputName,
213
+ keepArtifacts: mergedConfig.analysis?.keepArtifacts ?? false
214
+ };
246
215
  }
247
216
  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
- );
217
+ const disabled = config.imports === false;
218
+ const eslintrc = await getUnimportEslintOptions(wxtDir, config.imports);
219
+ const invalidExports = ["options"];
220
+ const defineImportsAndTypes = (imports, typeImports) => [...imports, ...typeImports.map((name) => ({
221
+ name,
222
+ type: true
223
+ }))];
224
+ const defaultOptions = {
225
+ imports: [{
226
+ name: "fakeBrowser",
227
+ from: "wxt/testing"
228
+ }],
229
+ presets: [
230
+ {
231
+ from: "wxt/browser",
232
+ imports: defineImportsAndTypes(["browser"], ["Browser"])
233
+ },
234
+ {
235
+ from: "wxt/utils/storage",
236
+ imports: defineImportsAndTypes(["storage"], [
237
+ "StorageArea",
238
+ "WxtStorage",
239
+ "WxtStorageItem",
240
+ "StorageArea",
241
+ "StorageItemKey",
242
+ "StorageAreaChanges",
243
+ "MigrationError"
244
+ ])
245
+ },
246
+ {
247
+ from: "wxt/utils/app-config",
248
+ imports: defineImportsAndTypes(["useAppConfig"], [])
249
+ },
250
+ {
251
+ from: "wxt/utils/content-script-context",
252
+ imports: defineImportsAndTypes(["ContentScriptContext"], ["WxtWindowEventMap"])
253
+ },
254
+ {
255
+ from: "wxt/utils/content-script-ui/iframe",
256
+ imports: defineImportsAndTypes(["createIframeUi"], ["IframeContentScriptUi", "IframeContentScriptUiOptions"]),
257
+ ignore: invalidExports
258
+ },
259
+ {
260
+ from: "wxt/utils/content-script-ui/integrated",
261
+ imports: defineImportsAndTypes(["createIntegratedUi"], ["IntegratedContentScriptUi", "IntegratedContentScriptUiOptions"]),
262
+ ignore: invalidExports
263
+ },
264
+ {
265
+ from: "wxt/utils/content-script-ui/shadow-root",
266
+ imports: defineImportsAndTypes(["createShadowRootUi"], ["ShadowRootContentScriptUi", "ShadowRootContentScriptUiOptions"]),
267
+ ignore: invalidExports
268
+ },
269
+ {
270
+ from: "wxt/utils/content-script-ui/types",
271
+ imports: defineImportsAndTypes([], [
272
+ "ContentScriptUi",
273
+ "ContentScriptUiOptions",
274
+ "ContentScriptOverlayAlignment",
275
+ "ContentScriptAppendMode",
276
+ "ContentScriptInlinePositioningOptions",
277
+ "ContentScriptOverlayPositioningOptions",
278
+ "ContentScriptModalPositioningOptions",
279
+ "ContentScriptPositioningOptions",
280
+ "ContentScriptAnchoredOptions",
281
+ "AutoMountOptions",
282
+ "StopAutoMount",
283
+ "AutoMount"
284
+ ])
285
+ },
286
+ {
287
+ from: "wxt/utils/define-app-config",
288
+ imports: defineImportsAndTypes(["defineAppConfig"], ["WxtAppConfig"])
289
+ },
290
+ {
291
+ from: "wxt/utils/define-background",
292
+ imports: defineImportsAndTypes(["defineBackground"], [])
293
+ },
294
+ {
295
+ from: "wxt/utils/define-content-script",
296
+ imports: defineImportsAndTypes(["defineContentScript"], [])
297
+ },
298
+ {
299
+ from: "wxt/utils/define-unlisted-script",
300
+ imports: defineImportsAndTypes(["defineUnlistedScript"], [])
301
+ },
302
+ {
303
+ from: "wxt/utils/define-wxt-plugin",
304
+ imports: defineImportsAndTypes(["defineWxtPlugin"], [])
305
+ },
306
+ {
307
+ from: "wxt/utils/inject-script",
308
+ imports: defineImportsAndTypes(["injectScript"], ["ScriptPublicPath", "InjectScriptOptions"]),
309
+ ignore: invalidExports
310
+ },
311
+ {
312
+ from: "wxt/utils/match-patterns",
313
+ imports: defineImportsAndTypes(["InvalidMatchPattern", "MatchPattern"], [])
314
+ }
315
+ ],
316
+ virtualImports: ["#imports"],
317
+ debugLog: logger.debug,
318
+ warn: logger.warn,
319
+ dirsScanOptions: { cwd: srcDir },
320
+ eslintrc,
321
+ dirs: disabled ? [] : [
322
+ "components",
323
+ "composables",
324
+ "hooks",
325
+ "utils"
326
+ ],
327
+ disabled
328
+ };
329
+ return defu(config.imports ?? {}, defaultOptions);
382
330
  }
383
331
  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
- };
332
+ const inlineEnabled = options === false ? false : options?.eslintrc?.enabled ?? "auto";
333
+ let enabled;
334
+ switch (inlineEnabled) {
335
+ case "auto":
336
+ const version = await getEslintVersion();
337
+ let major = parseInt(version[0]);
338
+ if (isNaN(major)) enabled = false;
339
+ if (major <= 8) enabled = 8;
340
+ else if (major >= 9) enabled = 9;
341
+ else enabled = false;
342
+ break;
343
+ case true:
344
+ enabled = 8;
345
+ break;
346
+ default: enabled = inlineEnabled;
347
+ }
348
+ return {
349
+ enabled,
350
+ filePath: path.resolve(wxtDir, enabled === 9 ? "eslint-auto-imports.mjs" : "eslintrc-auto-import.json"),
351
+ globalsPropValue: true
352
+ };
409
353
  }
354
+ /**
355
+ * Returns the path to `node_modules/wxt`.
356
+ */
410
357
  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), "../..");
358
+ const url = resolve$1("wxt", typeof __filename === "string" ? pathToFileURL(__filename).href : import.meta.url);
359
+ return path.resolve(fileURLToPath(url), "../..");
414
360
  }
415
361
  async function isDirMissing(dir) {
416
- return !await fs.exists(dir);
362
+ return !await fs.exists(dir);
417
363
  }
418
364
  function logMissingDir(logger, name, expected) {
419
- logger.warn(
420
- `${name} directory not found: ./${normalizePath(
421
- path.relative(process.cwd(), expected)
422
- )}`
423
- );
365
+ logger.warn(`${name} directory not found: ./${normalizePath(path.relative(process.cwd(), expected))}`);
424
366
  }
367
+ /**
368
+ * Map of `ConfigEnv` commands to their default modes.
369
+ */
425
370
  const COMMAND_MODES = {
426
- build: "production",
427
- serve: "development"
371
+ build: "production",
372
+ serve: "development"
428
373
  };
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.");
374
+ async function mergeBuilderConfig(logger, inlineConfig, userConfig) {
375
+ const vite = await import("vite").catch((err) => {
376
+ logger.debug("Failed to import vite:", err);
377
+ });
378
+ if (vite) return { vite: async (env) => {
379
+ const resolvedInlineConfig = await inlineConfig.vite?.(env) ?? {};
380
+ const resolvedUserConfig = await 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 };