@sap/cli-core
Version:
Command-Line Interface (CLI) Core Module
49 lines (48 loc) • 1.73 kB
JavaScript
import { OPTION_BROWSER } from "../constants.js";
import { get as getLoggerOrig } from "../logger/index.js";
import { getOptionValueFromConfig } from "./options.js";
const getLogger = () => getLoggerOrig("utils.open");
export async function getSupportedBrowsers() {
const { apps } = await import("open");
return (Object.entries(apps)
// Private browser is not supported
.filter(([name]) => name !== "browserPrivate")
.map(([key, value]) => ({
name: key,
app: value,
})));
}
export async function getDefaultBrowser() {
const { apps } = await import("open");
return apps.browser;
}
async function getBrowser() {
const { apps } = await import("open");
const browser = getOptionValueFromConfig(OPTION_BROWSER, await getDefaultBrowser());
return apps[browser];
}
export const openUrlInBrowser = async (url, queryParameters = {}) => {
const u = new URL(url);
for (const [key, value] of Object.entries(queryParameters)) {
u.searchParams.append(key, value);
}
const urlString = u.toString();
const { debug, error } = getLogger();
const browser = await getBrowser();
const open = (await import("open")).default;
try {
debug(`Attempting to open browser ${browser} at ${urlString}`);
await open(urlString, { app: { name: browser } });
}
catch (err) {
error(`Failed to open browser ${browser}`, err);
debug("Retrying with Google Chrome as fallback browser");
try {
await open(urlString, { app: { name: "google chrome" } });
}
catch (fallbackErr) {
error(`Failed to open browser`, fallbackErr);
throw fallbackErr;
}
}
};