Version 1
[yaffs-website] / node_modules / xhr / README.md
diff --git a/node_modules/xhr/README.md b/node_modules/xhr/README.md
new file mode 100644 (file)
index 0000000..9046bde
--- /dev/null
@@ -0,0 +1,213 @@
+# xhr
+
+A small XMLHttpRequest wrapper. Designed for use with [browserify](http://browserify.org/), [webpack](https://webpack.github.io/) etc.
+
+API is a subset of [request](https://github.com/request/request) so that the same code can be used in the browser and Node.js.
+
+Browser support: IE8+ and everything else.
+
+## Example
+
+```js
+var xhr = require("xhr")
+
+xhr({
+    body: someJSONString,
+    uri: "/foo",
+    headers: {
+        "Content-Type": "application/json"
+    }
+}, function (err, resp, body) {
+    // check resp.statusCode
+})
+```
+
+## `var req = xhr(options, callback)`
+
+```js
+type XhrOptions = String | {
+    useXDR: Boolean?,
+    sync: Boolean?,
+    uri: String,
+    url: String,
+    method: String?,
+    timeout: Number?,
+    headers: Object?,
+    body: String?,
+    json: Object?,
+    username: String?,
+    password: String?,
+    withCredentials: Boolean?,
+    responseType: String?,
+    beforeSend: Function?
+}
+xhr := (XhrOptions, Callback<Response>) => Request
+```
+the returned object is either an [`XMLHttpRequest`][3] instance
+    or an [`XDomainRequest`][4] instance (if on IE8/IE9 &&
+    `options.useXDR` is set to `true`)
+
+Your callback will be called once with the arguments
+    ( [`Error`][5], `response` , `body` ) where the response is an object:
+```js
+{
+    body: Object||String,
+    statusCode: Number,
+    method: String,
+    headers: {},
+    url: String,
+    rawRequest: xhr
+}
+```
+ - `body`: HTTP response body - [`XMLHttpRequest.response`][6], [`XMLHttpRequest.responseText`][7] or
+    [`XMLHttpRequest.responseXML`][8] depending on the request type.
+ - `rawRequest`: Original  [`XMLHttpRequest`][3] instance
+    or [`XDomainRequest`][4] instance (if on IE8/IE9 &&
+    `options.useXDR` is set to `true`)
+ - `headers`: A collection of headers where keys are header names converted to lowercase
+
+
+Your callback will be called with an [`Error`][5] if there is an error in the browser that prevents sending the request.
+A HTTP 500 response is not going to cause an error to be returned.
+
+## Other signatures
+
+* `var req = xhr(url, callback)` -
+a simple string instead of the options. In this case, a GET request will be made to that url.
+
+* `var req = xhr(url, options, callback)` -
+the above may also be called with the standard set of options.
+
+### Convience methods
+* `var req = xhr.{post, put, patch, del, head, get}(url, callback)`
+* `var req = xhr.{post, put, patch, del, head, get}(options, callback)`
+* `var req = xhr.{post, put, patch, del, head, get}(url, options, callback)`
+
+The `xhr` module has convience functions attached that will make requests with the given method.
+Each function is named after its method, with the exception of `DELETE` which is called `xhr.del` for compatibility.
+
+The method shorthands may be combined with the url-first form of `xhr` for succinct and descriptive requests. For example,
+
+```js
+xhr.post('/post-to-me', function(err, resp) {
+  console.log(resp.body)
+})
+```
+
+or
+
+```js
+xhr.del('/delete-me', { headers: { my: 'auth' } }, function (err, resp) {
+  console.log(resp.statusCode);
+})
+```
+
+## Options
+
+### `options.method`
+
+Specify the method the [`XMLHttpRequest`][3] should be opened
+    with. Passed to [`XMLHttpRequest.open`][2]. Defaults to "GET"
+
+### `options.useXDR`
+
+Specify whether this is a cross origin (CORS) request for IE<10.
+    Switches IE to use [`XDomainRequest`][4] instead of `XMLHttpRequest`.
+    Ignored in other browsers.
+
+Note that headers cannot be set on an XDomainRequest instance.
+
+### `options.sync`
+
+Specify whether this is a synchrounous request. Note that when
+    this is true the callback will be called synchronously. In
+    most cases this option should not be used. Only use if you
+    know what you are doing!
+
+### `options.body`
+
+Pass in body to be send across the [`XMLHttpRequest`][3].
+    Generally should be a string. But anything that's valid as
+    a parameter to [`XMLHttpRequest.send`][1] should work  (Buffer for file, etc.).
+
+### `options.uri` or `options.url`
+
+The uri to send a request to. Passed to [`XMLHttpRequest.open`][2]. `options.url` and `options.uri` are aliases for each other.
+
+### `options.headers`
+
+An object of headers that should be set on the request. The
+    key, value pair is passed to [`XMLHttpRequest.setRequestHeader`][9]
+
+### `options.timeout`
+
+Number of miliseconds to wait for response. Defaults to 0 (no timeout). Ignored when `options.sync` is true.
+
+### `options.json`
+
+A valid JSON serializable value to be send to the server. If this
+    is set then we serialize the value and use that as the body.
+    We also set the Content-Type to `"application/json"`.
+
+Additionally the response body is parsed as JSON
+
+### `options.withCredentials`
+
+Specify whether user credentials are to be included in a cross-origin
+    request. Sets [`XMLHttpRequest.withCredentials`][10]. Defaults to false.
+
+A wildcard `*` cannot be used in the `Access-Control-Allow-Origin` header when `withCredentials` is true.
+    The header needs to specify your origin explicitly or browser will abort the request.
+
+### `options.responseType`
+
+Determines the data type of the `response`. Sets [`XMLHttpRequest.responseType`][11]. For example, a `responseType` of `document` will return a parsed `Document` object as the `response.body` for an XML resource.
+
+### `options.beforeSend`
+
+A function being called right before the `send` method of the `XMLHttpRequest` or `XDomainRequest` instance is called. The `XMLHttpRequest` or `XDomainRequest` instance is passed as an argument.
+
+### `options.xhr`
+
+Pass an `XMLHttpRequest` object (or something that acts like one) to use instead of constructing a new one using the `XMLHttpRequest` or `XDomainRequest` constructors. Useful for testing.
+
+## FAQ
+
+- Why is my server's JSON response not parsed? I returned the right content-type.
+  - See `options.json` - you can set it to `true` on a GET request to tell `xhr` to parse the response body.
+  - Without `options.json` body is returned as-is (a string or when `responseType` is set and the browser supports it - a result of parsing JSON or XML)
+- How do I send an object or array as POST body?
+  - `options.body` should be a string. You need to serialize your object before passing to `xhr` for sending.
+  - To serialize to JSON you can use
+   `options.json` instead of `options.body` for convenience - then `xhr` will do the serialization and set content-type accordingly.
+- Where's stream API? `.pipe()` etc.
+  - Not implemented. You can't reasonably have that in the browser.
+
+
+## Mocking Requests
+You can override the constructor used to create new requests for testing. When you're making a new request:
+
+```js
+xhr({ xhr: new MockXMLHttpRequest() })
+```
+
+or you can override the constructors used to create requests at the module level:
+
+```js
+xhr.XMLHttpRequest = MockXMLHttpRequest
+xhr.XDomainRequest = MockXDomainRequest
+```
+
+## MIT Licenced
+
+  [1]: http://xhr.spec.whatwg.org/#the-send()-method
+  [2]: http://xhr.spec.whatwg.org/#the-open()-method
+  [3]: http://xhr.spec.whatwg.org/#interface-xmlhttprequest
+  [4]: http://msdn.microsoft.com/en-us/library/ie/cc288060(v=vs.85).aspx
+  [5]: http://es5.github.com/#x15.11
+  [6]: http://xhr.spec.whatwg.org/#the-response-attribute
+  [7]: http://xhr.spec.whatwg.org/#the-responsetext-attribute
+  [8]: http://xhr.spec.whatwg.org/#the-responsexml-attribute
+  [9]: http://xhr.spec.whatwg.org/#the-setrequestheader()-method
+  [10]: http://xhr.spec.whatwg.org/#the-withcredentials-attribute
+  [11]: https://xhr.spec.whatwg.org/#the-responsetype-attribute