mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
b1c4f3aec4
- Implements Lerna - Moves all source code into `packages/next` - Keeps integration tests in the root directory
27 lines
870 B
JavaScript
27 lines
870 B
JavaScript
const kCustomPromisifyArgsSymbol = Symbol('customPromisifyArgs')
|
|
module.exports = function promisify (original) {
|
|
// Names to create an object from in case the callback receives multiple
|
|
// arguments, e.g. ['stdout', 'stderr'] for child_process.exec.
|
|
const argumentNames = original[kCustomPromisifyArgsSymbol]
|
|
|
|
return function fn (...args) {
|
|
return new Promise((resolve, reject) => {
|
|
try {
|
|
original.call(this, ...args, (err, ...values) => {
|
|
if (err) {
|
|
reject(err)
|
|
} else if (argumentNames !== undefined && values.length > 1) {
|
|
const obj = {}
|
|
for (var i = 0; i < argumentNames.length; i++) { obj[argumentNames[i]] = values[i] }
|
|
resolve(obj)
|
|
} else {
|
|
resolve(values[0])
|
|
}
|
|
})
|
|
} catch (err) {
|
|
reject(err)
|
|
}
|
|
})
|
|
}
|
|
}
|