Son CV dans un terminal web en Javascript!
https://terminal-cv.gregandev.fr
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.7 KiB
64 lines
1.7 KiB
// @flow
|
|
|
|
import open from 'open';
|
|
import {execSync} from 'child_process';
|
|
import logger from '@parcel/logger';
|
|
|
|
// Chrome app name is platform dependent. we should not hard code it.
|
|
// https://github.com/react-native-community/cli/blob/e2be8a905285d9b37512fc78c9755b9635ecf805/packages/cli/src/commands/server/launchDebugger.ts#L28
|
|
function getChromeAppName(): string {
|
|
switch (process.platform) {
|
|
case 'darwin':
|
|
return 'google chrome';
|
|
case 'win32':
|
|
return 'chrome';
|
|
case 'linux':
|
|
if (commandExistsUnixSync('google-chrome')) {
|
|
return 'google-chrome';
|
|
}
|
|
if (commandExistsUnixSync('chromium-browser')) {
|
|
return 'chromium-browser';
|
|
}
|
|
return 'chromium';
|
|
|
|
default:
|
|
return 'google-chrome';
|
|
}
|
|
}
|
|
|
|
function commandExistsUnixSync(commandName: string) {
|
|
try {
|
|
const stdout = execSync(
|
|
`command -v ${commandName} 2>/dev/null` +
|
|
` && { echo >&1 '${commandName} found'; exit 0; }`,
|
|
);
|
|
return !!stdout;
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function getAppName(appName: string): string {
|
|
if (['google', 'chrome'].includes(appName)) {
|
|
return getChromeAppName();
|
|
} else if (['brave', 'Brave'].includes(appName)) {
|
|
return 'Brave Browser';
|
|
} else return appName;
|
|
}
|
|
|
|
export default async function openInBrowser(url: string, browser: string) {
|
|
try {
|
|
const options =
|
|
typeof browser === 'string' && browser.length > 0
|
|
? {app: [getAppName(browser)]}
|
|
: undefined;
|
|
|
|
await open(url, options);
|
|
} catch (err) {
|
|
logger.error(
|
|
`Unexpected error while opening in browser: ${browser}`,
|
|
'@parcel/utils',
|
|
);
|
|
logger.error(err, '@parcel/utils');
|
|
}
|
|
}
|
|
|