@electron/packager
Version:
Customize and package your Electron app with OS-specific bundles (.app, .exe, etc.) via JS or CLI
72 lines • 3.63 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.packageUniversalMac = void 0;
const universal_1 = require("@electron/universal");
const common_1 = require("./common");
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const mac_1 = require("./mac");
async function packageUniversalMac(packageForPlatformAndArchWithOpts, buildDir, comboOpts, downloadOpts, tempBase) {
// In order to generate a universal macOS build we actually need to build the x64 and the arm64 app
// and then glue them together
(0, common_1.info)(`Packaging app for platform ${comboOpts.platform} universal using electron v${comboOpts.electronVersion} - Building x64 and arm64 slices now`, comboOpts.quiet);
await fs_extra_1.default.mkdirp(tempBase);
const tempDir = await fs_extra_1.default.mkdtemp(path_1.default.resolve(tempBase, 'electron-packager-universal-'));
const app = new mac_1.App(comboOpts, buildDir);
const universalStagingPath = app.stagingPath;
const finalUniversalPath = (0, common_1.generateFinalPath)(app.opts);
if (await fs_extra_1.default.pathExists(finalUniversalPath)) {
if (comboOpts.overwrite) {
await fs_extra_1.default.remove(finalUniversalPath);
}
else {
(0, common_1.info)(`Skipping ${comboOpts.platform} ${comboOpts.arch} (output dir already exists, use --overwrite to force)`, comboOpts.quiet);
return true;
}
}
const tempPackages = {};
await Promise.all(['x64', 'arm64'].map(async (tempArch) => {
const tempOpts = {
...comboOpts,
arch: tempArch,
out: tempDir,
};
const tempDownloadOpts = {
...downloadOpts,
arch: tempArch,
};
// Do not sign or notarize the individual slices, we sign and notarize the merged app later
delete tempOpts.osxSign;
delete tempOpts.osxNotarize;
// @TODO(erikian): I don't like this type cast, the return type for `packageForPlatformAndArchWithOpts` is probably wrong
tempPackages[tempArch] = (await packageForPlatformAndArchWithOpts(tempOpts, tempDownloadOpts));
}));
const x64AppPath = tempPackages.x64;
const arm64AppPath = tempPackages.arm64;
(0, common_1.info)(`Stitching universal app for platform ${comboOpts.platform}`, comboOpts.quiet);
const generatedFiles = await fs_extra_1.default.readdir(x64AppPath);
const appName = generatedFiles.filter((file) => path_1.default.extname(file) === '.app')[0];
await (0, universal_1.makeUniversalApp)({
...comboOpts.osxUniversal,
x64AppPath: path_1.default.resolve(x64AppPath, appName),
arm64AppPath: path_1.default.resolve(arm64AppPath, appName),
outAppPath: path_1.default.resolve(universalStagingPath, appName),
force: false,
});
await app.signAppIfSpecified();
await app.notarizeAppIfSpecified();
await app.move();
for (const generatedFile of generatedFiles) {
if (path_1.default.extname(generatedFile) === '.app') {
continue;
}
await fs_extra_1.default.copy(path_1.default.resolve(x64AppPath, generatedFile), path_1.default.resolve(finalUniversalPath, generatedFile));
}
await fs_extra_1.default.remove(tempDir);
return finalUniversalPath;
}
exports.packageUniversalMac = packageUniversalMac;
//# sourceMappingURL=universal.js.map