UNPKG

1.89 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = openInBrowser;
7
8var _open = _interopRequireDefault(require("open"));
9
10var _child_process = require("child_process");
11
12var _logger = _interopRequireDefault(require("@parcel/logger"));
13
14function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
16// Chrome app name is platform dependent. we should not hard code it.
17// https://github.com/react-native-community/cli/blob/e2be8a905285d9b37512fc78c9755b9635ecf805/packages/cli/src/commands/server/launchDebugger.ts#L28
18function getChromeAppName() {
19 switch (process.platform) {
20 case 'darwin':
21 return 'google chrome';
22
23 case 'win32':
24 return 'chrome';
25
26 case 'linux':
27 if (commandExistsUnixSync('google-chrome')) {
28 return 'google-chrome';
29 }
30
31 if (commandExistsUnixSync('chromium-browser')) {
32 return 'chromium-browser';
33 }
34
35 return 'chromium';
36
37 default:
38 return 'google-chrome';
39 }
40}
41
42function commandExistsUnixSync(commandName) {
43 try {
44 const stdout = (0, _child_process.execSync)(`command -v ${commandName} 2>/dev/null` + ` && { echo >&1 '${commandName} found'; exit 0; }`);
45 return !!stdout;
46 } catch (error) {
47 return false;
48 }
49}
50
51function getAppName(appName) {
52 if (['google', 'chrome'].includes(appName)) {
53 return getChromeAppName();
54 } else if (['brave', 'Brave'].includes(appName)) {
55 return 'Brave Browser';
56 } else return appName;
57}
58
59async function openInBrowser(url, browser) {
60 try {
61 const options = typeof browser === 'string' ? {
62 app: [getAppName(browser)]
63 } : undefined;
64 await (0, _open.default)(url, options);
65 } catch (err) {
66 _logger.default.error(`Unexpected error while opening in browser: ${browser}`, '@parcel/utils');
67
68 _logger.default.error(err, '@parcel/utils');
69 }
70}
\No newline at end of file