extension 4.1.26 → 4.1.27
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/browsers.cjs +135 -23
- package/dist/cli.cjs +135 -23
- package/dist/extension/browsers/browsers-lib/messages.d.ts +3 -1
- package/dist/extension/browsers/run-firefox/firefox-launch/child-output.d.ts +11 -0
- package/dist/extension/browsers/run-firefox/firefox-launch/librewolf-overrides.d.ts +11 -0
- package/dist/extension/browsers/run-firefox/rdp/remote-firefox/firefox-utils.d.ts +2 -1
- package/dist/extension/helpers/messaging.d.ts +1 -0
- package/package.json +4 -4
package/dist/browsers.cjs
CHANGED
|
@@ -442,7 +442,8 @@ var __webpack_modules__ = {
|
|
|
442
442
|
var pintor__rspack_import_8 = __webpack_require__("pintor");
|
|
443
443
|
var pintor__rspack_import_8_default = /*#__PURE__*/ __webpack_require__.n(pintor__rspack_import_8);
|
|
444
444
|
var _helpers_messaging__rspack_import_9 = __webpack_require__("./helpers/messaging.ts");
|
|
445
|
-
var
|
|
445
|
+
var _run_firefox_firefox_launch_librewolf_overrides__rspack_import_10 = __webpack_require__("./browsers/run-firefox/firefox-launch/librewolf-overrides.ts");
|
|
446
|
+
var _browser_family__rspack_import_11 = __webpack_require__("./browsers/browsers-lib/browser-family.ts");
|
|
446
447
|
const require1 = (0, node_module__rspack_import_1.createRequire)(__rslib_import_meta_url__);
|
|
447
448
|
function getLoggingPrefix(type) {
|
|
448
449
|
return (0, _helpers_messaging__rspack_import_9.Pl)(type);
|
|
@@ -518,7 +519,7 @@ var __webpack_modules__ = {
|
|
|
518
519
|
return browser;
|
|
519
520
|
}
|
|
520
521
|
function capitalizedBrowserName(browser) {
|
|
521
|
-
return
|
|
522
|
+
return (0, _helpers_messaging__rspack_import_9.QZ)(String(browser));
|
|
522
523
|
}
|
|
523
524
|
function resolveBrowserVersionLine(browser, pinnedLine, opts) {
|
|
524
525
|
const pinned = String(pinnedLine || '').trim();
|
|
@@ -567,6 +568,10 @@ var __webpack_modules__ = {
|
|
|
567
568
|
})();
|
|
568
569
|
return `${getLoggingPrefix('error')} ${isUnreachable}${pintor__rspack_import_8_default().gray('NOT FOUND')} ${pintor__rspack_import_8_default().underline(browserBinaryLocation || `${capitalizedBrowserName(browser)}BROWSER`)}\nInstall the missing browser, or choose another one with ${pintor__rspack_import_8_default().blue('--browser')} ${pintor__rspack_import_8_default().gray('<chrome|edge|firefox>')}.` + wslHint;
|
|
569
570
|
}
|
|
571
|
+
function geckoForkNotInstalled(browser, guidance) {
|
|
572
|
+
const steps = String(guidance || '').split('\n').map((line)=>line.trimEnd()).filter((line)=>line && !/^We couldn't find/i.test(line)).filter((line)=>!/^Re-run your command/i.test(line)).join('\n');
|
|
573
|
+
return `${getLoggingPrefix('error')} ${capitalizedBrowserName(browser)} isn't installed.\n${steps}\nOr point at a binary with ${pintor__rspack_import_8_default().blue('--gecko-binary')} ${pintor__rspack_import_8_default().gray('<path>')}, or choose another browser with ${pintor__rspack_import_8_default().blue('--browser')} ${pintor__rspack_import_8_default().gray('<firefox|waterfox|librewolf|zen|floorp>')}.`;
|
|
574
|
+
}
|
|
570
575
|
function usingManagedChromiumFamilyFallback(requestedBrowser, _fallbackBrowser, _binaryPath) {
|
|
571
576
|
return `${getLoggingPrefix('warn')} ${managedBrowserDisplayName(requestedBrowser)} isn't installed.\nRun ${pintor__rspack_import_8_default().blue(`npx extension install ${requestedBrowser}`)} to use ${managedBrowserDisplayName(requestedBrowser)} itself.`;
|
|
572
577
|
}
|
|
@@ -707,8 +712,11 @@ var __webpack_modules__ = {
|
|
|
707
712
|
body.push("Run your command again after the install finishes.");
|
|
708
713
|
return `${body.join('\n')}\n`;
|
|
709
714
|
}
|
|
710
|
-
function firefoxLaunchCalled() {
|
|
711
|
-
return `${getLoggingPrefix('debug')} browser launch browser
|
|
715
|
+
function firefoxLaunchCalled(browser = 'firefox') {
|
|
716
|
+
return `${getLoggingPrefix('debug')} browser launch browser=${browser}`;
|
|
717
|
+
}
|
|
718
|
+
function librewolfRemoteDebuggingLocked(overridesPath) {
|
|
719
|
+
return `${getLoggingPrefix('error')} LibreWolf keeps remote debugging off, so Extension.js can't reach it.\nLibreWolf resets ${pintor__rspack_import_8_default().gray('devtools.debugger.remote-enabled')} to false at every start. Add these two lines to ${pintor__rspack_import_8_default().underline(overridesPath)} and run the command again:\n` + _run_firefox_firefox_launch_librewolf_overrides__rspack_import_10.Tu.map((line)=>` ${pintor__rspack_import_8_default().blue(line)}\n`).join('') + `Or choose another browser with ${pintor__rspack_import_8_default().blue('--browser')} ${pintor__rspack_import_8_default().gray('<firefox|waterfox|zen|floorp>')}.`;
|
|
712
720
|
}
|
|
713
721
|
function firefoxFailedToStart(error) {
|
|
714
722
|
return `${getLoggingPrefix('error')} Firefox failed to start.\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
|
|
@@ -857,7 +865,7 @@ var __webpack_modules__ = {
|
|
|
857
865
|
}
|
|
858
866
|
function pinnedBinaryFlag(browser) {
|
|
859
867
|
const name = String(browser || '');
|
|
860
|
-
if ((0,
|
|
868
|
+
if ((0, _browser_family__rspack_import_11.M_)(name)) return '--gecko-binary';
|
|
861
869
|
if ('safari' === name || 'webkit-based' === name) return '--safari-binary';
|
|
862
870
|
return '--chromium-binary';
|
|
863
871
|
}
|
|
@@ -873,11 +881,8 @@ var __webpack_modules__ = {
|
|
|
873
881
|
case 'edge':
|
|
874
882
|
browserDevToolsUrl = 'edge://extensions';
|
|
875
883
|
break;
|
|
876
|
-
case 'firefox':
|
|
877
|
-
browserDevToolsUrl = 'about:debugging#/runtime/this-firefox';
|
|
878
|
-
break;
|
|
879
884
|
default:
|
|
880
|
-
browserDevToolsUrl = '';
|
|
885
|
+
browserDevToolsUrl = (0, _browser_family__rspack_import_11.M_)(browser) ? 'about:debugging#/runtime/this-firefox' : '';
|
|
881
886
|
}
|
|
882
887
|
if (!message.data) return `${getLoggingPrefix('error')} No client data received for ${manifestName}.\n\n${pintor__rspack_import_8_default().red("Extension.js can't read data from your extension.")}\n${pintor__rspack_import_8_default().red('To fix, ensure that:')}\n\n- Your extension is enabled in ${pintor__rspack_import_8_default().underline(browserDevToolsUrl)}\n- No previous ${capitalize(browser)} browser instance is open\n\nIf both hold, restart the ${pintor__rspack_import_8_default().yellow(manifest.name || '')} and the\n${pintor__rspack_import_8_default().yellow('Manager Extension')} in ${pintor__rspack_import_8_default().underline(browserDevToolsUrl)} and try again.\nIf the issue persists, report a bug:\n` + pintor__rspack_import_8_default().underline("https://github.com/extension-js/extension.js/issues");
|
|
883
888
|
const { id = '', management } = message.data;
|
|
@@ -1046,6 +1051,7 @@ var __webpack_modules__ = {
|
|
|
1046
1051
|
_D: ()=>browserLaunchError,
|
|
1047
1052
|
aI: ()=>devChromeProfilePath,
|
|
1048
1053
|
aO: ()=>safariOpenHint,
|
|
1054
|
+
bC: ()=>librewolfRemoteDebuggingLocked,
|
|
1049
1055
|
bv: ()=>cdpUnifiedExtensionLog,
|
|
1050
1056
|
cD: ()=>targetActorHasActiveRequestError,
|
|
1051
1057
|
cF: ()=>safariRebuilt,
|
|
@@ -1083,6 +1089,7 @@ var __webpack_modules__ = {
|
|
|
1083
1089
|
sP: ()=>mv2NotSupportedByChromium,
|
|
1084
1090
|
sY: ()=>creatingUserProfile,
|
|
1085
1091
|
uK: ()=>safariConverting,
|
|
1092
|
+
v5: ()=>geckoForkNotInstalled,
|
|
1086
1093
|
wk: ()=>chromeFailedToSpawn,
|
|
1087
1094
|
xX: ()=>binaryProvenanceNote,
|
|
1088
1095
|
xy: ()=>chromeInitializingEnhancedReload,
|
|
@@ -3754,10 +3761,11 @@ var __webpack_modules__ = {
|
|
|
3754
3761
|
stderrStream.on('error', ()=>{});
|
|
3755
3762
|
}
|
|
3756
3763
|
let disposeSignalHandlers;
|
|
3757
|
-
child.on('close', (code)=>{
|
|
3764
|
+
child.on('close', (code, signal)=>{
|
|
3758
3765
|
if ((0, messaging._o)()) this.logger.info(messages.nn(code || 0));
|
|
3766
|
+
const how = null == code ? `signal ${signal || 'unknown'}` : `code ${code}`;
|
|
3759
3767
|
if (!(0, process_teardown.Op)(child)) {
|
|
3760
|
-
this.logger.error(this.closeHandlerContext?.isDevMode ? `[browser] ${this.options.browser} exited mid-session (
|
|
3768
|
+
this.logger.error(this.closeHandlerContext?.isDevMode ? `[browser] ${this.options.browser} exited mid-session (${how}). The dev server is still running but reloads cannot be delivered, restart "extension dev" to relaunch the browser.` : `[browser] ${this.options.browser} exited (${how}); the preview session is over.`);
|
|
3761
3769
|
(0, ready_stamp.Wi)(this.closeHandlerContext?.extensionOutputPath, code);
|
|
3762
3770
|
}
|
|
3763
3771
|
disposeSignalHandlers?.();
|
|
@@ -4378,12 +4386,30 @@ var __webpack_modules__ = {
|
|
|
4378
4386
|
extensionsToLoad
|
|
4379
4387
|
};
|
|
4380
4388
|
}
|
|
4389
|
+
function attachChildOutput(child, opts) {
|
|
4390
|
+
const sinks = opts.sinks || {
|
|
4391
|
+
stdout: process.stdout,
|
|
4392
|
+
stderr: process.stderr
|
|
4393
|
+
};
|
|
4394
|
+
for (const [stream, sink] of [
|
|
4395
|
+
[
|
|
4396
|
+
child.stdout,
|
|
4397
|
+
sinks.stdout
|
|
4398
|
+
],
|
|
4399
|
+
[
|
|
4400
|
+
child.stderr,
|
|
4401
|
+
sinks.stderr
|
|
4402
|
+
]
|
|
4403
|
+
])if (stream) if (opts.debug) stream.pipe(sink);
|
|
4404
|
+
else stream.resume();
|
|
4405
|
+
}
|
|
4381
4406
|
function logFirefoxDryRun(browserBinaryLocation, launchArgs) {
|
|
4382
4407
|
if ((0, messaging._o)()) (0, messaging._w)(messages.A9());
|
|
4383
4408
|
(0, messaging._w)(messages.qn());
|
|
4384
4409
|
(0, messaging._w)(messages.LD(browserBinaryLocation));
|
|
4385
4410
|
(0, messaging._w)(messages.lO(launchArgs.join(' ')));
|
|
4386
4411
|
}
|
|
4412
|
+
var librewolf_overrides = __webpack_require__("./browsers/run-firefox/firefox-launch/librewolf-overrides.ts");
|
|
4387
4413
|
const activeInstances = new Set();
|
|
4388
4414
|
let globalHandlersInstalled = false;
|
|
4389
4415
|
async function attemptCleanup(instance) {
|
|
@@ -5390,7 +5416,7 @@ var __webpack_modules__ = {
|
|
|
5390
5416
|
}
|
|
5391
5417
|
} catch {}
|
|
5392
5418
|
this.lastInstalledAddonPath = primaryAddonPath;
|
|
5393
|
-
const bannerPrinted = await printRunningInDevelopmentSummary(candidateAddonPaths,
|
|
5419
|
+
const bannerPrinted = await printRunningInDevelopmentSummary(candidateAddonPaths, this.options.browser, this.derivedExtensionId, this.options.browserVersionLine, {
|
|
5394
5420
|
profilePath: this.options.launchProfilePath,
|
|
5395
5421
|
binaryPath: this.options.launchBinaryPath,
|
|
5396
5422
|
binaryProvenance: this.options.launchBinaryProvenance
|
|
@@ -5642,12 +5668,13 @@ var __webpack_modules__ = {
|
|
|
5642
5668
|
async launch(compilation, options) {
|
|
5643
5669
|
const compilationErrors = compilation?.errors || [];
|
|
5644
5670
|
if (compilationErrors.length > 0) return void this.ctx.logger?.info?.(messages.y7());
|
|
5645
|
-
if ((0, messaging._o)()) this.ctx.logger?.info?.(messages.A9());
|
|
5671
|
+
if ((0, messaging._o)()) this.ctx.logger?.info?.(messages.A9(this.host.browser));
|
|
5646
5672
|
const normalizePath = (value)=>{
|
|
5647
5673
|
const normalized = value ? (0, wsl_support.f7)(value) : null;
|
|
5648
5674
|
return normalized && external_node_fs_.existsSync(normalized) ? normalized : null;
|
|
5649
5675
|
};
|
|
5650
|
-
const
|
|
5676
|
+
const isNamedGeckoFork = 'waterfox' === this.host.browser || 'librewolf' === this.host.browser || 'zen' === this.host.browser || 'floorp' === this.host.browser;
|
|
5677
|
+
const resolveManagedBinary = ()=>isNamedGeckoFork ? null : normalizePath((0, output_binaries_resolver.kI)(compilation, 'firefox') || null);
|
|
5651
5678
|
const resolveWslFallback = ()=>resolveWslWindowsBinary();
|
|
5652
5679
|
const getInstallGuidanceText = ()=>{
|
|
5653
5680
|
try {
|
|
@@ -5677,6 +5704,14 @@ var __webpack_modules__ = {
|
|
|
5677
5704
|
const dryRun = Boolean(this.host.dryRun);
|
|
5678
5705
|
if (inTestRunner && !dryRun) return void logFirefoxDryRun('firefox-mock-binary', []);
|
|
5679
5706
|
if (inTestRunner && dryRun) return void await this.printDryRunPlan(compilation, options, this.host.geckoBinary ? (0, wsl_support.f7)(String(this.host.geckoBinary)) : 'firefox-mock-binary');
|
|
5707
|
+
if ('librewolf' === this.host.browser) {
|
|
5708
|
+
const remoteDebugging = (0, librewolf_overrides.u5)(external_node_fs_, process.env, process.platform);
|
|
5709
|
+
if (!remoteDebugging.enabled) {
|
|
5710
|
+
(0, messaging.Gg)(messages.bC(remoteDebugging.expectedPath));
|
|
5711
|
+
if (inTestRunner) throw new Error('LibreWolf remote debugging is disabled');
|
|
5712
|
+
process.exit(1);
|
|
5713
|
+
}
|
|
5714
|
+
}
|
|
5680
5715
|
let browserBinaryLocation = resolveManagedBinary();
|
|
5681
5716
|
let skipDetection = Boolean(browserBinaryLocation);
|
|
5682
5717
|
const engineBased = 'gecko-based' === this.host.browser || 'firefox-based' === this.host.browser;
|
|
@@ -5898,9 +5933,9 @@ var __webpack_modules__ = {
|
|
|
5898
5933
|
});
|
|
5899
5934
|
}
|
|
5900
5935
|
pipeChildOutput(child) {
|
|
5901
|
-
|
|
5902
|
-
|
|
5903
|
-
|
|
5936
|
+
attachChildOutput(child, {
|
|
5937
|
+
debug: (0, messaging._o)()
|
|
5938
|
+
});
|
|
5904
5939
|
}
|
|
5905
5940
|
wireChildLifecycle() {
|
|
5906
5941
|
const child = this.child;
|
|
@@ -5910,15 +5945,15 @@ var __webpack_modules__ = {
|
|
|
5910
5945
|
if (process.env.VITEST || process.env.VITEST_WORKER_ID) throw new Error('Firefox startup timed out');
|
|
5911
5946
|
process.exit(1);
|
|
5912
5947
|
});
|
|
5913
|
-
child.on('close', (code)=>{
|
|
5948
|
+
child.on('close', (code, signal)=>{
|
|
5914
5949
|
const expected = (0, process_teardown.Op)(child);
|
|
5915
5950
|
if (!expected && this.adoptHandedOffBrowser()) return;
|
|
5916
|
-
this.onBrowserGone(code, expected);
|
|
5951
|
+
this.onBrowserGone(code, expected, signal);
|
|
5917
5952
|
});
|
|
5918
5953
|
this.pipeChildOutput(child);
|
|
5919
5954
|
this.disposeProcessHandlers = setupFirefoxProcessHandlers(this.host.browser, ()=>this.child, ()=>this.cleanupInstance(), ()=>this.livePid);
|
|
5920
5955
|
}
|
|
5921
|
-
onBrowserGone(code, expected) {
|
|
5956
|
+
onBrowserGone(code, expected, signal) {
|
|
5922
5957
|
if (this.browserGone) return;
|
|
5923
5958
|
this.browserGone = true;
|
|
5924
5959
|
if (this.watchTimeout) {
|
|
@@ -5932,7 +5967,7 @@ var __webpack_modules__ = {
|
|
|
5932
5967
|
if (this.host.launchProfilePath) (0, shared_utils.sW)(this.host.launchProfilePath);
|
|
5933
5968
|
if ((0, messaging._o)()) this.ctx.logger?.info?.(messages.Th(this.host.browser));
|
|
5934
5969
|
if (!expected) {
|
|
5935
|
-
this.ctx.logger?.error?.(`[browser] ${this.host.browser} exited (code ${
|
|
5970
|
+
this.ctx.logger?.error?.(`[browser] ${this.host.browser} exited (${null == code ? `signal ${signal || 'unknown'}` : `code ${code}`}) without being asked to. The add-on may have been rejected or the browser crashed; the session cannot be driven.`);
|
|
5936
5971
|
(0, ready_stamp.Wi)(this.extensionOutputPath, code);
|
|
5937
5972
|
}
|
|
5938
5973
|
this.cleanupInstance().catch((err)=>{
|
|
@@ -6048,6 +6083,8 @@ var __webpack_modules__ = {
|
|
|
6048
6083
|
if ('function' == typeof this.watchTimeout.unref) this.watchTimeout.unref();
|
|
6049
6084
|
}
|
|
6050
6085
|
printInstallHint(compilation, raw) {
|
|
6086
|
+
const forkGuidance = geckoForkInstallGuidance(this.host.browser);
|
|
6087
|
+
if (null !== forkGuidance) return void (0, messaging.Gg)(messages.v5(this.host.browser, forkGuidance));
|
|
6051
6088
|
try {
|
|
6052
6089
|
const displayCacheDir = (0, output_binaries_resolver.LB)(compilation);
|
|
6053
6090
|
const pretty = messages.MG(this.host.browser || 'firefox', raw, displayCacheDir);
|
|
@@ -6070,6 +6107,69 @@ var __webpack_modules__ = {
|
|
|
6070
6107
|
this.ctx = ctx;
|
|
6071
6108
|
}
|
|
6072
6109
|
}
|
|
6110
|
+
function geckoForkInstallGuidance(browser) {
|
|
6111
|
+
const read = (fn)=>{
|
|
6112
|
+
try {
|
|
6113
|
+
return fn();
|
|
6114
|
+
} catch {
|
|
6115
|
+
return '';
|
|
6116
|
+
}
|
|
6117
|
+
};
|
|
6118
|
+
switch(browser){
|
|
6119
|
+
case 'waterfox':
|
|
6120
|
+
return read(()=>(0, external_waterfox_location_namespaceObject.getInstallGuidance)());
|
|
6121
|
+
case 'librewolf':
|
|
6122
|
+
return read(()=>(0, external_librewolf_location_namespaceObject.getInstallGuidance)());
|
|
6123
|
+
case 'zen':
|
|
6124
|
+
return read(()=>(0, external_zen_location_namespaceObject.getInstallGuidance)());
|
|
6125
|
+
case 'floorp':
|
|
6126
|
+
return read(()=>(0, external_floorp_location_namespaceObject.getInstallGuidance)());
|
|
6127
|
+
default:
|
|
6128
|
+
return null;
|
|
6129
|
+
}
|
|
6130
|
+
}
|
|
6131
|
+
},
|
|
6132
|
+
"./browsers/run-firefox/firefox-launch/librewolf-overrides.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
6133
|
+
var node_path__rspack_import_0 = __webpack_require__("node:path");
|
|
6134
|
+
const LIBREWOLF_REMOTE_DEBUGGING_LINES = [
|
|
6135
|
+
'pref("devtools.debugger.remote-enabled", true);',
|
|
6136
|
+
'pref("devtools.debugger.prompt-connection", false);'
|
|
6137
|
+
];
|
|
6138
|
+
const OVERRIDES_FILE = 'librewolf.overrides.cfg';
|
|
6139
|
+
function librewolfOverridesCandidates(env, platform) {
|
|
6140
|
+
const home = String(env.HOME || env.USERPROFILE || '').trim();
|
|
6141
|
+
const candidates = [];
|
|
6142
|
+
if ('win32' === platform) {
|
|
6143
|
+
if (home) candidates.push(node_path__rspack_import_0.join(home, '.librewolf', OVERRIDES_FILE));
|
|
6144
|
+
return candidates;
|
|
6145
|
+
}
|
|
6146
|
+
if (home) candidates.push(node_path__rspack_import_0.join(home, '.librewolf', OVERRIDES_FILE));
|
|
6147
|
+
const xdg = String(env.XDG_CONFIG_HOME || '').trim();
|
|
6148
|
+
if (xdg) candidates.push(node_path__rspack_import_0.join(xdg, 'librewolf', 'librewolf', OVERRIDES_FILE));
|
|
6149
|
+
if (home) candidates.push(node_path__rspack_import_0.join(home, '.config', 'librewolf', 'librewolf', OVERRIDES_FILE));
|
|
6150
|
+
return candidates;
|
|
6151
|
+
}
|
|
6152
|
+
function librewolfRemoteDebuggingEnabled(fsLike, env, platform) {
|
|
6153
|
+
const candidates = librewolfOverridesCandidates(env, platform);
|
|
6154
|
+
const expectedPath = candidates[0] || node_path__rspack_import_0.join('~', '.librewolf', OVERRIDES_FILE);
|
|
6155
|
+
const enabledLine = /^\s*(?:pref|defaultPref|lockPref)\(\s*"devtools\.debugger\.remote-enabled"\s*,\s*true\s*\)/m;
|
|
6156
|
+
for (const candidate of candidates)try {
|
|
6157
|
+
if (!fsLike.existsSync(candidate)) continue;
|
|
6158
|
+
if (enabledLine.test(fsLike.readFileSync(candidate, 'utf-8'))) return {
|
|
6159
|
+
enabled: true,
|
|
6160
|
+
expectedPath: candidate
|
|
6161
|
+
};
|
|
6162
|
+
} catch {}
|
|
6163
|
+
return {
|
|
6164
|
+
enabled: false,
|
|
6165
|
+
expectedPath
|
|
6166
|
+
};
|
|
6167
|
+
}
|
|
6168
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
6169
|
+
u5: ()=>librewolfRemoteDebuggingEnabled
|
|
6170
|
+
}, {
|
|
6171
|
+
Tu: LIBREWOLF_REMOTE_DEBUGGING_LINES
|
|
6172
|
+
});
|
|
6073
6173
|
},
|
|
6074
6174
|
"./browsers/run-only.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
6075
6175
|
var node_fs__rspack_import_0 = __webpack_require__("node:fs");
|
|
@@ -6913,9 +7013,20 @@ var __webpack_modules__ = {
|
|
|
6913
7013
|
...body
|
|
6914
7014
|
].join('\n');
|
|
6915
7015
|
}
|
|
6916
|
-
|
|
7016
|
+
const BRAND_SPELLINGS = {
|
|
7017
|
+
librewolf: 'LibreWolf',
|
|
7018
|
+
chromium: 'Chromium',
|
|
7019
|
+
'chromium-based': 'Chromium-based',
|
|
7020
|
+
'gecko-based': 'Gecko-based',
|
|
7021
|
+
'firefox-based': 'Firefox-based',
|
|
7022
|
+
'webkit-based': 'WebKit-based'
|
|
7023
|
+
};
|
|
7024
|
+
function browserDisplayName(browser) {
|
|
6917
7025
|
const name = String(browser || '').trim() || 'unknown';
|
|
6918
|
-
|
|
7026
|
+
return BRAND_SPELLINGS[name] || name.charAt(0).toUpperCase() + name.slice(1);
|
|
7027
|
+
}
|
|
7028
|
+
function browserRowValue(browser, versionLine) {
|
|
7029
|
+
const display = browserDisplayName(browser);
|
|
6919
7030
|
const line = String(versionLine || '').trim();
|
|
6920
7031
|
if (!line) return display;
|
|
6921
7032
|
if (!/[a-zA-Z]/.test(line)) return `${display} ${line}`;
|
|
@@ -6954,6 +7065,7 @@ var __webpack_modules__ = {
|
|
|
6954
7065
|
Gg: ()=>humanError,
|
|
6955
7066
|
Nr: ()=>card,
|
|
6956
7067
|
Pl: ()=>prefix,
|
|
7068
|
+
QZ: ()=>browserDisplayName,
|
|
6957
7069
|
T_: ()=>artifactNoun,
|
|
6958
7070
|
VR: ()=>isCardKeyClaimed,
|
|
6959
7071
|
_o: ()=>isDebug,
|
package/dist/cli.cjs
CHANGED
|
@@ -443,7 +443,8 @@ var __webpack_modules__ = {
|
|
|
443
443
|
var pintor__rspack_import_8 = __webpack_require__("pintor");
|
|
444
444
|
var pintor__rspack_import_8_default = /*#__PURE__*/ __webpack_require__.n(pintor__rspack_import_8);
|
|
445
445
|
var _helpers_messaging__rspack_import_9 = __webpack_require__("./helpers/messaging.ts");
|
|
446
|
-
var
|
|
446
|
+
var _run_firefox_firefox_launch_librewolf_overrides__rspack_import_10 = __webpack_require__("./browsers/run-firefox/firefox-launch/librewolf-overrides.ts");
|
|
447
|
+
var _browser_family__rspack_import_11 = __webpack_require__("./browsers/browsers-lib/browser-family.ts");
|
|
447
448
|
const require1 = (0, node_module__rspack_import_1.createRequire)(__rslib_import_meta_url__);
|
|
448
449
|
function getLoggingPrefix(type) {
|
|
449
450
|
return (0, _helpers_messaging__rspack_import_9.Pl)(type);
|
|
@@ -519,7 +520,7 @@ var __webpack_modules__ = {
|
|
|
519
520
|
return browser;
|
|
520
521
|
}
|
|
521
522
|
function capitalizedBrowserName(browser) {
|
|
522
|
-
return
|
|
523
|
+
return (0, _helpers_messaging__rspack_import_9.QZ)(String(browser));
|
|
523
524
|
}
|
|
524
525
|
function resolveBrowserVersionLine(browser, pinnedLine, opts) {
|
|
525
526
|
const pinned = String(pinnedLine || '').trim();
|
|
@@ -568,6 +569,10 @@ var __webpack_modules__ = {
|
|
|
568
569
|
})();
|
|
569
570
|
return `${getLoggingPrefix('error')} ${isUnreachable}${pintor__rspack_import_8_default().gray('NOT FOUND')} ${pintor__rspack_import_8_default().underline(browserBinaryLocation || `${capitalizedBrowserName(browser)}BROWSER`)}\nInstall the missing browser, or choose another one with ${pintor__rspack_import_8_default().blue('--browser')} ${pintor__rspack_import_8_default().gray('<chrome|edge|firefox>')}.` + wslHint;
|
|
570
571
|
}
|
|
572
|
+
function geckoForkNotInstalled(browser, guidance) {
|
|
573
|
+
const steps = String(guidance || '').split('\n').map((line)=>line.trimEnd()).filter((line)=>line && !/^We couldn't find/i.test(line)).filter((line)=>!/^Re-run your command/i.test(line)).join('\n');
|
|
574
|
+
return `${getLoggingPrefix('error')} ${capitalizedBrowserName(browser)} isn't installed.\n${steps}\nOr point at a binary with ${pintor__rspack_import_8_default().blue('--gecko-binary')} ${pintor__rspack_import_8_default().gray('<path>')}, or choose another browser with ${pintor__rspack_import_8_default().blue('--browser')} ${pintor__rspack_import_8_default().gray('<firefox|waterfox|librewolf|zen|floorp>')}.`;
|
|
575
|
+
}
|
|
571
576
|
function usingManagedChromiumFamilyFallback(requestedBrowser, _fallbackBrowser, _binaryPath) {
|
|
572
577
|
return `${getLoggingPrefix('warn')} ${managedBrowserDisplayName(requestedBrowser)} isn't installed.\nRun ${pintor__rspack_import_8_default().blue(`npx extension install ${requestedBrowser}`)} to use ${managedBrowserDisplayName(requestedBrowser)} itself.`;
|
|
573
578
|
}
|
|
@@ -708,8 +713,11 @@ var __webpack_modules__ = {
|
|
|
708
713
|
body.push("Run your command again after the install finishes.");
|
|
709
714
|
return `${body.join('\n')}\n`;
|
|
710
715
|
}
|
|
711
|
-
function firefoxLaunchCalled() {
|
|
712
|
-
return `${getLoggingPrefix('debug')} browser launch browser
|
|
716
|
+
function firefoxLaunchCalled(browser = 'firefox') {
|
|
717
|
+
return `${getLoggingPrefix('debug')} browser launch browser=${browser}`;
|
|
718
|
+
}
|
|
719
|
+
function librewolfRemoteDebuggingLocked(overridesPath) {
|
|
720
|
+
return `${getLoggingPrefix('error')} LibreWolf keeps remote debugging off, so Extension.js can't reach it.\nLibreWolf resets ${pintor__rspack_import_8_default().gray('devtools.debugger.remote-enabled')} to false at every start. Add these two lines to ${pintor__rspack_import_8_default().underline(overridesPath)} and run the command again:\n` + _run_firefox_firefox_launch_librewolf_overrides__rspack_import_10.Tu.map((line)=>` ${pintor__rspack_import_8_default().blue(line)}\n`).join('') + `Or choose another browser with ${pintor__rspack_import_8_default().blue('--browser')} ${pintor__rspack_import_8_default().gray('<firefox|waterfox|zen|floorp>')}.`;
|
|
713
721
|
}
|
|
714
722
|
function firefoxFailedToStart(error) {
|
|
715
723
|
return `${getLoggingPrefix('error')} Firefox failed to start.\n${pintor__rspack_import_8_default().red(errorDetail(error))}`;
|
|
@@ -858,7 +866,7 @@ var __webpack_modules__ = {
|
|
|
858
866
|
}
|
|
859
867
|
function pinnedBinaryFlag(browser) {
|
|
860
868
|
const name = String(browser || '');
|
|
861
|
-
if ((0,
|
|
869
|
+
if ((0, _browser_family__rspack_import_11.M_)(name)) return '--gecko-binary';
|
|
862
870
|
if ('safari' === name || 'webkit-based' === name) return '--safari-binary';
|
|
863
871
|
return '--chromium-binary';
|
|
864
872
|
}
|
|
@@ -874,11 +882,8 @@ var __webpack_modules__ = {
|
|
|
874
882
|
case 'edge':
|
|
875
883
|
browserDevToolsUrl = 'edge://extensions';
|
|
876
884
|
break;
|
|
877
|
-
case 'firefox':
|
|
878
|
-
browserDevToolsUrl = 'about:debugging#/runtime/this-firefox';
|
|
879
|
-
break;
|
|
880
885
|
default:
|
|
881
|
-
browserDevToolsUrl = '';
|
|
886
|
+
browserDevToolsUrl = (0, _browser_family__rspack_import_11.M_)(browser) ? 'about:debugging#/runtime/this-firefox' : '';
|
|
882
887
|
}
|
|
883
888
|
if (!message.data) return `${getLoggingPrefix('error')} No client data received for ${manifestName}.\n\n${pintor__rspack_import_8_default().red("Extension.js can't read data from your extension.")}\n${pintor__rspack_import_8_default().red('To fix, ensure that:')}\n\n- Your extension is enabled in ${pintor__rspack_import_8_default().underline(browserDevToolsUrl)}\n- No previous ${capitalize(browser)} browser instance is open\n\nIf both hold, restart the ${pintor__rspack_import_8_default().yellow(manifest.name || '')} and the\n${pintor__rspack_import_8_default().yellow('Manager Extension')} in ${pintor__rspack_import_8_default().underline(browserDevToolsUrl)} and try again.\nIf the issue persists, report a bug:\n` + pintor__rspack_import_8_default().underline("https://github.com/extension-js/extension.js/issues");
|
|
884
889
|
const { id = '', management } = message.data;
|
|
@@ -1047,6 +1052,7 @@ var __webpack_modules__ = {
|
|
|
1047
1052
|
_D: ()=>browserLaunchError,
|
|
1048
1053
|
aI: ()=>devChromeProfilePath,
|
|
1049
1054
|
aO: ()=>safariOpenHint,
|
|
1055
|
+
bC: ()=>librewolfRemoteDebuggingLocked,
|
|
1050
1056
|
bv: ()=>cdpUnifiedExtensionLog,
|
|
1051
1057
|
cD: ()=>targetActorHasActiveRequestError,
|
|
1052
1058
|
cF: ()=>safariRebuilt,
|
|
@@ -1084,6 +1090,7 @@ var __webpack_modules__ = {
|
|
|
1084
1090
|
sP: ()=>mv2NotSupportedByChromium,
|
|
1085
1091
|
sY: ()=>creatingUserProfile,
|
|
1086
1092
|
uK: ()=>safariConverting,
|
|
1093
|
+
v5: ()=>geckoForkNotInstalled,
|
|
1087
1094
|
wk: ()=>chromeFailedToSpawn,
|
|
1088
1095
|
xX: ()=>binaryProvenanceNote,
|
|
1089
1096
|
xy: ()=>chromeInitializingEnhancedReload,
|
|
@@ -3745,10 +3752,11 @@ var __webpack_modules__ = {
|
|
|
3745
3752
|
stderrStream.on('error', ()=>{});
|
|
3746
3753
|
}
|
|
3747
3754
|
let disposeSignalHandlers;
|
|
3748
|
-
child.on('close', (code)=>{
|
|
3755
|
+
child.on('close', (code, signal)=>{
|
|
3749
3756
|
if ((0, messaging._o)()) this.logger.info(messages.nn(code || 0));
|
|
3757
|
+
const how = null == code ? `signal ${signal || 'unknown'}` : `code ${code}`;
|
|
3750
3758
|
if (!(0, process_teardown.Op)(child)) {
|
|
3751
|
-
this.logger.error(this.closeHandlerContext?.isDevMode ? `[browser] ${this.options.browser} exited mid-session (
|
|
3759
|
+
this.logger.error(this.closeHandlerContext?.isDevMode ? `[browser] ${this.options.browser} exited mid-session (${how}). The dev server is still running but reloads cannot be delivered, restart "extension dev" to relaunch the browser.` : `[browser] ${this.options.browser} exited (${how}); the preview session is over.`);
|
|
3752
3760
|
(0, ready_stamp.Wi)(this.closeHandlerContext?.extensionOutputPath, code);
|
|
3753
3761
|
}
|
|
3754
3762
|
disposeSignalHandlers?.();
|
|
@@ -4369,12 +4377,30 @@ var __webpack_modules__ = {
|
|
|
4369
4377
|
extensionsToLoad
|
|
4370
4378
|
};
|
|
4371
4379
|
}
|
|
4380
|
+
function attachChildOutput(child, opts) {
|
|
4381
|
+
const sinks = opts.sinks || {
|
|
4382
|
+
stdout: process.stdout,
|
|
4383
|
+
stderr: process.stderr
|
|
4384
|
+
};
|
|
4385
|
+
for (const [stream, sink] of [
|
|
4386
|
+
[
|
|
4387
|
+
child.stdout,
|
|
4388
|
+
sinks.stdout
|
|
4389
|
+
],
|
|
4390
|
+
[
|
|
4391
|
+
child.stderr,
|
|
4392
|
+
sinks.stderr
|
|
4393
|
+
]
|
|
4394
|
+
])if (stream) if (opts.debug) stream.pipe(sink);
|
|
4395
|
+
else stream.resume();
|
|
4396
|
+
}
|
|
4372
4397
|
function logFirefoxDryRun(browserBinaryLocation, launchArgs) {
|
|
4373
4398
|
if ((0, messaging._o)()) (0, messaging._w)(messages.A9());
|
|
4374
4399
|
(0, messaging._w)(messages.qn());
|
|
4375
4400
|
(0, messaging._w)(messages.LD(browserBinaryLocation));
|
|
4376
4401
|
(0, messaging._w)(messages.lO(launchArgs.join(' ')));
|
|
4377
4402
|
}
|
|
4403
|
+
var librewolf_overrides = __webpack_require__("./browsers/run-firefox/firefox-launch/librewolf-overrides.ts");
|
|
4378
4404
|
const activeInstances = new Set();
|
|
4379
4405
|
let globalHandlersInstalled = false;
|
|
4380
4406
|
async function attemptCleanup(instance) {
|
|
@@ -5381,7 +5407,7 @@ var __webpack_modules__ = {
|
|
|
5381
5407
|
}
|
|
5382
5408
|
} catch {}
|
|
5383
5409
|
this.lastInstalledAddonPath = primaryAddonPath;
|
|
5384
|
-
const bannerPrinted = await printRunningInDevelopmentSummary(candidateAddonPaths,
|
|
5410
|
+
const bannerPrinted = await printRunningInDevelopmentSummary(candidateAddonPaths, this.options.browser, this.derivedExtensionId, this.options.browserVersionLine, {
|
|
5385
5411
|
profilePath: this.options.launchProfilePath,
|
|
5386
5412
|
binaryPath: this.options.launchBinaryPath,
|
|
5387
5413
|
binaryProvenance: this.options.launchBinaryProvenance
|
|
@@ -5633,12 +5659,13 @@ var __webpack_modules__ = {
|
|
|
5633
5659
|
async launch(compilation, options) {
|
|
5634
5660
|
const compilationErrors = compilation?.errors || [];
|
|
5635
5661
|
if (compilationErrors.length > 0) return void this.ctx.logger?.info?.(messages.y7());
|
|
5636
|
-
if ((0, messaging._o)()) this.ctx.logger?.info?.(messages.A9());
|
|
5662
|
+
if ((0, messaging._o)()) this.ctx.logger?.info?.(messages.A9(this.host.browser));
|
|
5637
5663
|
const normalizePath = (value)=>{
|
|
5638
5664
|
const normalized = value ? (0, wsl_support.f7)(value) : null;
|
|
5639
5665
|
return normalized && external_node_fs_.existsSync(normalized) ? normalized : null;
|
|
5640
5666
|
};
|
|
5641
|
-
const
|
|
5667
|
+
const isNamedGeckoFork = 'waterfox' === this.host.browser || 'librewolf' === this.host.browser || 'zen' === this.host.browser || 'floorp' === this.host.browser;
|
|
5668
|
+
const resolveManagedBinary = ()=>isNamedGeckoFork ? null : normalizePath((0, output_binaries_resolver.kI)(compilation, 'firefox') || null);
|
|
5642
5669
|
const resolveWslFallback = ()=>resolveWslWindowsBinary();
|
|
5643
5670
|
const getInstallGuidanceText = ()=>{
|
|
5644
5671
|
try {
|
|
@@ -5668,6 +5695,14 @@ var __webpack_modules__ = {
|
|
|
5668
5695
|
const dryRun = Boolean(this.host.dryRun);
|
|
5669
5696
|
if (inTestRunner && !dryRun) return void logFirefoxDryRun('firefox-mock-binary', []);
|
|
5670
5697
|
if (inTestRunner && dryRun) return void await this.printDryRunPlan(compilation, options, this.host.geckoBinary ? (0, wsl_support.f7)(String(this.host.geckoBinary)) : 'firefox-mock-binary');
|
|
5698
|
+
if ('librewolf' === this.host.browser) {
|
|
5699
|
+
const remoteDebugging = (0, librewolf_overrides.u5)(external_node_fs_, process.env, process.platform);
|
|
5700
|
+
if (!remoteDebugging.enabled) {
|
|
5701
|
+
(0, messaging.Gg)(messages.bC(remoteDebugging.expectedPath));
|
|
5702
|
+
if (inTestRunner) throw new Error('LibreWolf remote debugging is disabled');
|
|
5703
|
+
process.exit(1);
|
|
5704
|
+
}
|
|
5705
|
+
}
|
|
5671
5706
|
let browserBinaryLocation = resolveManagedBinary();
|
|
5672
5707
|
let skipDetection = Boolean(browserBinaryLocation);
|
|
5673
5708
|
const engineBased = 'gecko-based' === this.host.browser || 'firefox-based' === this.host.browser;
|
|
@@ -5889,9 +5924,9 @@ var __webpack_modules__ = {
|
|
|
5889
5924
|
});
|
|
5890
5925
|
}
|
|
5891
5926
|
pipeChildOutput(child) {
|
|
5892
|
-
|
|
5893
|
-
|
|
5894
|
-
|
|
5927
|
+
attachChildOutput(child, {
|
|
5928
|
+
debug: (0, messaging._o)()
|
|
5929
|
+
});
|
|
5895
5930
|
}
|
|
5896
5931
|
wireChildLifecycle() {
|
|
5897
5932
|
const child = this.child;
|
|
@@ -5901,15 +5936,15 @@ var __webpack_modules__ = {
|
|
|
5901
5936
|
if (process.env.VITEST || process.env.VITEST_WORKER_ID) throw new Error('Firefox startup timed out');
|
|
5902
5937
|
process.exit(1);
|
|
5903
5938
|
});
|
|
5904
|
-
child.on('close', (code)=>{
|
|
5939
|
+
child.on('close', (code, signal)=>{
|
|
5905
5940
|
const expected = (0, process_teardown.Op)(child);
|
|
5906
5941
|
if (!expected && this.adoptHandedOffBrowser()) return;
|
|
5907
|
-
this.onBrowserGone(code, expected);
|
|
5942
|
+
this.onBrowserGone(code, expected, signal);
|
|
5908
5943
|
});
|
|
5909
5944
|
this.pipeChildOutput(child);
|
|
5910
5945
|
this.disposeProcessHandlers = setupFirefoxProcessHandlers(this.host.browser, ()=>this.child, ()=>this.cleanupInstance(), ()=>this.livePid);
|
|
5911
5946
|
}
|
|
5912
|
-
onBrowserGone(code, expected) {
|
|
5947
|
+
onBrowserGone(code, expected, signal) {
|
|
5913
5948
|
if (this.browserGone) return;
|
|
5914
5949
|
this.browserGone = true;
|
|
5915
5950
|
if (this.watchTimeout) {
|
|
@@ -5923,7 +5958,7 @@ var __webpack_modules__ = {
|
|
|
5923
5958
|
if (this.host.launchProfilePath) (0, shared_utils.sW)(this.host.launchProfilePath);
|
|
5924
5959
|
if ((0, messaging._o)()) this.ctx.logger?.info?.(messages.Th(this.host.browser));
|
|
5925
5960
|
if (!expected) {
|
|
5926
|
-
this.ctx.logger?.error?.(`[browser] ${this.host.browser} exited (code ${
|
|
5961
|
+
this.ctx.logger?.error?.(`[browser] ${this.host.browser} exited (${null == code ? `signal ${signal || 'unknown'}` : `code ${code}`}) without being asked to. The add-on may have been rejected or the browser crashed; the session cannot be driven.`);
|
|
5927
5962
|
(0, ready_stamp.Wi)(this.extensionOutputPath, code);
|
|
5928
5963
|
}
|
|
5929
5964
|
this.cleanupInstance().catch((err)=>{
|
|
@@ -6039,6 +6074,8 @@ var __webpack_modules__ = {
|
|
|
6039
6074
|
if ('function' == typeof this.watchTimeout.unref) this.watchTimeout.unref();
|
|
6040
6075
|
}
|
|
6041
6076
|
printInstallHint(compilation, raw) {
|
|
6077
|
+
const forkGuidance = geckoForkInstallGuidance(this.host.browser);
|
|
6078
|
+
if (null !== forkGuidance) return void (0, messaging.Gg)(messages.v5(this.host.browser, forkGuidance));
|
|
6042
6079
|
try {
|
|
6043
6080
|
const displayCacheDir = (0, output_binaries_resolver.LB)(compilation);
|
|
6044
6081
|
const pretty = messages.MG(this.host.browser || 'firefox', raw, displayCacheDir);
|
|
@@ -6061,6 +6098,69 @@ var __webpack_modules__ = {
|
|
|
6061
6098
|
this.ctx = ctx;
|
|
6062
6099
|
}
|
|
6063
6100
|
}
|
|
6101
|
+
function geckoForkInstallGuidance(browser) {
|
|
6102
|
+
const read = (fn)=>{
|
|
6103
|
+
try {
|
|
6104
|
+
return fn();
|
|
6105
|
+
} catch {
|
|
6106
|
+
return '';
|
|
6107
|
+
}
|
|
6108
|
+
};
|
|
6109
|
+
switch(browser){
|
|
6110
|
+
case 'waterfox':
|
|
6111
|
+
return read(()=>(0, external_waterfox_location_namespaceObject.getInstallGuidance)());
|
|
6112
|
+
case 'librewolf':
|
|
6113
|
+
return read(()=>(0, external_librewolf_location_namespaceObject.getInstallGuidance)());
|
|
6114
|
+
case 'zen':
|
|
6115
|
+
return read(()=>(0, external_zen_location_namespaceObject.getInstallGuidance)());
|
|
6116
|
+
case 'floorp':
|
|
6117
|
+
return read(()=>(0, external_floorp_location_namespaceObject.getInstallGuidance)());
|
|
6118
|
+
default:
|
|
6119
|
+
return null;
|
|
6120
|
+
}
|
|
6121
|
+
}
|
|
6122
|
+
},
|
|
6123
|
+
"./browsers/run-firefox/firefox-launch/librewolf-overrides.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
6124
|
+
var node_path__rspack_import_0 = __webpack_require__("node:path");
|
|
6125
|
+
const LIBREWOLF_REMOTE_DEBUGGING_LINES = [
|
|
6126
|
+
'pref("devtools.debugger.remote-enabled", true);',
|
|
6127
|
+
'pref("devtools.debugger.prompt-connection", false);'
|
|
6128
|
+
];
|
|
6129
|
+
const OVERRIDES_FILE = 'librewolf.overrides.cfg';
|
|
6130
|
+
function librewolfOverridesCandidates(env, platform) {
|
|
6131
|
+
const home = String(env.HOME || env.USERPROFILE || '').trim();
|
|
6132
|
+
const candidates = [];
|
|
6133
|
+
if ('win32' === platform) {
|
|
6134
|
+
if (home) candidates.push(node_path__rspack_import_0.join(home, '.librewolf', OVERRIDES_FILE));
|
|
6135
|
+
return candidates;
|
|
6136
|
+
}
|
|
6137
|
+
if (home) candidates.push(node_path__rspack_import_0.join(home, '.librewolf', OVERRIDES_FILE));
|
|
6138
|
+
const xdg = String(env.XDG_CONFIG_HOME || '').trim();
|
|
6139
|
+
if (xdg) candidates.push(node_path__rspack_import_0.join(xdg, 'librewolf', 'librewolf', OVERRIDES_FILE));
|
|
6140
|
+
if (home) candidates.push(node_path__rspack_import_0.join(home, '.config', 'librewolf', 'librewolf', OVERRIDES_FILE));
|
|
6141
|
+
return candidates;
|
|
6142
|
+
}
|
|
6143
|
+
function librewolfRemoteDebuggingEnabled(fsLike, env, platform) {
|
|
6144
|
+
const candidates = librewolfOverridesCandidates(env, platform);
|
|
6145
|
+
const expectedPath = candidates[0] || node_path__rspack_import_0.join('~', '.librewolf', OVERRIDES_FILE);
|
|
6146
|
+
const enabledLine = /^\s*(?:pref|defaultPref|lockPref)\(\s*"devtools\.debugger\.remote-enabled"\s*,\s*true\s*\)/m;
|
|
6147
|
+
for (const candidate of candidates)try {
|
|
6148
|
+
if (!fsLike.existsSync(candidate)) continue;
|
|
6149
|
+
if (enabledLine.test(fsLike.readFileSync(candidate, 'utf-8'))) return {
|
|
6150
|
+
enabled: true,
|
|
6151
|
+
expectedPath: candidate
|
|
6152
|
+
};
|
|
6153
|
+
} catch {}
|
|
6154
|
+
return {
|
|
6155
|
+
enabled: false,
|
|
6156
|
+
expectedPath
|
|
6157
|
+
};
|
|
6158
|
+
}
|
|
6159
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
6160
|
+
u5: ()=>librewolfRemoteDebuggingEnabled
|
|
6161
|
+
}, {
|
|
6162
|
+
Tu: LIBREWOLF_REMOTE_DEBUGGING_LINES
|
|
6163
|
+
});
|
|
6064
6164
|
},
|
|
6065
6165
|
"./browsers/run-only.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
6066
6166
|
var node_fs__rspack_import_0 = __webpack_require__("node:fs");
|
|
@@ -6957,9 +7057,20 @@ var __webpack_modules__ = {
|
|
|
6957
7057
|
...body
|
|
6958
7058
|
].join('\n');
|
|
6959
7059
|
}
|
|
6960
|
-
|
|
7060
|
+
const BRAND_SPELLINGS = {
|
|
7061
|
+
librewolf: 'LibreWolf',
|
|
7062
|
+
chromium: 'Chromium',
|
|
7063
|
+
'chromium-based': 'Chromium-based',
|
|
7064
|
+
'gecko-based': 'Gecko-based',
|
|
7065
|
+
'firefox-based': 'Firefox-based',
|
|
7066
|
+
'webkit-based': 'WebKit-based'
|
|
7067
|
+
};
|
|
7068
|
+
function browserDisplayName(browser) {
|
|
6961
7069
|
const name = String(browser || '').trim() || 'unknown';
|
|
6962
|
-
|
|
7070
|
+
return BRAND_SPELLINGS[name] || name.charAt(0).toUpperCase() + name.slice(1);
|
|
7071
|
+
}
|
|
7072
|
+
function browserRowValue(browser, versionLine) {
|
|
7073
|
+
const display = browserDisplayName(browser);
|
|
6963
7074
|
const line = String(versionLine || '').trim();
|
|
6964
7075
|
if (!line) return display;
|
|
6965
7076
|
if (!/[a-zA-Z]/.test(line)) return `${display} ${line}`;
|
|
@@ -7162,6 +7273,7 @@ var __webpack_modules__ = {
|
|
|
7162
7273
|
Gg: ()=>humanError,
|
|
7163
7274
|
Nr: ()=>card,
|
|
7164
7275
|
Pl: ()=>prefix,
|
|
7276
|
+
QZ: ()=>browserDisplayName,
|
|
7165
7277
|
Qi: ()=>hasChannelPrefix,
|
|
7166
7278
|
T_: ()=>artifactNoun,
|
|
7167
7279
|
VR: ()=>isCardKeyClaimed,
|
|
@@ -11,6 +11,7 @@ export declare function bestEffortBannerPrintFailed(message: string): string;
|
|
|
11
11
|
export declare function firefoxRdpRuntimeCapabilitySummary(state: 'available' | 'unavailable'): string;
|
|
12
12
|
export declare function skippingBrowserLaunchDueToCompileErrors(): string;
|
|
13
13
|
export declare function browserNotInstalledError(browser: Browser, browserBinaryLocation: string): string;
|
|
14
|
+
export declare function geckoForkNotInstalled(browser: Browser, guidance: string): string;
|
|
14
15
|
export declare function usingManagedChromiumFamilyFallback(requestedBrowser: Browser, _fallbackBrowser: Browser, _binaryPath: string): string;
|
|
15
16
|
export declare function preferringSystemBrowserOverSnapshot(_systemBinary: string, _snapshotBinary: string): string;
|
|
16
17
|
export declare function mv2NotSupportedByChromium(extensionPath: string): string;
|
|
@@ -52,7 +53,8 @@ export declare function chromiumDryRunNotLaunching(): string;
|
|
|
52
53
|
export declare function chromiumDryRunBinary(path: string): string;
|
|
53
54
|
export declare function chromiumDryRunFlags(flags: string): string;
|
|
54
55
|
export declare function prettyPuppeteerInstallGuidance(browser: Browser, rawGuidance: string, cacheDir: string): string;
|
|
55
|
-
export declare function firefoxLaunchCalled(): string;
|
|
56
|
+
export declare function firefoxLaunchCalled(browser?: Browser | string): string;
|
|
57
|
+
export declare function librewolfRemoteDebuggingLocked(overridesPath: string): string;
|
|
56
58
|
export declare function firefoxBinaryArgsExtracted(args: string): string;
|
|
57
59
|
export declare function firefoxNoBinaryArgsFound(): string;
|
|
58
60
|
export declare function firefoxFailedToStart(error: unknown): string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ChildProcess } from 'node:child_process';
|
|
2
|
+
import type { Writable } from 'node:stream';
|
|
3
|
+
type ChildStreams = Pick<ChildProcess, 'stdout' | 'stderr'>;
|
|
4
|
+
export declare function attachChildOutput(child: ChildStreams, opts: {
|
|
5
|
+
debug: boolean;
|
|
6
|
+
sinks?: {
|
|
7
|
+
stdout: Writable;
|
|
8
|
+
stderr: Writable;
|
|
9
|
+
};
|
|
10
|
+
}): void;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type FsLike = {
|
|
2
|
+
existsSync: (p: string) => boolean;
|
|
3
|
+
readFileSync: (p: string, encoding: 'utf-8') => string;
|
|
4
|
+
};
|
|
5
|
+
export declare const LIBREWOLF_REMOTE_DEBUGGING_LINES: string[];
|
|
6
|
+
export declare function librewolfOverridesCandidates(env: NodeJS.ProcessEnv, platform: NodeJS.Platform): string[];
|
|
7
|
+
export declare function librewolfRemoteDebuggingEnabled(fsLike: FsLike, env: NodeJS.ProcessEnv, platform: NodeJS.Platform): {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
expectedPath: string;
|
|
10
|
+
};
|
|
11
|
+
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import type { BrowserType } from '../../../browsers-types.js';
|
|
2
|
+
export declare function printRunningInDevelopmentSummary(candidateAddonPaths: string[], browser: BrowserType, extensionId?: string, browserVersionLine?: string, launchIdentity?: {
|
|
2
3
|
profilePath?: string;
|
|
3
4
|
binaryPath?: string;
|
|
4
5
|
binaryProvenance?: 'managed' | 'pinned' | 'system' | 'snapshot';
|
|
@@ -26,6 +26,7 @@ export interface CardInput {
|
|
|
26
26
|
}
|
|
27
27
|
export declare const MAX_CARD_ROWS = 3;
|
|
28
28
|
export declare function card(input?: CardInput): string;
|
|
29
|
+
export declare function browserDisplayName(browser: string): string;
|
|
29
30
|
export declare function browserRowValue(browser: string, versionLine?: string): string;
|
|
30
31
|
export declare function isCardKeyClaimed(key: string): boolean;
|
|
31
32
|
export declare function claimCardKey(key: string): boolean;
|
package/package.json
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"extension": "./bin/extension.cjs"
|
|
39
39
|
},
|
|
40
40
|
"name": "extension",
|
|
41
|
-
"version": "4.1.
|
|
41
|
+
"version": "4.1.27",
|
|
42
42
|
"description": "The cross-browser extension framework. Build Chrome, Edge, Firefox, and Safari extensions with no build configuration.",
|
|
43
43
|
"homepage": "https://extension.js.org/",
|
|
44
44
|
"funding": "https://github.com/sponsors/cezaraugusto",
|
|
@@ -104,9 +104,9 @@
|
|
|
104
104
|
"chromium-location": "2.1.2",
|
|
105
105
|
"commander": "^15.0.0",
|
|
106
106
|
"edge-location": "2.3.1",
|
|
107
|
-
"extension-create": "4.1.
|
|
108
|
-
"extension-develop": "4.1.
|
|
109
|
-
"extension-install": "4.1.
|
|
107
|
+
"extension-create": "4.1.27",
|
|
108
|
+
"extension-develop": "4.1.27",
|
|
109
|
+
"extension-install": "4.1.27",
|
|
110
110
|
"firefox-location2": "3.1.1",
|
|
111
111
|
"floorp-location": "1.0.0",
|
|
112
112
|
"librewolf-location": "1.2.1",
|