@@ -368,12 +368,6 @@ export function createRequest(opts: HttpsRequestOptions, useLegacy: boolean = tr
368368 ) ;
369369 }
370370
371- let dict = null ;
372- if ( opts . body ) {
373- dict = NSJSONSerialization . JSONObjectWithDataOptionsError ( NSString . stringWithString ( JSON . stringify ( opts . body ) ) . dataUsingEncoding ( NSUTF8StringEncoding ) , 0 as any ) ;
374- } else if ( opts . content ) {
375- dict = NSJSONSerialization . JSONObjectWithDataOptionsError ( NSString . stringWithString ( opts . content ) . dataUsingEncoding ( NSUTF8StringEncoding ) , 0 as any ) ;
376- }
377371
378372 manager . requestSerializer . timeoutInterval = opts . timeout ? opts . timeout : 10 ;
379373
@@ -467,29 +461,66 @@ export function createRequest(opts: HttpsRequestOptions, useLegacy: boolean = tr
467461 default :
468462 throw new Error ( 'method_not_supported_multipart' ) ;
469463 }
464+ } else if ( opts . method === 'PUT' ) {
465+ if ( opts . body instanceof File ) {
466+ const request = NSURLRequest . requestWithURL ( NSURL . URLWithString ( opts . url ) ) ;
467+ task = manager . uploadTaskWithRequestFromFileProgressCompletionHandler ( request , NSURL . fileURLWithPath ( opts . body . path ) , progress , ( response : NSURLResponse , responseObject : any , error : NSError ) => {
468+ if ( error ) {
469+ failure ( task , error ) ;
470+ } else {
471+ success ( task , responseObject ) ;
472+ }
473+ } ) ;
474+ } else {
475+ let data : NSData ;
476+ // TODO: add support for Buffers
477+ if ( opts . content instanceof NSData ) {
478+ data = opts . content ;
479+ } else if ( typeof opts . body === 'string' ) {
480+ data = NSString . stringWithString ( opts . body ) . dataUsingEncoding ( NSUTF8StringEncoding ) ;
481+ } else {
482+ data = NSString . stringWithString ( JSON . stringify ( opts . body ) ) . dataUsingEncoding ( NSUTF8StringEncoding ) ;
483+ }
484+ const request = NSURLRequest . requestWithURL ( NSURL . URLWithString ( opts . url ) ) ;
485+ task = manager . uploadTaskWithRequestFromDataProgressCompletionHandler ( request , data , progress , ( response : NSURLResponse , responseObject : any , error : NSError ) => {
486+ if ( error ) {
487+ failure ( task , error ) ;
488+ } else {
489+ success ( task , responseObject ) ;
490+ }
491+ } ) ;
492+ }
470493 } else {
471- switch ( opts . method ) {
472- case 'GET' :
473- task = manager . GETParametersHeadersProgressSuccessFailure ( opts . url , dict , headers , progress , success , failure ) ;
474- break ;
475- case 'POST' :
476- task = manager . POSTParametersHeadersProgressSuccessFailure ( opts . url , dict , headers , progress , success , failure ) ;
477- break ;
478- case 'PUT' :
479- task = manager . PUTParametersHeadersSuccessFailure ( opts . url , dict , headers , success , failure ) ;
480- break ;
481- case 'DELETE' :
482- task = manager . DELETEParametersHeadersSuccessFailure ( opts . url , dict , headers , success , failure ) ;
483- break ;
484- case 'PATCH' :
485- task = manager . PATCHParametersHeadersSuccessFailure ( opts . url , dict , headers , success , failure ) ;
486- break ;
487- case 'HEAD' :
488- task = manager . HEADParametersHeadersSuccessFailure ( opts . url , dict , headers , success , failure ) ;
489- break ;
490- default :
491- throw new Error ( 'method_not_supported_multipart' ) ;
494+ let dict = null ;
495+ if ( opts . body ) {
496+ dict = NSJSONSerialization . JSONObjectWithDataOptionsError ( NSString . stringWithString ( JSON . stringify ( opts . body ) ) . dataUsingEncoding ( NSUTF8StringEncoding ) , 0 as any ) ;
497+ } else if ( typeof opts . content === 'string' ) {
498+ dict = NSJSONSerialization . JSONObjectWithDataOptionsError ( NSString . stringWithString ( opts . content ) . dataUsingEncoding ( NSUTF8StringEncoding ) , 0 as any ) ;
492499 }
500+ task = manager . dataTaskWithHTTPMethodURLStringParametersHeadersUploadProgressDownloadProgressSuccessFailure ( opts . method , opts . url , dict , headers , progress , progress , success , failure ) ;
501+ // switch (opts.method) {
502+ // case 'GET':
503+ // task = manager.GETParametersHeadersProgressSuccessFailure(opts.url, dict, headers, progress, success, failure);
504+ // manager.requestSerializer.requestWithMethodURLStringParametersError(method, URLString, parameters)
505+ // break;
506+ // case 'POST':
507+ // task = manager.POSTParametersHeadersProgressSuccessFailure(opts.url, dict, headers, progress, success, failure);
508+ // break;
509+ // case 'PUT':
510+ // task = manager.PUTParametersHeadersSuccessFailure(opts.url, dict, headers, success, failure);
511+ // break;
512+ // case 'DELETE':
513+ // task = manager.DELETEParametersHeadersSuccessFailure(opts.url, dict, headers, success, failure);
514+ // break;
515+ // case 'PATCH':
516+ // task = manager.PATCHParametersHeadersSuccessFailure(opts.url, dict, headers, success, failure);
517+ // break;
518+ // case 'HEAD':
519+ // task = manager.HEADParametersHeadersSuccessFailure(opts.url, dict, headers, success, failure);
520+ // break;
521+ // default:
522+ // throw new Error('method_not_supported_multipart');
523+ // }
493524 }
494525 if ( task && tag ) {
495526 runningRequests [ tag ] = task ;
0 commit comments