Skip to content

Commit

Permalink
fix: support async child process methods without callback in asar (#1…
Browse files Browse the repository at this point in the history
…5927)

* fix: support async child process methods without callback in asar

* fix: support async child process methods without callback in asar (improved)
  • Loading branch information
alexgreenland authored and Cheng Zhao committed Dec 18, 2018
1 parent 6c998aa commit dc93d94
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
10 changes: 7 additions & 3 deletions lib/common/asar.js
Expand Up @@ -143,10 +143,10 @@
return error
}

const overrideAPISync = function (module, name, pathArgumentIndex) {
const overrideAPISync = function (module, name, pathArgumentIndex, fromAsync) {
if (pathArgumentIndex == null) pathArgumentIndex = 0
const old = module[name]
module[name] = function () {
const func = function () {
const pathArgument = arguments[pathArgumentIndex]
const { isAsar, asarPath, filePath } = splitPath(pathArgument)
if (!isAsar) return old.apply(this, arguments)
Expand All @@ -160,6 +160,10 @@
arguments[pathArgumentIndex] = newPath
return old.apply(this, arguments)
}
if (fromAsync) {
return func
}
module[name] = func
}

const overrideAPI = function (module, name, pathArgumentIndex) {
Expand All @@ -172,7 +176,7 @@

const callback = arguments[arguments.length - 1]
if (typeof callback !== 'function') {
return overrideAPISync(module, name, pathArgumentIndex)
return overrideAPISync(module, name, pathArgumentIndex, true).apply(this, arguments)
}

const archive = getOrCreateArchive(asarPath)
Expand Down
12 changes: 12 additions & 0 deletions spec/asar-spec.js
Expand Up @@ -912,6 +912,18 @@ describe('asar package', function () {
})
})

it('executes binaries without callback', function (done) {
const process = execFile(echo, ['test'])
process.on('close', function (code) {
assert.strictEqual(code, 0)
done()
})
process.on('error', function () {
assert.fail()
done()
})
})

it('execFileSync executes binaries', function () {
const output = execFileSync(echo, ['test'])
assert.strictEqual(String(output), 'test\n')
Expand Down

0 comments on commit dc93d94

Please sign in to comment.