@@ -110,7 +110,7 @@ function requestAPI (config, path, args, qs, files, buffer, cb) {
110110// -- Interface
111111
112112exports = module . exports = function getRequestAPI ( config ) {
113- return function ( path , args , qs , files , buffer , cb ) {
113+ var send = function ( path , args , qs , files , buffer , cb ) {
114114 if ( typeof buffer === 'function' ) {
115115 cb = buffer
116116 buffer = false
@@ -127,4 +127,41 @@ exports = module.exports = function getRequestAPI (config) {
127127
128128 return requestAPI ( config , path , args , qs , files , buffer , cb )
129129 }
130+
131+ // Wraps the 'send' function such that an asynchronous transform may be
132+ // applied to its result before passing it on to either its callback or
133+ // promise.
134+ send . withTransform = function ( transform ) {
135+ return function ( path , args , qs , files , buffer , cb ) {
136+ if ( typeof buffer === 'function' ) {
137+ cb = buffer
138+ buffer = false
139+ }
140+
141+ var p = send ( path , args , qs , files , buffer , wrap ( cb ) )
142+
143+ if ( p instanceof Promise ) {
144+ return p . then ( ( res ) => {
145+ return new Promise ( function ( resolve , reject ) {
146+ transform ( null , res , send , function ( err , res ) {
147+ if ( err ) reject ( err )
148+ else resolve ( res )
149+ } )
150+ } )
151+ } )
152+ } else {
153+ return p
154+ }
155+
156+ function wrap ( done ) {
157+ if ( done ) {
158+ return function ( err , res ) {
159+ transform ( err , res , send , done )
160+ }
161+ }
162+ }
163+ }
164+ }
165+
166+ return send
130167}
0 commit comments