wxt 0.18.15 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/wxt.mjs +1 -1
- package/dist/browser/chrome.d.ts +17 -0
- package/dist/browser/chrome.mjs +7 -0
- package/dist/browser/index.d.ts +18 -0
- package/dist/browser/index.mjs +2 -0
- package/dist/builtin-modules/index.d.ts +2 -0
- package/dist/builtin-modules/index.mjs +2 -0
- package/dist/builtin-modules/unimport.d.ts +8 -0
- package/dist/builtin-modules/unimport.mjs +99 -0
- package/dist/cli/cli-utils.d.ts +25 -0
- package/dist/cli/cli-utils.mjs +58 -0
- package/dist/cli/commands.d.ts +2 -0
- package/dist/cli/commands.mjs +104 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.mjs +11 -0
- package/dist/client/app-config.d.ts +2 -0
- package/dist/client/app-config.mjs +4 -0
- package/dist/client/content-scripts/content-script-context.d.ts +114 -0
- package/dist/client/content-scripts/content-script-context.mjs +169 -0
- package/dist/client/content-scripts/custom-events.d.ts +10 -0
- package/dist/client/content-scripts/custom-events.mjs +13 -0
- package/dist/client/content-scripts/index.d.ts +2 -0
- package/dist/client/content-scripts/index.mjs +2 -0
- package/dist/client/content-scripts/location-watcher.d.ts +12 -0
- package/dist/client/content-scripts/location-watcher.mjs +22 -0
- package/dist/client/content-scripts/ui/index.d.ts +23 -0
- package/dist/client/content-scripts/ui/index.mjs +188 -0
- package/dist/{client.d.ts → client/content-scripts/ui/types.d.ts} +17 -45
- package/dist/client/content-scripts/ui/types.mjs +0 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.mjs +2 -0
- package/dist/core/build.d.ts +15 -0
- package/dist/core/build.mjs +6 -0
- package/dist/core/builders/vite/index.d.ts +3 -0
- package/dist/core/builders/vite/index.mjs +285 -0
- package/dist/core/builders/vite/plugins/bundleAnalysis.d.ts +7 -0
- package/dist/core/builders/vite/plugins/bundleAnalysis.mjs +15 -0
- package/dist/core/builders/vite/plugins/cssEntrypoints.d.ts +13 -0
- package/dist/core/builders/vite/plugins/cssEntrypoints.mjs +22 -0
- package/dist/core/builders/vite/plugins/defineImportMeta.d.ts +14 -0
- package/dist/core/builders/vite/plugins/defineImportMeta.mjs +13 -0
- package/dist/core/builders/vite/plugins/devHtmlPrerender.d.ts +7 -0
- package/dist/core/builders/vite/plugins/devHtmlPrerender.mjs +140 -0
- package/dist/core/builders/vite/plugins/devServerGlobals.d.ts +6 -0
- package/dist/core/builders/vite/plugins/devServerGlobals.mjs +15 -0
- package/dist/core/builders/vite/plugins/download.d.ts +10 -0
- package/dist/core/builders/vite/plugins/download.mjs +14 -0
- package/dist/core/builders/vite/plugins/entrypointGroupGlobals.d.ts +6 -0
- package/dist/core/builders/vite/plugins/entrypointGroupGlobals.mjs +16 -0
- package/dist/core/builders/vite/plugins/extensionApiMock.d.ts +11 -0
- package/dist/core/builders/vite/plugins/extensionApiMock.mjs +26 -0
- package/dist/core/builders/vite/plugins/globals.d.ts +3 -0
- package/dist/core/builders/vite/plugins/globals.mjs +15 -0
- package/dist/core/builders/vite/plugins/index.d.ts +17 -0
- package/dist/core/builders/vite/plugins/index.mjs +17 -0
- package/dist/core/builders/vite/plugins/multipageMove.d.ts +20 -0
- package/dist/core/builders/vite/plugins/multipageMove.mjs +59 -0
- package/dist/core/builders/vite/plugins/noopBackground.d.ts +6 -0
- package/dist/core/builders/vite/plugins/noopBackground.mjs +17 -0
- package/dist/core/builders/vite/plugins/removeEntrypointMainFunction.d.ts +6 -0
- package/dist/core/builders/vite/plugins/removeEntrypointMainFunction.mjs +12 -0
- package/dist/core/builders/vite/plugins/resolveAppConfig.d.ts +6 -0
- package/dist/core/builders/vite/plugins/resolveAppConfig.mjs +26 -0
- package/dist/core/builders/vite/plugins/resolveExtensionApi.d.ts +10 -0
- package/dist/core/builders/vite/plugins/resolveExtensionApi.mjs +15 -0
- package/dist/core/builders/vite/plugins/resolveVirtualModules.d.ts +6 -0
- package/dist/core/builders/vite/plugins/resolveVirtualModules.mjs +30 -0
- package/dist/core/builders/vite/plugins/tsconfigPaths.d.ts +3 -0
- package/dist/core/builders/vite/plugins/tsconfigPaths.mjs +12 -0
- package/dist/core/builders/vite/plugins/wxtPluginLoader.d.ts +6 -0
- package/dist/core/builders/vite/plugins/wxtPluginLoader.mjs +56 -0
- package/dist/core/clean.d.ts +21 -0
- package/dist/core/clean.mjs +38 -0
- package/dist/core/create-server.d.ts +11 -0
- package/dist/core/create-server.mjs +206 -0
- package/dist/core/define-config.d.ts +2 -0
- package/dist/core/define-config.mjs +3 -0
- package/dist/core/define-runner-config.d.ts +2 -0
- package/dist/core/define-runner-config.mjs +3 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.mjs +8 -0
- package/dist/core/initialize.d.ts +5 -0
- package/dist/core/initialize.mjs +128 -0
- package/dist/core/package-managers/bun.d.ts +2 -0
- package/dist/core/package-managers/bun.mjs +19 -0
- package/dist/core/package-managers/index.d.ts +2 -0
- package/dist/core/package-managers/index.mjs +65 -0
- package/dist/core/package-managers/npm.d.ts +17 -0
- package/dist/core/package-managers/npm.mjs +58 -0
- package/dist/core/package-managers/pnpm.d.ts +2 -0
- package/dist/core/package-managers/pnpm.mjs +21 -0
- package/dist/core/package-managers/types.d.ts +2 -0
- package/dist/core/package-managers/types.mjs +0 -0
- package/dist/core/package-managers/yarn.d.ts +2 -0
- package/dist/core/package-managers/yarn.mjs +31 -0
- package/dist/core/prepare.d.ts +2 -0
- package/dist/core/prepare.mjs +8 -0
- package/dist/core/runners/index.d.ts +2 -0
- package/dist/core/runners/index.mjs +12 -0
- package/dist/core/runners/manual.d.ts +5 -0
- package/dist/core/runners/manual.mjs +16 -0
- package/dist/core/runners/safari.d.ts +5 -0
- package/dist/core/runners/safari.mjs +16 -0
- package/dist/core/runners/web-ext.d.ts +5 -0
- package/dist/core/runners/web-ext.mjs +78 -0
- package/dist/core/runners/wsl.d.ts +5 -0
- package/dist/core/runners/wsl.mjs +16 -0
- package/dist/core/utils/arrays.d.ts +13 -0
- package/dist/{chunk-BERPNPEZ.js → core/utils/arrays.mjs} +6 -10
- package/dist/core/utils/building/build-entrypoints.d.ts +3 -0
- package/dist/core/utils/building/build-entrypoints.mjs +47 -0
- package/dist/core/utils/building/detect-dev-changes.d.ts +57 -0
- package/dist/core/utils/building/detect-dev-changes.mjs +93 -0
- package/dist/core/utils/building/find-entrypoints.d.ts +5 -0
- package/dist/core/utils/building/find-entrypoints.mjs +385 -0
- package/dist/core/utils/building/generate-wxt-dir.d.ts +5 -0
- package/dist/core/utils/building/generate-wxt-dir.mjs +192 -0
- package/dist/core/utils/building/group-entrypoints.d.ts +8 -0
- package/dist/core/utils/building/group-entrypoints.mjs +37 -0
- package/dist/core/utils/building/import-entrypoint.d.ts +16 -0
- package/dist/core/utils/building/import-entrypoint.mjs +97 -0
- package/dist/core/utils/building/index.d.ts +9 -0
- package/dist/core/utils/building/index.mjs +9 -0
- package/dist/core/utils/building/internal-build.d.ts +12 -0
- package/dist/core/utils/building/internal-build.mjs +112 -0
- package/dist/core/utils/building/rebuild.d.ts +23 -0
- package/dist/core/utils/building/rebuild.mjs +39 -0
- package/dist/core/utils/building/resolve-config.d.ts +11 -0
- package/dist/core/utils/building/resolve-config.mjs +364 -0
- package/dist/core/utils/cache.d.ts +8 -0
- package/dist/core/utils/cache.mjs +21 -0
- package/dist/core/utils/cli.d.ts +3 -0
- package/dist/core/utils/cli.mjs +26 -0
- package/dist/core/utils/constants.d.ts +5 -0
- package/dist/core/utils/constants.mjs +1 -0
- package/dist/core/utils/content-scripts.d.ts +11 -0
- package/dist/core/utils/content-scripts.mjs +60 -0
- package/dist/core/utils/content-security-policy.d.ts +14 -0
- package/dist/core/utils/content-security-policy.mjs +39 -0
- package/dist/core/utils/entrypoints.d.ts +25 -0
- package/dist/core/utils/entrypoints.mjs +31 -0
- package/dist/core/utils/eslint.d.ts +1 -0
- package/dist/core/utils/eslint.mjs +11 -0
- package/dist/core/utils/fs.d.ts +13 -0
- package/dist/core/utils/fs.mjs +15 -0
- package/dist/core/utils/globals.d.ts +11 -0
- package/dist/core/utils/globals.mjs +53 -0
- package/dist/core/utils/i18n.d.ts +11 -0
- package/dist/core/utils/i18n.mjs +35 -0
- package/dist/core/utils/log/index.d.ts +4 -0
- package/dist/core/utils/log/index.mjs +4 -0
- package/dist/core/utils/log/printBuildSummary.d.ts +2 -0
- package/dist/core/utils/log/printBuildSummary.mjs +32 -0
- package/dist/core/utils/log/printFileList.d.ts +1 -0
- package/dist/core/utils/log/printFileList.mjs +42 -0
- package/dist/core/utils/log/printHeader.d.ts +1 -0
- package/dist/core/utils/log/printHeader.mjs +7 -0
- package/dist/core/utils/log/printTable.d.ts +1 -0
- package/dist/core/utils/log/printTable.mjs +22 -0
- package/dist/core/utils/manifest.d.ts +44 -0
- package/dist/core/utils/manifest.mjs +512 -0
- package/dist/core/utils/network.d.ts +7 -0
- package/dist/core/utils/network.mjs +38 -0
- package/dist/core/utils/package.d.ts +6 -0
- package/dist/core/utils/package.mjs +14 -0
- package/dist/core/utils/paths.d.ts +11 -0
- package/dist/core/utils/paths.mjs +10 -0
- package/dist/core/utils/strings.d.ts +14 -0
- package/dist/core/utils/strings.mjs +18 -0
- package/dist/core/utils/testing/fake-objects.d.ts +4556 -0
- package/dist/core/utils/testing/fake-objects.mjs +322 -0
- package/dist/core/utils/time.d.ts +9 -0
- package/dist/core/utils/time.mjs +17 -0
- package/dist/core/utils/transform.d.ts +9 -0
- package/dist/core/utils/transform.mjs +17 -0
- package/dist/core/utils/types.d.ts +10 -0
- package/dist/core/utils/types.mjs +0 -0
- package/dist/core/utils/validation.d.ts +15 -0
- package/dist/core/utils/validation.mjs +55 -0
- package/dist/core/utils/virtual-modules.d.ts +22 -0
- package/dist/core/utils/virtual-modules.mjs +14 -0
- package/dist/core/utils/wsl.d.ts +4 -0
- package/dist/core/utils/wsl.mjs +4 -0
- package/dist/core/wxt.d.ts +19 -0
- package/dist/core/wxt.mjs +41 -0
- package/dist/core/zip.d.ts +7 -0
- package/dist/core/zip.mjs +137 -0
- package/dist/index.d.ts +4 -79
- package/dist/index.mjs +3 -0
- package/dist/modules.d.ts +10 -20
- package/dist/{chunk-6XSIWUWF.js → modules.mjs} +7 -16
- package/dist/sandbox/define-app-config.d.ts +19 -0
- package/dist/sandbox/define-app-config.mjs +3 -0
- package/dist/sandbox/define-background.d.ts +3 -0
- package/dist/sandbox/define-background.mjs +4 -0
- package/dist/sandbox/define-content-script.d.ts +2 -0
- package/dist/sandbox/define-content-script.mjs +3 -0
- package/dist/sandbox/define-unlisted-script.d.ts +3 -0
- package/dist/sandbox/define-unlisted-script.mjs +4 -0
- package/dist/sandbox/define-wxt-plugin.d.ts +2 -0
- package/dist/sandbox/define-wxt-plugin.mjs +3 -0
- package/dist/sandbox/dev-server-websocket.d.ts +21 -0
- package/dist/sandbox/dev-server-websocket.mjs +37 -0
- package/dist/sandbox/index.d.ts +11 -0
- package/dist/sandbox/index.mjs +6 -0
- package/dist/sandbox/utils/logger.d.ts +9 -0
- package/dist/sandbox/utils/logger.mjs +15 -0
- package/dist/storage.d.ts +39 -16
- package/dist/{storage.js → storage.mjs} +30 -41
- package/dist/testing/fake-browser.d.ts +1 -0
- package/dist/testing/fake-browser.mjs +1 -0
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.mjs +2 -0
- package/dist/{testing.d.ts → testing/wxt-vitest-plugin.d.ts} +3 -15
- package/dist/testing/wxt-vitest-plugin.mjs +26 -0
- package/dist/{index-nWRfwAJi.d.cts → types.d.ts} +150 -264
- package/dist/types.mjs +0 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.mjs +1 -0
- package/dist/virtual/{background-entrypoint.js → background-entrypoint.mjs} +31 -40
- package/dist/virtual/{content-script-isolated-world-entrypoint.js → content-script-isolated-world-entrypoint.mjs} +9 -13
- package/dist/virtual/{content-script-main-world-entrypoint.js → content-script-main-world-entrypoint.mjs} +9 -14
- package/dist/virtual/mock-browser.mjs +6 -0
- package/dist/virtual/{reload-html.js → reload-html.mjs} +8 -9
- package/dist/virtual/{unlisted-script-entrypoint.js → unlisted-script-entrypoint.mjs} +8 -12
- package/package.json +47 -57
- package/dist/browser.d.ts +0 -18
- package/dist/browser.js +0 -6
- package/dist/chunk-BM6QYGAW.js +0 -1063
- package/dist/chunk-FNTE2L27.js +0 -7
- package/dist/chunk-FP7RYLVL.js +0 -3617
- package/dist/chunk-KPD5J7PZ.js +0 -1065
- package/dist/chunk-QGM4M3NI.js +0 -37
- package/dist/chunk-SGKCDMVR.js +0 -38
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js +0 -4438
- package/dist/client.js +0 -424
- package/dist/define-app-config-bg54F_lV.d.ts +0 -294
- package/dist/execa-4UBDUBJZ.js +0 -7244
- package/dist/execa-QLUM2B3W.js +0 -7245
- package/dist/index-nWRfwAJi.d.ts +0 -1401
- package/dist/index.cjs +0 -14473
- package/dist/index.d.cts +0 -81
- package/dist/index.js +0 -696
- package/dist/modules.cjs +0 -96
- package/dist/modules.d.cts +0 -119
- package/dist/modules.js +0 -17
- package/dist/prompt-25QIVJDC.js +0 -755
- package/dist/prompt-7BMKNSWS.js +0 -754
- package/dist/sandbox.d.ts +0 -16
- package/dist/sandbox.js +0 -36
- package/dist/storage.cjs +0 -439
- package/dist/storage.d.cts +0 -200
- package/dist/testing.cjs +0 -2815
- package/dist/testing.d.cts +0 -30
- package/dist/testing.js +0 -40
- package/dist/virtual/mock-browser.js +0 -6
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import * as wxtPlugins from "./plugins/index.mjs";
|
|
2
|
+
import {
|
|
3
|
+
getEntrypointBundlePath,
|
|
4
|
+
isHtmlEntrypoint
|
|
5
|
+
} from "../../utils/entrypoints.mjs";
|
|
6
|
+
import { toArray } from "../../utils/arrays.mjs";
|
|
7
|
+
import { safeVarName } from "../../utils/strings.mjs";
|
|
8
|
+
import { importEntrypointFile } from "../../utils/building/index.mjs";
|
|
9
|
+
import { ViteNodeServer } from "vite-node/server";
|
|
10
|
+
import { ViteNodeRunner } from "vite-node/client";
|
|
11
|
+
import { installSourcemapsSupport } from "vite-node/source-map";
|
|
12
|
+
export async function createViteBuilder(wxtConfig, hooks, server) {
|
|
13
|
+
const vite = await import("vite");
|
|
14
|
+
const getBaseConfig = async (baseConfigOptions) => {
|
|
15
|
+
const config = await wxtConfig.vite(wxtConfig.env);
|
|
16
|
+
config.root = wxtConfig.root;
|
|
17
|
+
config.configFile = false;
|
|
18
|
+
config.logLevel = "warn";
|
|
19
|
+
config.mode = wxtConfig.mode;
|
|
20
|
+
config.build ??= {};
|
|
21
|
+
config.publicDir = wxtConfig.publicDir;
|
|
22
|
+
config.build.copyPublicDir = false;
|
|
23
|
+
config.build.outDir = wxtConfig.outDir;
|
|
24
|
+
config.build.emptyOutDir = false;
|
|
25
|
+
if (config.build.minify == null && wxtConfig.command === "serve") {
|
|
26
|
+
config.build.minify = false;
|
|
27
|
+
}
|
|
28
|
+
if (config.build.sourcemap == null && wxtConfig.command === "serve") {
|
|
29
|
+
config.build.sourcemap = "inline";
|
|
30
|
+
}
|
|
31
|
+
config.plugins ??= [];
|
|
32
|
+
config.plugins.push(
|
|
33
|
+
wxtPlugins.download(wxtConfig),
|
|
34
|
+
wxtPlugins.devHtmlPrerender(wxtConfig, server),
|
|
35
|
+
wxtPlugins.resolveVirtualModules(wxtConfig),
|
|
36
|
+
wxtPlugins.devServerGlobals(wxtConfig, server),
|
|
37
|
+
wxtPlugins.tsconfigPaths(wxtConfig),
|
|
38
|
+
wxtPlugins.noopBackground(),
|
|
39
|
+
wxtPlugins.globals(wxtConfig),
|
|
40
|
+
wxtPlugins.resolveExtensionApi(wxtConfig),
|
|
41
|
+
wxtPlugins.defineImportMeta(),
|
|
42
|
+
wxtPlugins.wxtPluginLoader(wxtConfig),
|
|
43
|
+
wxtPlugins.resolveAppConfig(wxtConfig)
|
|
44
|
+
);
|
|
45
|
+
if (wxtConfig.analysis.enabled && // If included, vite-node entrypoint loader will increment the
|
|
46
|
+
// bundleAnalysis's internal build index tracker, which we don't want
|
|
47
|
+
!baseConfigOptions?.excludeAnalysisPlugin) {
|
|
48
|
+
config.plugins.push(wxtPlugins.bundleAnalysis(wxtConfig));
|
|
49
|
+
}
|
|
50
|
+
return config;
|
|
51
|
+
};
|
|
52
|
+
const getLibModeConfig = (entrypoint) => {
|
|
53
|
+
const entry = getRollupEntry(entrypoint);
|
|
54
|
+
const plugins = [
|
|
55
|
+
wxtPlugins.entrypointGroupGlobals(entrypoint)
|
|
56
|
+
];
|
|
57
|
+
if (entrypoint.type === "content-script-style" || entrypoint.type === "unlisted-style") {
|
|
58
|
+
plugins.push(wxtPlugins.cssEntrypoints(entrypoint, wxtConfig));
|
|
59
|
+
}
|
|
60
|
+
const iifeReturnValueName = safeVarName(entrypoint.name);
|
|
61
|
+
const libMode = {
|
|
62
|
+
mode: wxtConfig.mode,
|
|
63
|
+
plugins,
|
|
64
|
+
esbuild: {
|
|
65
|
+
// Add a footer with the returned value so it can return values to `scripting.executeScript`
|
|
66
|
+
// Footer is added apart of esbuild to make sure it's not minified. It
|
|
67
|
+
// get's removed if added to `build.rollupOptions.output.footer`
|
|
68
|
+
// See https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript#return_value
|
|
69
|
+
footer: iifeReturnValueName + ";"
|
|
70
|
+
},
|
|
71
|
+
build: {
|
|
72
|
+
lib: {
|
|
73
|
+
entry,
|
|
74
|
+
formats: ["iife"],
|
|
75
|
+
name: iifeReturnValueName,
|
|
76
|
+
fileName: entrypoint.name
|
|
77
|
+
},
|
|
78
|
+
rollupOptions: {
|
|
79
|
+
output: {
|
|
80
|
+
// There's only a single output for this build, so we use the desired bundle path for the
|
|
81
|
+
// entry output (like "content-scripts/overlay.js")
|
|
82
|
+
entryFileNames: getEntrypointBundlePath(
|
|
83
|
+
entrypoint,
|
|
84
|
+
wxtConfig.outDir,
|
|
85
|
+
".js"
|
|
86
|
+
),
|
|
87
|
+
// Output content script CSS to `content-scripts/`, but all other scripts are written to
|
|
88
|
+
// `assets/`.
|
|
89
|
+
assetFileNames: ({ name }) => {
|
|
90
|
+
if (entrypoint.type === "content-script" && name?.endsWith("css")) {
|
|
91
|
+
return `content-scripts/${entrypoint.name}.[ext]`;
|
|
92
|
+
} else {
|
|
93
|
+
return `assets/${entrypoint.name}.[ext]`;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
define: {
|
|
100
|
+
// See https://github.com/aklinker1/vite-plugin-web-extension/issues/96
|
|
101
|
+
"process.env.NODE_ENV": JSON.stringify(wxtConfig.mode)
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
return libMode;
|
|
105
|
+
};
|
|
106
|
+
const getMultiPageConfig = (entrypoints) => {
|
|
107
|
+
const htmlEntrypoints = new Set(
|
|
108
|
+
entrypoints.filter(isHtmlEntrypoint).map((e) => e.name)
|
|
109
|
+
);
|
|
110
|
+
return {
|
|
111
|
+
mode: wxtConfig.mode,
|
|
112
|
+
plugins: [
|
|
113
|
+
wxtPlugins.multipageMove(entrypoints, wxtConfig),
|
|
114
|
+
wxtPlugins.entrypointGroupGlobals(entrypoints)
|
|
115
|
+
],
|
|
116
|
+
build: {
|
|
117
|
+
rollupOptions: {
|
|
118
|
+
input: entrypoints.reduce((input, entry) => {
|
|
119
|
+
input[entry.name] = getRollupEntry(entry);
|
|
120
|
+
return input;
|
|
121
|
+
}, {}),
|
|
122
|
+
output: {
|
|
123
|
+
// Include a hash to prevent conflicts
|
|
124
|
+
chunkFileNames: "chunks/[name]-[hash].js",
|
|
125
|
+
entryFileNames: ({ name }) => {
|
|
126
|
+
if (htmlEntrypoints.has(name)) return "chunks/[name]-[hash].js";
|
|
127
|
+
return "[name].js";
|
|
128
|
+
},
|
|
129
|
+
// We can't control the "name", so we need a hash to prevent conflicts
|
|
130
|
+
assetFileNames: "assets/[name]-[hash].[ext]"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
const getCssConfig = (entrypoint) => {
|
|
137
|
+
return {
|
|
138
|
+
mode: wxtConfig.mode,
|
|
139
|
+
plugins: [wxtPlugins.entrypointGroupGlobals(entrypoint)],
|
|
140
|
+
build: {
|
|
141
|
+
rollupOptions: {
|
|
142
|
+
input: {
|
|
143
|
+
[entrypoint.name]: entrypoint.inputPath
|
|
144
|
+
},
|
|
145
|
+
output: {
|
|
146
|
+
assetFileNames: () => {
|
|
147
|
+
if (entrypoint.type === "content-script-style") {
|
|
148
|
+
return `content-scripts/${entrypoint.name}.[ext]`;
|
|
149
|
+
} else {
|
|
150
|
+
return `assets/${entrypoint.name}.[ext]`;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
return {
|
|
159
|
+
name: "Vite",
|
|
160
|
+
version: vite.version,
|
|
161
|
+
async importEntrypoint(path) {
|
|
162
|
+
switch (wxtConfig.entrypointLoader) {
|
|
163
|
+
default:
|
|
164
|
+
case "jiti": {
|
|
165
|
+
return await importEntrypointFile(path);
|
|
166
|
+
}
|
|
167
|
+
case "vite-node": {
|
|
168
|
+
const baseConfig = await getBaseConfig({
|
|
169
|
+
excludeAnalysisPlugin: true
|
|
170
|
+
});
|
|
171
|
+
baseConfig.optimizeDeps ??= {};
|
|
172
|
+
baseConfig.optimizeDeps.noDiscovery = true;
|
|
173
|
+
baseConfig.optimizeDeps.include = [];
|
|
174
|
+
const envConfig = {
|
|
175
|
+
plugins: [
|
|
176
|
+
wxtPlugins.extensionApiMock(wxtConfig),
|
|
177
|
+
wxtPlugins.removeEntrypointMainFunction(wxtConfig, path)
|
|
178
|
+
]
|
|
179
|
+
};
|
|
180
|
+
const config = vite.mergeConfig(baseConfig, envConfig);
|
|
181
|
+
const server2 = await vite.createServer(config);
|
|
182
|
+
await server2.pluginContainer.buildStart({});
|
|
183
|
+
const node = new ViteNodeServer(
|
|
184
|
+
// @ts-ignore: Some weird type error...
|
|
185
|
+
server2
|
|
186
|
+
);
|
|
187
|
+
installSourcemapsSupport({
|
|
188
|
+
getSourceMap: (source) => node.getSourceMap(source)
|
|
189
|
+
});
|
|
190
|
+
const runner = new ViteNodeRunner({
|
|
191
|
+
root: server2.config.root,
|
|
192
|
+
base: server2.config.base,
|
|
193
|
+
// when having the server and runner in a different context,
|
|
194
|
+
// you will need to handle the communication between them
|
|
195
|
+
// and pass to this function
|
|
196
|
+
fetchModule(id) {
|
|
197
|
+
return node.fetchModule(id);
|
|
198
|
+
},
|
|
199
|
+
resolveId(id, importer) {
|
|
200
|
+
return node.resolveId(id, importer);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
const res = await runner.executeFile(path);
|
|
204
|
+
await server2.close();
|
|
205
|
+
return res.default;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
async build(group) {
|
|
210
|
+
let entryConfig;
|
|
211
|
+
if (Array.isArray(group)) entryConfig = getMultiPageConfig(group);
|
|
212
|
+
else if (group.inputPath.endsWith(".css"))
|
|
213
|
+
entryConfig = getCssConfig(group);
|
|
214
|
+
else entryConfig = getLibModeConfig(group);
|
|
215
|
+
const buildConfig = vite.mergeConfig(await getBaseConfig(), entryConfig);
|
|
216
|
+
await hooks.callHook(
|
|
217
|
+
"vite:build:extendConfig",
|
|
218
|
+
toArray(group),
|
|
219
|
+
buildConfig
|
|
220
|
+
);
|
|
221
|
+
const result = await vite.build(buildConfig);
|
|
222
|
+
return {
|
|
223
|
+
entrypoints: group,
|
|
224
|
+
chunks: getBuildOutputChunks(result)
|
|
225
|
+
};
|
|
226
|
+
},
|
|
227
|
+
async createServer(info) {
|
|
228
|
+
const serverConfig = {
|
|
229
|
+
server: {
|
|
230
|
+
port: info.port,
|
|
231
|
+
strictPort: true,
|
|
232
|
+
host: info.hostname,
|
|
233
|
+
origin: info.origin
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
const baseConfig = await getBaseConfig();
|
|
237
|
+
const finalConfig = vite.mergeConfig(baseConfig, serverConfig);
|
|
238
|
+
await hooks.callHook("vite:devServer:extendConfig", finalConfig);
|
|
239
|
+
const viteServer = await vite.createServer(finalConfig);
|
|
240
|
+
const server2 = {
|
|
241
|
+
async listen() {
|
|
242
|
+
await viteServer.listen(info.port);
|
|
243
|
+
},
|
|
244
|
+
async close() {
|
|
245
|
+
await viteServer.close();
|
|
246
|
+
},
|
|
247
|
+
transformHtml(...args) {
|
|
248
|
+
return viteServer.transformIndexHtml(...args);
|
|
249
|
+
},
|
|
250
|
+
ws: {
|
|
251
|
+
send(message, payload) {
|
|
252
|
+
return viteServer.ws.send(message, payload);
|
|
253
|
+
},
|
|
254
|
+
on(message, cb) {
|
|
255
|
+
viteServer.ws.on(message, cb);
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
watcher: viteServer.watcher
|
|
259
|
+
};
|
|
260
|
+
return server2;
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function getBuildOutputChunks(result) {
|
|
265
|
+
if ("on" in result) throw Error("wxt does not support vite watch mode.");
|
|
266
|
+
if (Array.isArray(result)) return result.flatMap(({ output }) => output);
|
|
267
|
+
return result.output;
|
|
268
|
+
}
|
|
269
|
+
function getRollupEntry(entrypoint) {
|
|
270
|
+
let virtualEntrypointType;
|
|
271
|
+
switch (entrypoint.type) {
|
|
272
|
+
case "background":
|
|
273
|
+
case "unlisted-script":
|
|
274
|
+
virtualEntrypointType = entrypoint.type;
|
|
275
|
+
break;
|
|
276
|
+
case "content-script":
|
|
277
|
+
virtualEntrypointType = entrypoint.options.world === "MAIN" ? "content-script-main-world" : "content-script-isolated-world";
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
if (virtualEntrypointType) {
|
|
281
|
+
const moduleId = `virtual:wxt-${virtualEntrypointType}-entrypoint`;
|
|
282
|
+
return `${moduleId}?${entrypoint.inputPath}`;
|
|
283
|
+
}
|
|
284
|
+
return entrypoint.inputPath;
|
|
285
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type * as vite from 'vite';
|
|
2
|
+
import { ResolvedConfig } from '../../../../types';
|
|
3
|
+
export declare function bundleAnalysis(config: ResolvedConfig): vite.Plugin;
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated FOR TESTING ONLY.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resetBundleIncrement(): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { visualizer } from "@aklinker1/rollup-plugin-visualizer";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
let increment = 0;
|
|
4
|
+
export function bundleAnalysis(config) {
|
|
5
|
+
return visualizer({
|
|
6
|
+
template: "raw-data",
|
|
7
|
+
filename: path.resolve(
|
|
8
|
+
config.analysis.outputDir,
|
|
9
|
+
`${config.analysis.outputName}-${increment++}.json`
|
|
10
|
+
)
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export function resetBundleIncrement() {
|
|
14
|
+
increment = 0;
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type * as vite from 'vite';
|
|
2
|
+
import { Entrypoint, ResolvedConfig } from '../../../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Rename CSS entrypoint outputs to ensure a JS file is not generated, and that the CSS file is
|
|
5
|
+
* placed in the correct place.
|
|
6
|
+
*
|
|
7
|
+
* It:
|
|
8
|
+
* 1. Renames CSS files to their final paths
|
|
9
|
+
* 2. Removes the JS file that get's output by lib mode
|
|
10
|
+
*
|
|
11
|
+
* THIS PLUGIN SHOULD ONLY BE APPLIED TO CSS LIB MODE BUILDS. It should not be added to every build.
|
|
12
|
+
*/
|
|
13
|
+
export declare function cssEntrypoints(entrypoint: Entrypoint, config: ResolvedConfig): vite.Plugin;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getEntrypointBundlePath } from "../../../utils/entrypoints.mjs";
|
|
2
|
+
export function cssEntrypoints(entrypoint, config) {
|
|
3
|
+
return {
|
|
4
|
+
name: "wxt:css-entrypoint",
|
|
5
|
+
config() {
|
|
6
|
+
return {
|
|
7
|
+
build: {
|
|
8
|
+
rollupOptions: {
|
|
9
|
+
output: {
|
|
10
|
+
assetFileNames: () => getEntrypointBundlePath(entrypoint, config.outDir, ".css")
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
},
|
|
16
|
+
generateBundle(_, bundle) {
|
|
17
|
+
Object.keys(bundle).forEach((file) => {
|
|
18
|
+
if (file.endsWith(".js")) delete bundle[file];
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overrides definitions for `import.meta.*`
|
|
3
|
+
*
|
|
4
|
+
* - `import.meta.url`: Without this, background service workers crash trying to access
|
|
5
|
+
* `document.location`, see https://github.com/wxt-dev/wxt/issues/392
|
|
6
|
+
*/
|
|
7
|
+
export declare function defineImportMeta(): {
|
|
8
|
+
name: string;
|
|
9
|
+
config(): {
|
|
10
|
+
define: {
|
|
11
|
+
'import.meta.url': string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type * as vite from 'vite';
|
|
2
|
+
import { ResolvedConfig, WxtDevServer } from '../../../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Pre-renders the HTML entrypoints when building the extension to connect to the dev server.
|
|
5
|
+
*/
|
|
6
|
+
export declare function devHtmlPrerender(config: ResolvedConfig, server: WxtDevServer | undefined): vite.PluginOption;
|
|
7
|
+
export declare function pointToDevServer(config: ResolvedConfig, server: WxtDevServer, id: string, document: Document, querySelector: string, attr: string): void;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { getEntrypointName } from "../../../utils/entrypoints.mjs";
|
|
2
|
+
import { parseHTML } from "linkedom";
|
|
3
|
+
import { dirname, relative, resolve } from "node:path";
|
|
4
|
+
import { normalizePath } from "../../../utils/paths.mjs";
|
|
5
|
+
import { murmurHash } from "ohash";
|
|
6
|
+
const inlineScriptContents = {};
|
|
7
|
+
export function devHtmlPrerender(config, server) {
|
|
8
|
+
const htmlReloadId = "@wxt/reload-html";
|
|
9
|
+
const resolvedHtmlReloadId = resolve(
|
|
10
|
+
config.wxtModuleDir,
|
|
11
|
+
"dist/virtual/reload-html.mjs"
|
|
12
|
+
);
|
|
13
|
+
const virtualInlineScript = "virtual:wxt-inline-script";
|
|
14
|
+
const resolvedVirtualInlineScript = "\0" + virtualInlineScript;
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
apply: "build",
|
|
18
|
+
name: "wxt:dev-html-prerender",
|
|
19
|
+
config() {
|
|
20
|
+
return {
|
|
21
|
+
resolve: {
|
|
22
|
+
alias: {
|
|
23
|
+
[htmlReloadId]: resolvedHtmlReloadId
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
// Convert scripts like src="./main.tsx" -> src="http://localhost:3000/entrypoints/popup/main.tsx"
|
|
29
|
+
// before the paths are replaced with their bundled path
|
|
30
|
+
transform(code, id) {
|
|
31
|
+
if (config.command !== "serve" || server == null || !id.endsWith(".html"))
|
|
32
|
+
return;
|
|
33
|
+
const { document } = parseHTML(code);
|
|
34
|
+
const _pointToDevServer = (querySelector, attr) => pointToDevServer(config, server, id, document, querySelector, attr);
|
|
35
|
+
_pointToDevServer("script[type=module]", "src");
|
|
36
|
+
_pointToDevServer("link[rel=stylesheet]", "href");
|
|
37
|
+
const reloader = document.createElement("script");
|
|
38
|
+
reloader.src = htmlReloadId;
|
|
39
|
+
reloader.type = "module";
|
|
40
|
+
document.head.appendChild(reloader);
|
|
41
|
+
const newHtml = document.toString();
|
|
42
|
+
config.logger.debug("transform " + id);
|
|
43
|
+
config.logger.debug("Old HTML:\n" + code);
|
|
44
|
+
config.logger.debug("New HTML:\n" + newHtml);
|
|
45
|
+
return newHtml;
|
|
46
|
+
},
|
|
47
|
+
// Pass the HTML through the dev server to add dev-mode specific code
|
|
48
|
+
async transformIndexHtml(html, ctx) {
|
|
49
|
+
if (config.command !== "serve" || server == null) return;
|
|
50
|
+
const originalUrl = `${server.origin}${ctx.path}`;
|
|
51
|
+
const name = getEntrypointName(config.entrypointsDir, ctx.filename);
|
|
52
|
+
const url = `${server.origin}/${name}.html`;
|
|
53
|
+
const serverHtml = await server.transformHtml(url, html, originalUrl);
|
|
54
|
+
const { document } = parseHTML(serverHtml);
|
|
55
|
+
const inlineScripts = document.querySelectorAll("script:not([src])");
|
|
56
|
+
inlineScripts.forEach((script) => {
|
|
57
|
+
const textContent = script.textContent ?? "";
|
|
58
|
+
const hash = murmurHash(textContent);
|
|
59
|
+
inlineScriptContents[hash] = textContent;
|
|
60
|
+
const virtualScript = document.createElement("script");
|
|
61
|
+
virtualScript.type = "module";
|
|
62
|
+
virtualScript.src = `${server.origin}/@id/${virtualInlineScript}?${hash}`;
|
|
63
|
+
script.replaceWith(virtualScript);
|
|
64
|
+
});
|
|
65
|
+
const viteClientScript = document.querySelector(
|
|
66
|
+
"script[src='/@vite/client']"
|
|
67
|
+
);
|
|
68
|
+
if (viteClientScript) {
|
|
69
|
+
viteClientScript.src = `${server.origin}${viteClientScript.src}`;
|
|
70
|
+
}
|
|
71
|
+
const newHtml = document.toString();
|
|
72
|
+
config.logger.debug("transformIndexHtml " + ctx.filename);
|
|
73
|
+
config.logger.debug("Old HTML:\n" + html);
|
|
74
|
+
config.logger.debug("New HTML:\n" + newHtml);
|
|
75
|
+
return newHtml;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: "wxt:virtualize-react-refresh",
|
|
80
|
+
apply: "serve",
|
|
81
|
+
resolveId(id) {
|
|
82
|
+
if (id.startsWith(virtualInlineScript)) {
|
|
83
|
+
return "\0" + id;
|
|
84
|
+
}
|
|
85
|
+
if (id.startsWith("/chunks/")) {
|
|
86
|
+
return "\0noop";
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
load(id) {
|
|
90
|
+
if (id.startsWith(resolvedVirtualInlineScript)) {
|
|
91
|
+
const hash = Number(id.substring(id.indexOf("?") + 1));
|
|
92
|
+
return inlineScriptContents[hash];
|
|
93
|
+
}
|
|
94
|
+
if (id === "\0noop") {
|
|
95
|
+
return "";
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
];
|
|
100
|
+
}
|
|
101
|
+
export function pointToDevServer(config, server, id, document, querySelector, attr) {
|
|
102
|
+
document.querySelectorAll(querySelector).forEach((element) => {
|
|
103
|
+
const src = element.getAttribute(attr);
|
|
104
|
+
if (!src || isUrl(src)) return;
|
|
105
|
+
let resolvedAbsolutePath;
|
|
106
|
+
const matchingAlias = Object.entries(config.alias).find(
|
|
107
|
+
([key]) => src.startsWith(key)
|
|
108
|
+
);
|
|
109
|
+
if (matchingAlias) {
|
|
110
|
+
const [alias, replacement] = matchingAlias;
|
|
111
|
+
resolvedAbsolutePath = resolve(
|
|
112
|
+
config.root,
|
|
113
|
+
src.replace(alias, replacement)
|
|
114
|
+
);
|
|
115
|
+
} else {
|
|
116
|
+
resolvedAbsolutePath = resolve(dirname(id), src);
|
|
117
|
+
}
|
|
118
|
+
if (resolvedAbsolutePath) {
|
|
119
|
+
const relativePath = normalizePath(
|
|
120
|
+
relative(config.root, resolvedAbsolutePath)
|
|
121
|
+
);
|
|
122
|
+
if (relativePath.startsWith(".")) {
|
|
123
|
+
let path = normalizePath(resolvedAbsolutePath);
|
|
124
|
+
if (!path.startsWith("/")) path = "/" + path;
|
|
125
|
+
element.setAttribute(attr, `${server.origin}/@fs${path}`);
|
|
126
|
+
} else {
|
|
127
|
+
const url = new URL(relativePath, server.origin);
|
|
128
|
+
element.setAttribute(attr, url.href);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
function isUrl(str) {
|
|
134
|
+
try {
|
|
135
|
+
new URL(str);
|
|
136
|
+
return true;
|
|
137
|
+
} catch {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Plugin } from 'vite';
|
|
2
|
+
import { ResolvedConfig, WxtDevServer } from '../../../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Defines global constants about the dev server. Helps scripts connect to the server's web socket.
|
|
5
|
+
*/
|
|
6
|
+
export declare function devServerGlobals(config: ResolvedConfig, server: WxtDevServer | undefined): Plugin;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function devServerGlobals(config, server) {
|
|
2
|
+
return {
|
|
3
|
+
name: "wxt:dev-server-globals",
|
|
4
|
+
config() {
|
|
5
|
+
if (server == null || config.command == "build") return;
|
|
6
|
+
return {
|
|
7
|
+
define: {
|
|
8
|
+
__DEV_SERVER_PROTOCOL__: JSON.stringify("ws:"),
|
|
9
|
+
__DEV_SERVER_HOSTNAME__: JSON.stringify(server.hostname),
|
|
10
|
+
__DEV_SERVER_PORT__: JSON.stringify(server.port)
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Plugin } from 'vite';
|
|
2
|
+
import { ResolvedConfig } from '../../../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Downloads any URL imports, like Google Analytics, into virtual modules so they are bundled with
|
|
5
|
+
* the extension instead of depending on remote code at runtime.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* import "url:https://google-tagmanager.com/gtag?id=XYZ";
|
|
9
|
+
*/
|
|
10
|
+
export declare function download(config: ResolvedConfig): Plugin;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { fetchCached } from "../../../utils/network.mjs";
|
|
2
|
+
export function download(config) {
|
|
3
|
+
return {
|
|
4
|
+
name: "wxt:download",
|
|
5
|
+
resolveId(id) {
|
|
6
|
+
if (id.startsWith("url:")) return "\0" + id;
|
|
7
|
+
},
|
|
8
|
+
async load(id) {
|
|
9
|
+
if (!id.startsWith("\0url:")) return;
|
|
10
|
+
const url = id.replace("\0url:", "");
|
|
11
|
+
return await fetchCached(url, config);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getEntrypointGlobals } from "../../../utils/globals.mjs";
|
|
2
|
+
export function entrypointGroupGlobals(entrypointGroup) {
|
|
3
|
+
return {
|
|
4
|
+
name: "wxt:entrypoint-group-globals",
|
|
5
|
+
config() {
|
|
6
|
+
const define = {};
|
|
7
|
+
let name = Array.isArray(entrypointGroup) ? "html" : entrypointGroup.name;
|
|
8
|
+
for (const global of getEntrypointGlobals(name)) {
|
|
9
|
+
define[`import.meta.env.${global.name}`] = JSON.stringify(global.value);
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
define
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type * as vite from 'vite';
|
|
2
|
+
import { ResolvedConfig } from '../../../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Mock `webextension-polyfill`, `wxt/browser`, and `wxt/browser/*` by inlining
|
|
5
|
+
* all dependencies that import them and adding a custom alias so that Vite
|
|
6
|
+
* resolves to a mocked version of the module.
|
|
7
|
+
*
|
|
8
|
+
* TODO: Detect non-wxt dependencies (like `@webext-core/*`) that import `webextension-polyfill` via
|
|
9
|
+
* `npm list` and inline them automatically.
|
|
10
|
+
*/
|
|
11
|
+
export declare function extensionApiMock(config: ResolvedConfig): vite.PluginOption;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
export function extensionApiMock(config) {
|
|
3
|
+
return {
|
|
4
|
+
name: "wxt:extension-api-mock",
|
|
5
|
+
config() {
|
|
6
|
+
const replacement = path.resolve(
|
|
7
|
+
config.wxtModuleDir,
|
|
8
|
+
"dist/virtual/mock-browser"
|
|
9
|
+
);
|
|
10
|
+
return {
|
|
11
|
+
resolve: {
|
|
12
|
+
alias: [
|
|
13
|
+
{ find: "webextension-polyfill", replacement },
|
|
14
|
+
// wxt/browser, wxt/browser/...
|
|
15
|
+
{ find: /^wxt\/browser.*/, replacement }
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
ssr: {
|
|
19
|
+
// Inline all WXT modules so vite processes them so the aliases can
|
|
20
|
+
// be resolved
|
|
21
|
+
noExternal: ["wxt"]
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { getGlobals } from "../../../utils/globals.mjs";
|
|
2
|
+
export function globals(config) {
|
|
3
|
+
return {
|
|
4
|
+
name: "wxt:globals",
|
|
5
|
+
config() {
|
|
6
|
+
const define = {};
|
|
7
|
+
for (const global of getGlobals(config)) {
|
|
8
|
+
define[`import.meta.env.${global.name}`] = JSON.stringify(global.value);
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
define
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|