2021-03-06 09:30:16 +01:00
|
|
|
import fs from "fs";
|
|
|
|
import path from "path";
|
|
|
|
import {session} from "electron";
|
|
|
|
|
|
|
|
export const REACT_DEVTOOLS_ID = "fmkadmapgofadopljbjfkapdkoienihi";
|
|
|
|
|
|
|
|
const findExtension = function() {
|
|
|
|
let extensionPath = "";
|
2021-07-08 00:46:06 +02:00
|
|
|
// Get path to user data folder
|
2021-03-06 09:30:16 +01:00
|
|
|
if (process.platform === "win32") extensionPath = path.resolve(process.env.LOCALAPPDATA, "Google/Chrome/User Data");
|
|
|
|
else if (process.platform === "linux") extensionPath = path.resolve(process.env.HOME, ".config/google-chrome");
|
|
|
|
else if (process.platform === "darwin") extensionPath = path.resolve(process.env.HOME, "Library/Application Support/Google/Chrome");
|
|
|
|
else extensionPath = path.resolve(process.env.HOME, ".config/chromium");
|
2021-07-08 00:46:06 +02:00
|
|
|
|
|
|
|
// If default profile doesn't exist
|
|
|
|
if (!fs.existsSync(extensionPath + "/Default")) {
|
|
|
|
const profiles = fs.readdirSync(extensionPath).filter((fileName) => {
|
|
|
|
// Check if file is a profile folder
|
|
|
|
return fileName.startsWith("Profile") && !fileName.endsWith("store");
|
|
|
|
});
|
|
|
|
// Check for a profile with react dev tools installed
|
|
|
|
let foundExtension = false;
|
|
|
|
for (const p of profiles) {
|
|
|
|
const exPath = `${extensionPath}/${p}/Extensions/${REACT_DEVTOOLS_ID}`;
|
|
|
|
if (fs.existsSync(exPath)) {
|
|
|
|
extensionPath = exPath;
|
|
|
|
foundExtension = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Return empty if no installation found
|
|
|
|
if (!foundExtension) {
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
extensionPath += `/Default/Extensions/${REACT_DEVTOOLS_ID}`;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get latest version
|
2021-03-06 09:30:16 +01:00
|
|
|
if (fs.existsSync(extensionPath)) {
|
|
|
|
const versions = fs.readdirSync(extensionPath);
|
|
|
|
extensionPath = path.resolve(extensionPath, versions[versions.length - 1]);
|
|
|
|
}
|
|
|
|
|
|
|
|
const isExtensionInstalled = fs.existsSync(extensionPath);
|
|
|
|
if (isExtensionInstalled) return extensionPath;
|
|
|
|
return "";
|
|
|
|
};
|
|
|
|
|
|
|
|
export default class ReactDevTools {
|
|
|
|
static async install() {
|
|
|
|
const extPath = findExtension();
|
|
|
|
if (!extPath) return; // TODO: cut a log
|
|
|
|
|
|
|
|
try {
|
|
|
|
const ext = await session.defaultSession.loadExtension(extPath);
|
|
|
|
if (!ext) return; // TODO: cut a log
|
|
|
|
}
|
|
|
|
catch (err) {
|
|
|
|
// TODO: cut a log
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static async remove() {
|
|
|
|
const extPath = findExtension();
|
|
|
|
if (!extPath) return; // TODO: cut a log
|
|
|
|
|
|
|
|
try {
|
|
|
|
await session.defaultSession.removeExtension(extPath);
|
|
|
|
}
|
|
|
|
catch (err) {
|
|
|
|
// TODO: cut a log
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|