web-ext 8.1.0 → 8.2.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.
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import fs from 'fs-extra';
|
|
8
|
-
import asyncMkdirp from 'mkdirp';
|
|
8
|
+
import { mkdirp as asyncMkdirp } from 'mkdirp';
|
|
9
9
|
import { Launcher as ChromeLauncher, launch as defaultChromiumLaunch } from 'chrome-launcher';
|
|
10
10
|
import WebSocket, { WebSocketServer } from 'ws';
|
|
11
11
|
import { createLogger } from '../util/logger.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chromium.js","names":["path","fs","asyncMkdirp","Launcher","ChromeLauncher","launch","defaultChromiumLaunch","WebSocket","WebSocketServer","createLogger","TempDir","isDirectory","fileExists","log","import","meta","url","EXCLUDED_CHROME_FLAGS","DEFAULT_CHROME_FLAGS","defaultFlags","filter","flag","includes","ChromiumExtensionRunner","cleanupCallbacks","params","chromiumInstance","chromiumLaunch","reloadManagerExtension","wss","exiting","_promiseSetupDone","constructor","Set","getName","run","setupInstance","isUserDataDir","dirPath","localStatePath","join","defaultPath","isProfileDir","securePreferencesPath","getProfilePaths","chromiumProfile","userDataDir","profileDirName","isProfileDirAndNotUserData","dir","base","parse","Promise","resolve","server","port","host","clientTracking","on","socket","err","debug","createReloadManagerExtension","extensions","concat","map","sourceDir","chromiumBinary","chromeFlags","push","args","keepProfileChanges","Error","tmpDir","create","tmpDirPath","copy","startingUrl","startUrl","startingUrls","Array","isArray","shift","enableExtensions","chromePath","ignoreDefaultFlags","process","once","info","exit","wssBroadcast","data","clients","cleanWebExtReloadComplete","client","removeEventListener","webExtReloadComplete","delete","message","msg","JSON","type","call","readyState","OPEN","addEventListener","send","stringify","size","registerCleanup","remove","extPath","Date","now","writeFile","manifest_version","name","version","permissions","background","scripts","wssInfo","address","bgPage","reloadAllExtensions","runnerName","stdout","write","toTimeString","reloadExtensionBySourceDir","extensionSourceDir","fn","add","catch","kill","wssClient","_this$wss","terminate","close","error"],"sources":["../../src/extension-runners/chromium.js"],"sourcesContent":["/**\n * This module provide an ExtensionRunner subclass that manage an extension executed\n * in a Chromium-based browser instance.\n */\n\nimport path from 'path';\n\nimport fs from 'fs-extra';\nimport asyncMkdirp from 'mkdirp';\nimport {\n Launcher as ChromeLauncher,\n launch as defaultChromiumLaunch,\n} from 'chrome-launcher';\nimport WebSocket, { WebSocketServer } from 'ws';\n\nimport { createLogger } from '../util/logger.js';\nimport { TempDir } from '../util/temp-dir.js';\nimport isDirectory from '../util/is-directory.js';\nimport fileExists from '../util/file-exists.js';\n\nconst log = createLogger(import.meta.url);\n\nconst EXCLUDED_CHROME_FLAGS = ['--disable-extensions', '--mute-audio'];\n\nexport const DEFAULT_CHROME_FLAGS = ChromeLauncher.defaultFlags().filter(\n (flag) => !EXCLUDED_CHROME_FLAGS.includes(flag),\n);\n\n/**\n * Implements an IExtensionRunner which manages a Chromium instance.\n */\nexport class ChromiumExtensionRunner {\n cleanupCallbacks;\n params;\n chromiumInstance;\n chromiumLaunch;\n reloadManagerExtension;\n wss;\n exiting;\n _promiseSetupDone;\n\n constructor(params) {\n const { chromiumLaunch = defaultChromiumLaunch } = params;\n this.params = params;\n this.chromiumLaunch = chromiumLaunch;\n this.cleanupCallbacks = new Set();\n }\n\n // Method exported from the IExtensionRunner interface.\n\n /**\n * Returns the runner name.\n */\n getName() {\n return 'Chromium';\n }\n\n async run() {\n // Run should never be called more than once.\n this._promiseSetupDone = this.setupInstance();\n await this._promiseSetupDone;\n }\n\n static async isUserDataDir(dirPath) {\n const localStatePath = path.join(dirPath, 'Local State');\n const defaultPath = path.join(dirPath, 'Default');\n // Local State and Default are typical for the user-data-dir\n return (\n (await fileExists(localStatePath)) && (await isDirectory(defaultPath))\n );\n }\n\n static async isProfileDir(dirPath) {\n const securePreferencesPath = path.join(dirPath, 'Secure Preferences');\n //Secure Preferences is typical for a profile dir inside a user data dir\n return await fileExists(securePreferencesPath);\n }\n\n static async getProfilePaths(chromiumProfile) {\n if (!chromiumProfile) {\n return {\n userDataDir: null,\n profileDirName: null,\n };\n }\n\n const isProfileDirAndNotUserData =\n (await ChromiumExtensionRunner.isProfileDir(chromiumProfile)) &&\n !(await ChromiumExtensionRunner.isUserDataDir(chromiumProfile));\n\n if (isProfileDirAndNotUserData) {\n const { dir: userDataDir, base: profileDirName } =\n path.parse(chromiumProfile);\n return {\n userDataDir,\n profileDirName,\n };\n }\n\n return {\n userDataDir: chromiumProfile,\n profileDirName: null,\n };\n }\n\n /**\n * Setup the Chromium Profile and run a Chromium instance.\n */\n async setupInstance() {\n // Start a websocket server on a free localhost TCP port.\n this.wss = await new Promise((resolve) => {\n const server = new WebSocketServer(\n // Use a ipv4 host so we don't need to escape ipv6 address\n // https://github.com/mozilla/web-ext/issues/2331\n { port: 0, host: '127.0.0.1', clientTracking: true },\n // Wait the server to be listening (so that the extension\n // runner can successfully retrieve server address and port).\n () => resolve(server),\n );\n });\n\n // Prevent unhandled socket error (e.g. when chrome\n // is exiting, See https://github.com/websockets/ws/issues/1256).\n this.wss.on('connection', function (socket) {\n socket.on('error', (err) => {\n log.debug(`websocket connection error: ${err}`);\n });\n });\n\n // Create the extension that will manage the addon reloads\n this.reloadManagerExtension = await this.createReloadManagerExtension();\n\n // Start chrome pointing it to a given profile dir\n const extensions = [this.reloadManagerExtension]\n .concat(this.params.extensions.map(({ sourceDir }) => sourceDir))\n .join(',');\n\n const { chromiumBinary } = this.params;\n\n log.debug('Starting Chromium instance...');\n\n if (chromiumBinary) {\n log.debug(`(chromiumBinary: ${chromiumBinary})`);\n }\n\n const chromeFlags = [...DEFAULT_CHROME_FLAGS];\n\n chromeFlags.push(`--load-extension=${extensions}`);\n\n if (this.params.args) {\n chromeFlags.push(...this.params.args);\n }\n\n // eslint-disable-next-line prefer-const\n let { userDataDir, profileDirName } =\n await ChromiumExtensionRunner.getProfilePaths(\n this.params.chromiumProfile,\n );\n\n if (userDataDir && this.params.keepProfileChanges) {\n if (\n profileDirName &&\n !(await ChromiumExtensionRunner.isUserDataDir(userDataDir))\n ) {\n throw new Error(\n 'The profile you provided is not in a ' +\n 'user-data-dir. The changes cannot be kept. Please either ' +\n 'remove --keep-profile-changes or use a profile in a ' +\n 'user-data-dir directory',\n );\n }\n } else if (!this.params.keepProfileChanges) {\n // the user provided an existing profile directory but doesn't want\n // the changes to be kept. we copy this directory to a temporary\n // user data dir.\n const tmpDir = new TempDir();\n await tmpDir.create();\n const tmpDirPath = tmpDir.path();\n\n if (userDataDir && profileDirName) {\n // copy profile dir to this temp user data dir.\n await fs.copy(\n path.join(userDataDir, profileDirName),\n path.join(tmpDirPath, profileDirName),\n );\n } else if (userDataDir) {\n await fs.copy(userDataDir, tmpDirPath);\n }\n userDataDir = tmpDirPath;\n }\n\n if (profileDirName) {\n chromeFlags.push(`--profile-directory=${profileDirName}`);\n }\n\n let startingUrl;\n if (this.params.startUrl) {\n const startingUrls = Array.isArray(this.params.startUrl)\n ? this.params.startUrl\n : [this.params.startUrl];\n startingUrl = startingUrls.shift();\n chromeFlags.push(...startingUrls);\n }\n\n this.chromiumInstance = await this.chromiumLaunch({\n enableExtensions: true,\n chromePath: chromiumBinary,\n chromeFlags,\n startingUrl,\n userDataDir,\n // Ignore default flags to keep the extension enabled.\n ignoreDefaultFlags: true,\n });\n\n this.chromiumInstance.process.once('close', () => {\n this.chromiumInstance = null;\n\n if (!this.exiting) {\n log.info('Exiting on Chromium instance disconnected.');\n this.exit();\n }\n });\n }\n\n async wssBroadcast(data) {\n return new Promise((resolve) => {\n const clients = this.wss ? new Set(this.wss.clients) : new Set();\n\n function cleanWebExtReloadComplete() {\n const client = this;\n client.removeEventListener('message', webExtReloadComplete);\n client.removeEventListener('close', cleanWebExtReloadComplete);\n clients.delete(client);\n }\n\n const webExtReloadComplete = async (message) => {\n const msg = JSON.parse(message.data);\n\n if (msg.type === 'webExtReloadExtensionComplete') {\n for (const client of clients) {\n cleanWebExtReloadComplete.call(client);\n }\n resolve();\n }\n };\n\n for (const client of clients) {\n if (client.readyState === WebSocket.OPEN) {\n client.addEventListener('message', webExtReloadComplete);\n client.addEventListener('close', cleanWebExtReloadComplete);\n\n client.send(JSON.stringify(data));\n } else {\n clients.delete(client);\n }\n }\n\n if (clients.size === 0) {\n resolve();\n }\n });\n }\n\n async createReloadManagerExtension() {\n const tmpDir = new TempDir();\n await tmpDir.create();\n this.registerCleanup(() => tmpDir.remove());\n\n const extPath = path.join(\n tmpDir.path(),\n `reload-manager-extension-${Date.now()}`,\n );\n\n log.debug(`Creating reload-manager-extension in ${extPath}`);\n\n await asyncMkdirp(extPath);\n\n await fs.writeFile(\n path.join(extPath, 'manifest.json'),\n JSON.stringify({\n manifest_version: 2,\n name: 'web-ext Reload Manager Extension',\n version: '1.0',\n permissions: ['management', 'tabs'],\n background: {\n scripts: ['bg.js'],\n },\n }),\n );\n\n const wssInfo = this.wss.address();\n\n const bgPage = `(function bgPage() {\n async function getAllDevExtensions() {\n const allExtensions = await new Promise(\n r => chrome.management.getAll(r));\n\n return allExtensions.filter((extension) => {\n return extension.enabled &&\n extension.installType === \"development\" &&\n extension.id !== chrome.runtime.id;\n });\n }\n\n const setEnabled = (extensionId, value) =>\n chrome.runtime.id == extensionId ?\n new Promise.resolve() :\n new Promise(r => chrome.management.setEnabled(extensionId, value, r));\n\n async function reloadExtension(extensionId) {\n await setEnabled(extensionId, false);\n await setEnabled(extensionId, true);\n }\n\n const ws = new window.WebSocket(\n \"ws://${wssInfo.address}:${wssInfo.port}\");\n\n ws.onmessage = async (evt) => {\n const msg = JSON.parse(evt.data);\n if (msg.type === 'webExtReloadAllExtensions') {\n const devExtensions = await getAllDevExtensions();\n await Promise.all(devExtensions.map(ext => reloadExtension(ext.id)));\n ws.send(JSON.stringify({ type: 'webExtReloadExtensionComplete' }));\n }\n };\n })()`;\n\n await fs.writeFile(path.join(extPath, 'bg.js'), bgPage);\n return extPath;\n }\n\n /**\n * Reloads all the extensions, collect any reload error and resolves to\n * an array composed by a single ExtensionRunnerReloadResult object.\n */\n async reloadAllExtensions() {\n const runnerName = this.getName();\n\n await this.wssBroadcast({\n type: 'webExtReloadAllExtensions',\n });\n\n process.stdout.write(\n `\\rLast extension reload: ${new Date().toTimeString()}`,\n );\n log.debug('\\n');\n\n return [{ runnerName }];\n }\n\n /**\n * Reloads a single extension, collect any reload error and resolves to\n * an array composed by a single ExtensionRunnerReloadResult object.\n */\n async reloadExtensionBySourceDir(\n extensionSourceDir, // eslint-disable-line no-unused-vars\n ) {\n // TODO(rpl): detect the extension ids assigned to the\n // target extensions and map it to the extensions source dir\n // (https://github.com/mozilla/web-ext/issues/1687).\n return this.reloadAllExtensions();\n }\n\n /**\n * Register a callback to be called when the runner has been exited\n * (e.g. the Chromium instance exits or the user has requested web-ext\n * to exit).\n */\n registerCleanup(fn) {\n this.cleanupCallbacks.add(fn);\n }\n\n /**\n * Exits the runner, by closing the managed Chromium instance.\n */\n async exit() {\n this.exiting = true;\n\n // Wait for the setup to complete if the extension runner is already\n // being started.\n if (this._promiseSetupDone) {\n // Ignore initialization errors if any.\n await this._promiseSetupDone.catch((err) => {\n log.debug(`ignored setup error on chromium runner shutdown: ${err}`);\n });\n }\n\n if (this.chromiumInstance) {\n await this.chromiumInstance.kill();\n this.chromiumInstance = null;\n }\n\n if (this.wss) {\n // Close all websocket clients, closing the WebSocketServer\n // does not terminate the existing connection and it wouldn't\n // resolve until all of the existing connections are closed.\n for (const wssClient of this.wss?.clients || []) {\n if (wssClient.readyState === WebSocket.OPEN) {\n wssClient.terminate();\n }\n }\n await new Promise((resolve) =>\n this.wss ? this.wss.close(resolve) : resolve(),\n );\n this.wss = null;\n }\n\n // Call all the registered cleanup callbacks.\n for (const fn of this.cleanupCallbacks) {\n try {\n fn();\n } catch (error) {\n log.error(error);\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"chromium.js","names":["path","fs","mkdirp","asyncMkdirp","Launcher","ChromeLauncher","launch","defaultChromiumLaunch","WebSocket","WebSocketServer","createLogger","TempDir","isDirectory","fileExists","log","import","meta","url","EXCLUDED_CHROME_FLAGS","DEFAULT_CHROME_FLAGS","defaultFlags","filter","flag","includes","ChromiumExtensionRunner","cleanupCallbacks","params","chromiumInstance","chromiumLaunch","reloadManagerExtension","wss","exiting","_promiseSetupDone","constructor","Set","getName","run","setupInstance","isUserDataDir","dirPath","localStatePath","join","defaultPath","isProfileDir","securePreferencesPath","getProfilePaths","chromiumProfile","userDataDir","profileDirName","isProfileDirAndNotUserData","dir","base","parse","Promise","resolve","server","port","host","clientTracking","on","socket","err","debug","createReloadManagerExtension","extensions","concat","map","sourceDir","chromiumBinary","chromeFlags","push","args","keepProfileChanges","Error","tmpDir","create","tmpDirPath","copy","startingUrl","startUrl","startingUrls","Array","isArray","shift","enableExtensions","chromePath","ignoreDefaultFlags","process","once","info","exit","wssBroadcast","data","clients","cleanWebExtReloadComplete","client","removeEventListener","webExtReloadComplete","delete","message","msg","JSON","type","call","readyState","OPEN","addEventListener","send","stringify","size","registerCleanup","remove","extPath","Date","now","writeFile","manifest_version","name","version","permissions","background","scripts","wssInfo","address","bgPage","reloadAllExtensions","runnerName","stdout","write","toTimeString","reloadExtensionBySourceDir","extensionSourceDir","fn","add","catch","kill","wssClient","_this$wss","terminate","close","error"],"sources":["../../src/extension-runners/chromium.js"],"sourcesContent":["/**\n * This module provide an ExtensionRunner subclass that manage an extension executed\n * in a Chromium-based browser instance.\n */\n\nimport path from 'path';\n\nimport fs from 'fs-extra';\nimport { mkdirp as asyncMkdirp } from 'mkdirp';\nimport {\n Launcher as ChromeLauncher,\n launch as defaultChromiumLaunch,\n} from 'chrome-launcher';\nimport WebSocket, { WebSocketServer } from 'ws';\n\nimport { createLogger } from '../util/logger.js';\nimport { TempDir } from '../util/temp-dir.js';\nimport isDirectory from '../util/is-directory.js';\nimport fileExists from '../util/file-exists.js';\n\nconst log = createLogger(import.meta.url);\n\nconst EXCLUDED_CHROME_FLAGS = ['--disable-extensions', '--mute-audio'];\n\nexport const DEFAULT_CHROME_FLAGS = ChromeLauncher.defaultFlags().filter(\n (flag) => !EXCLUDED_CHROME_FLAGS.includes(flag),\n);\n\n/**\n * Implements an IExtensionRunner which manages a Chromium instance.\n */\nexport class ChromiumExtensionRunner {\n cleanupCallbacks;\n params;\n chromiumInstance;\n chromiumLaunch;\n reloadManagerExtension;\n wss;\n exiting;\n _promiseSetupDone;\n\n constructor(params) {\n const { chromiumLaunch = defaultChromiumLaunch } = params;\n this.params = params;\n this.chromiumLaunch = chromiumLaunch;\n this.cleanupCallbacks = new Set();\n }\n\n // Method exported from the IExtensionRunner interface.\n\n /**\n * Returns the runner name.\n */\n getName() {\n return 'Chromium';\n }\n\n async run() {\n // Run should never be called more than once.\n this._promiseSetupDone = this.setupInstance();\n await this._promiseSetupDone;\n }\n\n static async isUserDataDir(dirPath) {\n const localStatePath = path.join(dirPath, 'Local State');\n const defaultPath = path.join(dirPath, 'Default');\n // Local State and Default are typical for the user-data-dir\n return (\n (await fileExists(localStatePath)) && (await isDirectory(defaultPath))\n );\n }\n\n static async isProfileDir(dirPath) {\n const securePreferencesPath = path.join(dirPath, 'Secure Preferences');\n //Secure Preferences is typical for a profile dir inside a user data dir\n return await fileExists(securePreferencesPath);\n }\n\n static async getProfilePaths(chromiumProfile) {\n if (!chromiumProfile) {\n return {\n userDataDir: null,\n profileDirName: null,\n };\n }\n\n const isProfileDirAndNotUserData =\n (await ChromiumExtensionRunner.isProfileDir(chromiumProfile)) &&\n !(await ChromiumExtensionRunner.isUserDataDir(chromiumProfile));\n\n if (isProfileDirAndNotUserData) {\n const { dir: userDataDir, base: profileDirName } =\n path.parse(chromiumProfile);\n return {\n userDataDir,\n profileDirName,\n };\n }\n\n return {\n userDataDir: chromiumProfile,\n profileDirName: null,\n };\n }\n\n /**\n * Setup the Chromium Profile and run a Chromium instance.\n */\n async setupInstance() {\n // Start a websocket server on a free localhost TCP port.\n this.wss = await new Promise((resolve) => {\n const server = new WebSocketServer(\n // Use a ipv4 host so we don't need to escape ipv6 address\n // https://github.com/mozilla/web-ext/issues/2331\n { port: 0, host: '127.0.0.1', clientTracking: true },\n // Wait the server to be listening (so that the extension\n // runner can successfully retrieve server address and port).\n () => resolve(server),\n );\n });\n\n // Prevent unhandled socket error (e.g. when chrome\n // is exiting, See https://github.com/websockets/ws/issues/1256).\n this.wss.on('connection', function (socket) {\n socket.on('error', (err) => {\n log.debug(`websocket connection error: ${err}`);\n });\n });\n\n // Create the extension that will manage the addon reloads\n this.reloadManagerExtension = await this.createReloadManagerExtension();\n\n // Start chrome pointing it to a given profile dir\n const extensions = [this.reloadManagerExtension]\n .concat(this.params.extensions.map(({ sourceDir }) => sourceDir))\n .join(',');\n\n const { chromiumBinary } = this.params;\n\n log.debug('Starting Chromium instance...');\n\n if (chromiumBinary) {\n log.debug(`(chromiumBinary: ${chromiumBinary})`);\n }\n\n const chromeFlags = [...DEFAULT_CHROME_FLAGS];\n\n chromeFlags.push(`--load-extension=${extensions}`);\n\n if (this.params.args) {\n chromeFlags.push(...this.params.args);\n }\n\n // eslint-disable-next-line prefer-const\n let { userDataDir, profileDirName } =\n await ChromiumExtensionRunner.getProfilePaths(\n this.params.chromiumProfile,\n );\n\n if (userDataDir && this.params.keepProfileChanges) {\n if (\n profileDirName &&\n !(await ChromiumExtensionRunner.isUserDataDir(userDataDir))\n ) {\n throw new Error(\n 'The profile you provided is not in a ' +\n 'user-data-dir. The changes cannot be kept. Please either ' +\n 'remove --keep-profile-changes or use a profile in a ' +\n 'user-data-dir directory',\n );\n }\n } else if (!this.params.keepProfileChanges) {\n // the user provided an existing profile directory but doesn't want\n // the changes to be kept. we copy this directory to a temporary\n // user data dir.\n const tmpDir = new TempDir();\n await tmpDir.create();\n const tmpDirPath = tmpDir.path();\n\n if (userDataDir && profileDirName) {\n // copy profile dir to this temp user data dir.\n await fs.copy(\n path.join(userDataDir, profileDirName),\n path.join(tmpDirPath, profileDirName),\n );\n } else if (userDataDir) {\n await fs.copy(userDataDir, tmpDirPath);\n }\n userDataDir = tmpDirPath;\n }\n\n if (profileDirName) {\n chromeFlags.push(`--profile-directory=${profileDirName}`);\n }\n\n let startingUrl;\n if (this.params.startUrl) {\n const startingUrls = Array.isArray(this.params.startUrl)\n ? this.params.startUrl\n : [this.params.startUrl];\n startingUrl = startingUrls.shift();\n chromeFlags.push(...startingUrls);\n }\n\n this.chromiumInstance = await this.chromiumLaunch({\n enableExtensions: true,\n chromePath: chromiumBinary,\n chromeFlags,\n startingUrl,\n userDataDir,\n // Ignore default flags to keep the extension enabled.\n ignoreDefaultFlags: true,\n });\n\n this.chromiumInstance.process.once('close', () => {\n this.chromiumInstance = null;\n\n if (!this.exiting) {\n log.info('Exiting on Chromium instance disconnected.');\n this.exit();\n }\n });\n }\n\n async wssBroadcast(data) {\n return new Promise((resolve) => {\n const clients = this.wss ? new Set(this.wss.clients) : new Set();\n\n function cleanWebExtReloadComplete() {\n const client = this;\n client.removeEventListener('message', webExtReloadComplete);\n client.removeEventListener('close', cleanWebExtReloadComplete);\n clients.delete(client);\n }\n\n const webExtReloadComplete = async (message) => {\n const msg = JSON.parse(message.data);\n\n if (msg.type === 'webExtReloadExtensionComplete') {\n for (const client of clients) {\n cleanWebExtReloadComplete.call(client);\n }\n resolve();\n }\n };\n\n for (const client of clients) {\n if (client.readyState === WebSocket.OPEN) {\n client.addEventListener('message', webExtReloadComplete);\n client.addEventListener('close', cleanWebExtReloadComplete);\n\n client.send(JSON.stringify(data));\n } else {\n clients.delete(client);\n }\n }\n\n if (clients.size === 0) {\n resolve();\n }\n });\n }\n\n async createReloadManagerExtension() {\n const tmpDir = new TempDir();\n await tmpDir.create();\n this.registerCleanup(() => tmpDir.remove());\n\n const extPath = path.join(\n tmpDir.path(),\n `reload-manager-extension-${Date.now()}`,\n );\n\n log.debug(`Creating reload-manager-extension in ${extPath}`);\n\n await asyncMkdirp(extPath);\n\n await fs.writeFile(\n path.join(extPath, 'manifest.json'),\n JSON.stringify({\n manifest_version: 2,\n name: 'web-ext Reload Manager Extension',\n version: '1.0',\n permissions: ['management', 'tabs'],\n background: {\n scripts: ['bg.js'],\n },\n }),\n );\n\n const wssInfo = this.wss.address();\n\n const bgPage = `(function bgPage() {\n async function getAllDevExtensions() {\n const allExtensions = await new Promise(\n r => chrome.management.getAll(r));\n\n return allExtensions.filter((extension) => {\n return extension.enabled &&\n extension.installType === \"development\" &&\n extension.id !== chrome.runtime.id;\n });\n }\n\n const setEnabled = (extensionId, value) =>\n chrome.runtime.id == extensionId ?\n new Promise.resolve() :\n new Promise(r => chrome.management.setEnabled(extensionId, value, r));\n\n async function reloadExtension(extensionId) {\n await setEnabled(extensionId, false);\n await setEnabled(extensionId, true);\n }\n\n const ws = new window.WebSocket(\n \"ws://${wssInfo.address}:${wssInfo.port}\");\n\n ws.onmessage = async (evt) => {\n const msg = JSON.parse(evt.data);\n if (msg.type === 'webExtReloadAllExtensions') {\n const devExtensions = await getAllDevExtensions();\n await Promise.all(devExtensions.map(ext => reloadExtension(ext.id)));\n ws.send(JSON.stringify({ type: 'webExtReloadExtensionComplete' }));\n }\n };\n })()`;\n\n await fs.writeFile(path.join(extPath, 'bg.js'), bgPage);\n return extPath;\n }\n\n /**\n * Reloads all the extensions, collect any reload error and resolves to\n * an array composed by a single ExtensionRunnerReloadResult object.\n */\n async reloadAllExtensions() {\n const runnerName = this.getName();\n\n await this.wssBroadcast({\n type: 'webExtReloadAllExtensions',\n });\n\n process.stdout.write(\n `\\rLast extension reload: ${new Date().toTimeString()}`,\n );\n log.debug('\\n');\n\n return [{ runnerName }];\n }\n\n /**\n * Reloads a single extension, collect any reload error and resolves to\n * an array composed by a single ExtensionRunnerReloadResult object.\n */\n async reloadExtensionBySourceDir(\n extensionSourceDir, // eslint-disable-line no-unused-vars\n ) {\n // TODO(rpl): detect the extension ids assigned to the\n // target extensions and map it to the extensions source dir\n // (https://github.com/mozilla/web-ext/issues/1687).\n return this.reloadAllExtensions();\n }\n\n /**\n * Register a callback to be called when the runner has been exited\n * (e.g. the Chromium instance exits or the user has requested web-ext\n * to exit).\n */\n registerCleanup(fn) {\n this.cleanupCallbacks.add(fn);\n }\n\n /**\n * Exits the runner, by closing the managed Chromium instance.\n */\n async exit() {\n this.exiting = true;\n\n // Wait for the setup to complete if the extension runner is already\n // being started.\n if (this._promiseSetupDone) {\n // Ignore initialization errors if any.\n await this._promiseSetupDone.catch((err) => {\n log.debug(`ignored setup error on chromium runner shutdown: ${err}`);\n });\n }\n\n if (this.chromiumInstance) {\n await this.chromiumInstance.kill();\n this.chromiumInstance = null;\n }\n\n if (this.wss) {\n // Close all websocket clients, closing the WebSocketServer\n // does not terminate the existing connection and it wouldn't\n // resolve until all of the existing connections are closed.\n for (const wssClient of this.wss?.clients || []) {\n if (wssClient.readyState === WebSocket.OPEN) {\n wssClient.terminate();\n }\n }\n await new Promise((resolve) =>\n this.wss ? this.wss.close(resolve) : resolve(),\n );\n this.wss = null;\n }\n\n // Call all the registered cleanup callbacks.\n for (const fn of this.cleanupCallbacks) {\n try {\n fn();\n } catch (error) {\n log.error(error);\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/util/artifacts.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fs } from 'mz';
|
|
2
|
-
import defaultAsyncMkdirp from 'mkdirp';
|
|
2
|
+
import { mkdirp as defaultAsyncMkdirp } from 'mkdirp';
|
|
3
3
|
import { UsageError, isErrorWithCode } from '../errors.js';
|
|
4
4
|
import { createLogger } from './logger.js';
|
|
5
5
|
const log = createLogger(import.meta.url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","names":["fs","defaultAsyncMkdirp","UsageError","isErrorWithCode","createLogger","log","import","meta","url","defaultAsyncFsAccess","access","bind","prepareArtifactsDir","artifactsDir","asyncMkdirp","asyncFsAccess","stats","stat","isDirectory","W_OK","accessErr","error","debug","mkdirErr"],"sources":["../../src/util/artifacts.js"],"sourcesContent":["import { fs } from 'mz';\nimport defaultAsyncMkdirp from 'mkdirp';\n\nimport { UsageError, isErrorWithCode } from '../errors.js';\nimport { createLogger } from './logger.js';\n\nconst log = createLogger(import.meta.url);\n\nconst defaultAsyncFsAccess = fs.access.bind(fs);\n\nexport async function prepareArtifactsDir(\n artifactsDir,\n {\n asyncMkdirp = defaultAsyncMkdirp,\n asyncFsAccess = defaultAsyncFsAccess,\n } = {},\n) {\n try {\n const stats = await fs.stat(artifactsDir);\n if (!stats.isDirectory()) {\n throw new UsageError(\n `--artifacts-dir=\"${artifactsDir}\" exists but it is not a directory.`,\n );\n }\n // If the artifactsDir already exists, check that we have the write permissions on it.\n try {\n await asyncFsAccess(artifactsDir, fs.W_OK);\n } catch (accessErr) {\n if (isErrorWithCode('EACCES', accessErr)) {\n throw new UsageError(\n `--artifacts-dir=\"${artifactsDir}\" exists but the user lacks ` +\n 'permissions on it.',\n );\n } else {\n throw accessErr;\n }\n }\n } catch (error) {\n if (isErrorWithCode('EACCES', error)) {\n // Handle errors when the artifactsDir cannot be accessed.\n throw new UsageError(\n `Cannot access --artifacts-dir=\"${artifactsDir}\" because the user ` +\n `lacks permissions: ${error}`,\n );\n } else if (isErrorWithCode('ENOENT', error)) {\n // Create the artifact dir if it doesn't exist yet.\n try {\n log.debug(`Creating artifacts directory: ${artifactsDir}`);\n await asyncMkdirp(artifactsDir);\n } catch (mkdirErr) {\n if (isErrorWithCode('EACCES', mkdirErr)) {\n // Handle errors when the artifactsDir cannot be created for lack of permissions.\n throw new UsageError(\n `Cannot create --artifacts-dir=\"${artifactsDir}\" because the ` +\n `user lacks permissions: ${mkdirErr}`,\n );\n } else {\n throw mkdirErr;\n }\n }\n } else {\n throw error;\n }\n }\n\n return artifactsDir;\n}\n"],"mappings":"AAAA,SAASA,EAAE,QAAQ,IAAI;AACvB,
|
|
1
|
+
{"version":3,"file":"artifacts.js","names":["fs","mkdirp","defaultAsyncMkdirp","UsageError","isErrorWithCode","createLogger","log","import","meta","url","defaultAsyncFsAccess","access","bind","prepareArtifactsDir","artifactsDir","asyncMkdirp","asyncFsAccess","stats","stat","isDirectory","W_OK","accessErr","error","debug","mkdirErr"],"sources":["../../src/util/artifacts.js"],"sourcesContent":["import { fs } from 'mz';\nimport { mkdirp as defaultAsyncMkdirp } from 'mkdirp';\n\nimport { UsageError, isErrorWithCode } from '../errors.js';\nimport { createLogger } from './logger.js';\n\nconst log = createLogger(import.meta.url);\n\nconst defaultAsyncFsAccess = fs.access.bind(fs);\n\nexport async function prepareArtifactsDir(\n artifactsDir,\n {\n asyncMkdirp = defaultAsyncMkdirp,\n asyncFsAccess = defaultAsyncFsAccess,\n } = {},\n) {\n try {\n const stats = await fs.stat(artifactsDir);\n if (!stats.isDirectory()) {\n throw new UsageError(\n `--artifacts-dir=\"${artifactsDir}\" exists but it is not a directory.`,\n );\n }\n // If the artifactsDir already exists, check that we have the write permissions on it.\n try {\n await asyncFsAccess(artifactsDir, fs.W_OK);\n } catch (accessErr) {\n if (isErrorWithCode('EACCES', accessErr)) {\n throw new UsageError(\n `--artifacts-dir=\"${artifactsDir}\" exists but the user lacks ` +\n 'permissions on it.',\n );\n } else {\n throw accessErr;\n }\n }\n } catch (error) {\n if (isErrorWithCode('EACCES', error)) {\n // Handle errors when the artifactsDir cannot be accessed.\n throw new UsageError(\n `Cannot access --artifacts-dir=\"${artifactsDir}\" because the user ` +\n `lacks permissions: ${error}`,\n );\n } else if (isErrorWithCode('ENOENT', error)) {\n // Create the artifact dir if it doesn't exist yet.\n try {\n log.debug(`Creating artifacts directory: ${artifactsDir}`);\n await asyncMkdirp(artifactsDir);\n } catch (mkdirErr) {\n if (isErrorWithCode('EACCES', mkdirErr)) {\n // Handle errors when the artifactsDir cannot be created for lack of permissions.\n throw new UsageError(\n `Cannot create --artifacts-dir=\"${artifactsDir}\" because the ` +\n `user lacks permissions: ${mkdirErr}`,\n );\n } else {\n throw mkdirErr;\n }\n }\n } else {\n throw error;\n }\n }\n\n return artifactsDir;\n}\n"],"mappings":"AAAA,SAASA,EAAE,QAAQ,IAAI;AACvB,SAASC,MAAM,IAAIC,kBAAkB,QAAQ,QAAQ;AAErD,SAASC,UAAU,EAAEC,eAAe,QAAQ,cAAc;AAC1D,SAASC,YAAY,QAAQ,aAAa;AAE1C,MAAMC,GAAG,GAAGD,YAAY,CAACE,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC;AAEzC,MAAMC,oBAAoB,GAAGV,EAAE,CAACW,MAAM,CAACC,IAAI,CAACZ,EAAE,CAAC;AAE/C,OAAO,eAAea,mBAAmBA,CACvCC,YAAY,EACZ;EACEC,WAAW,GAAGb,kBAAkB;EAChCc,aAAa,GAAGN;AAClB,CAAC,GAAG,CAAC,CAAC,EACN;EACA,IAAI;IACF,MAAMO,KAAK,GAAG,MAAMjB,EAAE,CAACkB,IAAI,CAACJ,YAAY,CAAC;IACzC,IAAI,CAACG,KAAK,CAACE,WAAW,CAAC,CAAC,EAAE;MACxB,MAAM,IAAIhB,UAAU,CAClB,oBAAoBW,YAAY,qCAClC,CAAC;IACH;IACA;IACA,IAAI;MACF,MAAME,aAAa,CAACF,YAAY,EAAEd,EAAE,CAACoB,IAAI,CAAC;IAC5C,CAAC,CAAC,OAAOC,SAAS,EAAE;MAClB,IAAIjB,eAAe,CAAC,QAAQ,EAAEiB,SAAS,CAAC,EAAE;QACxC,MAAM,IAAIlB,UAAU,CAClB,oBAAoBW,YAAY,8BAA8B,GAC5D,oBACJ,CAAC;MACH,CAAC,MAAM;QACL,MAAMO,SAAS;MACjB;IACF;EACF,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd,IAAIlB,eAAe,CAAC,QAAQ,EAAEkB,KAAK,CAAC,EAAE;MACpC;MACA,MAAM,IAAInB,UAAU,CAClB,kCAAkCW,YAAY,qBAAqB,GACjE,sBAAsBQ,KAAK,EAC/B,CAAC;IACH,CAAC,MAAM,IAAIlB,eAAe,CAAC,QAAQ,EAAEkB,KAAK,CAAC,EAAE;MAC3C;MACA,IAAI;QACFhB,GAAG,CAACiB,KAAK,CAAC,iCAAiCT,YAAY,EAAE,CAAC;QAC1D,MAAMC,WAAW,CAACD,YAAY,CAAC;MACjC,CAAC,CAAC,OAAOU,QAAQ,EAAE;QACjB,IAAIpB,eAAe,CAAC,QAAQ,EAAEoB,QAAQ,CAAC,EAAE;UACvC;UACA,MAAM,IAAIrB,UAAU,CAClB,kCAAkCW,YAAY,gBAAgB,GAC5D,2BAA2BU,QAAQ,EACvC,CAAC;QACH,CAAC,MAAM;UACL,MAAMA,QAAQ;QAChB;MACF;IACF,CAAC,MAAM;MACL,MAAMF,KAAK;IACb;EACF;EAEA,OAAOR,YAAY;AACrB","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "web-ext",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.2.0",
|
|
4
4
|
"description": "A command line tool to help build, run, and test web extensions",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"@babel/runtime": "7.24.7",
|
|
62
62
|
"@devicefarmer/adbkit": "3.2.6",
|
|
63
|
-
"addons-linter": "6.
|
|
63
|
+
"addons-linter": "6.31.1",
|
|
64
64
|
"bunyan": "1.8.15",
|
|
65
65
|
"camelcase": "8.0.0",
|
|
66
66
|
"chrome-launcher": "0.15.1",
|
|
@@ -71,9 +71,9 @@
|
|
|
71
71
|
"fs-extra": "11.2.0",
|
|
72
72
|
"fx-runner": "1.4.0",
|
|
73
73
|
"https-proxy-agent": "^7.0.0",
|
|
74
|
-
"jose": "5.4.
|
|
74
|
+
"jose": "5.4.1",
|
|
75
75
|
"jszip": "3.10.1",
|
|
76
|
-
"mkdirp": "
|
|
76
|
+
"mkdirp": "3.0.1",
|
|
77
77
|
"multimatch": "6.0.0",
|
|
78
78
|
"mz": "2.7.0",
|
|
79
79
|
"node-fetch": "3.3.2",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"tmp": "0.2.3",
|
|
88
88
|
"update-notifier": "6.0.2",
|
|
89
89
|
"watchpack": "2.4.1",
|
|
90
|
-
"ws": "8.17.
|
|
90
|
+
"ws": "8.17.1",
|
|
91
91
|
"yargs": "17.7.2",
|
|
92
92
|
"zip-dir": "2.0.0"
|
|
93
93
|
},
|