wxt 0.8.4 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +3 -2
  2. package/dist/browser.js +3 -4
  3. package/dist/chunk-FNTE2L27.js +7 -0
  4. package/dist/chunk-VFZ5667B.js +2410 -0
  5. package/dist/chunk-YUG22S6W.js +38 -0
  6. package/dist/cli.cjs +3941 -3775
  7. package/dist/cli.d.cts +2 -0
  8. package/dist/client.d.ts +5 -171
  9. package/dist/client.js +128 -131
  10. package/dist/execa-WKZHVHC5.js +2043 -0
  11. package/dist/external-9107db91.d.ts +176 -0
  12. package/dist/external-cb0967d6.d.ts +572 -0
  13. package/dist/index.cjs +2727 -2355
  14. package/dist/index.d.cts +36 -583
  15. package/dist/index.d.ts +36 -583
  16. package/dist/index.js +330 -4484
  17. package/dist/sandbox.d.ts +2 -23
  18. package/dist/sandbox.js +1 -2
  19. package/dist/testing.cjs +161 -35
  20. package/dist/testing.d.cts +7 -273
  21. package/dist/testing.d.ts +7 -273
  22. package/dist/testing.js +12 -676
  23. package/dist/{virtual-modules → virtual}/background-entrypoint.js +6 -7
  24. package/dist/{virtual-modules → virtual}/content-script-entrypoint.js +4 -5
  25. package/dist/virtual/mock-browser.js +152 -0
  26. package/dist/{virtual-modules → virtual}/reload-html.js +2 -3
  27. package/dist/{virtual-modules → virtual}/unlisted-script-entrypoint.js +2 -3
  28. package/package.json +6 -5
  29. package/dist/index.cjs.map +0 -1
  30. package/dist/index.js.map +0 -1
  31. package/dist/virtual-modules/background-entrypoint.js.map +0 -1
  32. package/dist/virtual-modules/content-script-entrypoint.js.map +0 -1
  33. package/dist/virtual-modules/fake-browser.cjs +0 -31
  34. package/dist/virtual-modules/fake-browser.js +0 -8
  35. package/dist/virtual-modules/reload-html.js.map +0 -1
  36. package/dist/virtual-modules/unlisted-script-entrypoint.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/client/virtual-modules/background-entrypoint.ts","../../src/client/utils/logger.ts","../../src/client/utils/setupWebSocket.ts","../../src/client/utils/keepServiceWorkerAlive.ts","../../src/client/utils/reloadContentScript.ts"],"sourcesContent":["import definition from 'virtual:user-background';\nimport { setupWebSocket } from '../utils/setupWebSocket';\nimport { logger } from '../utils/logger';\nimport browser from 'webextension-polyfill';\nimport { keepServiceWorkerAlive } from '../utils/keepServiceWorkerAlive';\nimport { reloadContentScript } from '../utils/reloadContentScript';\n\nif (__COMMAND__ === 'serve') {\n try {\n const ws = setupWebSocket((message) => {\n if (message.event === 'wxt:reload-extension') browser.runtime.reload();\n if (message.event === 'wxt:reload-content-script' && message.data != null)\n reloadContentScript(message.data);\n });\n\n if (__MANIFEST_VERSION__ === 3) {\n // Tell the server the background script is loaded and ready to go\n ws.addEventListener('open', () => {\n const msg = { type: 'custom', event: 'wxt:background-initialized' };\n ws.send(JSON.stringify(msg));\n });\n\n // Web Socket will disconnect if the service worker is killed\n keepServiceWorkerAlive();\n }\n } catch (err) {\n logger.error('Failed to setup web socket connection with dev server', err);\n }\n}\n\ntry {\n const res = definition.main();\n // @ts-expect-error: res shouldn't be a promise, but we're checking it anyways\n if (res instanceof Promise) {\n console.warn(\n \"The background's main() function return a promise, but it must be synchonous\",\n );\n }\n} catch (err) {\n logger.error('The background crashed on startup!');\n throw err;\n}\n","function print(method: (...args: any[]) => void, ...args: any[]) {\n if (import.meta.env.MODE === 'production') return;\n\n if (typeof args[0] === 'string') {\n const message = args.shift();\n method(`[wxt] ${message}`, ...args);\n } else {\n method('[wxt]', ...args);\n }\n}\n\n/**\n * Wrapper around `console` with a \"[wxt]\" prefix\n */\nexport const logger = {\n debug: (...args: any[]) => print(console.debug, ...args),\n log: (...args: any[]) => print(console.log, ...args),\n warn: (...args: any[]) => print(console.warn, ...args),\n error: (...args: any[]) => print(console.error, ...args),\n};\n","import { logger } from './logger';\n\ninterface WebSocketMessage {\n type: string;\n event: string;\n data?: any;\n}\n\n/**\n * Connect to the websocket and listen for messages.\n *\n * @param onMessage Optional callback that is called when a message is recieved and we've verified\n * it's structure is what we expect.\n */\nexport function setupWebSocket(\n onMessage?: (message: WebSocketMessage) => void,\n) {\n const serverUrl = `${__DEV_SERVER_PROTOCOL__}//${__DEV_SERVER_HOSTNAME__}:${__DEV_SERVER_PORT__}`;\n logger.debug('Connecting to dev server @', serverUrl);\n const ws = new WebSocket(serverUrl, 'vite-hmr');\n\n ws.addEventListener('open', () => {\n logger.debug('Connected to dev server');\n });\n ws.addEventListener('close', () => {\n logger.debug('Disconnected from dev server');\n });\n ws.addEventListener('error', (event) => {\n logger.error('Failed to connect to dev server', event);\n });\n\n ws.addEventListener('message', (e) => {\n try {\n const message = JSON.parse(e.data) as WebSocketMessage;\n if (message.type === 'custom' && message.event?.startsWith?.('wxt:')) {\n onMessage?.(message);\n }\n } catch (err) {\n logger.error('Failed to handle message', err);\n }\n });\n\n return ws;\n}\n","import browser from 'webextension-polyfill';\n\n/**\n * https://developer.chrome.com/blog/longer-esw-lifetimes/\n */\nexport function keepServiceWorkerAlive() {\n setInterval(async () => {\n // Calling an async browser API resets the service worker's timeout\n await browser.runtime.getPlatformInfo();\n }, 5e3);\n}\n","import browser, { Manifest } from 'webextension-polyfill';\nimport { logger } from './logger';\nimport { MatchPattern } from '@webext-core/match-patterns';\n\nexport function reloadContentScript(contentScript: Manifest.ContentScript) {\n const manifest = browser.runtime.getManifest();\n if (manifest.manifest_version == 2) {\n void reloadContentScriptMv2(contentScript);\n } else {\n void reloadContentScriptMv3(contentScript);\n }\n}\n\nexport async function reloadContentScriptMv3(\n contentScript: Manifest.ContentScript,\n) {\n const id = `wxt:${contentScript.js![0]}`;\n logger.log('Reloading content script:', contentScript);\n const registered = await browser.scripting.getRegisteredContentScripts();\n logger.debug('Existing scripts:', registered);\n\n const existing = registered.find((cs) => cs.id === id);\n\n if (existing) {\n logger.debug('Updating content script', existing);\n await browser.scripting.updateContentScripts([{ ...contentScript, id }]);\n } else {\n logger.debug('Registering new content script...');\n await browser.scripting.registerContentScripts([{ ...contentScript, id }]);\n }\n\n const allTabs = await browser.tabs.query({});\n const matchPatterns = contentScript.matches.map(\n (match) => new MatchPattern(match),\n );\n const matchingTabs = allTabs.filter((tab) => {\n const url = tab.url;\n if (!url) return false;\n return !!matchPatterns.find((pattern) => pattern.includes(url));\n });\n await Promise.all(matchingTabs.map((tab) => browser.tabs.reload(tab.id)));\n}\n\nexport async function reloadContentScriptMv2(\n contentScript: Manifest.ContentScript,\n) {\n throw Error('TODO: reloadContentScriptMv2');\n}\n"],"mappings":"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","names":["browser","browser","browser","browser"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/client/virtual-modules/content-script-entrypoint.ts","../../src/client/utils/logger.ts","../../src/client/browser.ts","../../src/client/utils/ContentScriptContext.ts"],"sourcesContent":["import definition from 'virtual:user-content-script';\nimport { logger } from '../utils/logger';\nimport { ContentScriptContext } from '../utils/ContentScriptContext';\n\n(async () => {\n try {\n const { main, ...options } = definition;\n const ctx = new ContentScriptContext(__ENTRYPOINT__, options);\n\n await main(ctx);\n } catch (err) {\n logger.error(\n `The content script \"${__ENTRYPOINT__}\" crashed on startup!`,\n err,\n );\n }\n})();\n","function print(method: (...args: any[]) => void, ...args: any[]) {\n if (import.meta.env.MODE === 'production') return;\n\n if (typeof args[0] === 'string') {\n const message = args.shift();\n method(`[wxt] ${message}`, ...args);\n } else {\n method('[wxt]', ...args);\n }\n}\n\n/**\n * Wrapper around `console` with a \"[wxt]\" prefix\n */\nexport const logger = {\n debug: (...args: any[]) => print(console.debug, ...args),\n log: (...args: any[]) => print(console.log, ...args),\n warn: (...args: any[]) => print(console.warn, ...args),\n error: (...args: any[]) => print(console.error, ...args),\n};\n","/**\n * @module wxt/browser\n */\nimport originalBrowser, { Browser, Runtime, I18n } from 'webextension-polyfill';\n\nexport interface AugmentedBrowser extends Browser {\n runtime: WxtRuntime;\n i18n: WxtI18n;\n}\n\nexport interface WxtRuntime extends Runtime.Static {\n // Overriden per-project\n}\n\nexport interface WxtI18n extends I18n.Static {\n // Overriden per-project\n}\n\nexport const browser: AugmentedBrowser = originalBrowser;\n","import { ContentScriptDefinition } from '../../core/types';\nimport { browser } from '../browser';\nimport { logger } from './logger';\n\n/**\n * Implements [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).\n * Used to detect and stop content script code when the script is invalidated.\n *\n * It also provides several utilities like `ctx.setTimeout` and `ctx.setInterval` that should be used in\n * content scripts instead of `window.setTimeout` or `window.setInterval`.\n */\nexport class ContentScriptContext implements AbortController {\n private static SCRIPT_STARTED_MESSAGE_TYPE = 'wxt:content-script-started';\n\n #isTopFrame = window.self === window.top;\n #abortController: AbortController;\n\n constructor(\n private readonly contentScriptName: string,\n public readonly options?: Omit<ContentScriptDefinition, 'main'>,\n ) {\n this.#abortController = new AbortController();\n if (this.#isTopFrame) {\n this.#stopOldScripts();\n }\n this.setTimeout(() => {\n // Run on next tick so the listener it adds isn't triggered by stopOldScript\n this.#listenForNewerScripts();\n });\n }\n\n get signal() {\n return this.#abortController.signal;\n }\n\n abort(reason?: any): void {\n return this.#abortController.abort(reason);\n }\n\n get isInvalid(): boolean {\n if (browser.runtime.id == null) {\n this.notifyInvalidated(); // Sets `signal.aborted` to true\n }\n return this.signal.aborted;\n }\n\n get isValid(): boolean {\n return !this.isInvalid;\n }\n\n /**\n * Add a listener that is called when the content script's context is invalidated.\n *\n * @returns A function to remove the listener.\n *\n * @example\n * browser.runtime.onMessage.addListener(cb);\n * const removeInvalidatedListener = ctx.onInvalidated(() => {\n * browser.runtime.onMessage.removeListener(cb);\n * })\n * // ...\n * removeInvalidatedListener();\n */\n onInvalidated(cb: () => void): () => void {\n this.signal.addEventListener('abort', cb);\n return () => this.signal.removeEventListener('abort', cb);\n }\n\n /**\n * Return a promise that never resolves. Useful if you have an async function that shouldn't run\n * after the context is expired.\n *\n * @example\n * const getValueFromStorage = async () => {\n * if (ctx.isInvalid) return ctx.block();\n *\n * // ...\n * }\n */\n block<T>(): Promise<T> {\n return new Promise(() => {\n // noop\n });\n }\n\n /**\n * Wrapper around `window.setInterval` that automatically clears the interval when invalidated.\n */\n setInterval(handler: () => void, timeout?: number): number {\n const id = setInterval(() => {\n if (this.isValid) handler();\n }, timeout) as unknown as number;\n this.onInvalidated(() => clearInterval(id));\n return id;\n }\n\n /**\n * Wrapper around `window.setTimeout` that automatically clears the interval when invalidated.\n */\n setTimeout(handler: () => void, timeout?: number): number {\n const id = setTimeout(() => {\n if (this.isValid) handler();\n }, timeout) as unknown as number;\n this.onInvalidated(() => clearTimeout(id));\n return id;\n }\n\n /**\n * Wrapper around `window.requestAnimationFrame` that automatically cancels the request when\n * invalidated.\n */\n requestAnimationFrame(callback: FrameRequestCallback): number {\n const id = requestAnimationFrame((...args) => {\n if (this.isValid) callback(...args);\n });\n\n this.onInvalidated(() => cancelAnimationFrame(id));\n return id;\n }\n\n /**\n * Wrapper around `window.requestIdleCallback` that automatically cancels the request when\n * invalidated.\n */\n requestIdleCallback(\n callback: IdleRequestCallback,\n options?: IdleRequestOptions,\n ): number {\n const id = requestIdleCallback((...args) => {\n if (!this.signal.aborted) callback(...args);\n }, options);\n\n this.onInvalidated(() => cancelIdleCallback(id));\n return id;\n }\n\n /**\n * Call `target.addEventListener` and remove the event listener when the context is invalidated.\n *\n * @example\n * ctx.addEventListener(window, \"mousemove\", () => {\n * // ...\n * });\n * ctx.addEventListener(document, \"visibilitychange\", () => {\n * // ...\n * });\n */\n addEventListener(\n target: any,\n type: string,\n handler: (event: Event) => void,\n options?: AddEventListenerOptions,\n ) {\n target.addEventListener?.(type, handler, options);\n this.onInvalidated(\n () => target.removeEventListener?.(type, handler, options),\n );\n }\n\n /**\n * @internal\n * Abort the abort controller and execute all `onInvalidated` listeners.\n */\n notifyInvalidated() {\n this.abort('Content script context invalidated');\n logger.debug(\n `Content script \"${this.contentScriptName}\" context invalidated`,\n );\n }\n\n #stopOldScripts() {\n // Use postMessage so it get's sent to all the frames of the page.\n window.postMessage(\n {\n event: ContentScriptContext.SCRIPT_STARTED_MESSAGE_TYPE,\n contentScriptName: this.contentScriptName,\n },\n '*',\n );\n }\n\n #listenForNewerScripts() {\n const cb = (event: MessageEvent) => {\n if (\n event.data?.type === ContentScriptContext.SCRIPT_STARTED_MESSAGE_TYPE &&\n event.data?.contentScriptName === this.contentScriptName\n ) {\n this.notifyInvalidated();\n }\n };\n\n addEventListener('message', cb);\n this.onInvalidated(() => removeEventListener('message', cb));\n }\n}\n"],"mappings":";AAAA,OAAO,gBAAgB;;;ACAvB,SAAS,MAAM,WAAqC,MAAa;AAC/D,MAAI,YAAY,IAAI,SAAS;AAAc;AAE3C,MAAI,OAAO,KAAK,CAAC,MAAM,UAAU;AAC/B,UAAM,UAAU,KAAK,MAAM;AAC3B,WAAO,SAAS,OAAO,IAAI,GAAG,IAAI;AAAA,EACpC,OAAO;AACL,WAAO,SAAS,GAAG,IAAI;AAAA,EACzB;AACF;AAKO,IAAM,SAAS;AAAA,EACpB,OAAO,IAAI,SAAgB,MAAM,QAAQ,OAAO,GAAG,IAAI;AAAA,EACvD,KAAK,IAAI,SAAgB,MAAM,QAAQ,KAAK,GAAG,IAAI;AAAA,EACnD,MAAM,IAAI,SAAgB,MAAM,QAAQ,MAAM,GAAG,IAAI;AAAA,EACrD,OAAO,IAAI,SAAgB,MAAM,QAAQ,OAAO,GAAG,IAAI;AACzD;;;AChBA,OAAO,qBAAiD;AAejD,IAAM,UAA4B;;;ACPlC,IAAM,uBAAN,MAAM,sBAAgD;AAAA,EAM3D,YACmB,mBACD,SAChB;AAFiB;AACD;AAEhB,SAAK,mBAAmB,IAAI,gBAAgB;AAC5C,QAAI,KAAK,aAAa;AACpB,WAAK,gBAAgB;AAAA,IACvB;AACA,SAAK,WAAW,MAAM;AAEpB,WAAK,uBAAuB;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAjBA,OAAe,8BAA8B;AAAA,EAE7C,cAAc,OAAO,SAAS,OAAO;AAAA,EACrC;AAAA,EAgBA,IAAI,SAAS;AACX,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,MAAM,QAAoB;AACxB,WAAO,KAAK,iBAAiB,MAAM,MAAM;AAAA,EAC3C;AAAA,EAEA,IAAI,YAAqB;AACvB,QAAI,QAAQ,QAAQ,MAAM,MAAM;AAC9B,WAAK,kBAAkB;AAAA,IACzB;AACA,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,UAAmB;AACrB,WAAO,CAAC,KAAK;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,cAAc,IAA4B;AACxC,SAAK,OAAO,iBAAiB,SAAS,EAAE;AACxC,WAAO,MAAM,KAAK,OAAO,oBAAoB,SAAS,EAAE;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,QAAuB;AACrB,WAAO,IAAI,QAAQ,MAAM;AAAA,IAEzB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,SAAqB,SAA0B;AACzD,UAAM,KAAK,YAAY,MAAM;AAC3B,UAAI,KAAK;AAAS,gBAAQ;AAAA,IAC5B,GAAG,OAAO;AACV,SAAK,cAAc,MAAM,cAAc,EAAE,CAAC;AAC1C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,SAAqB,SAA0B;AACxD,UAAM,KAAK,WAAW,MAAM;AAC1B,UAAI,KAAK;AAAS,gBAAQ;AAAA,IAC5B,GAAG,OAAO;AACV,SAAK,cAAc,MAAM,aAAa,EAAE,CAAC;AACzC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,sBAAsB,UAAwC;AAC5D,UAAM,KAAK,sBAAsB,IAAI,SAAS;AAC5C,UAAI,KAAK;AAAS,iBAAS,GAAG,IAAI;AAAA,IACpC,CAAC;AAED,SAAK,cAAc,MAAM,qBAAqB,EAAE,CAAC;AACjD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBACE,UACA,SACQ;AACR,UAAM,KAAK,oBAAoB,IAAI,SAAS;AAC1C,UAAI,CAAC,KAAK,OAAO;AAAS,iBAAS,GAAG,IAAI;AAAA,IAC5C,GAAG,OAAO;AAEV,SAAK,cAAc,MAAM,mBAAmB,EAAE,CAAC;AAC/C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,iBACE,QACA,MACA,SACA,SACA;AACA,WAAO,mBAAmB,MAAM,SAAS,OAAO;AAChD,SAAK;AAAA,MACH,MAAM,OAAO,sBAAsB,MAAM,SAAS,OAAO;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAoB;AAClB,SAAK,MAAM,oCAAoC;AAC/C,WAAO;AAAA,MACL,mBAAmB,KAAK,iBAAiB;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,kBAAkB;AAEhB,WAAO;AAAA,MACL;AAAA,QACE,OAAO,sBAAqB;AAAA,QAC5B,mBAAmB,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,yBAAyB;AACvB,UAAM,KAAK,CAAC,UAAwB;AAClC,UACE,MAAM,MAAM,SAAS,sBAAqB,+BAC1C,MAAM,MAAM,sBAAsB,KAAK,mBACvC;AACA,aAAK,kBAAkB;AAAA,MACzB;AAAA,IACF;AAEA,qBAAiB,WAAW,EAAE;AAC9B,SAAK,cAAc,MAAM,oBAAoB,WAAW,EAAE,CAAC;AAAA,EAC7D;AACF;;;CH9LC,YAAY;AACX,MAAI;AACF,UAAM,EAAE,MAAM,GAAG,QAAQ,IAAI;AAC7B,UAAM,MAAM,IAAI,qBAAqB,gBAAgB,OAAO;AAE5D,UAAM,KAAK,GAAG;AAAA,EAChB,SAAS,KAAK;AACZ,WAAO;AAAA,MACL,uBAAuB,cAAc;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AACF,GAAG;","names":[]}
@@ -1,31 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/client/virtual-modules/fake-browser.ts
21
- var fake_browser_exports = {};
22
- __export(fake_browser_exports, {
23
- default: () => fake_browser_default
24
- });
25
- module.exports = __toCommonJS(fake_browser_exports);
26
-
27
- // src/testing/fake-browser.ts
28
- var import_fake_browser = require("@webext-core/fake-browser");
29
-
30
- // src/client/virtual-modules/fake-browser.ts
31
- var fake_browser_default = import_fake_browser.fakeBrowser;
@@ -1,8 +0,0 @@
1
- // src/testing/fake-browser.ts
2
- import { fakeBrowser } from "@webext-core/fake-browser";
3
-
4
- // src/client/virtual-modules/fake-browser.ts
5
- var fake_browser_default = fakeBrowser;
6
- export {
7
- fake_browser_default as default
8
- };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/client/utils/logger.ts","../../src/client/utils/setupWebSocket.ts","../../src/client/virtual-modules/reload-html.ts"],"sourcesContent":["function print(method: (...args: any[]) => void, ...args: any[]) {\n if (import.meta.env.MODE === 'production') return;\n\n if (typeof args[0] === 'string') {\n const message = args.shift();\n method(`[wxt] ${message}`, ...args);\n } else {\n method('[wxt]', ...args);\n }\n}\n\n/**\n * Wrapper around `console` with a \"[wxt]\" prefix\n */\nexport const logger = {\n debug: (...args: any[]) => print(console.debug, ...args),\n log: (...args: any[]) => print(console.log, ...args),\n warn: (...args: any[]) => print(console.warn, ...args),\n error: (...args: any[]) => print(console.error, ...args),\n};\n","import { logger } from './logger';\n\ninterface WebSocketMessage {\n type: string;\n event: string;\n data?: any;\n}\n\n/**\n * Connect to the websocket and listen for messages.\n *\n * @param onMessage Optional callback that is called when a message is recieved and we've verified\n * it's structure is what we expect.\n */\nexport function setupWebSocket(\n onMessage?: (message: WebSocketMessage) => void,\n) {\n const serverUrl = `${__DEV_SERVER_PROTOCOL__}//${__DEV_SERVER_HOSTNAME__}:${__DEV_SERVER_PORT__}`;\n logger.debug('Connecting to dev server @', serverUrl);\n const ws = new WebSocket(serverUrl, 'vite-hmr');\n\n ws.addEventListener('open', () => {\n logger.debug('Connected to dev server');\n });\n ws.addEventListener('close', () => {\n logger.debug('Disconnected from dev server');\n });\n ws.addEventListener('error', (event) => {\n logger.error('Failed to connect to dev server', event);\n });\n\n ws.addEventListener('message', (e) => {\n try {\n const message = JSON.parse(e.data) as WebSocketMessage;\n if (message.type === 'custom' && message.event?.startsWith?.('wxt:')) {\n onMessage?.(message);\n }\n } catch (err) {\n logger.error('Failed to handle message', err);\n }\n });\n\n return ws;\n}\n","/// <reference types=\"vite/client\" />\n\nimport { logger } from '../utils/logger';\nimport { setupWebSocket } from '../utils/setupWebSocket';\n\nif (__COMMAND__ === 'serve') {\n try {\n setupWebSocket((message) => {\n if (message.event === 'wxt:reload-page') {\n // We need to remove the initial slash from the path to compare correctly\n // \"popup.html\" === \"/popup.html\".substring(1)\n if (message.data === location.pathname.substring(1)) {\n location.reload();\n }\n }\n });\n } catch (err) {\n logger.error('Failed to setup web socket connection with dev server', err);\n }\n}\n"],"mappings":";AAAA,SAAS,MAAM,WAAqC,MAAa;AAC/D,MAAI,YAAY,IAAI,SAAS;AAAc;AAE3C,MAAI,OAAO,KAAK,CAAC,MAAM,UAAU;AAC/B,UAAM,UAAU,KAAK,MAAM;AAC3B,WAAO,SAAS,OAAO,IAAI,GAAG,IAAI;AAAA,EACpC,OAAO;AACL,WAAO,SAAS,GAAG,IAAI;AAAA,EACzB;AACF;AAKO,IAAM,SAAS;AAAA,EACpB,OAAO,IAAI,SAAgB,MAAM,QAAQ,OAAO,GAAG,IAAI;AAAA,EACvD,KAAK,IAAI,SAAgB,MAAM,QAAQ,KAAK,GAAG,IAAI;AAAA,EACnD,MAAM,IAAI,SAAgB,MAAM,QAAQ,MAAM,GAAG,IAAI;AAAA,EACrD,OAAO,IAAI,SAAgB,MAAM,QAAQ,OAAO,GAAG,IAAI;AACzD;;;ACLO,SAAS,eACd,WACA;AACA,QAAM,YAAY,GAAG,uBAAuB,KAAK,uBAAuB,IAAI,mBAAmB;AAC/F,SAAO,MAAM,8BAA8B,SAAS;AACpD,QAAM,KAAK,IAAI,UAAU,WAAW,UAAU;AAE9C,KAAG,iBAAiB,QAAQ,MAAM;AAChC,WAAO,MAAM,yBAAyB;AAAA,EACxC,CAAC;AACD,KAAG,iBAAiB,SAAS,MAAM;AACjC,WAAO,MAAM,8BAA8B;AAAA,EAC7C,CAAC;AACD,KAAG,iBAAiB,SAAS,CAAC,UAAU;AACtC,WAAO,MAAM,mCAAmC,KAAK;AAAA,EACvD,CAAC;AAED,KAAG,iBAAiB,WAAW,CAAC,MAAM;AACpC,QAAI;AACF,YAAM,UAAU,KAAK,MAAM,EAAE,IAAI;AACjC,UAAI,QAAQ,SAAS,YAAY,QAAQ,OAAO,aAAa,MAAM,GAAG;AACpE,oBAAY,OAAO;AAAA,MACrB;AAAA,IACF,SAAS,KAAK;AACZ,aAAO,MAAM,4BAA4B,GAAG;AAAA,IAC9C;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;ACtCA,IAAI,gBAAgB,SAAS;AAC3B,MAAI;AACF,mBAAe,CAAC,YAAY;AAC1B,UAAI,QAAQ,UAAU,mBAAmB;AAGvC,YAAI,QAAQ,SAAS,SAAS,SAAS,UAAU,CAAC,GAAG;AACnD,mBAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,WAAO,MAAM,yDAAyD,GAAG;AAAA,EAC3E;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/client/virtual-modules/unlisted-script-entrypoint.ts","../../src/client/utils/logger.ts"],"sourcesContent":["import definition from 'virtual:user-unlisted-script';\nimport { logger } from '../utils/logger';\n\n(async () => {\n try {\n await definition.main();\n } catch (err) {\n logger.error(\n `The unlisted script \"${__ENTRYPOINT__}\" crashed on startup!`,\n err,\n );\n }\n})();\n","function print(method: (...args: any[]) => void, ...args: any[]) {\n if (import.meta.env.MODE === 'production') return;\n\n if (typeof args[0] === 'string') {\n const message = args.shift();\n method(`[wxt] ${message}`, ...args);\n } else {\n method('[wxt]', ...args);\n }\n}\n\n/**\n * Wrapper around `console` with a \"[wxt]\" prefix\n */\nexport const logger = {\n debug: (...args: any[]) => print(console.debug, ...args),\n log: (...args: any[]) => print(console.log, ...args),\n warn: (...args: any[]) => print(console.warn, ...args),\n error: (...args: any[]) => print(console.error, ...args),\n};\n"],"mappings":";AAAA,OAAO,gBAAgB;;;ACAvB,SAAS,MAAM,WAAqC,MAAa;AAC/D,MAAI,YAAY,IAAI,SAAS;AAAc;AAE3C,MAAI,OAAO,KAAK,CAAC,MAAM,UAAU;AAC/B,UAAM,UAAU,KAAK,MAAM;AAC3B,WAAO,SAAS,OAAO,IAAI,GAAG,IAAI;AAAA,EACpC,OAAO;AACL,WAAO,SAAS,GAAG,IAAI;AAAA,EACzB;AACF;AAKO,IAAM,SAAS;AAAA,EACpB,OAAO,IAAI,SAAgB,MAAM,QAAQ,OAAO,GAAG,IAAI;AAAA,EACvD,KAAK,IAAI,SAAgB,MAAM,QAAQ,KAAK,GAAG,IAAI;AAAA,EACnD,MAAM,IAAI,SAAgB,MAAM,QAAQ,MAAM,GAAG,IAAI;AAAA,EACrD,OAAO,IAAI,SAAgB,MAAM,QAAQ,OAAO,GAAG,IAAI;AACzD;;;CDhBC,YAAY;AACX,MAAI;AACF,UAAM,WAAW,KAAK;AAAA,EACxB,SAAS,KAAK;AACZ,WAAO;AAAA,MACL,wBAAwB,cAAc;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF,GAAG;","names":[]}