Skip to content

Commit 86f1082

Browse files
authored
Handle inferring electron-prebuilt-compile versions better (#932)
Only apply the `electron-prebuilt-compile` workaround when Electron < 1.6.5
1 parent e686383 commit 86f1082

File tree

6 files changed

+34
-16
lines changed

6 files changed

+34
-16
lines changed

infer.js

+17-13
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const parseAuthor = require('parse-author')
66
const path = require('path')
77
const pify = require('pify')
88
const resolve = require('resolve')
9+
const semver = require('semver')
910

1011
function isMissingRequiredProperty (props) {
1112
return props.some(prop => prop === 'productName' || prop === 'dependencies.electron')
@@ -39,21 +40,24 @@ function getVersion (opts, electronProp) {
3940
// electron-prebuilt-compile cannot be resolved because `main` does not point
4041
// to a valid JS file.
4142
const electronVersion = electronProp.pkg[depType][packageName]
42-
if (!/^\d+\.\d+\.\d+/.test(electronVersion)) {
43-
throw new Error('Using electron-prebuilt-compile with Electron Packager requires specifying an exact Electron version')
44-
}
43+
const versionRange = new semver.Range(electronVersion)
44+
if (versionRange.intersects(new semver.Range('< 1.6.5'))) {
45+
if (!/^\d+\.\d+\.\d+/.test(electronVersion)) {
46+
throw new Error('Using electron-prebuilt-compile with Electron Packager requires specifying an exact Electron version')
47+
}
4548

46-
opts.electronVersion = electronVersion
47-
return Promise.resolve()
48-
} else {
49-
return pify(resolve, { multiArgs: true })(packageName, { basedir: path.dirname(src) })
50-
.then(res => {
51-
debug(`Inferring target Electron version from ${packageName} in ${src}`)
52-
const pkg = res[1]
53-
opts.electronVersion = pkg.version
54-
return null
55-
})
49+
opts.electronVersion = electronVersion
50+
return Promise.resolve()
51+
}
5652
}
53+
54+
return pify(resolve, { multiArgs: true })(packageName, { basedir: path.dirname(src) })
55+
.then(res => {
56+
debug(`Inferring target Electron version from ${packageName} in ${src}`)
57+
const pkg = res[1]
58+
opts.electronVersion = pkg.version
59+
return null
60+
})
5761
}
5862

5963
function handleMetadata (opts, result) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"main": "main.js",
3+
"productName": "MainJS",
4+
"devDependencies": {
5+
"electron-prebuilt-compile": "^1.4.15"
6+
}
7+
}

test/fixtures/infer-non-specific-electron-prebuilt-compile/node_modules/electron-prebuilt-compile/index.js

Whitespace-only changes.

test/fixtures/infer-non-specific-electron-prebuilt-compile/node_modules/electron-prebuilt-compile/package.json

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/fixtures/infer-non-specific-electron-prebuilt-compile/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
"main": "main.js",
33
"productName": "MainJS",
44
"devDependencies": {
5-
"electron-prebuilt-compile": "^1.4.15"
5+
"electron-prebuilt-compile": "^2.0.0"
66
}
77
}

test/infer.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const getMetadataFromPackageJSON = require('../infer')
55
const packager = require('..')
66
const path = require('path')
77
const pkgUp = require('pkg-up')
8+
const semver = require('semver')
89
const util = require('./_util')
910

1011
function inferElectronVersionTest (t, opts, fixture, packageName) {
@@ -14,7 +15,7 @@ function inferElectronVersionTest (t, opts, fixture, packageName) {
1415
return getMetadataFromPackageJSON([], opts, opts.dir)
1516
.then(() => {
1617
const packageJSON = require(path.join(opts.dir, 'package.json'))
17-
return t.is(opts.electronVersion, packageJSON.devDependencies[packageName], `The version should be inferred from installed ${packageName} version`)
18+
return t.true(semver.satisfies(opts.electronVersion, packageJSON.devDependencies[packageName]), `The version should be inferred from installed ${packageName} version`)
1819
})
1920
}
2021

@@ -86,6 +87,7 @@ function testInferWin32metadataAuthorObject (t, opts, author, expected, assertio
8687
util.testSinglePlatformParallel('infer using `electron-prebuilt` package', inferElectronVersionTest, 'basic', 'electron-prebuilt')
8788
util.testSinglePlatformParallel('infer using `electron-nightly` package', inferElectronVersionTest, 'infer-electron-nightly', 'electron-nightly')
8889
util.testSinglePlatformParallel('infer using `electron-prebuilt-compile` package', inferElectronVersionTest, 'infer-electron-prebuilt-compile', 'electron-prebuilt-compile')
90+
util.testSinglePlatformParallel('infer using non-exact `electron-prebuilt-compile` package', inferElectronVersionTest, 'infer-non-specific-electron-prebuilt-compile', 'electron-prebuilt-compile')
8991
util.testSinglePlatformParallel('infer using `electron` package only', inferMissingVersionTest)
9092
util.testSinglePlatformParallel('infer where `electron` version is preferred over `electron-prebuilt`', inferElectronVersionTest, 'basic-renamed-to-electron', 'electron')
9193
util.testSinglePlatformParallel('infer win32metadata', (t, opts) => {
@@ -119,4 +121,4 @@ util.testSinglePlatformParallel('do not infer win32metadata.CompanyName when aut
119121
util.testSinglePlatformParallel('infer missing fields test', inferFailureTest, 'infer-missing-fields')
120122
util.testSinglePlatformParallel('infer with bad fields test', inferFailureTest, 'infer-bad-fields')
121123
util.testSinglePlatformParallel('infer with malformed JSON test', inferFailureTest, 'infer-malformed-json')
122-
util.testSinglePlatformParallel('infer using a non-specific `electron-prebuilt-compile` package version', inferFailureTest, 'infer-non-specific-electron-prebuilt-compile')
124+
util.testSinglePlatformParallel('infer using a non-specific `electron-prebuilt-compile` package version when the package did not have a main file', inferFailureTest, 'infer-invalid-non-specific-electron-prebuilt-compile')

0 commit comments

Comments
 (0)