electron-devtools-assembler
Version:
An easy way to install Dev Tools extensions into Electron applications
145 lines • 5.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MOBX_DEVTOOLS = exports.APOLLO_DEVELOPER_TOOLS = exports.REDUX_DEVTOOLS = exports.VUEJS_DEVTOOLS = exports.ANGULAR_DEVTOOLS = exports.JQUERY_DEBUGGER = exports.BACKBONE_DEBUGGER = exports.REACT_DEVELOPER_TOOLS = exports.EMBER_INSPECTOR = void 0;
const electron_1 = require("electron");
const fs = require("fs");
const path = require("path");
const semver = require("semver");
const downloadChromeExtension_1 = require("./downloadChromeExtension");
const utils_1 = require("./utils");
let IDMap = {};
const getIDMapPath = () => path.resolve(utils_1.getPath(), 'IDMap.json');
if (fs.existsSync(getIDMapPath())) {
try {
IDMap = JSON.parse(fs.readFileSync(getIDMapPath(), 'utf8'));
}
catch (err) {
console.error('electron-devtools-assembler: Invalid JSON present in the IDMap file');
}
}
/**
* @param extensionReference Extension or extensions to install
* @param options Installation options
* @returns A promise resolving with the name or names of the extensions installed
*/
const install = (extensionReference, options = {}) => {
// Support old forceDownload syntax
if (typeof options === 'boolean') {
options = { forceDownload: options };
}
const { forceDownload, loadExtensionOptions } = options;
if (process.type !== 'browser') {
return Promise.reject(new Error('electron-devtools-assembler can only be used from the main process'));
}
if (Array.isArray(extensionReference)) {
return extensionReference.reduce((accum, extension) => accum.then(() => install(extension, options)), Promise.resolve(''));
}
let chromeStoreID;
if (typeof extensionReference === 'object' && extensionReference.id) {
chromeStoreID = extensionReference.id;
const electronVersion = process.versions.electron.split('-')[0];
if (!semver.satisfies(electronVersion, extensionReference.electron)) {
return Promise.reject(new Error(`Version of Electron: ${electronVersion} does not match required range ${extensionReference.electron} for extension ${chromeStoreID}`));
}
}
else if (typeof extensionReference === 'string') {
chromeStoreID = extensionReference;
}
else {
return Promise.reject(new Error(`Invalid extensionReference passed in: "${extensionReference}"`));
}
const extensionName = IDMap[chromeStoreID];
let extensionInstalled;
// For Electron >=9.
if (electron_1.session.defaultSession.getExtension) {
extensionInstalled =
!!extensionName &&
electron_1.session.defaultSession
.getAllExtensions()
.find((e) => e.name === extensionName);
}
else {
extensionInstalled =
!!extensionName &&
electron_1.BrowserWindow.getDevToolsExtensions &&
electron_1.BrowserWindow.getDevToolsExtensions().hasOwnProperty(extensionName);
}
if (!forceDownload && extensionInstalled) {
return Promise.resolve(IDMap[chromeStoreID]);
}
return downloadChromeExtension_1.default(chromeStoreID, forceDownload || false).then((extensionFolder) => {
// Use forceDownload, but already installed
if (extensionInstalled) {
// For Electron >=9.
if (electron_1.session.defaultSession.removeExtension) {
const extensionId = electron_1.session.defaultSession
.getAllExtensions()
.find((e) => e.name).id;
electron_1.session.defaultSession.removeExtension(extensionId);
}
else {
electron_1.BrowserWindow.removeDevToolsExtension(extensionName);
}
}
// For Electron >=9.
if (electron_1.session.defaultSession.loadExtension) {
return electron_1.session.defaultSession
.loadExtension(extensionFolder, loadExtensionOptions)
.then((ext) => {
return Promise.resolve(ext.name);
});
}
const name = electron_1.BrowserWindow.addDevToolsExtension(extensionFolder); // eslint-disable-line
fs.writeFileSync(getIDMapPath(), JSON.stringify(Object.assign(IDMap, {
[chromeStoreID]: name,
})));
return Promise.resolve(name);
});
};
exports.default = install;
exports.EMBER_INSPECTOR = {
id: 'bmdblncegkenkacieihfhpjfppoconhi',
electron: '>=1.2.1',
version: '4.9.1',
};
exports.REACT_DEVELOPER_TOOLS = {
id: 'fmkadmapgofadopljbjfkapdkoienihi',
electron: '>=1.2.1',
version: '4.24.7',
};
exports.BACKBONE_DEBUGGER = {
id: 'bhljhndlimiafopmmhjlgfpnnchjjbhd',
electron: '>=1.2.1',
version: '0.4.1',
};
exports.JQUERY_DEBUGGER = {
id: 'dbhhnnnpaeobfddmlalhnehgclcmjimi',
electron: '>=1.2.1',
version: '0.1.3.2',
};
exports.ANGULAR_DEVTOOLS = {
id: 'ienfalfjdbdpebioblfackkekamfmbnh',
electron: '>=1.2.1',
version: '1.0.7',
};
exports.VUEJS_DEVTOOLS = {
id: 'nhdogjmejiglipccpnnnanhbledajbpd',
electron: '>=1.2.1',
version: '6.5.0',
};
exports.REDUX_DEVTOOLS = {
id: 'lmhkpmbekcpmknklioeibfkpmmfibljd',
electron: '>=1.2.1',
version: '3.0.19',
};
exports.APOLLO_DEVELOPER_TOOLS = {
id: 'jdkknkkbebbapilgoeccciglkfbmbnfm',
electron: '>=1.2.1',
version: '4.1.4',
};
exports.MOBX_DEVTOOLS = {
id: 'pfgnfdagidkfgccljigdamigbcnndkod',
electron: '>=1.2.1',
version: '0.9.26',
};
//# sourceMappingURL=index.js.map