node-ejs-renderer/node_modules/default-browser/windows.js

44 lines
1.6 KiB
JavaScript
Raw Normal View History

2024-06-09 13:55:01 -04:00
import {promisify} from 'node:util';
import {execFile} from 'node:child_process';
const execFileAsync = promisify(execFile);
// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake
// ones that look real and match the macOS/Linux versions for cross-platform apps.
const windowsBrowserProgIds = {
AppXq0fevzme2pys62n3e0fbqa7peapykr8v: {name: 'Edge', id: 'com.microsoft.edge.old'},
MSEdgeDHTML: {name: 'Edge', id: 'com.microsoft.edge'}, // On macOS, it's "com.microsoft.edgemac"
MSEdgeHTM: {name: 'Edge', id: 'com.microsoft.edge'}, // Newer Edge/Win10 releases
'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},
FirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},
ChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},
BraveHTML: {name: 'Brave', id: 'com.brave.Browser'},
BraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},
BraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},
};
export class UnknownBrowserError extends Error {}
export default async function defaultBrowser(_execFileAsync = execFileAsync) {
const {stdout} = await _execFileAsync('reg', [
'QUERY',
' HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice',
'/v',
'ProgId',
]);
const match = /ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(stdout);
if (!match) {
throw new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);
}
const {id} = match.groups;
const browser = windowsBrowserProgIds[id];
if (!browser) {
throw new UnknownBrowserError(`Unknown browser ID: ${id}`);
}
return browser;
}