UNPKG

7.88 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.createElectronFrameworkSupport = exports.createBrandingOpts = void 0;
4const bluebird_lst_1 = require("bluebird-lst");
5const builder_util_1 = require("builder-util");
6const fs_1 = require("builder-util/out/fs");
7const fs_extra_1 = require("fs-extra");
8const path = require("path");
9const index_1 = require("../index");
10const pathManager_1 = require("../util/pathManager");
11const electronMac_1 = require("./electronMac");
12const electronVersion_1 = require("./electronVersion");
13const fs = require("fs/promises");
14const injectFFMPEG_1 = require("./injectFFMPEG");
15function createBrandingOpts(opts) {
16 var _a, _b;
17 return {
18 projectName: ((_a = opts.electronBranding) === null || _a === void 0 ? void 0 : _a.projectName) || "electron",
19 productName: ((_b = opts.electronBranding) === null || _b === void 0 ? void 0 : _b.productName) || "Electron",
20 };
21}
22exports.createBrandingOpts = createBrandingOpts;
23function createDownloadOpts(opts, platform, arch, electronVersion) {
24 return {
25 platform,
26 arch,
27 version: electronVersion,
28 ...opts.electronDownload,
29 };
30}
31async function beforeCopyExtraFiles(options) {
32 const { appOutDir, packager } = options;
33 const electronBranding = createBrandingOpts(packager.config);
34 if (packager.platform === index_1.Platform.LINUX) {
35 const linuxPackager = packager;
36 const executable = path.join(appOutDir, linuxPackager.executableName);
37 await (0, fs_extra_1.rename)(path.join(appOutDir, electronBranding.projectName), executable);
38 }
39 else if (packager.platform === index_1.Platform.WINDOWS) {
40 const executable = path.join(appOutDir, `${packager.appInfo.productFilename}.exe`);
41 await (0, fs_extra_1.rename)(path.join(appOutDir, `${electronBranding.projectName}.exe`), executable);
42 }
43 else {
44 await (0, electronMac_1.createMacApp)(packager, appOutDir, options.asarIntegrity, options.platformName === "mas");
45 }
46 await removeUnusedLanguagesIfNeeded(options);
47}
48async function removeUnusedLanguagesIfNeeded(options) {
49 const { packager: { config, platformSpecificBuildOptions }, } = options;
50 const wantedLanguages = (0, builder_util_1.asArray)(platformSpecificBuildOptions.electronLanguages || config.electronLanguages);
51 if (!wantedLanguages.length) {
52 return;
53 }
54 const { dir, langFileExt } = getLocalesConfig(options);
55 // noinspection SpellCheckingInspection
56 await bluebird_lst_1.default.map((0, fs_extra_1.readdir)(dir), file => {
57 if (!file.endsWith(langFileExt)) {
58 return;
59 }
60 const language = file.substring(0, file.length - langFileExt.length);
61 if (!wantedLanguages.includes(language)) {
62 return fs.rm(path.join(dir, file), { recursive: true, force: true });
63 }
64 return;
65 }, fs_1.CONCURRENCY);
66 function getLocalesConfig(options) {
67 const { appOutDir, packager } = options;
68 if (packager.platform === index_1.Platform.MAC) {
69 return { dir: packager.getResourcesDir(appOutDir), langFileExt: ".lproj" };
70 }
71 else {
72 return { dir: path.join(packager.getResourcesDir(appOutDir), "..", "locales"), langFileExt: ".pak" };
73 }
74 }
75}
76class ElectronFramework {
77 constructor(name, version, distMacOsAppName) {
78 this.name = name;
79 this.version = version;
80 this.distMacOsAppName = distMacOsAppName;
81 // noinspection JSUnusedGlobalSymbols
82 this.macOsDefaultTargets = ["zip", "dmg"];
83 // noinspection JSUnusedGlobalSymbols
84 this.defaultAppIdPrefix = "com.electron.";
85 // noinspection JSUnusedGlobalSymbols
86 this.isCopyElevateHelper = true;
87 // noinspection JSUnusedGlobalSymbols
88 this.isNpmRebuildRequired = true;
89 }
90 getDefaultIcon(platform) {
91 if (platform === index_1.Platform.LINUX) {
92 return path.join((0, pathManager_1.getTemplatePath)("icons"), "electron-linux");
93 }
94 else {
95 // default icon is embedded into app skeleton
96 return null;
97 }
98 }
99 async prepareApplicationStageDirectory(options) {
100 await unpack(options, createDownloadOpts(options.packager.config, options.platformName, options.arch, this.version), this.distMacOsAppName);
101 if (options.packager.config.downloadAlternateFFmpeg) {
102 await (0, injectFFMPEG_1.default)(options, this.version);
103 }
104 }
105 beforeCopyExtraFiles(options) {
106 return beforeCopyExtraFiles(options);
107 }
108}
109async function createElectronFrameworkSupport(configuration, packager) {
110 let version = configuration.electronVersion;
111 if (version == null) {
112 // for prepacked app asar no dev deps in the app.asar
113 if (packager.isPrepackedAppAsar) {
114 version = await (0, electronVersion_1.getElectronVersionFromInstalled)(packager.projectDir);
115 if (version == null) {
116 throw new Error(`Cannot compute electron version for prepacked asar`);
117 }
118 }
119 else {
120 version = await (0, electronVersion_1.computeElectronVersion)(packager.projectDir);
121 }
122 configuration.electronVersion = version;
123 }
124 const branding = createBrandingOpts(configuration);
125 return new ElectronFramework(branding.projectName, version, `${branding.productName}.app`);
126}
127exports.createElectronFrameworkSupport = createElectronFrameworkSupport;
128async function unpack(prepareOptions, options, distMacOsAppName) {
129 const { packager, appOutDir, platformName } = prepareOptions;
130 const electronDist = packager.config.electronDist;
131 let dist = typeof electronDist === "function" ? electronDist(prepareOptions) : electronDist;
132 if (dist != null) {
133 const zipFile = `electron-v${options.version}-${platformName}-${options.arch}.zip`;
134 const resolvedDist = path.isAbsolute(dist) ? dist : path.resolve(packager.projectDir, dist);
135 if ((await (0, fs_1.statOrNull)(path.join(resolvedDist, zipFile))) != null) {
136 builder_util_1.log.info({ resolvedDist, zipFile }, "resolved electronDist");
137 options.cache = resolvedDist;
138 dist = null;
139 }
140 }
141 let isFullCleanup = false;
142 if (dist == null) {
143 await (0, builder_util_1.executeAppBuilder)(["unpack-electron", "--configuration", JSON.stringify([options]), "--output", appOutDir, "--distMacOsAppName", distMacOsAppName]);
144 }
145 else {
146 isFullCleanup = true;
147 const source = packager.getElectronSrcDir(dist);
148 const destination = packager.getElectronDestinationDir(appOutDir);
149 builder_util_1.log.info({ source, destination }, "copying Electron");
150 await (0, fs_extra_1.emptyDir)(appOutDir);
151 await (0, fs_1.copyDir)(source, destination, {
152 isUseHardLink: fs_1.DO_NOT_USE_HARD_LINKS,
153 });
154 }
155 await cleanupAfterUnpack(prepareOptions, distMacOsAppName, isFullCleanup);
156}
157function cleanupAfterUnpack(prepareOptions, distMacOsAppName, isFullCleanup) {
158 const out = prepareOptions.appOutDir;
159 const isMac = prepareOptions.packager.platform === index_1.Platform.MAC;
160 const resourcesPath = isMac ? path.join(out, distMacOsAppName, "Contents", "Resources") : path.join(out, "resources");
161 return Promise.all([
162 isFullCleanup ? (0, fs_1.unlinkIfExists)(path.join(resourcesPath, "default_app.asar")) : Promise.resolve(),
163 isFullCleanup ? (0, fs_1.unlinkIfExists)(path.join(out, "version")) : Promise.resolve(),
164 isMac
165 ? Promise.resolve()
166 : (0, fs_extra_1.rename)(path.join(out, "LICENSE"), path.join(out, "LICENSE.electron.txt")).catch(() => {
167 /* ignore */
168 }),
169 ]);
170}
171//# sourceMappingURL=ElectronFramework.js.map
\No newline at end of file