Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 17 additions & 13 deletions infer.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const parseAuthor = require('parse-author')
const path = require('path')
const pify = require('pify')
const resolve = require('resolve')
const semver = require('semver')

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

opts.electronVersion = electronVersion
return Promise.resolve()
} else {
return pify(resolve, { multiArgs: true })(packageName, { basedir: path.dirname(src) })
.then(res => {
debug(`Inferring target Electron version from ${packageName} in ${src}`)
const pkg = res[1]
opts.electronVersion = pkg.version
return null
})
opts.electronVersion = electronVersion
return Promise.resolve()
}
}

return pify(resolve, { multiArgs: true })(packageName, { basedir: path.dirname(src) })
.then(res => {
debug(`Inferring target Electron version from ${packageName} in ${src}`)
const pkg = res[1]
opts.electronVersion = pkg.version
return null
})
}

function handleMetadata (opts, result) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"main": "main.js",
"productName": "MainJS",
"devDependencies": {
"electron-prebuilt-compile": "^1.4.15"
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
"main": "main.js",
"productName": "MainJS",
"devDependencies": {
"electron-prebuilt-compile": "^1.4.15"
"electron-prebuilt-compile": "^2.0.0"
}
}
6 changes: 4 additions & 2 deletions test/infer.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const getMetadataFromPackageJSON = require('../infer')
const packager = require('..')
const path = require('path')
const pkgUp = require('pkg-up')
const semver = require('semver')
const util = require('./_util')

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

Expand Down Expand Up @@ -86,6 +87,7 @@ function testInferWin32metadataAuthorObject (t, opts, author, expected, assertio
util.testSinglePlatformParallel('infer using `electron-prebuilt` package', inferElectronVersionTest, 'basic', 'electron-prebuilt')
util.testSinglePlatformParallel('infer using `electron-nightly` package', inferElectronVersionTest, 'infer-electron-nightly', 'electron-nightly')
util.testSinglePlatformParallel('infer using `electron-prebuilt-compile` package', inferElectronVersionTest, 'infer-electron-prebuilt-compile', 'electron-prebuilt-compile')
util.testSinglePlatformParallel('infer using non-exact `electron-prebuilt-compile` package', inferElectronVersionTest, 'infer-non-specific-electron-prebuilt-compile', 'electron-prebuilt-compile')
util.testSinglePlatformParallel('infer using `electron` package only', inferMissingVersionTest)
util.testSinglePlatformParallel('infer where `electron` version is preferred over `electron-prebuilt`', inferElectronVersionTest, 'basic-renamed-to-electron', 'electron')
util.testSinglePlatformParallel('infer win32metadata', (t, opts) => {
Expand Down Expand Up @@ -119,4 +121,4 @@ util.testSinglePlatformParallel('do not infer win32metadata.CompanyName when aut
util.testSinglePlatformParallel('infer missing fields test', inferFailureTest, 'infer-missing-fields')
util.testSinglePlatformParallel('infer with bad fields test', inferFailureTest, 'infer-bad-fields')
util.testSinglePlatformParallel('infer with malformed JSON test', inferFailureTest, 'infer-malformed-json')
util.testSinglePlatformParallel('infer using a non-specific `electron-prebuilt-compile` package version', inferFailureTest, 'infer-non-specific-electron-prebuilt-compile')
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')