fix: support async child process methods without callback in asar (#15927)

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

* fix: support async child process methods without callback in asar (improved)
This commit is contained in:
Alex Greenland 2018-12-18 07:27:39 +00:00 коммит произвёл Cheng Zhao
Родитель 6c998aa4f2
Коммит dc93d94bc8
2 изменённых файлов: 19 добавлений и 3 удалений

Просмотреть файл

@ -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)
@ -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) {
@ -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)

Просмотреть файл

@ -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')