electron-rebuild
Version:
Electron supporting package to rebuild native node modules against the currently installed electron
68 lines • 3.23 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Prebuildify = exports.determineNativePrebuildExtension = exports.determineNativePrebuildArch = void 0;
const debug_1 = __importDefault(require("debug"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const arch_1 = require("../arch");
const _1 = require(".");
const d = (0, debug_1.default)('electron-rebuild');
function determineNativePrebuildArch(arch) {
if (arch === 'armv7l') {
return 'arm';
}
return arch;
}
exports.determineNativePrebuildArch = determineNativePrebuildArch;
/**
* The extension of `prebuildify`-generated native modules, after the last `.`. This value differs
* based on whether the target arch is ARM-based.
*/
function determineNativePrebuildExtension(arch) {
switch (arch) {
case 'arm64':
return 'armv8.node';
case 'armv7l':
return 'armv7.node';
}
return 'node';
}
exports.determineNativePrebuildExtension = determineNativePrebuildExtension;
class Prebuildify extends _1.NativeModule {
async usesTool() {
const devDependencies = await this.packageJSONFieldWithDefault('devDependencies', {});
// eslint-disable-next-line no-prototype-builtins
return devDependencies.hasOwnProperty('prebuildify');
}
async findPrebuiltModule() {
const nodeArch = (0, arch_1.getNodeArch)(this.rebuilder.arch, process.config.variables);
d(`Checking for prebuilds for "${this.moduleName}"`);
const prebuildsDir = path_1.default.join(this.modulePath, 'prebuilds');
if (!(await fs_extra_1.default.pathExists(prebuildsDir))) {
d(`Could not find the prebuilds directory at "${prebuildsDir}"`);
return false;
}
const prebuiltModuleDir = path_1.default.join(prebuildsDir, `${this.rebuilder.platform}-${determineNativePrebuildArch(nodeArch)}`);
const nativeExt = determineNativePrebuildExtension(nodeArch);
const electronNapiModuleFilename = path_1.default.join(prebuiltModuleDir, `electron.napi.${nativeExt}`);
const nodejsNapiModuleFilename = path_1.default.join(prebuiltModuleDir, `node.napi.${nativeExt}`);
const abiModuleFilename = path_1.default.join(prebuiltModuleDir, `electron.abi${this.rebuilder.ABI}.${nativeExt}`);
if (await fs_extra_1.default.pathExists(electronNapiModuleFilename) || await fs_extra_1.default.pathExists(nodejsNapiModuleFilename)) {
this.nodeAPI.ensureElectronSupport();
d(`Found prebuilt Node-API module in ${prebuiltModuleDir}"`);
}
else if (await fs_extra_1.default.pathExists(abiModuleFilename)) {
d(`Found prebuilt module: "${abiModuleFilename}"`);
}
else {
d(`Could not locate "${electronNapiModuleFilename}", "${nodejsNapiModuleFilename}", or "${abiModuleFilename}"`);
return false;
}
return true;
}
}
exports.Prebuildify = Prebuildify;
//# sourceMappingURL=prebuildify.js.map