edge-paths
Version:
Get the paths of edge browser easily
174 lines (173 loc) • 4.49 kB
JavaScript
import { existsSync } from "fs";
import path from "path";
import which from "which";
let platform = process.platform;
function getEdgeLinux(name) {
try {
let path = which.sync(name);
return path;
}
catch (e) { }
return null;
}
function getEdgeWindows(edgeDirName) {
let paths = [];
let suffix = `\\Microsoft\\${edgeDirName}\\Application\\msedge.exe`;
let prefixes = [
process.env.LOCALAPPDATA,
process.env.PROGRAMFILES,
process.env["PROGRAMFILES(X86)"],
].filter((v) => !!v);
for (let prefix of prefixes) {
let edgePath = path.join(prefix, suffix);
paths.push(edgePath);
if (existsSync(edgePath)) {
return edgePath;
}
}
return null;
}
function getEdgeDarwin(defaultPath) {
if (existsSync(defaultPath)) {
return defaultPath;
}
return null;
}
const edgePaths = {
edge: {
linux: () => getEdgeLinux("microsoft-edge-stable"),
darwin: () => getEdgeDarwin("/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"),
win32: () => getEdgeWindows("Edge"),
},
dev: {
linux: () => getEdgeLinux("microsoft-edge-dev"),
darwin: () => getEdgeDarwin("/Applications/Microsoft Edge Dev.app/Contents/MacOS/Microsoft Edge Dev"),
win32: () => getEdgeWindows("Edge Dev"),
},
beta: {
linux: () => getEdgeLinux("microsoft-edge-beta"),
darwin: () => getEdgeDarwin("/Applications/Microsoft Edge Beta.app/Contents/MacOS/Microsoft Edge Beta"),
win32: () => getEdgeWindows("Edge Beta"),
},
canary: {
darwin: () => getEdgeDarwin("/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary"),
win32: () => getEdgeWindows("Edge SxS"),
},
};
export function getEdgePath() {
let edge = edgePaths.edge;
if (platform && platform in edgePaths.edge) {
let pth = edge[platform]();
if (pth) {
return pth;
}
}
throwInvalidPlatformError("Edge Stable", edgePaths);
}
export function getEdgeDevPath() {
let edgeDev = edgePaths.dev;
if (platform && platform in edgeDev) {
let pth = edgeDev[platform]();
if (pth) {
return pth;
}
}
throwInvalidPlatformError("Edge Dev", edgePaths);
}
export function getEdgeBetaPath() {
let edgeBeta = edgePaths.beta;
if (platform && platform in edgeBeta) {
let pth = edgeBeta[platform]();
if (pth) {
return pth;
}
}
throwInvalidPlatformError("Edge Beta", edgePaths);
}
export function getEdgeCanaryPath() {
let edgeCanary = edgePaths.canary;
if (platform && platform in edgeCanary) {
let pth = edgeCanary[platform]();
if (pth) {
return pth;
}
}
throwInvalidPlatformError("Edge Canary", edgePaths);
}
export function getAnyEdgeLatest() {
try {
return getEdgeCanaryPath();
}
catch (e) {
throwIfNotEdgePathIssue(e);
}
try {
return getEdgeDevPath();
}
catch (e) {
throwIfNotEdgePathIssue(e);
}
try {
return getEdgeBetaPath();
}
catch (e) {
throwIfNotEdgePathIssue(e);
}
try {
return getEdgePath();
}
catch (e) {
throwIfNotEdgePathIssue(e);
}
throw {
name: "edge-paths",
message: `Unable to find any ms-edge-browser`,
};
}
export function getAnyEdgeStable() {
try {
return getEdgePath();
}
catch (e) {
throwIfNotEdgePathIssue(e);
}
try {
return getEdgeBetaPath();
}
catch (e) {
throwIfNotEdgePathIssue(e);
}
try {
return getEdgeDevPath();
}
catch (e) {
throwIfNotEdgePathIssue(e);
}
try {
return getEdgeCanaryPath();
}
catch (e) {
throwIfNotEdgePathIssue(e);
}
throw {
name: "edge-paths",
message: `Unable to find any ms-edge-browser.`,
};
}
function throwInvalidPlatformError(additionalInfo = "", otherDetails) {
throw {
name: "edge-paths",
message: `Couldn't find the edge browser. ${additionalInfo}`,
additionalInfo,
otherDetails,
};
}
function throwIfNotEdgePathIssue(obj) {
if (Object.prototype.toString.call(obj) === "[object Object]" &&
obj &&
obj.name &&
obj.name === "edge-paths") {
return;
}
throw obj;
}