jedmao/iso-http

View on GitHub
lib/node/Http.ts

Summary

Maintainability
A
2 hrs
Test Coverage
/// <reference path="../../bower_components/dt-node/node.d.ts" />
/* istanbul ignore next: TypeScript extend */

import IsoHttp = require('../IsoHttp');
import http = require('http');
import url = require('url');

module Http {

    export function request(
        options: IsoHttp.RequestOptions,
        resolve?: IsoHttp.ResolveCallback,
        reject?: IsoHttp.RejectCallback) {
        new Agent(options).send(resolve, reject);
    }

    export class Agent extends IsoHttp.Agent {

        send(resolve?: IsoHttp.ResolveCallback, reject?: IsoHttp.RejectCallback) {
            var parsedUrl = url.parse(this.url);
            var options: any = {
                host: parsedUrl.host,
                hostname: parsedUrl.hostname,
                method: this.method,
                path: parsedUrl.path,
                headers: this.headers,
            };
            /* istanbul ignore else */
            if (parsedUrl.port) {
                options.port = parseInt(parsedUrl.port, 10);
            }
            var req = http.request(options, response => {
                if (typeof resolve !== 'function') {
                    return;
                }
                response.setEncoding('utf8');
                response.on('data', text => {
                    resolve({
                        status: response.statusCode,
                        headers: response.headers,
                        text: text
                    });
                });
            });
            if (typeof reject === 'function') {
                req.on('error', err => {
                    reject(this.addRequestInfo(err));
                });
            }
            req.end();
        }

    }

}

export = Http;