UNPKG

5.98 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.computeElectronVersion = exports.getElectronPackage = exports.getElectronVersionFromInstalled = exports.getElectronVersion = void 0;
4const search_module_1 = require("@electron/rebuild/lib/search-module");
5const builder_util_1 = require("builder-util");
6const builder_util_runtime_1 = require("builder-util-runtime");
7const nodeHttpExecutor_1 = require("builder-util/out/nodeHttpExecutor");
8const fs_extra_1 = require("fs-extra");
9const path = require("path");
10const read_config_file_1 = require("read-config-file");
11const semver = require("semver");
12const config_1 = require("../util/config");
13const electronPackages = ["electron", "electron-prebuilt", "electron-prebuilt-compile", "electron-nightly"];
14async function getElectronVersion(projectDir, config) {
15 if (config == null) {
16 config = await (0, config_1.getConfig)(projectDir, null, null);
17 }
18 if (config.electronVersion != null) {
19 return config.electronVersion;
20 }
21 return computeElectronVersion(projectDir);
22}
23exports.getElectronVersion = getElectronVersion;
24async function getElectronVersionFromInstalled(projectDir) {
25 for (const name of electronPackages) {
26 try {
27 return (await (0, fs_extra_1.readJson)(path.join(projectDir, "node_modules", name, "package.json"))).version;
28 }
29 catch (e) {
30 if (e.code !== "ENOENT") {
31 builder_util_1.log.warn({ name, error: e }, `cannot read electron version package.json`);
32 }
33 }
34 }
35 return null;
36}
37exports.getElectronVersionFromInstalled = getElectronVersionFromInstalled;
38async function getElectronPackage(projectDir) {
39 for (const name of electronPackages) {
40 try {
41 return await (0, fs_extra_1.readJson)(path.join(projectDir, "node_modules", name, "package.json"));
42 }
43 catch (e) {
44 if (e.code !== "ENOENT") {
45 builder_util_1.log.warn({ name, error: e }, `cannot find electron in package.json`);
46 }
47 }
48 }
49 return null;
50}
51exports.getElectronPackage = getElectronPackage;
52/** @internal */
53async function computeElectronVersion(projectDir) {
54 const result = await getElectronVersionFromInstalled(projectDir);
55 if (result != null) {
56 return result;
57 }
58 const potentialRootDirs = [projectDir, await (0, search_module_1.getProjectRootPath)(projectDir)];
59 let dependency = null;
60 for await (const dir of potentialRootDirs) {
61 const metadata = await (0, read_config_file_1.orNullIfFileNotExist)((0, fs_extra_1.readJson)(path.join(dir, "package.json")));
62 dependency = metadata ? findFromPackageMetadata(metadata) : null;
63 if (dependency) {
64 break;
65 }
66 }
67 if ((dependency === null || dependency === void 0 ? void 0 : dependency.name) === "electron-nightly") {
68 builder_util_1.log.info("You are using a nightly version of electron, be warned that those builds are highly unstable.");
69 const feedXml = await nodeHttpExecutor_1.httpExecutor.request({
70 hostname: "github.com",
71 path: `/electron/nightlies/releases.atom`,
72 headers: {
73 accept: "application/xml, application/atom+xml, text/xml, */*",
74 },
75 });
76 const feed = (0, builder_util_runtime_1.parseXml)(feedXml);
77 const latestRelease = feed.element("entry", false, `No published versions on GitHub`);
78 const v = /\/tag\/v?([^/]+)$/.exec(latestRelease.element("link").attribute("href"))[1];
79 return v.startsWith("v") ? v.substring(1) : v;
80 }
81 else if ((dependency === null || dependency === void 0 ? void 0 : dependency.version) === "latest") {
82 builder_util_1.log.warn('Electron version is set to "latest", but it is recommended to set it to some more restricted version range.');
83 try {
84 const releaseInfo = JSON.parse((await nodeHttpExecutor_1.httpExecutor.request({
85 hostname: "github.com",
86 path: `/electron/${dependency.name === "electron-nightly" ? "nightlies" : "electron"}/releases/latest`,
87 headers: {
88 accept: "application/json",
89 },
90 })));
91 const version = releaseInfo.tag_name.startsWith("v") ? releaseInfo.tag_name.substring(1) : releaseInfo.tag_name;
92 builder_util_1.log.info({ version }, `resolve ${dependency.name}@${dependency.version}`);
93 return version;
94 }
95 catch (e) {
96 builder_util_1.log.warn(e);
97 }
98 throw new builder_util_1.InvalidConfigurationError(`Cannot find electron dependency to get electron version in the '${path.join(projectDir, "package.json")}'`);
99 }
100 const version = dependency === null || dependency === void 0 ? void 0 : dependency.version;
101 if (version == null || !/^\d/.test(version)) {
102 const versionMessage = version == null ? "" : ` and version ("${version}") is not fixed in project`;
103 throw new builder_util_1.InvalidConfigurationError(`Cannot compute electron version from installed node modules - none of the possible electron modules are installed${versionMessage}.\nSee https://github.com/electron-userland/electron-builder/issues/3984#issuecomment-504968246`);
104 }
105 return semver.coerce(version).format();
106}
107exports.computeElectronVersion = computeElectronVersion;
108function findFromPackageMetadata(packageData) {
109 for (const name of electronPackages) {
110 const devDependencies = packageData.devDependencies;
111 let dep = devDependencies == null ? null : devDependencies[name];
112 if (dep == null) {
113 const dependencies = packageData.dependencies;
114 dep = dependencies == null ? null : dependencies[name];
115 }
116 if (dep != null) {
117 return { name, version: dep };
118 }
119 }
120 return null;
121}
122//# sourceMappingURL=electronVersion.js.map
\No newline at end of file