123456789101112131415161718192021222324252627282930313233343536 |
- 'use strict'
-
- const { promisify } = require('util')
-
- const handler = {
- get: function (target, prop, receiver) {
- if (typeof target[prop] !== 'function') {
- return target[prop]
- }
- if (target[prop][promisify.custom]) {
- return function () {
- return Reflect.get(target, prop, receiver)[promisify.custom].apply(target, arguments)
- }
- }
- return function () {
- return new Promise((resolve, reject) => {
- Reflect.get(target, prop, receiver).apply(target, [...arguments, function (err, result) {
- if (err) {
- return reject(err)
- }
- resolve(result)
- }])
- })
- }
- }
- }
-
- module.exports = function (thingToPromisify) {
- if (typeof thingToPromisify === 'function') {
- return promisify(thingToPromisify)
- }
- if (typeof thingToPromisify === 'object') {
- return new Proxy(thingToPromisify, handler)
- }
- throw new TypeError('Can only promisify functions or objects')
- }
|