npm: Upgrade to 1.3.19
[platform/upstream/nodejs.git] / deps / npm / node_modules / request / index.js
1 // Copyright 2010-2012 Mikeal Rogers
2 //
3 //    Licensed under the Apache License, Version 2.0 (the "License");
4 //    you may not use this file except in compliance with the License.
5 //    You may obtain a copy of the License at
6 //
7 //        http://www.apache.org/licenses/LICENSE-2.0
8 //
9 //    Unless required by applicable law or agreed to in writing, software
10 //    distributed under the License is distributed on an "AS IS" BASIS,
11 //    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 //    See the License for the specific language governing permissions and
13 //    limitations under the License.
14
15 var optional = require('./lib/optional')
16   , cookie = optional('tough-cookie')
17   , Cookie = cookie && cookie.Cookie
18   , CookieJar = cookie && cookie.CookieJar
19   , cookieJar = CookieJar && new CookieJar
20
21   , copy = require('./lib/copy')
22   , Request = require('./request')
23   ;
24
25
26
27 // organize params for patch, post, put, head, del
28 function initParams(uri, options, callback) {
29   if ((typeof options === 'function') && !callback) callback = options
30   if (options && typeof options === 'object') {
31     options.uri = uri
32   } else if (typeof uri === 'string') {
33     options = {uri:uri}
34   } else {
35     options = uri
36     uri = options.uri
37   }
38   return { uri: uri, options: options, callback: callback }
39 }
40
41 function request (uri, options, callback) {
42   if (typeof uri === 'undefined') throw new Error('undefined is not a valid uri or options object.')
43   if ((typeof options === 'function') && !callback) callback = options
44   if (options && typeof options === 'object') {
45     options.uri = uri
46   } else if (typeof uri === 'string') {
47     options = {uri:uri}
48   } else {
49     options = uri
50   }
51
52   options = copy(options)
53
54   if (callback) options.callback = callback
55   var r = new Request(options)
56   return r
57 }
58
59 module.exports = request
60
61 request.Request = Request;
62
63 request.debug = process.env.NODE_DEBUG && /request/.test(process.env.NODE_DEBUG)
64
65 request.initParams = initParams
66
67 request.defaults = function (options, requester) {
68   var def = function (method) {
69     var d = function (uri, opts, callback) {
70       var params = initParams(uri, opts, callback)
71       for (var i in options) {
72         if (params.options[i] === undefined) params.options[i] = options[i]
73       }
74       if(typeof requester === 'function') {
75         if(method === request) {
76           method = requester
77         } else {
78           params.options._requester = requester
79         }
80       }
81       return method(params.options, params.callback)
82     }
83     return d
84   }
85   var de = def(request)
86   de.get = def(request.get)
87   de.patch = def(request.patch)
88   de.post = def(request.post)
89   de.put = def(request.put)
90   de.head = def(request.head)
91   de.del = def(request.del)
92   de.cookie = def(request.cookie)
93   de.jar = request.jar
94   return de
95 }
96
97 function requester(params) {
98   if(typeof params.options._requester === 'function') {
99     return params.options._requester
100   } else {
101     return request
102   }
103 }
104
105 request.forever = function (agentOptions, optionsArg) {
106   var options = {}
107   if (optionsArg) {
108     for (var option in optionsArg) {
109       options[option] = optionsArg[option]
110     }
111   }
112   if (agentOptions) options.agentOptions = agentOptions
113   options.forever = true
114   return request.defaults(options)
115 }
116
117 request.get = request
118 request.post = function (uri, options, callback) {
119   var params = initParams(uri, options, callback)
120   params.options.method = 'POST'
121   return requester(params)(params.uri || null, params.options, params.callback)
122 }
123 request.put = function (uri, options, callback) {
124   var params = initParams(uri, options, callback)
125   params.options.method = 'PUT'
126   return requester(params)(params.uri || null, params.options, params.callback)
127 }
128 request.patch = function (uri, options, callback) {
129   var params = initParams(uri, options, callback)
130   params.options.method = 'PATCH'
131   return requester(params)(params.uri || null, params.options, params.callback)
132 }
133 request.head = function (uri, options, callback) {
134   var params = initParams(uri, options, callback)
135   params.options.method = 'HEAD'
136   if (params.options.body ||
137       params.options.requestBodyStream ||
138       (params.options.json && typeof params.options.json !== 'boolean') ||
139       params.options.multipart) {
140     throw new Error("HTTP HEAD requests MUST NOT include a request body.")
141   }
142
143   return requester(params)(params.uri || null, params.options, params.callback)
144 }
145 request.del = function (uri, options, callback) {
146   var params = initParams(uri, options, callback)
147   params.options.method = 'DELETE'
148   return requester(params)(params.uri || null, params.options, params.callback)
149 }
150 request.jar = function () {
151   return new CookieJar
152 }
153 request.cookie = function (str) {
154   if (str && str.uri) str = str.uri
155   if (typeof str !== 'string') throw new Error("The cookie function only accepts STRING as param")
156   return new Cookie(str)
157 }