Modified the http module to remove the cyclic references. Added promises.d.ts.

This commit is contained in:
atanasovg
2014-05-21 16:27:13 +03:00
parent 1dd3a5f9b5
commit db987a361d
19 changed files with 169 additions and 37 deletions

74
http/http-request.ios.ts Normal file
View File

@ -0,0 +1,74 @@
/**
* iOS specific http request implementation.
*/
import promises = require("promises");
import http = require("http");
export function request(options: http.HttpRequestOptions): promises.Promise<http.HttpResponse> {
var d = promises.defer<http.HttpResponse>();
try {
var sessionConfig = Foundation.NSURLSessionConfiguration.defaultSessionConfiguration();
var queue = Foundation.NSOperationQueue.mainQueue();
var session = Foundation.NSURLSession.sessionWithConfigurationDelegateDelegateQueue(
sessionConfig, null, queue);
var urlRequest = Foundation.NSMutableURLRequest.requestWithURL(
Foundation.NSURL.URLWithString(options.url));
urlRequest.setHTTPMethod(typeof options.method !== "undefined" ? options.method : "GET");
if (options.headers) {
for (var header in options.headers) {
urlRequest.setValueForHTTPHeaderField(options.headers[header], header);
}
}
if (typeof options.timeout == "number") {
urlRequest.setTimeoutInterval(options.timeout * 1000);
}
if (typeof options.content == "string") {
urlRequest.setHTTPBody(Foundation.NSString.initWithString(options.content).dataUsingEncoding(4));
}
else {
urlRequest.setHTTPBody(options.content);
}
var dataTask = session.dataTaskWithRequestCompletionHandler(urlRequest,
function (data, response, error) {
if (error) {
d.reject(new Error(error.localizedDescription()));
} else {
var headers = {};
var headerFields = response.allHeaderFields();
var keys = headerFields.allKeys();
for (var i = 0, l = keys.count(); i < l; i++) {
var key = keys.objectAtIndex(i);
headers[key] = headerFields.valueForKey(key);
}
d.resolve({
content: {
raw: data,
toString: () => { return NSDataToString(data); },
toJSON: () => { return JSON.parse(NSDataToString(data)); },
toImage: () => { return require("image-source").fromData(data); }
},
statusCode: response.statusCode(),
headers: headers
});
}
});
dataTask.resume();
} catch (ex) {
d.reject(ex);
}
return d.promise();
}
function NSDataToString(data: any): string {
return Foundation.NSString.initWithDataEncoding(data, 4).toString();
}