wxt 0.5.6 → 0.6.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/dist/client.d.ts CHANGED
@@ -128,4 +128,4 @@ declare function defineBackground(definition: BackgroundScriptDefintition): Back
128
128
 
129
129
  declare function mountContentScriptUi(): void;
130
130
 
131
- export { defineBackground, defineContentScript, mountContentScriptUi };
131
+ export { ContentScriptContext, defineBackground, defineContentScript, mountContentScriptUi };
package/dist/client.js CHANGED
@@ -14,9 +14,144 @@ function defineBackground(arg) {
14
14
  function mountContentScriptUi() {
15
15
  throw Error("Not implemented: mountContentScriptUi");
16
16
  }
17
+
18
+ // src/client/browser.ts
19
+ import originalBrowser from "webextension-polyfill";
20
+ var browser = originalBrowser;
21
+
22
+ // src/client/utils/logger.ts
23
+ function print(method, ...args) {
24
+ if (import.meta.env.MODE === "production")
25
+ return;
26
+ if (typeof args[0] === "string") {
27
+ const message = args.shift();
28
+ method(`[wxt] ${message}`, ...args);
29
+ } else {
30
+ method("[wxt]", ...args);
31
+ }
32
+ }
33
+ var logger = {
34
+ debug: (...args) => print(console.debug, ...args),
35
+ log: (...args) => print(console.log, ...args),
36
+ warn: (...args) => print(console.warn, ...args),
37
+ error: (...args) => print(console.error, ...args)
38
+ };
39
+
40
+ // src/client/utils/ContentScriptContext.ts
41
+ var ContentScriptContext = class _ContentScriptContext extends AbortController {
42
+ constructor(contentScriptName) {
43
+ super();
44
+ this.contentScriptName = contentScriptName;
45
+ if (this.#isTopFrame) {
46
+ this.#stopOldScripts();
47
+ }
48
+ this.setTimeout(() => {
49
+ this.#listenForNewerScripts();
50
+ });
51
+ }
52
+ static SCRIPT_STARTED_MESSAGE_TYPE = "wxt:content-script-started";
53
+ #isTopFrame = window.self === window.top;
54
+ get isInvalid() {
55
+ if (browser.runtime.id == null) {
56
+ this.notifyInvalidated();
57
+ }
58
+ return this.signal.aborted;
59
+ }
60
+ get isValid() {
61
+ return !this.isInvalid;
62
+ }
63
+ /**
64
+ * Add a listener that is called when the content script's context is invalidated.
65
+ *
66
+ * @returns A function to remove the listener.
67
+ *
68
+ * @example
69
+ * browser.runtime.onMessage.addListener(cb);
70
+ * const removeInvalidatedListener = ctx.onInvalidated(() => {
71
+ * browser.runtime.onMessage.removeListener(cb);
72
+ * })
73
+ * // ...
74
+ * removeInvalidatedListener();
75
+ */
76
+ onInvalidated(cb) {
77
+ this.signal.addEventListener("abort", cb);
78
+ return () => this.signal.removeEventListener("abort", cb);
79
+ }
80
+ /**
81
+ * Wrapper around `window.setInterval` that automatically clears the interval when invalidated.
82
+ */
83
+ setInterval(handler, timeout) {
84
+ const id = setInterval(() => {
85
+ if (this.isValid)
86
+ handler();
87
+ }, timeout);
88
+ this.onInvalidated(() => clearInterval(id));
89
+ return id;
90
+ }
91
+ /**
92
+ * Wrapper around `window.setTimeout` that automatically clears the interval when invalidated.
93
+ */
94
+ setTimeout(handler, timeout) {
95
+ const id = setTimeout(() => {
96
+ if (this.isValid)
97
+ handler();
98
+ }, timeout);
99
+ this.onInvalidated(() => clearTimeout(id));
100
+ return id;
101
+ }
102
+ /**
103
+ * Wrapper around `window.requestAnimationFrame` that automatically cancels the request when
104
+ * invalidated.
105
+ */
106
+ requestAnimationFrame(callback) {
107
+ const id = requestAnimationFrame((...args) => {
108
+ if (this.isValid)
109
+ callback(...args);
110
+ });
111
+ this.onInvalidated(() => cancelAnimationFrame(id));
112
+ return id;
113
+ }
114
+ /**
115
+ * Wrapper around `window.requestIdleCallback` that automatically cancels the request when
116
+ * invalidated.
117
+ */
118
+ requestIdleCallback(callback, options) {
119
+ const id = requestIdleCallback((...args) => {
120
+ if (!this.signal.aborted)
121
+ callback(...args);
122
+ }, options);
123
+ this.onInvalidated(() => cancelIdleCallback(id));
124
+ return id;
125
+ }
126
+ /**
127
+ * Abort the abort controller and execute all `onInvalidated` listeners.
128
+ */
129
+ notifyInvalidated() {
130
+ this.abort("Content script context invalidated");
131
+ logger.debug(
132
+ `Content script "${this.contentScriptName}" context invalidated`
133
+ );
134
+ }
135
+ #stopOldScripts() {
136
+ window.postMessage({
137
+ event: _ContentScriptContext.SCRIPT_STARTED_MESSAGE_TYPE,
138
+ contentScriptName: this.contentScriptName
139
+ });
140
+ }
141
+ #listenForNewerScripts() {
142
+ const cb = (event) => {
143
+ if (event.data?.type === _ContentScriptContext.SCRIPT_STARTED_MESSAGE_TYPE && event.data?.contentScriptName === this.contentScriptName) {
144
+ this.notifyInvalidated();
145
+ }
146
+ };
147
+ addEventListener("message", cb);
148
+ this.onInvalidated(() => removeEventListener("message", cb));
149
+ }
150
+ };
17
151
  export {
152
+ ContentScriptContext,
18
153
  defineBackground,
19
154
  defineContentScript,
20
155
  mountContentScriptUi
21
156
  };
22
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaWVudC9kZWZpbmVDb250ZW50U2NyaXB0LnRzIiwgIi4uL3NyYy9jbGllbnQvZGVmaW5lQmFja2dyb3VuZC50cyIsICIuLi9zcmMvY2xpZW50L21vdW50Q29udGVudFNjcmlwdFVpLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBDb250ZW50U2NyaXB0RGVmaW5pdGlvbiB9IGZyb20gJy4uL2NvcmUvdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29udGVudFNjcmlwdChcbiAgZGVmaW5pdGlvbjogQ29udGVudFNjcmlwdERlZmluaXRpb24sXG4pOiBDb250ZW50U2NyaXB0RGVmaW5pdGlvbiB7XG4gIHJldHVybiBkZWZpbml0aW9uO1xufVxuIiwgImltcG9ydCB7IEJhY2tncm91bmRTY3JpcHREZWZpbnRpdGlvbiB9IGZyb20gJy4uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUJhY2tncm91bmQobWFpbjogKCkgPT4gdm9pZCk6IEJhY2tncm91bmRTY3JpcHREZWZpbnRpdGlvbjtcbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVCYWNrZ3JvdW5kKFxuICBkZWZpbml0aW9uOiBCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24sXG4pOiBCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb247XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQmFja2dyb3VuZChcbiAgYXJnOiAoKCkgPT4gdm9pZCkgfCBCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24sXG4pOiBCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24ge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHsgbWFpbjogYXJnIH07XG4gIHJldHVybiBhcmc7XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIG1vdW50Q29udGVudFNjcmlwdFVpKCkge1xuICB0aHJvdyBFcnJvcignTm90IGltcGxlbWVudGVkOiBtb3VudENvbnRlbnRTY3JpcHRVaScpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVPLFNBQVMsb0JBQ2QsWUFDeUI7QUFDekIsU0FBTztBQUNUOzs7QUNBTyxTQUFTLGlCQUNkLEtBQzZCO0FBQzdCLE1BQUksT0FBTyxRQUFRO0FBQVksV0FBTyxFQUFFLE1BQU0sSUFBSTtBQUNsRCxTQUFPO0FBQ1Q7OztBQ1hPLFNBQVMsdUJBQXVCO0FBQ3JDLFFBQU0sTUFBTSx1Q0FBdUM7QUFDckQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
157
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaWVudC9kZWZpbmVDb250ZW50U2NyaXB0LnRzIiwgIi4uL3NyYy9jbGllbnQvZGVmaW5lQmFja2dyb3VuZC50cyIsICIuLi9zcmMvY2xpZW50L21vdW50Q29udGVudFNjcmlwdFVpLnRzIiwgIi4uL3NyYy9jbGllbnQvYnJvd3Nlci50cyIsICIuLi9zcmMvY2xpZW50L3V0aWxzL2xvZ2dlci50cyIsICIuLi9zcmMvY2xpZW50L3V0aWxzL0NvbnRlbnRTY3JpcHRDb250ZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBDb250ZW50U2NyaXB0RGVmaW5pdGlvbiB9IGZyb20gJy4uL2NvcmUvdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29udGVudFNjcmlwdChcbiAgZGVmaW5pdGlvbjogQ29udGVudFNjcmlwdERlZmluaXRpb24sXG4pOiBDb250ZW50U2NyaXB0RGVmaW5pdGlvbiB7XG4gIHJldHVybiBkZWZpbml0aW9uO1xufVxuIiwgImltcG9ydCB7IEJhY2tncm91bmRTY3JpcHREZWZpbnRpdGlvbiB9IGZyb20gJy4uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUJhY2tncm91bmQobWFpbjogKCkgPT4gdm9pZCk6IEJhY2tncm91bmRTY3JpcHREZWZpbnRpdGlvbjtcbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVCYWNrZ3JvdW5kKFxuICBkZWZpbml0aW9uOiBCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24sXG4pOiBCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb247XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQmFja2dyb3VuZChcbiAgYXJnOiAoKCkgPT4gdm9pZCkgfCBCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24sXG4pOiBCYWNrZ3JvdW5kU2NyaXB0RGVmaW50aXRpb24ge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHsgbWFpbjogYXJnIH07XG4gIHJldHVybiBhcmc7XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIG1vdW50Q29udGVudFNjcmlwdFVpKCkge1xuICB0aHJvdyBFcnJvcignTm90IGltcGxlbWVudGVkOiBtb3VudENvbnRlbnRTY3JpcHRVaScpO1xufVxuIiwgImltcG9ydCBvcmlnaW5hbEJyb3dzZXIsIHsgQnJvd3NlciwgUnVudGltZSwgSTE4biB9IGZyb20gJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVnbWVudGVkQnJvd3NlciBleHRlbmRzIEJyb3dzZXIge1xuICBydW50aW1lOiBXeHRSdW50aW1lO1xuICBpMThuOiBXeHRJMThuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFd4dFJ1bnRpbWUgZXh0ZW5kcyBSdW50aW1lLlN0YXRpYyB7XG4gIC8vIE92ZXJyaWRlbiBwZXItcHJvamVjdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFd4dEkxOG4gZXh0ZW5kcyBJMThuLlN0YXRpYyB7XG4gIC8vIE92ZXJyaWRlbiBwZXItcHJvamVjdFxufVxuXG5leHBvcnQgY29uc3QgYnJvd3NlcjogQXVnbWVudGVkQnJvd3NlciA9IG9yaWdpbmFsQnJvd3NlcjtcbiIsICJmdW5jdGlvbiBwcmludChtZXRob2Q6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCwgLi4uYXJnczogYW55W10pIHtcbiAgaWYgKGltcG9ydC5tZXRhLmVudi5NT0RFID09PSAncHJvZHVjdGlvbicpIHJldHVybjtcblxuICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGFyZ3Muc2hpZnQoKTtcbiAgICBtZXRob2QoYFt3eHRdICR7bWVzc2FnZX1gLCAuLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBtZXRob2QoJ1t3eHRdJywgLi4uYXJncyk7XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcGVyIGFyb3VuZCBgY29uc29sZWAgd2l0aCBhIFwiW3d4dF1cIiBwcmVmaXhcbiAqL1xuZXhwb3J0IGNvbnN0IGxvZ2dlciA9IHtcbiAgZGVidWc6ICguLi5hcmdzOiBhbnlbXSkgPT4gcHJpbnQoY29uc29sZS5kZWJ1ZywgLi4uYXJncyksXG4gIGxvZzogKC4uLmFyZ3M6IGFueVtdKSA9PiBwcmludChjb25zb2xlLmxvZywgLi4uYXJncyksXG4gIHdhcm46ICguLi5hcmdzOiBhbnlbXSkgPT4gcHJpbnQoY29uc29sZS53YXJuLCAuLi5hcmdzKSxcbiAgZXJyb3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gcHJpbnQoY29uc29sZS5lcnJvciwgLi4uYXJncyksXG59O1xuIiwgImltcG9ydCB7IGJyb3dzZXIgfSBmcm9tICcuLi9icm93c2VyJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcblxuLyoqXG4gKiBFeHRlbmRzIFtgQWJvcnRDb250cm9sbGVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Fib3J0Q29udHJvbGxlcikuXG4gKiBVc2VkIHRvIGRldGVjdCBhbmQgc3RvcCBjb250ZW50IHNjcmlwdCBjb2RlIHdoZW4gdGhlIHNjcmlwdCBpcyBpbnZhbGlkYXRlZC5cbiAqXG4gKiBJdCBhbHNvIHByb3ZpZGVzIHNldmVyYWwgdXRpbGl0aWVzIGxpa2UgYGN0eC5zZXRUaW1lb3V0YCBhbmQgYGN0eC5zZXRJbnRlcnZhbGAgdGhhdCBzaG91bGQgYmUgdXNlZCBpblxuICogY29udGVudCBzY3JpcHRzIGluc3RlYWQgb2YgYHdpbmRvdy5zZXRUaW1lb3V0YCBvciBgd2luZG93LnNldEludGVydmFsYC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRlbnRTY3JpcHRDb250ZXh0IGV4dGVuZHMgQWJvcnRDb250cm9sbGVyIHtcbiAgc3RhdGljIFNDUklQVF9TVEFSVEVEX01FU1NBR0VfVFlQRSA9ICd3eHQ6Y29udGVudC1zY3JpcHQtc3RhcnRlZCc7XG5cbiAgI2lzVG9wRnJhbWUgPSB3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNvbnRlbnRTY3JpcHROYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKHRoaXMuI2lzVG9wRnJhbWUpIHtcbiAgICAgIHRoaXMuI3N0b3BPbGRTY3JpcHRzKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBSdW4gb24gbmV4dCB0aWNrIHNvIHRoZSBsaXN0ZW5lciBpdCBhZGRzIGlzbid0IHRyaWdnZXJlZCBieSBzdG9wT2xkU2NyaXB0XG4gICAgICB0aGlzLiNsaXN0ZW5Gb3JOZXdlclNjcmlwdHMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBpc0ludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKGJyb3dzZXIucnVudGltZS5pZCA9PSBudWxsKSB7XG4gICAgICB0aGlzLm5vdGlmeUludmFsaWRhdGVkKCk7IC8vIFNldHMgYHNpZ25hbC5hYm9ydGVkYCB0byB0cnVlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNpZ25hbC5hYm9ydGVkO1xuICB9XG5cbiAgZ2V0IGlzVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzSW52YWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBsaXN0ZW5lciB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBjb250ZW50IHNjcmlwdCdzIGNvbnRleHQgaXMgaW52YWxpZGF0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lci5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYnJvd3Nlci5ydW50aW1lLm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihjYik7XG4gICAqIGNvbnN0IHJlbW92ZUludmFsaWRhdGVkTGlzdGVuZXIgPSBjdHgub25JbnZhbGlkYXRlZCgoKSA9PiB7XG4gICAqICAgYnJvd3Nlci5ydW50aW1lLm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihjYik7XG4gICAqIH0pXG4gICAqIC8vIC4uLlxuICAgKiByZW1vdmVJbnZhbGlkYXRlZExpc3RlbmVyKCk7XG4gICAqL1xuICBvbkludmFsaWRhdGVkKGNiOiAoKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjYik7XG4gICAgcmV0dXJuICgpID0+IHRoaXMuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgY2IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZXIgYXJvdW5kIGB3aW5kb3cuc2V0SW50ZXJ2YWxgIHRoYXQgYXV0b21hdGljYWxseSBjbGVhcnMgdGhlIGludGVydmFsIHdoZW4gaW52YWxpZGF0ZWQuXG4gICAqL1xuICBzZXRJbnRlcnZhbChoYW5kbGVyOiAoKSA9PiB2b2lkLCB0aW1lb3V0PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzVmFsaWQpIGhhbmRsZXIoKTtcbiAgICB9LCB0aW1lb3V0KSBhcyB1bmtub3duIGFzIG51bWJlcjtcbiAgICB0aGlzLm9uSW52YWxpZGF0ZWQoKCkgPT4gY2xlYXJJbnRlcnZhbChpZCkpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIGFyb3VuZCBgd2luZG93LnNldFRpbWVvdXRgIHRoYXQgYXV0b21hdGljYWxseSBjbGVhcnMgdGhlIGludGVydmFsIHdoZW4gaW52YWxpZGF0ZWQuXG4gICAqL1xuICBzZXRUaW1lb3V0KGhhbmRsZXI6ICgpID0+IHZvaWQsIHRpbWVvdXQ/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkKSBoYW5kbGVyKCk7XG4gICAgfSwgdGltZW91dCkgYXMgdW5rbm93biBhcyBudW1iZXI7XG4gICAgdGhpcy5vbkludmFsaWRhdGVkKCgpID0+IGNsZWFyVGltZW91dChpZCkpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIGFyb3VuZCBgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZWAgdGhhdCBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgdGhlIHJlcXVlc3Qgd2hlblxuICAgKiBpbnZhbGlkYXRlZC5cbiAgICovXG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjazogRnJhbWVSZXF1ZXN0Q2FsbGJhY2spOiBudW1iZXIge1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCguLi5hcmdzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkKSBjYWxsYmFjayguLi5hcmdzKTtcbiAgICB9KTtcblxuICAgIHRoaXMub25JbnZhbGlkYXRlZCgoKSA9PiBjYW5jZWxBbmltYXRpb25GcmFtZShpZCkpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIGFyb3VuZCBgd2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2tgIHRoYXQgYXV0b21hdGljYWxseSBjYW5jZWxzIHRoZSByZXF1ZXN0IHdoZW5cbiAgICogaW52YWxpZGF0ZWQuXG4gICAqL1xuICByZXF1ZXN0SWRsZUNhbGxiYWNrKFxuICAgIGNhbGxiYWNrOiBJZGxlUmVxdWVzdENhbGxiYWNrLFxuICAgIG9wdGlvbnM/OiBJZGxlUmVxdWVzdE9wdGlvbnMsXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0SWRsZUNhbGxiYWNrKCguLi5hcmdzKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuc2lnbmFsLmFib3J0ZWQpIGNhbGxiYWNrKC4uLmFyZ3MpO1xuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5vbkludmFsaWRhdGVkKCgpID0+IGNhbmNlbElkbGVDYWxsYmFjayhpZCkpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBYm9ydCB0aGUgYWJvcnQgY29udHJvbGxlciBhbmQgZXhlY3V0ZSBhbGwgYG9uSW52YWxpZGF0ZWRgIGxpc3RlbmVycy5cbiAgICovXG4gIG5vdGlmeUludmFsaWRhdGVkKCkge1xuICAgIHRoaXMuYWJvcnQoJ0NvbnRlbnQgc2NyaXB0IGNvbnRleHQgaW52YWxpZGF0ZWQnKTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ29udGVudCBzY3JpcHQgXCIke3RoaXMuY29udGVudFNjcmlwdE5hbWV9XCIgY29udGV4dCBpbnZhbGlkYXRlZGAsXG4gICAgKTtcbiAgfVxuXG4gICNzdG9wT2xkU2NyaXB0cygpIHtcbiAgICAvLyBVc2UgcG9zdE1lc3NhZ2Ugc28gaXQgZ2V0J3Mgc2VudCB0byBhbGwgdGhlIGZyYW1lcyBvZiB0aGUgcGFnZS5cbiAgICB3aW5kb3cucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IENvbnRlbnRTY3JpcHRDb250ZXh0LlNDUklQVF9TVEFSVEVEX01FU1NBR0VfVFlQRSxcbiAgICAgIGNvbnRlbnRTY3JpcHROYW1lOiB0aGlzLmNvbnRlbnRTY3JpcHROYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgI2xpc3RlbkZvck5ld2VyU2NyaXB0cygpIHtcbiAgICBjb25zdCBjYiA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LmRhdGE/LnR5cGUgPT09IENvbnRlbnRTY3JpcHRDb250ZXh0LlNDUklQVF9TVEFSVEVEX01FU1NBR0VfVFlQRSAmJlxuICAgICAgICBldmVudC5kYXRhPy5jb250ZW50U2NyaXB0TmFtZSA9PT0gdGhpcy5jb250ZW50U2NyaXB0TmFtZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubm90aWZ5SW52YWxpZGF0ZWQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGNiKTtcbiAgICB0aGlzLm9uSW52YWxpZGF0ZWQoKCkgPT4gcmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGNiKSk7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
package/dist/index.cjs CHANGED
@@ -547,6 +547,7 @@ async function getInternalConfig(inlineConfig, command) {
547
547
  command,
548
548
  debug,
549
549
  entrypointsDir,
550
+ env,
550
551
  fsCache: createFsCache(wxtDir),
551
552
  imports: mergedConfig.imports ?? {},
552
553
  logger,
@@ -560,16 +561,12 @@ async function getInternalConfig(inlineConfig, command) {
560
561
  runnerConfig,
561
562
  srcDir,
562
563
  typesDir,
563
- vite: {},
564
+ vite: () => ({}),
564
565
  // Real value added after this object is initialized.
565
566
  wxtDir,
566
567
  zip: resolveInternalZipConfig(root, mergedConfig)
567
568
  };
568
- finalConfig.vite = await resolveInternalViteConfig(
569
- env,
570
- mergedConfig,
571
- finalConfig
572
- );
569
+ finalConfig.vite = (env2) => resolveInternalViteConfig(env2, mergedConfig, finalConfig);
573
570
  return finalConfig;
574
571
  }
575
572
  async function resolveManifestConfig(env, manifest) {
@@ -593,9 +590,9 @@ function mergeInlineConfig(inlineConfig, userConfig) {
593
590
  return vite2.mergeConfig(user, inline);
594
591
  };
595
592
  const viteConfig = async (env) => {
596
- const user = await resolveViteConfig(env, userConfig.vite);
597
- const inline = await resolveViteConfig(env, inlineConfig.vite);
598
- return vite2.mergeConfig(user, inline);
593
+ const user = await userConfig.vite?.(env);
594
+ const inline = await inlineConfig.vite?.(env);
595
+ return vite2.mergeConfig(user ?? {}, inline ?? {});
599
596
  };
600
597
  const runner = vite2.mergeConfig(
601
598
  userConfig.runner ?? {},
@@ -623,9 +620,6 @@ function mergeInlineConfig(inlineConfig, userConfig) {
623
620
  zip
624
621
  };
625
622
  }
626
- async function resolveViteConfig(env, vite6) {
627
- return await (typeof vite6 === "function" ? vite6(env) : vite6 ?? {});
628
- }
629
623
  function resolveInternalZipConfig(root, mergedConfig) {
630
624
  return {
631
625
  sourcesTemplate: "{{name}}-{{version}}-sources.zip",
@@ -647,13 +641,11 @@ function resolveInternalZipConfig(root, mergedConfig) {
647
641
  };
648
642
  }
649
643
  async function resolveInternalViteConfig(env, mergedConfig, finalConfig) {
650
- const internalVite = await resolveViteConfig(
651
- env,
652
- mergedConfig.vite
653
- );
644
+ const internalVite = await mergedConfig.vite?.(env) ?? {};
654
645
  internalVite.root = finalConfig.root;
655
646
  internalVite.configFile = false;
656
647
  internalVite.logLevel = "warn";
648
+ internalVite.mode = env.mode;
657
649
  internalVite.build ??= {};
658
650
  internalVite.build.outDir = finalConfig.outDir;
659
651
  internalVite.build.emptyOutDir = false;
@@ -865,7 +857,7 @@ async function buildSingleEntrypoint(entrypoint, config) {
865
857
  }
866
858
  const entryConfig = vite3.mergeConfig(
867
859
  libMode,
868
- config.vite
860
+ await config.vite(config.env)
869
861
  );
870
862
  const result = await vite3.build(entryConfig);
871
863
  return {
@@ -899,7 +891,7 @@ async function buildMultipleEntrypoints(entrypoints, config) {
899
891
  }
900
892
  const entryConfig = vite3.mergeConfig(
901
893
  multiPage,
902
- config.vite
894
+ await config.vite(config.env)
903
895
  );
904
896
  const result = await vite3.build(entryConfig);
905
897
  return {
@@ -2202,7 +2194,7 @@ async function getServerInfo() {
2202
2194
  async function setupServer(serverInfo, config) {
2203
2195
  const runner = createWebExtRunner();
2204
2196
  const viteServer = await vite5.createServer(
2205
- vite5.mergeConfig(serverInfo, config.vite)
2197
+ vite5.mergeConfig(serverInfo, await config.vite(config.env))
2206
2198
  );
2207
2199
  const start = async () => {
2208
2200
  await viteServer.listen(server.port);
@@ -2303,7 +2295,7 @@ async function clean(root = process.cwd()) {
2303
2295
  }
2304
2296
 
2305
2297
  // package.json
2306
- var version2 = "0.5.6";
2298
+ var version2 = "0.6.0";
2307
2299
 
2308
2300
  // src/core/utils/defineConfig.ts
2309
2301
  function defineConfig(config) {
@@ -2326,7 +2318,7 @@ async function createServer2(config) {
2326
2318
  return getInternalConfig(
2327
2319
  {
2328
2320
  ...config,
2329
- vite: serverInfo.viteServerConfig
2321
+ vite: () => serverInfo.viteServerConfig
2330
2322
  },
2331
2323
  "serve"
2332
2324
  );