-
Notifications
You must be signed in to change notification settings - Fork 8
/
util.js
128 lines (111 loc) · 2.85 KB
/
util.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*!
*
* util.js is a collection of util functions
*
* Copyright(c) 2011 Sven Pfleiderer.
* MIT Licensed
*
* @author pfleidi
*/
/* Module dependencies */
var Url = require('url');
/**
* lookup table for all HTTP status codes
*
* @api public
*/
exports.codes = {
/* 1XX Informational */
//'100': 'continue',
//'101': 'switching-protocols',
/* 2XX Successful */
'200': 'ok',
'201': 'created',
'202': 'accepted',
'203': 'non-authorative-information',
'204': 'no-content',
'205': 'reset-content',
'207': 'partial-content',
/* 3XX Redirection */
'300': 'multiple-choices',
'301': 'moved-permanently',
'302': 'found',
'303': 'see-other',
'304': 'not-modified',
'305': 'use-proxy',
'307': 'temporary-redirect',
/* 4XX Client Error */
'400': 'bad-request',
'401': 'unauthorized',
'402': 'payment-required',
'403': 'forbidden',
'404': 'not-found',
'405': 'method-not-allowed',
'406': 'not-acceptable',
'407': 'proxy-authentication-required',
'408': 'request-timeout',
'409': 'conflict',
'410': 'gone',
'411': 'length-required',
'412': 'precondition-failed',
'413': 'request-entity-too-large',
'414': 'request-uri-too-long',
'415': 'unsupported-media-type',
'416': 'request-range-not-satisfiable',
'417': 'expectation-failed',
/* 5XX Server Error */
'500': 'internal-server-error',
'501': 'not-implemented',
'502': 'bad-gateway',
'503': 'service-unavailable',
'504': 'gateway-timeout',
'505': 'http-version-not-supported'
};
/**
* Take two objects and merge their attributes
*
* @param {Object} defaults
* @param {Object} custom
*
* @return {Object} new merged object
* @api public
*/
var mergeHeaders = exports.mergeHeaders = function mergeHeaders(defaults, custom) {
var obj = {};
function _normalizeKeys(toMerge) {
function _normalizeKey(key) {
return key.split('-').map(function (part) {
return part.charAt(0).toUpperCase() + part.substring(1);
}).join('-');
}
Object.keys(toMerge).forEach(function (key) {
var normKey = _normalizeKey(key);
obj[normKey] = toMerge[key];
});
}
_normalizeKeys(defaults);
if (!custom) {
return obj;
}
_normalizeKeys(custom);
return obj;
};
/**
* Parse an URL an add some needed properties
*
* @param {String} url
* @return {Object}
* @api public
*/
exports.parseUrl = function parseUrl(url) {
var parsedUrl = Url.parse(url);
var container = {};
container.port = parsedUrl.port || ((parsedUrl.protocol === 'https:') ? '443' : '80');
container.queryparms = parsedUrl.query ? '?' + parsedUrl.query : '';
container.hash = parsedUrl.hash || '';
container.path = (parsedUrl.pathname || '/') + container.queryparms + container.hash;
container.host = parsedUrl.host;
container.hostname = parsedUrl.hostname;
container.protocol = parsedUrl.protocol;
return container;
};