Skip to content

Commit c3d1c97

Browse files
committed
Add types for responses.
1 parent d74a1f8 commit c3d1c97

8 files changed

+101
-55
lines changed

lib/cookie.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
declare var _default: {
1+
declare const _default: {
22
serialize: (object: any) => string;
3-
parse: (string: string) => {};
3+
parse: (string: string | undefined) => {};
44
assign: (string: any, key: any, value: any) => string;
55
parseSetString: (string: string) => string;
66
};

lib/index.d.ts

+21-10
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
1-
export interface Map {
1+
import { IResult } from '@mcrowe/result';
2+
export interface IMap {
23
[key: string]: string;
34
}
4-
declare class HeadlessBrowser {
5-
headers: Map;
6-
constructor(headers?: Map);
7-
get(opts: any): Promise<any>;
8-
setHeaders(headers: Map): void;
5+
export interface IResponseHeaders {
6+
'set-cookie'?: string[];
7+
'content-type'?: string;
8+
}
9+
export interface IHttpResponse {
10+
statusCode: number;
11+
body: string;
12+
headers: IResponseHeaders;
13+
}
14+
export declare type IRequestHeaders = IMap;
15+
export declare type IHttpResult = IResult<IHttpResponse>;
16+
export default class HeadlessBrowser {
17+
headers: IRequestHeaders;
18+
constructor(headers?: IRequestHeaders);
19+
get(opts: any): Promise<IHttpResult>;
20+
setHeaders(headers: IRequestHeaders): void;
921
setHeader(key: string, value: string): void;
1022
setCookie(key: string, value: string): void;
11-
getCookies(): Map;
12-
setCookies(cookies: Map | string): any;
23+
getCookies(): IMap;
24+
setCookies(cookies: IMap | string): any;
1325
getUserAgent(): string;
1426
setUserAgent(value: string): void;
1527
setAcceptEncoding(value: string): void;
16-
setCookiesFromResponse(res: any): void;
28+
setCookiesFromResponse(res: IHttpResponse): void;
1729
}
18-
export default HeadlessBrowser;

lib/index.js

+19-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
"use strict";
2+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3+
return new (P || (P = Promise))(function (resolve, reject) {
4+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7+
step((generator = generator.apply(thisArg, _arguments || [])).next());
8+
});
9+
};
210
Object.defineProperty(exports, "__esModule", { value: true });
11+
const result_1 = require("@mcrowe/result");
312
const Request = require("request");
413
const cookie_1 = require("./cookie");
514
function getRequest(opts) {
6-
return new Promise((resolve, reject) => {
15+
return new Promise((resolve, _reject) => {
716
Request.get(opts, (err, data) => {
817
if (err) {
9-
reject(err);
18+
resolve(result_1.Result.Error(err.message));
1019
}
1120
else {
12-
resolve(data);
21+
resolve(result_1.Result.OK(data));
1322
}
1423
});
1524
});
@@ -19,10 +28,13 @@ class HeadlessBrowser {
1928
this.headers = Object.assign({}, headers);
2029
}
2130
get(opts) {
22-
const defaults = { headers: this.headers };
23-
opts = Object.assign({}, defaults, opts);
24-
return getRequest(opts).then((res) => {
25-
this.setCookiesFromResponse(res);
31+
return __awaiter(this, void 0, void 0, function* () {
32+
const defaults = { headers: this.headers };
33+
opts = Object.assign({}, defaults, opts);
34+
const res = yield getRequest(opts);
35+
if (res.ok) {
36+
this.setCookiesFromResponse(res.data);
37+
}
2638
return res;
2739
});
2840
}

package.json

+6-7
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,24 @@
66
"license": "ISC",
77
"repository": "https://github.com/mcrowe/headless-browser",
88
"scripts": {
9-
"test": "./node_modules/mocha/bin/mocha -u qunit --recursive -r ./node_modules/ts-node/register test/*",
10-
"build": "./node_modules/typescript/bin/tsc"
9+
"test": "mocha -u qunit --recursive -r ./node_modules/ts-node/register test/*",
10+
"build": "tsc",
11+
"watch": "tsc -w"
1112
},
1213
"main": "lib/index.js",
1314
"typings": "lib/index",
1415
"files": [
1516
"lib/"
1617
],
1718
"dependencies": {
18-
"@types/bluebird": "^3.5.2",
19-
"@types/request": "0.0.42",
20-
"bluebird": "^3.4.7",
19+
"@mcrowe/result": "0.0.2",
2120
"request": "^2.79.0"
2221
},
2322
"devDependencies": {
2423
"@types/mocha": "^2.2.39",
2524
"@types/node": "^7.0.12",
2625
"mocha": "^3.2.0",
27-
"ts-node": "^2.1.0",
28-
"typescript": "^2.1.4"
26+
"ts-node": "^3.1.0",
27+
"typescript": "^2.4.1"
2928
}
3029
}

src/cookie.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ function serialize(object) {
1212
}
1313

1414

15-
function parse(string: string) {
15+
function parse(string: string | undefined) {
1616
if (!string) {
1717
return {}
1818
}

src/index.ts

+44-25
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,65 @@
1+
import { Result, IResult } from '@mcrowe/result'
12
import Request = require('request')
23
import Cookie from './cookie'
34

45

5-
function getRequest(opts): Promise<any> {
6-
return new Promise((resolve, reject) => {
6+
export interface IMap {
7+
[key: string]: string
8+
}
9+
10+
11+
export interface IResponseHeaders {
12+
'set-cookie'?: string[]
13+
'content-type'?: string
14+
}
15+
16+
17+
export interface IHttpResponse {
18+
statusCode: number
19+
body: string
20+
headers: IResponseHeaders
21+
}
22+
23+
export type IRequestHeaders = IMap
24+
25+
26+
export type IHttpResult = IResult<IHttpResponse>
27+
28+
29+
function getRequest(opts): Promise<IHttpResult> {
30+
return new Promise((resolve, _reject) => {
731
Request.get(opts, (err, data) => {
832
if (err) {
9-
reject(err)
33+
resolve( Result.Error(err.message) )
1034
} else {
11-
resolve(data)
35+
resolve( Result.OK(data) )
1236
}
1337
})
1438
})
1539
}
1640

1741

18-
export interface Map {
19-
[key: string]: string
20-
}
21-
22-
23-
class HeadlessBrowser {
42+
export default class HeadlessBrowser {
2443

25-
headers: Map
44+
headers: IRequestHeaders
2645

27-
constructor(headers: Map = {}) {
46+
constructor(headers: IRequestHeaders = {}) {
2847
this.headers = { ...headers }
2948
}
3049

31-
get(opts) {
50+
async get(opts): Promise<IHttpResult> {
3251
const defaults = {headers: this.headers}
3352
opts = Object.assign({}, defaults, opts)
34-
return getRequest(opts).then((res) => {
35-
this.setCookiesFromResponse(res)
36-
return res
37-
})
53+
const res = await getRequest(opts)
54+
55+
if (res.ok) {
56+
this.setCookiesFromResponse(res.data)
57+
}
58+
59+
return res
3860
}
3961

40-
setHeaders(headers: Map) {
62+
setHeaders(headers: IRequestHeaders) {
4163
this.headers = headers
4264
}
4365

@@ -50,11 +72,11 @@ class HeadlessBrowser {
5072
this.setHeader('Cookie', cookie)
5173
}
5274

53-
getCookies(): Map {
75+
getCookies(): IMap {
5476
return Cookie.parse(this.headers['Cookie'])
5577
}
5678

57-
setCookies(cookies: Map | string) {
79+
setCookies(cookies: IMap | string) {
5880
if (typeof cookies == 'string') {
5981
return this.setCookies(Cookie.parse(cookies))
6082
} else {
@@ -76,7 +98,7 @@ class HeadlessBrowser {
7698
this.setHeader('Accept-Encoding', value)
7799
}
78100

79-
setCookiesFromResponse(res) {
101+
setCookiesFromResponse(res: IHttpResponse) {
80102
const resCookies = res.headers['set-cookie']
81103

82104
if (resCookies) {
@@ -85,7 +107,4 @@ class HeadlessBrowser {
85107
}
86108
}
87109

88-
}
89-
90-
91-
export default HeadlessBrowser
110+
}

test/index.test.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ test('set cookies from response', () => {
1111
const cookies = ['NID']
1212

1313
return browser.get({uri: 'http://www.google.com'}).then(res => {
14-
assert.equal(200, res.statusCode)
15-
assert.deepEqual(cookies, Object.keys(browser.getCookies()))
14+
assert(res.ok)
15+
16+
if (res.ok) {
17+
assert.equal(200, res.data.statusCode)
18+
assert.deepEqual(cookies, Object.keys(browser.getCookies()))
19+
}
1620
})
1721
})

tsconfig.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"module": "commonjs",
44
"declaration": true,
55
"outDir": "lib/",
6-
"target": "es2015"
6+
"target": "es2015",
7+
"strictNullChecks": true
78
},
89
"include": [
910
"src/**/*"

0 commit comments

Comments
 (0)