wxt 0.19.0-alpha1 → 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.
@@ -1,4 +1,18 @@
1
1
  /**
2
+ * Includes the `browser` API and types when using `extensionApi: 'webextension-polyfill'` (the default).
3
+ *
2
4
  * @module wxt/browser
3
5
  */
4
- export * from './webextension-polyfill';
6
+ import { Browser, Runtime, I18n } from 'webextension-polyfill';
7
+ export interface AugmentedBrowser extends Browser {
8
+ runtime: WxtRuntime;
9
+ i18n: WxtI18n;
10
+ }
11
+ export interface WxtRuntime extends Runtime.Static {
12
+ }
13
+ export interface WxtI18n extends I18n.Static {
14
+ }
15
+ export declare const browser: AugmentedBrowser;
16
+ /** @ignore */
17
+ export type { ActivityLog, Alarms, Bookmarks, Action, BrowserAction, BrowserSettings, BrowsingData, CaptivePortal, Clipboard, Commands, ContentScripts, ContextualIdentities, Cookies, DeclarativeNetRequest, Devtools, Dns, Downloads, Events, Experiments, Extension, ExtensionTypes, Find, GeckoProfiler, History, I18n, Identity, Idle, Management, Manifest, // TODO: Export custom manifest types that are valid for both Chrome and Firefox.
18
+ ContextMenus, Menus, NetworkStatus, NormandyAddonStudy, Notifications, Omnibox, PageAction, Permissions, Pkcs11, Privacy, Proxy, Runtime, Scripting, Search, Sessions, SidebarAction, Storage, Tabs, Theme, TopSites, Types, Urlbar, UserScripts, WebNavigation, WebRequest, Windows, } from 'webextension-polyfill';
@@ -1 +1,2 @@
1
- export * from "./webextension-polyfill.mjs";
1
+ import originalBrowser from "webextension-polyfill";
2
+ export const browser = originalBrowser;
@@ -149,9 +149,9 @@ export interface ContentScriptModalPositioningOptions {
149
149
  zIndex?: number;
150
150
  }
151
151
  /**
152
- * Choose between `"inline"`, `"overlay"`, or `"modal" `types.
152
+ * Choose between `"inline"`, `"overlay"`, or `"modal"` positions.
153
153
  *
154
- * ![Visualization of different types](https://wxt.dev/content-script-ui-type.png)
154
+ * ![Visualization of different types](https://wxt.dev/content-script-ui-position.png)
155
155
  */
156
156
  export type ContentScriptPositioningOptions = ContentScriptInlinePositioningOptions | ContentScriptOverlayPositioningOptions | ContentScriptModalPositioningOptions;
157
157
  export interface ContentScriptAnchoredOptions {
@@ -11,7 +11,7 @@ import { ViteNodeRunner } from "vite-node/client";
11
11
  import { installSourcemapsSupport } from "vite-node/source-map";
12
12
  export async function createViteBuilder(wxtConfig, hooks, server) {
13
13
  const vite = await import("vite");
14
- const getBaseConfig = async () => {
14
+ const getBaseConfig = async (baseConfigOptions) => {
15
15
  const config = await wxtConfig.vite(wxtConfig.env);
16
16
  config.root = wxtConfig.root;
17
17
  config.configFile = false;
@@ -42,7 +42,9 @@ export async function createViteBuilder(wxtConfig, hooks, server) {
42
42
  wxtPlugins.wxtPluginLoader(wxtConfig),
43
43
  wxtPlugins.resolveAppConfig(wxtConfig)
44
44
  );
45
- if (wxtConfig.analysis.enabled) {
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) {
46
48
  config.plugins.push(wxtPlugins.bundleAnalysis(wxtConfig));
47
49
  }
48
50
  return config;
@@ -157,29 +159,15 @@ export async function createViteBuilder(wxtConfig, hooks, server) {
157
159
  name: "Vite",
158
160
  version: vite.version,
159
161
  async importEntrypoint(path) {
160
- switch (wxtConfig.experimental.entrypointImporter) {
162
+ switch (wxtConfig.entrypointLoader) {
161
163
  default:
162
164
  case "jiti": {
163
165
  return await importEntrypointFile(path);
164
166
  }
165
- case "vite-runtime": {
166
- const baseConfig = await getBaseConfig();
167
- const envConfig = {
168
- plugins: [
169
- wxtPlugins.extensionApiMock(wxtConfig),
170
- wxtPlugins.removeEntrypointMainFunction(wxtConfig, path)
171
- ]
172
- };
173
- const config = vite.mergeConfig(baseConfig, envConfig);
174
- const server2 = await vite.createServer(config);
175
- await server2.listen();
176
- const runtime = await vite.createViteRuntime(server2, { hmr: false });
177
- const module = await runtime.executeUrl(path);
178
- await server2.close();
179
- return module.default;
180
- }
181
167
  case "vite-node": {
182
- const baseConfig = await getBaseConfig();
168
+ const baseConfig = await getBaseConfig({
169
+ excludeAnalysisPlugin: true
170
+ });
183
171
  baseConfig.optimizeDeps ??= {};
184
172
  baseConfig.optimizeDeps.noDiscovery = true;
185
173
  baseConfig.optimizeDeps.include = [];
@@ -40,13 +40,15 @@ export async function generateTypesDir(entrypoints) {
40
40
  );
41
41
  }
42
42
  async function getPathsDeclarationEntry(entrypoints) {
43
- const unions = entrypoints.map(
43
+ const paths = entrypoints.map(
44
44
  (entry) => getEntrypointBundlePath(
45
45
  entry,
46
46
  wxt.config.outDir,
47
47
  isHtmlEntrypoint(entry) ? ".html" : ".js"
48
48
  )
49
- ).concat(await getPublicFiles()).map(normalizePath).map((path2) => ` | "/${path2}"`).sort().join("\n");
49
+ ).concat(await getPublicFiles());
50
+ await wxt.hooks.callHook("prepare:publicPaths", wxt, paths);
51
+ const unions = paths.map(normalizePath).sort().map((path2) => ` | "/${path2}"`).join("\n");
50
52
  const template = `// Generated by wxt
51
53
  import "${wxt.config.browserModule}";
52
54
 
@@ -135,9 +135,8 @@ export async function resolveConfig(inlineConfig, command) {
135
135
  alias,
136
136
  extensionApi,
137
137
  browserModule: extensionApi === "chrome" ? "wxt/browser/chrome" : "wxt/browser",
138
- experimental: defu(mergedConfig.experimental, {
139
- entrypointImporter: "jiti"
140
- }),
138
+ entrypointLoader: mergedConfig.entrypointLoader ?? "vite-node",
139
+ experimental: defu(mergedConfig.experimental, {}),
141
140
  dev: {
142
141
  server: devServerConfig,
143
142
  reloadCommand
@@ -487,9 +487,7 @@ export declare const fakeResolvedConfig: (overrides?: {
487
487
  root?: string;
488
488
  mode?: string;
489
489
  publicDir?: string;
490
- experimental?: {
491
- entrypointImporter?: "jiti" | "vite-runtime" | "vite-node";
492
- } | undefined;
490
+ experimental?: {} | undefined;
493
491
  srcDir?: string;
494
492
  entrypointsDir?: string;
495
493
  modulesDir?: string;
@@ -664,6 +662,7 @@ export declare const fakeResolvedConfig: (overrides?: {
664
662
  [x: string]: string | undefined;
665
663
  } | undefined;
666
664
  extensionApi?: "webextension-polyfill" | "chrome";
665
+ entrypointLoader?: "vite-node" | "jiti";
667
666
  dev?: {
668
667
  server?: {
669
668
  port?: number;
@@ -676,6 +675,7 @@ export declare const fakeResolvedConfig: (overrides?: {
676
675
  'vite:devServer:extendConfig'?: {} | undefined;
677
676
  ready?: {} | undefined;
678
677
  'prepare:types'?: {} | undefined;
678
+ 'prepare:publicPaths'?: {} | undefined;
679
679
  'build:before'?: {} | undefined;
680
680
  'build:done'?: {} | undefined;
681
681
  'build:manifestGenerated'?: {} | undefined;
@@ -720,8 +720,10 @@ export declare const fakeResolvedConfig: (overrides?: {
720
720
  } | undefined;
721
721
  prepare?: {
722
722
  types?: {} | undefined;
723
+ publicPaths?: {} | undefined;
723
724
  } | {
724
725
  types?: {} | undefined;
726
+ publicPaths?: {} | undefined;
725
727
  } | undefined;
726
728
  entrypoints?: {
727
729
  resolved?: {} | undefined;
@@ -769,8 +771,10 @@ export declare const fakeResolvedConfig: (overrides?: {
769
771
  } | undefined;
770
772
  prepare?: {
771
773
  types?: {} | undefined;
774
+ publicPaths?: {} | undefined;
772
775
  } | {
773
776
  types?: {} | undefined;
777
+ publicPaths?: {} | undefined;
774
778
  } | undefined;
775
779
  entrypoints?: {
776
780
  resolved?: {} | undefined;
@@ -805,9 +809,7 @@ export declare const fakeResolvedConfig: (overrides?: {
805
809
  root?: string;
806
810
  mode?: string;
807
811
  publicDir?: string;
808
- experimental?: {
809
- entrypointImporter?: "jiti" | "vite-runtime" | "vite-node";
810
- } | undefined;
812
+ experimental?: {} | undefined;
811
813
  srcDir?: string;
812
814
  entrypointsDir?: string;
813
815
  modulesDir?: string;
@@ -982,6 +984,7 @@ export declare const fakeResolvedConfig: (overrides?: {
982
984
  [x: string]: string | undefined;
983
985
  } | undefined;
984
986
  extensionApi?: "webextension-polyfill" | "chrome";
987
+ entrypointLoader?: "vite-node" | "jiti";
985
988
  dev?: {
986
989
  server?: {
987
990
  port?: number;
@@ -994,6 +997,7 @@ export declare const fakeResolvedConfig: (overrides?: {
994
997
  'vite:devServer:extendConfig'?: {} | undefined;
995
998
  ready?: {} | undefined;
996
999
  'prepare:types'?: {} | undefined;
1000
+ 'prepare:publicPaths'?: {} | undefined;
997
1001
  'build:before'?: {} | undefined;
998
1002
  'build:done'?: {} | undefined;
999
1003
  'build:manifestGenerated'?: {} | undefined;
@@ -1038,8 +1042,10 @@ export declare const fakeResolvedConfig: (overrides?: {
1038
1042
  } | undefined;
1039
1043
  prepare?: {
1040
1044
  types?: {} | undefined;
1045
+ publicPaths?: {} | undefined;
1041
1046
  } | {
1042
1047
  types?: {} | undefined;
1048
+ publicPaths?: {} | undefined;
1043
1049
  } | undefined;
1044
1050
  entrypoints?: {
1045
1051
  resolved?: {} | undefined;
@@ -1087,8 +1093,10 @@ export declare const fakeResolvedConfig: (overrides?: {
1087
1093
  } | undefined;
1088
1094
  prepare?: {
1089
1095
  types?: {} | undefined;
1096
+ publicPaths?: {} | undefined;
1090
1097
  } | {
1091
1098
  types?: {} | undefined;
1099
+ publicPaths?: {} | undefined;
1092
1100
  } | undefined;
1093
1101
  entrypoints?: {
1094
1102
  resolved?: {} | undefined;
@@ -1149,9 +1157,7 @@ export declare const fakeResolvedConfig: (overrides?: {
1149
1157
  root?: string;
1150
1158
  mode?: string;
1151
1159
  publicDir?: string;
1152
- experimental?: {
1153
- entrypointImporter?: "jiti" | "vite-runtime" | "vite-node";
1154
- } | undefined;
1160
+ experimental?: {} | undefined;
1155
1161
  srcDir?: string;
1156
1162
  entrypointsDir?: string;
1157
1163
  modulesDir?: string;
@@ -1326,6 +1332,7 @@ export declare const fakeResolvedConfig: (overrides?: {
1326
1332
  [x: string]: string | undefined;
1327
1333
  } | undefined;
1328
1334
  extensionApi?: "webextension-polyfill" | "chrome";
1335
+ entrypointLoader?: "vite-node" | "jiti";
1329
1336
  dev?: {
1330
1337
  server?: {
1331
1338
  port?: number;
@@ -1338,6 +1345,7 @@ export declare const fakeResolvedConfig: (overrides?: {
1338
1345
  'vite:devServer:extendConfig'?: {} | undefined;
1339
1346
  ready?: {} | undefined;
1340
1347
  'prepare:types'?: {} | undefined;
1348
+ 'prepare:publicPaths'?: {} | undefined;
1341
1349
  'build:before'?: {} | undefined;
1342
1350
  'build:done'?: {} | undefined;
1343
1351
  'build:manifestGenerated'?: {} | undefined;
@@ -1382,8 +1390,10 @@ export declare const fakeResolvedConfig: (overrides?: {
1382
1390
  } | undefined;
1383
1391
  prepare?: {
1384
1392
  types?: {} | undefined;
1393
+ publicPaths?: {} | undefined;
1385
1394
  } | {
1386
1395
  types?: {} | undefined;
1396
+ publicPaths?: {} | undefined;
1387
1397
  } | undefined;
1388
1398
  entrypoints?: {
1389
1399
  resolved?: {} | undefined;
@@ -1431,8 +1441,10 @@ export declare const fakeResolvedConfig: (overrides?: {
1431
1441
  } | undefined;
1432
1442
  prepare?: {
1433
1443
  types?: {} | undefined;
1444
+ publicPaths?: {} | undefined;
1434
1445
  } | {
1435
1446
  types?: {} | undefined;
1447
+ publicPaths?: {} | undefined;
1436
1448
  } | undefined;
1437
1449
  entrypoints?: {
1438
1450
  resolved?: {} | undefined;
@@ -1470,9 +1482,8 @@ export declare const fakeResolvedConfig: (overrides?: {
1470
1482
  } | undefined;
1471
1483
  extensionApi?: "webextension-polyfill" | "chrome" | undefined;
1472
1484
  browserModule?: "wxt/browser" | "wxt/browser/chrome" | undefined;
1473
- experimental?: {
1474
- entrypointImporter?: "jiti" | "vite-runtime" | "vite-node" | undefined;
1475
- } | undefined;
1485
+ entrypointLoader?: "vite-node" | "jiti" | undefined;
1486
+ experimental?: {} | undefined;
1476
1487
  dev?: {
1477
1488
  server?: {
1478
1489
  port?: number | undefined;
@@ -1485,6 +1496,7 @@ export declare const fakeResolvedConfig: (overrides?: {
1485
1496
  'vite:devServer:extendConfig'?: {} | undefined;
1486
1497
  ready?: {} | undefined;
1487
1498
  'prepare:types'?: {} | undefined;
1499
+ 'prepare:publicPaths'?: {} | undefined;
1488
1500
  'build:before'?: {} | undefined;
1489
1501
  'build:done'?: {} | undefined;
1490
1502
  'build:manifestGenerated'?: {} | undefined;
@@ -1529,8 +1541,10 @@ export declare const fakeResolvedConfig: (overrides?: {
1529
1541
  } | undefined;
1530
1542
  prepare?: {
1531
1543
  types?: {} | undefined;
1544
+ publicPaths?: {} | undefined;
1532
1545
  } | {
1533
1546
  types?: {} | undefined;
1547
+ publicPaths?: {} | undefined;
1534
1548
  } | undefined;
1535
1549
  entrypoints?: {
1536
1550
  resolved?: {} | undefined;
@@ -1578,8 +1592,10 @@ export declare const fakeResolvedConfig: (overrides?: {
1578
1592
  } | undefined;
1579
1593
  prepare?: {
1580
1594
  types?: {} | undefined;
1595
+ publicPaths?: {} | undefined;
1581
1596
  } | {
1582
1597
  types?: {} | undefined;
1598
+ publicPaths?: {} | undefined;
1583
1599
  } | undefined;
1584
1600
  entrypoints?: {
1585
1601
  resolved?: {} | undefined;
@@ -1617,6 +1633,7 @@ export declare const fakeResolvedConfig: (overrides?: {
1617
1633
  'vite:devServer:extendConfig'?: {} | undefined;
1618
1634
  ready?: {} | undefined;
1619
1635
  'prepare:types'?: {} | undefined;
1636
+ 'prepare:publicPaths'?: {} | undefined;
1620
1637
  'build:before'?: {} | undefined;
1621
1638
  'build:done'?: {} | undefined;
1622
1639
  'build:manifestGenerated'?: {} | undefined;
@@ -1655,6 +1672,7 @@ export declare const fakeResolvedConfig: (overrides?: {
1655
1672
  'vite:devServer:extendConfig'?: {} | undefined;
1656
1673
  ready?: {} | undefined;
1657
1674
  'prepare:types'?: {} | undefined;
1675
+ 'prepare:publicPaths'?: {} | undefined;
1658
1676
  'build:before'?: {} | undefined;
1659
1677
  'build:done'?: {} | undefined;
1660
1678
  'build:manifestGenerated'?: {} | undefined;
@@ -2025,9 +2043,7 @@ export declare const fakeWxt: (overrides?: {
2025
2043
  root?: string;
2026
2044
  mode?: string;
2027
2045
  publicDir?: string;
2028
- experimental?: {
2029
- entrypointImporter?: "jiti" | "vite-runtime" | "vite-node";
2030
- } | undefined;
2046
+ experimental?: {} | undefined;
2031
2047
  srcDir?: string;
2032
2048
  entrypointsDir?: string;
2033
2049
  modulesDir?: string;
@@ -2202,6 +2218,7 @@ export declare const fakeWxt: (overrides?: {
2202
2218
  [x: string]: string | undefined;
2203
2219
  } | undefined;
2204
2220
  extensionApi?: "webextension-polyfill" | "chrome";
2221
+ entrypointLoader?: "vite-node" | "jiti";
2205
2222
  dev?: {
2206
2223
  server?: {
2207
2224
  port?: number;
@@ -2214,6 +2231,7 @@ export declare const fakeWxt: (overrides?: {
2214
2231
  'vite:devServer:extendConfig'?: {} | undefined;
2215
2232
  ready?: {} | undefined;
2216
2233
  'prepare:types'?: {} | undefined;
2234
+ 'prepare:publicPaths'?: {} | undefined;
2217
2235
  'build:before'?: {} | undefined;
2218
2236
  'build:done'?: {} | undefined;
2219
2237
  'build:manifestGenerated'?: {} | undefined;
@@ -2258,8 +2276,10 @@ export declare const fakeWxt: (overrides?: {
2258
2276
  } | undefined;
2259
2277
  prepare?: {
2260
2278
  types?: {} | undefined;
2279
+ publicPaths?: {} | undefined;
2261
2280
  } | {
2262
2281
  types?: {} | undefined;
2282
+ publicPaths?: {} | undefined;
2263
2283
  } | undefined;
2264
2284
  entrypoints?: {
2265
2285
  resolved?: {} | undefined;
@@ -2307,8 +2327,10 @@ export declare const fakeWxt: (overrides?: {
2307
2327
  } | undefined;
2308
2328
  prepare?: {
2309
2329
  types?: {} | undefined;
2330
+ publicPaths?: {} | undefined;
2310
2331
  } | {
2311
2332
  types?: {} | undefined;
2333
+ publicPaths?: {} | undefined;
2312
2334
  } | undefined;
2313
2335
  entrypoints?: {
2314
2336
  resolved?: {} | undefined;
@@ -2343,9 +2365,7 @@ export declare const fakeWxt: (overrides?: {
2343
2365
  root?: string;
2344
2366
  mode?: string;
2345
2367
  publicDir?: string;
2346
- experimental?: {
2347
- entrypointImporter?: "jiti" | "vite-runtime" | "vite-node";
2348
- } | undefined;
2368
+ experimental?: {} | undefined;
2349
2369
  srcDir?: string;
2350
2370
  entrypointsDir?: string;
2351
2371
  modulesDir?: string;
@@ -2520,6 +2540,7 @@ export declare const fakeWxt: (overrides?: {
2520
2540
  [x: string]: string | undefined;
2521
2541
  } | undefined;
2522
2542
  extensionApi?: "webextension-polyfill" | "chrome";
2543
+ entrypointLoader?: "vite-node" | "jiti";
2523
2544
  dev?: {
2524
2545
  server?: {
2525
2546
  port?: number;
@@ -2532,6 +2553,7 @@ export declare const fakeWxt: (overrides?: {
2532
2553
  'vite:devServer:extendConfig'?: {} | undefined;
2533
2554
  ready?: {} | undefined;
2534
2555
  'prepare:types'?: {} | undefined;
2556
+ 'prepare:publicPaths'?: {} | undefined;
2535
2557
  'build:before'?: {} | undefined;
2536
2558
  'build:done'?: {} | undefined;
2537
2559
  'build:manifestGenerated'?: {} | undefined;
@@ -2576,8 +2598,10 @@ export declare const fakeWxt: (overrides?: {
2576
2598
  } | undefined;
2577
2599
  prepare?: {
2578
2600
  types?: {} | undefined;
2601
+ publicPaths?: {} | undefined;
2579
2602
  } | {
2580
2603
  types?: {} | undefined;
2604
+ publicPaths?: {} | undefined;
2581
2605
  } | undefined;
2582
2606
  entrypoints?: {
2583
2607
  resolved?: {} | undefined;
@@ -2625,8 +2649,10 @@ export declare const fakeWxt: (overrides?: {
2625
2649
  } | undefined;
2626
2650
  prepare?: {
2627
2651
  types?: {} | undefined;
2652
+ publicPaths?: {} | undefined;
2628
2653
  } | {
2629
2654
  types?: {} | undefined;
2655
+ publicPaths?: {} | undefined;
2630
2656
  } | undefined;
2631
2657
  entrypoints?: {
2632
2658
  resolved?: {} | undefined;
@@ -2687,9 +2713,7 @@ export declare const fakeWxt: (overrides?: {
2687
2713
  root?: string;
2688
2714
  mode?: string;
2689
2715
  publicDir?: string;
2690
- experimental?: {
2691
- entrypointImporter?: "jiti" | "vite-runtime" | "vite-node";
2692
- } | undefined;
2716
+ experimental?: {} | undefined;
2693
2717
  srcDir?: string;
2694
2718
  entrypointsDir?: string;
2695
2719
  modulesDir?: string;
@@ -2864,6 +2888,7 @@ export declare const fakeWxt: (overrides?: {
2864
2888
  [x: string]: string | undefined;
2865
2889
  } | undefined;
2866
2890
  extensionApi?: "webextension-polyfill" | "chrome";
2891
+ entrypointLoader?: "vite-node" | "jiti";
2867
2892
  dev?: {
2868
2893
  server?: {
2869
2894
  port?: number;
@@ -2876,6 +2901,7 @@ export declare const fakeWxt: (overrides?: {
2876
2901
  'vite:devServer:extendConfig'?: {} | undefined;
2877
2902
  ready?: {} | undefined;
2878
2903
  'prepare:types'?: {} | undefined;
2904
+ 'prepare:publicPaths'?: {} | undefined;
2879
2905
  'build:before'?: {} | undefined;
2880
2906
  'build:done'?: {} | undefined;
2881
2907
  'build:manifestGenerated'?: {} | undefined;
@@ -2920,8 +2946,10 @@ export declare const fakeWxt: (overrides?: {
2920
2946
  } | undefined;
2921
2947
  prepare?: {
2922
2948
  types?: {} | undefined;
2949
+ publicPaths?: {} | undefined;
2923
2950
  } | {
2924
2951
  types?: {} | undefined;
2952
+ publicPaths?: {} | undefined;
2925
2953
  } | undefined;
2926
2954
  entrypoints?: {
2927
2955
  resolved?: {} | undefined;
@@ -2969,8 +2997,10 @@ export declare const fakeWxt: (overrides?: {
2969
2997
  } | undefined;
2970
2998
  prepare?: {
2971
2999
  types?: {} | undefined;
3000
+ publicPaths?: {} | undefined;
2972
3001
  } | {
2973
3002
  types?: {} | undefined;
3003
+ publicPaths?: {} | undefined;
2974
3004
  } | undefined;
2975
3005
  entrypoints?: {
2976
3006
  resolved?: {} | undefined;
@@ -3008,9 +3038,8 @@ export declare const fakeWxt: (overrides?: {
3008
3038
  } | undefined;
3009
3039
  extensionApi?: "webextension-polyfill" | "chrome" | undefined;
3010
3040
  browserModule?: "wxt/browser" | "wxt/browser/chrome" | undefined;
3011
- experimental?: {
3012
- entrypointImporter?: "jiti" | "vite-runtime" | "vite-node" | undefined;
3013
- } | undefined;
3041
+ entrypointLoader?: "vite-node" | "jiti" | undefined;
3042
+ experimental?: {} | undefined;
3014
3043
  dev?: {
3015
3044
  server?: {
3016
3045
  port?: number | undefined;
@@ -3023,6 +3052,7 @@ export declare const fakeWxt: (overrides?: {
3023
3052
  'vite:devServer:extendConfig'?: {} | undefined;
3024
3053
  ready?: {} | undefined;
3025
3054
  'prepare:types'?: {} | undefined;
3055
+ 'prepare:publicPaths'?: {} | undefined;
3026
3056
  'build:before'?: {} | undefined;
3027
3057
  'build:done'?: {} | undefined;
3028
3058
  'build:manifestGenerated'?: {} | undefined;
@@ -3067,8 +3097,10 @@ export declare const fakeWxt: (overrides?: {
3067
3097
  } | undefined;
3068
3098
  prepare?: {
3069
3099
  types?: {} | undefined;
3100
+ publicPaths?: {} | undefined;
3070
3101
  } | {
3071
3102
  types?: {} | undefined;
3103
+ publicPaths?: {} | undefined;
3072
3104
  } | undefined;
3073
3105
  entrypoints?: {
3074
3106
  resolved?: {} | undefined;
@@ -3116,8 +3148,10 @@ export declare const fakeWxt: (overrides?: {
3116
3148
  } | undefined;
3117
3149
  prepare?: {
3118
3150
  types?: {} | undefined;
3151
+ publicPaths?: {} | undefined;
3119
3152
  } | {
3120
3153
  types?: {} | undefined;
3154
+ publicPaths?: {} | undefined;
3121
3155
  } | undefined;
3122
3156
  entrypoints?: {
3123
3157
  resolved?: {} | undefined;
@@ -3155,6 +3189,7 @@ export declare const fakeWxt: (overrides?: {
3155
3189
  'vite:devServer:extendConfig'?: {} | undefined;
3156
3190
  ready?: {} | undefined;
3157
3191
  'prepare:types'?: {} | undefined;
3192
+ 'prepare:publicPaths'?: {} | undefined;
3158
3193
  'build:before'?: {} | undefined;
3159
3194
  'build:done'?: {} | undefined;
3160
3195
  'build:manifestGenerated'?: {} | undefined;
@@ -3193,6 +3228,7 @@ export declare const fakeWxt: (overrides?: {
3193
3228
  'vite:devServer:extendConfig'?: {} | undefined;
3194
3229
  ready?: {} | undefined;
3195
3230
  'prepare:types'?: {} | undefined;
3231
+ 'prepare:publicPaths'?: {} | undefined;
3196
3232
  'build:before'?: {} | undefined;
3197
3233
  'build:done'?: {} | undefined;
3198
3234
  'build:manifestGenerated'?: {} | undefined;
@@ -248,9 +248,8 @@ export const fakeResolvedConfig = fakeObjectCreator(() => {
248
248
  alias: {},
249
249
  extensionApi: "webextension-polyfill",
250
250
  browserModule: "wxt/browser",
251
- experimental: {
252
- entrypointImporter: "jiti"
253
- },
251
+ entrypointLoader: "vite-node",
252
+ experimental: {},
254
253
  dev: {
255
254
  reloadCommand: "Alt+R"
256
255
  },
package/dist/storage.d.ts CHANGED
@@ -109,7 +109,14 @@ export interface WxtStorage {
109
109
  defineItem<TValue, TMetadata extends Record<string, unknown> = {}>(key: StorageItemKey, options: WxtStorageItemOptions<TValue>): WxtStorageItem<TValue, TMetadata>;
110
110
  }
111
111
  export interface WxtStorageItem<TValue, TMetadata extends Record<string, unknown>> {
112
+ /**
113
+ * @deprecated Renamed to `fallback`, use it instead.
114
+ */
112
115
  defaultValue: TValue;
116
+ /**
117
+ * The value provided by the `fallback` option.
118
+ */
119
+ fallback: TValue;
113
120
  /**
114
121
  * Get the latest value from storage.
115
122
  */
@@ -150,9 +157,13 @@ export type StorageArea = 'local' | 'session' | 'sync' | 'managed';
150
157
  export type StorageItemKey = `${StorageArea}:${string}`;
151
158
  export interface GetItemOptions<T> {
152
159
  /**
153
- * Value returned from `getValue` when it would otherwise return null.
160
+ * @deprecated Renamed to `fallback`, use it instead.
154
161
  */
155
162
  defaultValue?: T;
163
+ /**
164
+ * Default value returned when `getItem` would otherwise return `null`.
165
+ */
166
+ fallback?: T;
156
167
  }
157
168
  export interface RemoveItemOptions {
158
169
  /**
@@ -170,7 +181,21 @@ export interface SnapshotOptions {
170
181
  excludeKeys?: string[];
171
182
  }
172
183
  export interface WxtStorageItemOptions<T> {
173
- defaultValue: T;
184
+ /**
185
+ * @deprecated Renamed to `fallback`, use it instead.
186
+ */
187
+ defaultValue?: T;
188
+ /**
189
+ * Default value returned when `getValue` would otherwise return `null`.
190
+ */
191
+ fallback?: T;
192
+ /**
193
+ * If passed, a value in storage will be initialized immediately after
194
+ * defining the storage item. This function returns the value that will be
195
+ * saved to storage during the initialization process if a value doesn't
196
+ * already exist.
197
+ */
198
+ init?: () => T | Promise<T>;
174
199
  /**
175
200
  * Provide a version number for the storage item to enable migrations. When changing the version
176
201
  * in the future, migration functions will be ran on application startup.
package/dist/storage.mjs CHANGED
@@ -2,6 +2,7 @@ import { browser } from "wxt/browser";
2
2
  import { dequal } from "dequal/lite";
3
3
  import { logger } from "./sandbox/utils/logger.mjs";
4
4
  import { toArray } from "./core/utils/arrays.mjs";
5
+ import { Mutex } from "async-mutex";
5
6
  export const storage = createStorage();
6
7
  function createStorage() {
7
8
  const drivers = {
@@ -33,11 +34,11 @@ function createStorage() {
33
34
  };
34
35
  };
35
36
  const getMetaKey = (key) => key + "$";
36
- const getValueOrDefault = (value, defaultValue) => value ?? defaultValue ?? null;
37
+ const getValueOrFallback = (value, fallback) => value ?? fallback ?? null;
37
38
  const getMetaValue = (properties) => typeof properties === "object" && !Array.isArray(properties) ? properties : {};
38
39
  const getItem = async (driver, driverKey, opts) => {
39
40
  const res = await driver.getItem(driverKey);
40
- return getValueOrDefault(res, opts?.defaultValue);
41
+ return getValueOrFallback(res, opts?.fallback ?? opts?.defaultValue);
41
42
  };
42
43
  const getMeta = async (driver, driverKey) => {
43
44
  const metaKey = getMetaKey(driverKey);
@@ -107,9 +108,10 @@ function createStorage() {
107
108
  const driverResults = await drivers[driverArea].getItems(keys2);
108
109
  return driverResults.map((driverResult) => {
109
110
  const key = `${driverArea}:${driverResult.key}`;
110
- const value = getValueOrDefault(
111
+ const opts = keyToOptsMap.get(key);
112
+ const value = getValueOrFallback(
111
113
  driverResult.value,
112
- keyToOptsMap.get(key)?.defaultValue
114
+ opts?.fallback ?? opts?.defaultValue
113
115
  );
114
116
  return { key, value };
115
117
  });
@@ -248,14 +250,30 @@ function createStorage() {
248
250
  const migrationsDone = opts?.migrations == null ? Promise.resolve() : migrate().catch((err) => {
249
251
  logger.error(`Migration failed for ${key}`, err);
250
252
  });
251
- const getDefaultValue = () => opts?.defaultValue ?? null;
253
+ const initMutex = new Mutex();
254
+ const getFallback = () => opts?.fallback ?? opts?.defaultValue ?? null;
255
+ const getOrInitValue = () => initMutex.runExclusive(async () => {
256
+ const value = await driver.getItem(driverKey);
257
+ if (value != null || opts?.init == null) return value;
258
+ const newValue = await opts.init();
259
+ await driver.setItem(driverKey, newValue);
260
+ return newValue;
261
+ });
262
+ migrationsDone.then(getOrInitValue);
252
263
  return {
253
264
  get defaultValue() {
254
- return getDefaultValue();
265
+ return getFallback();
266
+ },
267
+ get fallback() {
268
+ return getFallback();
255
269
  },
256
270
  getValue: async () => {
257
271
  await migrationsDone;
258
- return await getItem(driver, driverKey, opts);
272
+ if (opts?.init) {
273
+ return await getOrInitValue();
274
+ } else {
275
+ return await getItem(driver, driverKey, opts);
276
+ }
259
277
  },
260
278
  getMeta: async () => {
261
279
  await migrationsDone;
@@ -280,7 +298,7 @@ function createStorage() {
280
298
  watch: (cb) => watch(
281
299
  driver,
282
300
  driverKey,
283
- (newValue, oldValue) => cb(newValue ?? getDefaultValue(), oldValue ?? getDefaultValue())
301
+ (newValue, oldValue) => cb(newValue ?? getFallback(), oldValue ?? getFallback())
284
302
  ),
285
303
  migrate
286
304
  };
package/dist/types.d.ts CHANGED
@@ -297,25 +297,27 @@ export interface InlineConfig {
297
297
  * - `"chrome"` (unstable): Use the regular `chrome` (or `browser` for Firefox/Safari) globals provided by the browser. Types provided by [`@types/chrome`](https://www.npmjs.com/package/@types/chrome), make sure to install the package or types won't work.
298
298
  *
299
299
  * @default "webextension-polyfill"
300
+ * @since 0.19.0
300
301
  */
301
302
  extensionApi?: 'webextension-polyfill' | 'chrome';
303
+ /**
304
+ * @deprecated Will be removed in v0.20.0, please migrate to using `vite-node`, the new default.
305
+ *
306
+ * Method used to import entrypoint files during the build process to extract their options.
307
+ *
308
+ * - `"vite-node"` (default as of 0.19.0): Uses `vite-node` to import the entrypoints. Automatically includes vite config based on your wxt.config.ts file
309
+ * - `"jiti"`: Simplest and fastest, but doesn't allow using any imported variables outside the entrypoint's main function
310
+ *
311
+ * @see {@link https://wxt.dev/guide/go-further/entrypoint-importers.html|Entrypoint Importers}
312
+ *
313
+ * @default "vite-node"
314
+ * @since 0.19.0
315
+ */
316
+ entrypointLoader?: 'vite-node' | 'jiti';
302
317
  /**
303
318
  * Experimental settings - use with caution.
304
319
  */
305
- experimental?: {
306
- /**
307
- * Method used to import entrypoint files during the build process to extract their options.
308
- *
309
- * - `"jiti"`: Simplest and fastest, but doesn't allow using any imported variables outside the entrypoint's main function
310
- * - `"vite-runtime"` (unstable): Uses Vite 5.3's new runtime API to import the entrypoints. Automatically includes vite config based on your wxt.config.ts file
311
- * - `"vite-node"` (unstable): Uses `vite-node` to import the entrypoints. Automatically includes vite config based on your wxt.config.ts file
312
- *
313
- * @see {@link https://wxt.dev/guide/go-further/entrypoint-side-effects.html|Entrypoint Side-effect Docs}
314
- *
315
- * @default "jiti"
316
- */
317
- entrypointImporter?: 'jiti' | 'vite-runtime' | 'vite-node';
318
- };
320
+ experimental?: {};
319
321
  /**
320
322
  * Config effecting dev mode only.
321
323
  */
@@ -941,6 +943,20 @@ export interface WxtHooks {
941
943
  * })
942
944
  */
943
945
  'prepare:types': (wxt: Wxt, entries: WxtDirEntry[]) => HookResult;
946
+ /**
947
+ * Called before generating the list of public paths inside
948
+ * `.wxt/types/paths.d.ts`. Use this hook to add additional paths (relative
949
+ * to output directory) WXT doesn't add automatically.
950
+ *
951
+ * @param wxt The configured WXT object
952
+ * @param paths This list of paths TypeScript allows `browser.runtime.getURL` to be called with.
953
+ *
954
+ * @example
955
+ * wxt.hooks.hook('prepare:publicPaths', (wxt, paths) => {
956
+ * paths.push('/icons/128.png');
957
+ * })
958
+ */
959
+ 'prepare:publicPaths': (wxt: Wxt, paths: string[]) => HookResult;
944
960
  /**
945
961
  * Called before the build is started in both dev mode and build mode.
946
962
  *
@@ -948,7 +964,9 @@ export interface WxtHooks {
948
964
  */
949
965
  'build:before': (wxt: Wxt) => HookResult;
950
966
  /**
951
- * Called once the build process has finished.
967
+ * Called once the build process has finished. You can add files to the build
968
+ * summary here by pushing to `output.publicAssets`.
969
+ *
952
970
  * @param wxt The configured WXT object
953
971
  * @param output The results of the build
954
972
  */
@@ -1079,9 +1097,8 @@ export interface ResolvedConfig {
1079
1097
  alias: Record<string, string>;
1080
1098
  extensionApi: 'webextension-polyfill' | 'chrome';
1081
1099
  browserModule: 'wxt/browser' | 'wxt/browser/chrome';
1082
- experimental: {
1083
- entrypointImporter: 'jiti' | 'vite-runtime' | 'vite-node';
1084
- };
1100
+ entrypointLoader: 'vite-node' | 'jiti';
1101
+ experimental: {};
1085
1102
  dev: {
1086
1103
  /** Only defined during dev command */
1087
1104
  server?: {
package/dist/version.mjs CHANGED
@@ -1 +1 @@
1
- export const version = "0.19.0-alpha1";
1
+ export const version = "0.19.0";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "wxt",
3
3
  "type": "module",
4
- "version": "0.19.0-alpha1",
4
+ "version": "0.19.0",
5
5
  "description": "Next gen framework for developing web extensions",
6
6
  "repository": {
7
7
  "type": "git",
@@ -53,10 +53,6 @@
53
53
  "types": "./dist/browser/chrome.d.ts",
54
54
  "import": "./dist/browser/chrome.mjs"
55
55
  },
56
- "./browser/webextension-polyfill": {
57
- "types": "./dist/browser/webextension-polyfill.d.ts",
58
- "import": "./dist/browser/webextension-polyfill.mjs"
59
- },
60
56
  "./testing": {
61
57
  "types": "./dist/testing/index.d.ts",
62
58
  "default": "./dist/testing/index.mjs"
@@ -1,18 +0,0 @@
1
- /**
2
- * Includes the `browser` API and types when using `extensionApi: 'webextension-polyfill'` (the default).
3
- *
4
- * @module wxt/browser/webextension-polyfill
5
- */
6
- import { Browser, Runtime, I18n } from 'webextension-polyfill';
7
- export interface AugmentedBrowser extends Browser {
8
- runtime: WxtRuntime;
9
- i18n: WxtI18n;
10
- }
11
- export interface WxtRuntime extends Runtime.Static {
12
- }
13
- export interface WxtI18n extends I18n.Static {
14
- }
15
- export declare const browser: AugmentedBrowser;
16
- /** @ignore */
17
- export type { ActivityLog, Alarms, Bookmarks, Action, BrowserAction, BrowserSettings, BrowsingData, CaptivePortal, Clipboard, Commands, ContentScripts, ContextualIdentities, Cookies, DeclarativeNetRequest, Devtools, Dns, Downloads, Events, Experiments, Extension, ExtensionTypes, Find, GeckoProfiler, History, I18n, Identity, Idle, Management, Manifest, // TODO: Export custom manifest types that are valid for both Chrome and Firefox.
18
- ContextMenus, Menus, NetworkStatus, NormandyAddonStudy, Notifications, Omnibox, PageAction, Permissions, Pkcs11, Privacy, Proxy, Runtime, Scripting, Search, Sessions, SidebarAction, Storage, Tabs, Theme, TopSites, Types, Urlbar, UserScripts, WebNavigation, WebRequest, Windows, } from 'webextension-polyfill';
@@ -1,2 +0,0 @@
1
- import originalBrowser from "webextension-polyfill";
2
- export const browser = originalBrowser;