@sap/cli-core
Version:
Command-Line Interface (CLI) Core Module
55 lines (54 loc) • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.openUrlInBrowser = void 0;
exports.getSupportedBrowsers = getSupportedBrowsers;
exports.getDefaultBrowser = getDefaultBrowser;
const constants_1 = require("../constants");
const logger_1 = require("../logger");
const options_1 = require("./options");
const getLogger = () => (0, logger_1.get)("utils.open");
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,
})));
}
async function getDefaultBrowser() {
const { apps } = await import("open");
return apps.browser;
}
async function getBrowser() {
const { apps } = await import("open");
const browser = (0, options_1.getOptionValueFromConfig)(constants_1.OPTION_BROWSER, await getDefaultBrowser());
return apps[browser];
}
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;
}
}
};
exports.openUrlInBrowser = openUrlInBrowser;