mirror of
https://github.com/KevinMidboe/zoff.git
synced 2025-10-29 18:00:23 +00:00
Added some updates on node_modules and fixed tab width issue in chat
This commit is contained in:
76
server/node_modules/express/node_modules/accepts/node_modules/negotiator/HISTORY.md
generated
vendored
Normal file
76
server/node_modules/express/node_modules/accepts/node_modules/negotiator/HISTORY.md
generated
vendored
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
0.5.3 / 2015-05-10
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix media type parameter matching to be case-insensitive
|
||||||
|
|
||||||
|
0.5.2 / 2015-05-06
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix comparing media types with quoted values
|
||||||
|
* Fix splitting media types with quoted commas
|
||||||
|
|
||||||
|
0.5.1 / 2015-02-14
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix preference sorting to be stable for long acceptable lists
|
||||||
|
|
||||||
|
0.5.0 / 2014-12-18
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix list return order when large accepted list
|
||||||
|
* Fix missing identity encoding when q=0 exists
|
||||||
|
* Remove dynamic building of Negotiator class
|
||||||
|
|
||||||
|
0.4.9 / 2014-10-14
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix error when media type has invalid parameter
|
||||||
|
|
||||||
|
0.4.8 / 2014-09-28
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix all negotiations to be case-insensitive
|
||||||
|
* Stable sort preferences of same quality according to client order
|
||||||
|
* Support Node.js 0.6
|
||||||
|
|
||||||
|
0.4.7 / 2014-06-24
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Handle invalid provided languages
|
||||||
|
* Handle invalid provided media types
|
||||||
|
|
||||||
|
0.4.6 / 2014-06-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Order by specificity when quality is the same
|
||||||
|
|
||||||
|
0.4.5 / 2014-05-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix regression in empty header handling
|
||||||
|
|
||||||
|
0.4.4 / 2014-05-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix behaviors when headers are not present
|
||||||
|
|
||||||
|
0.4.3 / 2014-04-16
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Handle slashes on media params correctly
|
||||||
|
|
||||||
|
0.4.2 / 2014-02-28
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix media type sorting
|
||||||
|
* Handle media types params strictly
|
||||||
|
|
||||||
|
0.4.1 / 2014-01-16
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Use most specific matches
|
||||||
|
|
||||||
|
0.4.0 / 2014-01-09
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Remove preferred prefix from methods
|
||||||
62
server/node_modules/express/node_modules/accepts/node_modules/negotiator/index.js
generated
vendored
Normal file
62
server/node_modules/express/node_modules/accepts/node_modules/negotiator/index.js
generated
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
var preferredCharsets = require('./lib/charset');
|
||||||
|
var preferredEncodings = require('./lib/encoding');
|
||||||
|
var preferredLanguages = require('./lib/language');
|
||||||
|
var preferredMediaTypes = require('./lib/mediaType');
|
||||||
|
|
||||||
|
module.exports = Negotiator;
|
||||||
|
Negotiator.Negotiator = Negotiator;
|
||||||
|
|
||||||
|
function Negotiator(request) {
|
||||||
|
if (!(this instanceof Negotiator)) {
|
||||||
|
return new Negotiator(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.request = request;
|
||||||
|
}
|
||||||
|
|
||||||
|
Negotiator.prototype.charset = function charset(available) {
|
||||||
|
var set = this.charsets(available);
|
||||||
|
return set && set[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
Negotiator.prototype.charsets = function charsets(available) {
|
||||||
|
return preferredCharsets(this.request.headers['accept-charset'], available);
|
||||||
|
};
|
||||||
|
|
||||||
|
Negotiator.prototype.encoding = function encoding(available) {
|
||||||
|
var set = this.encodings(available);
|
||||||
|
return set && set[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
Negotiator.prototype.encodings = function encodings(available) {
|
||||||
|
return preferredEncodings(this.request.headers['accept-encoding'], available);
|
||||||
|
};
|
||||||
|
|
||||||
|
Negotiator.prototype.language = function language(available) {
|
||||||
|
var set = this.languages(available);
|
||||||
|
return set && set[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
Negotiator.prototype.languages = function languages(available) {
|
||||||
|
return preferredLanguages(this.request.headers['accept-language'], available);
|
||||||
|
};
|
||||||
|
|
||||||
|
Negotiator.prototype.mediaType = function mediaType(available) {
|
||||||
|
var set = this.mediaTypes(available);
|
||||||
|
return set && set[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
Negotiator.prototype.mediaTypes = function mediaTypes(available) {
|
||||||
|
return preferredMediaTypes(this.request.headers.accept, available);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Backwards compatibility
|
||||||
|
Negotiator.prototype.preferredCharset = Negotiator.prototype.charset;
|
||||||
|
Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;
|
||||||
|
Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;
|
||||||
|
Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;
|
||||||
|
Negotiator.prototype.preferredLanguage = Negotiator.prototype.language;
|
||||||
|
Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages;
|
||||||
|
Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;
|
||||||
|
Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;
|
||||||
9
server/node_modules/express/node_modules/content-type/HISTORY.md
generated
vendored
Normal file
9
server/node_modules/express/node_modules/content-type/HISTORY.md
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
1.0.1 / 2015-02-13
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Improve missing `Content-Type` header error message
|
||||||
|
|
||||||
|
1.0.0 / 2015-02-01
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Initial implementation, derived from `media-typer@0.3.0`
|
||||||
22
server/node_modules/express/node_modules/content-type/LICENSE
generated
vendored
Normal file
22
server/node_modules/express/node_modules/content-type/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
(The MIT License)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Douglas Christopher Wilson
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
'Software'), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
92
server/node_modules/express/node_modules/content-type/README.md
generated
vendored
Normal file
92
server/node_modules/express/node_modules/content-type/README.md
generated
vendored
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
# content-type
|
||||||
|
|
||||||
|
[![NPM Version][npm-image]][npm-url]
|
||||||
|
[![NPM Downloads][downloads-image]][downloads-url]
|
||||||
|
[![Node.js Version][node-version-image]][node-version-url]
|
||||||
|
[![Build Status][travis-image]][travis-url]
|
||||||
|
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||||
|
|
||||||
|
Create and parse HTTP Content-Type header according to RFC 7231
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm install content-type
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
```js
|
||||||
|
var contentType = require('content-type')
|
||||||
|
```
|
||||||
|
|
||||||
|
### contentType.parse(string)
|
||||||
|
|
||||||
|
```js
|
||||||
|
var obj = contentType.parse('image/svg+xml; charset=utf-8')
|
||||||
|
```
|
||||||
|
|
||||||
|
Parse a content type string. This will return an object with the following
|
||||||
|
properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):
|
||||||
|
|
||||||
|
- `type`: The media type (the type and subtype, always lower case).
|
||||||
|
Example: `'image/svg+xml'`
|
||||||
|
|
||||||
|
- `parameters`: An object of the parameters in the media type (name of parameter
|
||||||
|
always lower case). Example: `{charset: 'utf-8'}`
|
||||||
|
|
||||||
|
Throws a `TypeError` if the string is missing or invalid.
|
||||||
|
|
||||||
|
### contentType.parse(req)
|
||||||
|
|
||||||
|
```js
|
||||||
|
var obj = contentType.parse(req)
|
||||||
|
```
|
||||||
|
|
||||||
|
Parse the `content-type` header from the given `req`. Short-cut for
|
||||||
|
`contentType.parse(req.headers['content-type'])`.
|
||||||
|
|
||||||
|
Throws a `TypeError` if the `Content-Type` header is missing or invalid.
|
||||||
|
|
||||||
|
### contentType.parse(res)
|
||||||
|
|
||||||
|
```js
|
||||||
|
var obj = contentType.parse(res)
|
||||||
|
```
|
||||||
|
|
||||||
|
Parse the `content-type` header set on the given `res`. Short-cut for
|
||||||
|
`contentType.parse(res.getHeader('content-type'))`.
|
||||||
|
|
||||||
|
Throws a `TypeError` if the `Content-Type` header is missing or invalid.
|
||||||
|
|
||||||
|
### contentType.format(obj)
|
||||||
|
|
||||||
|
```js
|
||||||
|
var str = contentType.format({type: 'image/svg+xml'})
|
||||||
|
```
|
||||||
|
|
||||||
|
Format an object into a content type string. This will return a string of the
|
||||||
|
content type for the given object with the following properties (examples are
|
||||||
|
shown that produce the string `'image/svg+xml; charset=utf-8'`):
|
||||||
|
|
||||||
|
- `type`: The media type (will be lower-cased). Example: `'image/svg+xml'`
|
||||||
|
|
||||||
|
- `parameters`: An object of the parameters in the media type (name of the
|
||||||
|
parameter will be lower-cased). Example: `{charset: 'utf-8'}`
|
||||||
|
|
||||||
|
Throws a `TypeError` if the object contains an invalid type or parameter names.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
||||||
|
|
||||||
|
[npm-image]: https://img.shields.io/npm/v/content-type.svg
|
||||||
|
[npm-url]: https://npmjs.org/package/content-type
|
||||||
|
[node-version-image]: https://img.shields.io/node/v/content-type.svg
|
||||||
|
[node-version-url]: http://nodejs.org/download/
|
||||||
|
[travis-image]: https://img.shields.io/travis/jshttp/content-type/master.svg
|
||||||
|
[travis-url]: https://travis-ci.org/jshttp/content-type
|
||||||
|
[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-type/master.svg
|
||||||
|
[coveralls-url]: https://coveralls.io/r/jshttp/content-type
|
||||||
|
[downloads-image]: https://img.shields.io/npm/dm/content-type.svg
|
||||||
|
[downloads-url]: https://npmjs.org/package/content-type
|
||||||
214
server/node_modules/express/node_modules/content-type/index.js
generated
vendored
Normal file
214
server/node_modules/express/node_modules/content-type/index.js
generated
vendored
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
/*!
|
||||||
|
* content-type
|
||||||
|
* Copyright(c) 2015 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RegExp to match *( ";" parameter ) in RFC 7231 sec 3.1.1.1
|
||||||
|
*
|
||||||
|
* parameter = token "=" ( token / quoted-string )
|
||||||
|
* token = 1*tchar
|
||||||
|
* tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
|
||||||
|
* / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
|
||||||
|
* / DIGIT / ALPHA
|
||||||
|
* ; any VCHAR, except delimiters
|
||||||
|
* quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE
|
||||||
|
* qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text
|
||||||
|
* obs-text = %x80-FF
|
||||||
|
* quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )
|
||||||
|
*/
|
||||||
|
var paramRegExp = /; *([!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+) */g
|
||||||
|
var textRegExp = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/
|
||||||
|
var tokenRegExp = /^[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+$/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RegExp to match quoted-pair in RFC 7230 sec 3.2.6
|
||||||
|
*
|
||||||
|
* quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )
|
||||||
|
* obs-text = %x80-FF
|
||||||
|
*/
|
||||||
|
var qescRegExp = /\\([\u000b\u0020-\u00ff])/g
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6
|
||||||
|
*/
|
||||||
|
var quoteRegExp = /([\\"])/g
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RegExp to match type in RFC 6838
|
||||||
|
*
|
||||||
|
* media-type = type "/" subtype
|
||||||
|
* type = token
|
||||||
|
* subtype = token
|
||||||
|
*/
|
||||||
|
var typeRegExp = /^[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+\/[!#$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+$/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports.format = format
|
||||||
|
exports.parse = parse
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format object to media type.
|
||||||
|
*
|
||||||
|
* @param {object} obj
|
||||||
|
* @return {string}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function format(obj) {
|
||||||
|
if (!obj || typeof obj !== 'object') {
|
||||||
|
throw new TypeError('argument obj is required')
|
||||||
|
}
|
||||||
|
|
||||||
|
var parameters = obj.parameters
|
||||||
|
var type = obj.type
|
||||||
|
|
||||||
|
if (!type || !typeRegExp.test(type)) {
|
||||||
|
throw new TypeError('invalid type')
|
||||||
|
}
|
||||||
|
|
||||||
|
var string = type
|
||||||
|
|
||||||
|
// append parameters
|
||||||
|
if (parameters && typeof parameters === 'object') {
|
||||||
|
var param
|
||||||
|
var params = Object.keys(parameters).sort()
|
||||||
|
|
||||||
|
for (var i = 0; i < params.length; i++) {
|
||||||
|
param = params[i]
|
||||||
|
|
||||||
|
if (!tokenRegExp.test(param)) {
|
||||||
|
throw new TypeError('invalid parameter name')
|
||||||
|
}
|
||||||
|
|
||||||
|
string += '; ' + param + '=' + qstring(parameters[param])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse media type to object.
|
||||||
|
*
|
||||||
|
* @param {string|object} string
|
||||||
|
* @return {Object}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function parse(string) {
|
||||||
|
if (!string) {
|
||||||
|
throw new TypeError('argument string is required')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof string === 'object') {
|
||||||
|
// support req/res-like objects as argument
|
||||||
|
string = getcontenttype(string)
|
||||||
|
|
||||||
|
if (typeof string !== 'string') {
|
||||||
|
throw new TypeError('content-type header is missing from object');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof string !== 'string') {
|
||||||
|
throw new TypeError('argument string is required to be a string')
|
||||||
|
}
|
||||||
|
|
||||||
|
var index = string.indexOf(';')
|
||||||
|
var type = index !== -1
|
||||||
|
? string.substr(0, index).trim()
|
||||||
|
: string.trim()
|
||||||
|
|
||||||
|
if (!typeRegExp.test(type)) {
|
||||||
|
throw new TypeError('invalid media type')
|
||||||
|
}
|
||||||
|
|
||||||
|
var key
|
||||||
|
var match
|
||||||
|
var obj = new ContentType(type.toLowerCase())
|
||||||
|
var value
|
||||||
|
|
||||||
|
paramRegExp.lastIndex = index
|
||||||
|
|
||||||
|
while (match = paramRegExp.exec(string)) {
|
||||||
|
if (match.index !== index) {
|
||||||
|
throw new TypeError('invalid parameter format')
|
||||||
|
}
|
||||||
|
|
||||||
|
index += match[0].length
|
||||||
|
key = match[1].toLowerCase()
|
||||||
|
value = match[2]
|
||||||
|
|
||||||
|
if (value[0] === '"') {
|
||||||
|
// remove quotes and escapes
|
||||||
|
value = value
|
||||||
|
.substr(1, value.length - 2)
|
||||||
|
.replace(qescRegExp, '$1')
|
||||||
|
}
|
||||||
|
|
||||||
|
obj.parameters[key] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index !== -1 && index !== string.length) {
|
||||||
|
throw new TypeError('invalid parameter format')
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get content-type from req/res objects.
|
||||||
|
*
|
||||||
|
* @param {object}
|
||||||
|
* @return {Object}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function getcontenttype(obj) {
|
||||||
|
if (typeof obj.getHeader === 'function') {
|
||||||
|
// res-like
|
||||||
|
return obj.getHeader('content-type')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof obj.headers === 'object') {
|
||||||
|
// req-like
|
||||||
|
return obj.headers && obj.headers['content-type']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Quote a string if necessary.
|
||||||
|
*
|
||||||
|
* @param {string} val
|
||||||
|
* @return {string}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function qstring(val) {
|
||||||
|
var str = String(val)
|
||||||
|
|
||||||
|
// no need to quote tokens
|
||||||
|
if (tokenRegExp.test(str)) {
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str.length > 0 && !textRegExp.test(str)) {
|
||||||
|
throw new TypeError('invalid parameter value')
|
||||||
|
}
|
||||||
|
|
||||||
|
return '"' + str.replace(quoteRegExp, '\\$1') + '"'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to represent a content type.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
function ContentType(type) {
|
||||||
|
this.parameters = Object.create(null)
|
||||||
|
this.type = type
|
||||||
|
}
|
||||||
46
server/node_modules/express/node_modules/content-type/package.json
generated
vendored
Normal file
46
server/node_modules/express/node_modules/content-type/package.json
generated
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"name": "content-type",
|
||||||
|
"description": "Create and parse HTTP Content-Type header",
|
||||||
|
"version": "1.0.1",
|
||||||
|
"author": {
|
||||||
|
"name": "Douglas Christopher Wilson",
|
||||||
|
"email": "doug@somethingdoug.com"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"keywords": [
|
||||||
|
"content-type",
|
||||||
|
"http",
|
||||||
|
"req",
|
||||||
|
"res",
|
||||||
|
"rfc7231"
|
||||||
|
],
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/jshttp/content-type"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"istanbul": "0.3.5",
|
||||||
|
"mocha": "~1.21.5"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"LICENSE",
|
||||||
|
"HISTORY.md",
|
||||||
|
"README.md",
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "mocha --reporter spec --check-leaks --bail test/",
|
||||||
|
"test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
|
||||||
|
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
|
||||||
|
},
|
||||||
|
"readme": "# content-type\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nCreate and parse HTTP Content-Type header according to RFC 7231\n\n## Installation\n\n```sh\n$ npm install content-type\n```\n\n## API\n\n```js\nvar contentType = require('content-type')\n```\n\n### contentType.parse(string)\n\n```js\nvar obj = contentType.parse('image/svg+xml; charset=utf-8')\n```\n\nParse a content type string. This will return an object with the following\nproperties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):\n\n - `type`: The media type (the type and subtype, always lower case).\n Example: `'image/svg+xml'`\n\n - `parameters`: An object of the parameters in the media type (name of parameter\n always lower case). Example: `{charset: 'utf-8'}`\n\nThrows a `TypeError` if the string is missing or invalid.\n\n### contentType.parse(req)\n\n```js\nvar obj = contentType.parse(req)\n```\n\nParse the `content-type` header from the given `req`. Short-cut for\n`contentType.parse(req.headers['content-type'])`.\n\nThrows a `TypeError` if the `Content-Type` header is missing or invalid.\n\n### contentType.parse(res)\n\n```js\nvar obj = contentType.parse(res)\n```\n\nParse the `content-type` header set on the given `res`. Short-cut for\n`contentType.parse(res.getHeader('content-type'))`.\n\nThrows a `TypeError` if the `Content-Type` header is missing or invalid.\n\n### contentType.format(obj)\n\n```js\nvar str = contentType.format({type: 'image/svg+xml'})\n```\n\nFormat an object into a content type string. This will return a string of the\ncontent type for the given object with the following properties (examples are\nshown that produce the string `'image/svg+xml; charset=utf-8'`):\n\n - `type`: The media type (will be lower-cased). Example: `'image/svg+xml'`\n\n - `parameters`: An object of the parameters in the media type (name of the\n parameter will be lower-cased). Example: `{charset: 'utf-8'}`\n\nThrows a `TypeError` if the object contains an invalid type or parameter names.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/content-type.svg\n[npm-url]: https://npmjs.org/package/content-type\n[node-version-image]: https://img.shields.io/node/v/content-type.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/content-type/master.svg\n[travis-url]: https://travis-ci.org/jshttp/content-type\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-type/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/content-type\n[downloads-image]: https://img.shields.io/npm/dm/content-type.svg\n[downloads-url]: https://npmjs.org/package/content-type\n",
|
||||||
|
"readmeFilename": "README.md",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/jshttp/content-type/issues"
|
||||||
|
},
|
||||||
|
"_id": "content-type@1.0.1",
|
||||||
|
"_from": "content-type@~1.0.1"
|
||||||
|
}
|
||||||
22
server/node_modules/express/node_modules/merge-descriptors/LICENSE
generated
vendored
Normal file
22
server/node_modules/express/node_modules/merge-descriptors/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
(The MIT License)
|
||||||
|
|
||||||
|
Copyright (c) 2013 Jonathan Ong <me@jongleberry.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
'Software'), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
24
server/node_modules/express/node_modules/methods/HISTORY.md
generated
vendored
Normal file
24
server/node_modules/express/node_modules/methods/HISTORY.md
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
1.1.1 / 2014-12-30
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Improve `browserify` support
|
||||||
|
|
||||||
|
1.1.0 / 2014-07-05
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Add `CONNECT` method
|
||||||
|
|
||||||
|
1.0.1 / 2014-06-02
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix module to work with harmony transform
|
||||||
|
|
||||||
|
1.0.0 / 2014-05-08
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Add `PURGE` method
|
||||||
|
|
||||||
|
0.1.0 / 2013-10-28
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Add `http.METHODS` support
|
||||||
41
server/node_modules/express/node_modules/methods/README.md
generated
vendored
Normal file
41
server/node_modules/express/node_modules/methods/README.md
generated
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Methods
|
||||||
|
|
||||||
|
[![NPM Version][npm-image]][npm-url]
|
||||||
|
[![NPM Downloads][downloads-image]][downloads-url]
|
||||||
|
[![Node.js Version][node-version-image]][node-version-url]
|
||||||
|
[![Build Status][travis-image]][travis-url]
|
||||||
|
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||||
|
|
||||||
|
HTTP verbs that node core's parser supports.
|
||||||
|
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install methods
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
```js
|
||||||
|
var methods = require('methods')
|
||||||
|
```
|
||||||
|
|
||||||
|
### methods
|
||||||
|
|
||||||
|
This is an array of lower-case method names that Node.js supports.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
||||||
|
|
||||||
|
[npm-image]: https://img.shields.io/npm/v/methods.svg?style=flat
|
||||||
|
[npm-url]: https://npmjs.org/package/methods
|
||||||
|
[node-version-image]: https://img.shields.io/node/v/methods.svg?style=flat
|
||||||
|
[node-version-url]: http://nodejs.org/download/
|
||||||
|
[travis-image]: https://img.shields.io/travis/jshttp/methods.svg?style=flat
|
||||||
|
[travis-url]: https://travis-ci.org/jshttp/methods
|
||||||
|
[coveralls-image]: https://img.shields.io/coveralls/jshttp/methods.svg?style=flat
|
||||||
|
[coveralls-url]: https://coveralls.io/r/jshttp/methods?branch=master
|
||||||
|
[downloads-image]: https://img.shields.io/npm/dm/methods.svg?style=flat
|
||||||
|
[downloads-url]: https://npmjs.org/package/methods
|
||||||
274
server/node_modules/express/node_modules/send/HISTORY.md
generated
vendored
Normal file
274
server/node_modules/express/node_modules/send/HISTORY.md
generated
vendored
Normal file
@@ -0,0 +1,274 @@
|
|||||||
|
0.12.3 / 2015-05-13
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@~2.2.0
|
||||||
|
- deps: ms@0.7.1
|
||||||
|
* deps: depd@~1.0.1
|
||||||
|
* deps: etag@~1.6.0
|
||||||
|
- Improve support for JXcore
|
||||||
|
- Support "fake" stats objects in environments without `fs`
|
||||||
|
* deps: ms@0.7.1
|
||||||
|
- Prevent extraordinarily long inputs
|
||||||
|
* deps: on-finished@~2.2.1
|
||||||
|
|
||||||
|
0.12.2 / 2015-03-13
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Throw errors early for invalid `extensions` or `index` options
|
||||||
|
* deps: debug@~2.1.3
|
||||||
|
- Fix high intensity foreground color for bold
|
||||||
|
- deps: ms@0.7.0
|
||||||
|
|
||||||
|
0.12.1 / 2015-02-17
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix regression sending zero-length files
|
||||||
|
|
||||||
|
0.12.0 / 2015-02-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Always read the stat size from the file
|
||||||
|
* Fix mutating passed-in `options`
|
||||||
|
* deps: mime@1.3.4
|
||||||
|
|
||||||
|
0.11.1 / 2015-01-20
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix `root` path disclosure
|
||||||
|
|
||||||
|
0.11.0 / 2015-01-05
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@~2.1.1
|
||||||
|
* deps: etag@~1.5.1
|
||||||
|
- deps: crc@3.2.1
|
||||||
|
* deps: ms@0.7.0
|
||||||
|
- Add `milliseconds`
|
||||||
|
- Add `msecs`
|
||||||
|
- Add `secs`
|
||||||
|
- Add `mins`
|
||||||
|
- Add `hrs`
|
||||||
|
- Add `yrs`
|
||||||
|
* deps: on-finished@~2.2.0
|
||||||
|
|
||||||
|
0.10.1 / 2014-10-22
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: on-finished@~2.1.1
|
||||||
|
- Fix handling of pipelined requests
|
||||||
|
|
||||||
|
0.10.0 / 2014-10-15
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@~2.1.0
|
||||||
|
- Implement `DEBUG_FD` env variable support
|
||||||
|
* deps: depd@~1.0.0
|
||||||
|
* deps: etag@~1.5.0
|
||||||
|
- Improve string performance
|
||||||
|
- Slightly improve speed for weak ETags over 1KB
|
||||||
|
|
||||||
|
0.9.3 / 2014-09-24
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: etag@~1.4.0
|
||||||
|
- Support "fake" stats objects
|
||||||
|
|
||||||
|
0.9.2 / 2014-09-15
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: depd@0.4.5
|
||||||
|
* deps: etag@~1.3.1
|
||||||
|
* deps: range-parser@~1.0.2
|
||||||
|
|
||||||
|
0.9.1 / 2014-09-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: fresh@0.2.4
|
||||||
|
|
||||||
|
0.9.0 / 2014-09-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Add `lastModified` option
|
||||||
|
* Use `etag` to generate `ETag` header
|
||||||
|
* deps: debug@~2.0.0
|
||||||
|
|
||||||
|
0.8.5 / 2014-09-04
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix malicious path detection for empty string path
|
||||||
|
|
||||||
|
0.8.4 / 2014-09-04
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix a path traversal issue when using `root`
|
||||||
|
|
||||||
|
0.8.3 / 2014-08-16
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: destroy@1.0.3
|
||||||
|
- renamed from dethroy
|
||||||
|
* deps: on-finished@2.1.0
|
||||||
|
|
||||||
|
0.8.2 / 2014-08-14
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Work around `fd` leak in Node.js 0.10 for `fs.ReadStream`
|
||||||
|
* deps: dethroy@1.0.2
|
||||||
|
|
||||||
|
0.8.1 / 2014-08-05
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix `extensions` behavior when file already has extension
|
||||||
|
|
||||||
|
0.8.0 / 2014-08-05
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Add `extensions` option
|
||||||
|
|
||||||
|
0.7.4 / 2014-08-04
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix serving index files without root dir
|
||||||
|
|
||||||
|
0.7.3 / 2014-07-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix incorrect 403 on Windows and Node.js 0.11
|
||||||
|
|
||||||
|
0.7.2 / 2014-07-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: depd@0.4.4
|
||||||
|
- Work-around v8 generating empty stack traces
|
||||||
|
|
||||||
|
0.7.1 / 2014-07-26
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: depd@0.4.3
|
||||||
|
- Fix exception when global `Error.stackTraceLimit` is too low
|
||||||
|
|
||||||
|
0.7.0 / 2014-07-20
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Deprecate `hidden` option; use `dotfiles` option
|
||||||
|
* Add `dotfiles` option
|
||||||
|
* deps: debug@1.0.4
|
||||||
|
* deps: depd@0.4.2
|
||||||
|
- Add `TRACE_DEPRECATION` environment variable
|
||||||
|
- Remove non-standard grey color from color output
|
||||||
|
- Support `--no-deprecation` argument
|
||||||
|
- Support `--trace-deprecation` argument
|
||||||
|
|
||||||
|
0.6.0 / 2014-07-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Deprecate `from` option; use `root` option
|
||||||
|
* Deprecate `send.etag()` -- use `etag` in `options`
|
||||||
|
* Deprecate `send.hidden()` -- use `hidden` in `options`
|
||||||
|
* Deprecate `send.index()` -- use `index` in `options`
|
||||||
|
* Deprecate `send.maxage()` -- use `maxAge` in `options`
|
||||||
|
* Deprecate `send.root()` -- use `root` in `options`
|
||||||
|
* Cap `maxAge` value to 1 year
|
||||||
|
* deps: debug@1.0.3
|
||||||
|
- Add support for multiple wildcards in namespaces
|
||||||
|
|
||||||
|
0.5.0 / 2014-06-28
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Accept string for `maxAge` (converted by `ms`)
|
||||||
|
* Add `headers` event
|
||||||
|
* Include link in default redirect response
|
||||||
|
* Use `EventEmitter.listenerCount` to count listeners
|
||||||
|
|
||||||
|
0.4.3 / 2014-06-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Do not throw un-catchable error on file open race condition
|
||||||
|
* Use `escape-html` for HTML escaping
|
||||||
|
* deps: debug@1.0.2
|
||||||
|
- fix some debugging output colors on node.js 0.8
|
||||||
|
* deps: finished@1.2.2
|
||||||
|
* deps: fresh@0.2.2
|
||||||
|
|
||||||
|
0.4.2 / 2014-06-09
|
||||||
|
==================
|
||||||
|
|
||||||
|
* fix "event emitter leak" warnings
|
||||||
|
* deps: debug@1.0.1
|
||||||
|
* deps: finished@1.2.1
|
||||||
|
|
||||||
|
0.4.1 / 2014-06-02
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Send `max-age` in `Cache-Control` in correct format
|
||||||
|
|
||||||
|
0.4.0 / 2014-05-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Calculate ETag with md5 for reduced collisions
|
||||||
|
* Fix wrong behavior when index file matches directory
|
||||||
|
* Ignore stream errors after request ends
|
||||||
|
- Goodbye `EBADF, read`
|
||||||
|
* Skip directories in index file search
|
||||||
|
* deps: debug@0.8.1
|
||||||
|
|
||||||
|
0.3.0 / 2014-04-24
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix sending files with dots without root set
|
||||||
|
* Coerce option types
|
||||||
|
* Accept API options in options object
|
||||||
|
* Set etags to "weak"
|
||||||
|
* Include file path in etag
|
||||||
|
* Make "Can't set headers after they are sent." catchable
|
||||||
|
* Send full entity-body for multi range requests
|
||||||
|
* Default directory access to 403 when index disabled
|
||||||
|
* Support multiple index paths
|
||||||
|
* Support "If-Range" header
|
||||||
|
* Control whether to generate etags
|
||||||
|
* deps: mime@1.2.11
|
||||||
|
|
||||||
|
0.2.0 / 2014-01-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* update range-parser and fresh
|
||||||
|
|
||||||
|
0.1.4 / 2013-08-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* update fresh
|
||||||
|
|
||||||
|
0.1.3 / 2013-07-08
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Revert "Fix fd leak"
|
||||||
|
|
||||||
|
0.1.2 / 2013-07-03
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix fd leak
|
||||||
|
|
||||||
|
0.1.0 / 2012-08-25
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add options parameter to send() that is passed to fs.createReadStream() [kanongil]
|
||||||
|
|
||||||
|
0.0.4 / 2012-08-16
|
||||||
|
==================
|
||||||
|
|
||||||
|
* allow custom "Accept-Ranges" definition
|
||||||
|
|
||||||
|
0.0.3 / 2012-07-16
|
||||||
|
==================
|
||||||
|
|
||||||
|
* fix normalization of the root directory. Closes #3
|
||||||
|
|
||||||
|
0.0.2 / 2012-07-09
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add passing of req explicitly for now (YUCK)
|
||||||
|
|
||||||
|
0.0.1 / 2010-01-03
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Initial release
|
||||||
195
server/node_modules/express/node_modules/send/README.md
generated
vendored
Normal file
195
server/node_modules/express/node_modules/send/README.md
generated
vendored
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
# send
|
||||||
|
|
||||||
|
[![NPM Version][npm-image]][npm-url]
|
||||||
|
[![NPM Downloads][downloads-image]][downloads-url]
|
||||||
|
[![Linux Build][travis-image]][travis-url]
|
||||||
|
[![Windows Build][appveyor-image]][appveyor-url]
|
||||||
|
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||||
|
[![Gratipay][gratipay-image]][gratipay-url]
|
||||||
|
|
||||||
|
Send is a library for streaming files from the file system as a http response
|
||||||
|
supporting partial responses (Ranges), conditional-GET negotiation, high test
|
||||||
|
coverage, and granular events which may be leveraged to take appropriate actions
|
||||||
|
in your application or framework.
|
||||||
|
|
||||||
|
Looking to serve up entire folders mapped to URLs? Try [serve-static](https://www.npmjs.org/package/serve-static).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install send
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
```js
|
||||||
|
var send = require('send')
|
||||||
|
```
|
||||||
|
|
||||||
|
### send(req, path, [options])
|
||||||
|
|
||||||
|
Create a new `SendStream` for the given path to send to a `res`. The `req` is
|
||||||
|
the Node.js HTTP request and the `path` is a urlencoded path to send (urlencoded,
|
||||||
|
not the actual file-system path).
|
||||||
|
|
||||||
|
#### Options
|
||||||
|
|
||||||
|
##### dotfiles
|
||||||
|
|
||||||
|
Set how "dotfiles" are treated when encountered. A dotfile is a file
|
||||||
|
or directory that begins with a dot ("."). Note this check is done on
|
||||||
|
the path itself without checking if the path actually exists on the
|
||||||
|
disk. If `root` is specified, only the dotfiles above the root are
|
||||||
|
checked (i.e. the root itself can be within a dotfile when when set
|
||||||
|
to "deny").
|
||||||
|
|
||||||
|
- `'allow'` No special treatment for dotfiles.
|
||||||
|
- `'deny'` Send a 403 for any request for a dotfile.
|
||||||
|
- `'ignore'` Pretend like the dotfile does not exist and 404.
|
||||||
|
|
||||||
|
The default value is _similar_ to `'ignore'`, with the exception that
|
||||||
|
this default will not ignore the files within a directory that begins
|
||||||
|
with a dot, for backward-compatibility.
|
||||||
|
|
||||||
|
##### etag
|
||||||
|
|
||||||
|
Enable or disable etag generation, defaults to true.
|
||||||
|
|
||||||
|
##### extensions
|
||||||
|
|
||||||
|
If a given file doesn't exist, try appending one of the given extensions,
|
||||||
|
in the given order. By default, this is disabled (set to `false`). An
|
||||||
|
example value that will serve extension-less HTML files: `['html', 'htm']`.
|
||||||
|
This is skipped if the requested file already has an extension.
|
||||||
|
|
||||||
|
##### index
|
||||||
|
|
||||||
|
By default send supports "index.html" files, to disable this
|
||||||
|
set `false` or to supply a new index pass a string or an array
|
||||||
|
in preferred order.
|
||||||
|
|
||||||
|
##### lastModified
|
||||||
|
|
||||||
|
Enable or disable `Last-Modified` header, defaults to true. Uses the file
|
||||||
|
system's last modified value.
|
||||||
|
|
||||||
|
##### maxAge
|
||||||
|
|
||||||
|
Provide a max-age in milliseconds for http caching, defaults to 0.
|
||||||
|
This can also be a string accepted by the
|
||||||
|
[ms](https://www.npmjs.org/package/ms#readme) module.
|
||||||
|
|
||||||
|
##### root
|
||||||
|
|
||||||
|
Serve files relative to `path`.
|
||||||
|
|
||||||
|
### Events
|
||||||
|
|
||||||
|
The `SendStream` is an event emitter and will emit the following events:
|
||||||
|
|
||||||
|
- `error` an error occurred `(err)`
|
||||||
|
- `directory` a directory was requested
|
||||||
|
- `file` a file was requested `(path, stat)`
|
||||||
|
- `headers` the headers are about to be set on a file `(res, path, stat)`
|
||||||
|
- `stream` file streaming has started `(stream)`
|
||||||
|
- `end` streaming has completed
|
||||||
|
|
||||||
|
### .pipe
|
||||||
|
|
||||||
|
The `pipe` method is used to pipe the response into the Node.js HTTP response
|
||||||
|
object, typically `send(req, path, options).pipe(res)`.
|
||||||
|
|
||||||
|
## Error-handling
|
||||||
|
|
||||||
|
By default when no `error` listeners are present an automatic response will be
|
||||||
|
made, otherwise you have full control over the response, aka you may show a 5xx
|
||||||
|
page etc.
|
||||||
|
|
||||||
|
## Caching
|
||||||
|
|
||||||
|
It does _not_ perform internal caching, you should use a reverse proxy cache
|
||||||
|
such as Varnish for this, or those fancy things called CDNs. If your
|
||||||
|
application is small enough that it would benefit from single-node memory
|
||||||
|
caching, it's small enough that it does not need caching at all ;).
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
To enable `debug()` instrumentation output export __DEBUG__:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ DEBUG=send node app
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running tests
|
||||||
|
|
||||||
|
```
|
||||||
|
$ npm install
|
||||||
|
$ npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Small example
|
||||||
|
|
||||||
|
```js
|
||||||
|
var http = require('http');
|
||||||
|
var send = require('send');
|
||||||
|
|
||||||
|
var app = http.createServer(function(req, res){
|
||||||
|
send(req, req.url).pipe(res);
|
||||||
|
}).listen(3000);
|
||||||
|
```
|
||||||
|
|
||||||
|
Serving from a root directory with custom error-handling:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var http = require('http');
|
||||||
|
var send = require('send');
|
||||||
|
var url = require('url');
|
||||||
|
|
||||||
|
var app = http.createServer(function(req, res){
|
||||||
|
// your custom error-handling logic:
|
||||||
|
function error(err) {
|
||||||
|
res.statusCode = err.status || 500;
|
||||||
|
res.end(err.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// your custom headers
|
||||||
|
function headers(res, path, stat) {
|
||||||
|
// serve all files for download
|
||||||
|
res.setHeader('Content-Disposition', 'attachment');
|
||||||
|
}
|
||||||
|
|
||||||
|
// your custom directory handling logic:
|
||||||
|
function redirect() {
|
||||||
|
res.statusCode = 301;
|
||||||
|
res.setHeader('Location', req.url + '/');
|
||||||
|
res.end('Redirecting to ' + req.url + '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
// transfer arbitrary files from within
|
||||||
|
// /www/example.com/public/*
|
||||||
|
send(req, url.parse(req.url).pathname, {root: '/www/example.com/public'})
|
||||||
|
.on('error', error)
|
||||||
|
.on('directory', redirect)
|
||||||
|
.on('headers', headers)
|
||||||
|
.pipe(res);
|
||||||
|
}).listen(3000);
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
||||||
|
|
||||||
|
[npm-image]: https://img.shields.io/npm/v/send.svg
|
||||||
|
[npm-url]: https://npmjs.org/package/send
|
||||||
|
[travis-image]: https://img.shields.io/travis/pillarjs/send/master.svg?label=linux
|
||||||
|
[travis-url]: https://travis-ci.org/pillarjs/send
|
||||||
|
[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/send/master.svg?label=windows
|
||||||
|
[appveyor-url]: https://ci.appveyor.com/project/dougwilson/send
|
||||||
|
[coveralls-image]: https://img.shields.io/coveralls/pillarjs/send/master.svg
|
||||||
|
[coveralls-url]: https://coveralls.io/r/pillarjs/send?branch=master
|
||||||
|
[downloads-image]: https://img.shields.io/npm/dm/send.svg
|
||||||
|
[downloads-url]: https://npmjs.org/package/send
|
||||||
|
[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg
|
||||||
|
[gratipay-url]: https://www.gratipay.com/dougwilson/
|
||||||
1
server/node_modules/express/node_modules/send/node_modules/.bin/mime
generated
vendored
Symbolic link
1
server/node_modules/express/node_modules/send/node_modules/.bin/mime
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../mime/cli.js
|
||||||
0
server/node_modules/express/node_modules/send/node_modules/mime/.npmignore
generated
vendored
Normal file
0
server/node_modules/express/node_modules/send/node_modules/mime/.npmignore
generated
vendored
Normal file
11
server/node_modules/express/node_modules/send/node_modules/mime/build/build.js
generated
vendored
Normal file
11
server/node_modules/express/node_modules/send/node_modules/mime/build/build.js
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
var db = require('mime-db');
|
||||||
|
|
||||||
|
var mapByType = {};
|
||||||
|
Object.keys(db).forEach(function(key) {
|
||||||
|
var extensions = db[key].extensions;
|
||||||
|
if (extensions) {
|
||||||
|
mapByType[key] = extensions;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(JSON.stringify(mapByType));
|
||||||
57
server/node_modules/express/node_modules/send/node_modules/mime/build/test.js
generated
vendored
Normal file
57
server/node_modules/express/node_modules/send/node_modules/mime/build/test.js
generated
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/**
|
||||||
|
* Usage: node test.js
|
||||||
|
*/
|
||||||
|
|
||||||
|
var mime = require('../mime');
|
||||||
|
var assert = require('assert');
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
//
|
||||||
|
// Test mime lookups
|
||||||
|
//
|
||||||
|
|
||||||
|
assert.equal('text/plain', mime.lookup('text.txt')); // normal file
|
||||||
|
assert.equal('text/plain', mime.lookup('TEXT.TXT')); // uppercase
|
||||||
|
assert.equal('text/plain', mime.lookup('dir/text.txt')); // dir + file
|
||||||
|
assert.equal('text/plain', mime.lookup('.text.txt')); // hidden file
|
||||||
|
assert.equal('text/plain', mime.lookup('.txt')); // nameless
|
||||||
|
assert.equal('text/plain', mime.lookup('txt')); // extension-only
|
||||||
|
assert.equal('text/plain', mime.lookup('/txt')); // extension-less ()
|
||||||
|
assert.equal('text/plain', mime.lookup('\\txt')); // Windows, extension-less
|
||||||
|
assert.equal('application/octet-stream', mime.lookup('text.nope')); // unrecognized
|
||||||
|
assert.equal('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default
|
||||||
|
|
||||||
|
//
|
||||||
|
// Test extensions
|
||||||
|
//
|
||||||
|
|
||||||
|
assert.equal('txt', mime.extension(mime.types.text));
|
||||||
|
assert.equal('html', mime.extension(mime.types.htm));
|
||||||
|
assert.equal('bin', mime.extension('application/octet-stream'));
|
||||||
|
assert.equal('bin', mime.extension('application/octet-stream '));
|
||||||
|
assert.equal('html', mime.extension(' text/html; charset=UTF-8'));
|
||||||
|
assert.equal('html', mime.extension('text/html; charset=UTF-8 '));
|
||||||
|
assert.equal('html', mime.extension('text/html; charset=UTF-8'));
|
||||||
|
assert.equal('html', mime.extension('text/html ; charset=UTF-8'));
|
||||||
|
assert.equal('html', mime.extension('text/html;charset=UTF-8'));
|
||||||
|
assert.equal('html', mime.extension('text/Html;charset=UTF-8'));
|
||||||
|
assert.equal(undefined, mime.extension('unrecognized'));
|
||||||
|
|
||||||
|
//
|
||||||
|
// Test node.types lookups
|
||||||
|
//
|
||||||
|
|
||||||
|
assert.equal('application/font-woff', mime.lookup('file.woff'));
|
||||||
|
assert.equal('application/octet-stream', mime.lookup('file.buffer'));
|
||||||
|
assert.equal('audio/mp4', mime.lookup('file.m4a'));
|
||||||
|
assert.equal('font/opentype', mime.lookup('file.otf'));
|
||||||
|
|
||||||
|
//
|
||||||
|
// Test charsets
|
||||||
|
//
|
||||||
|
|
||||||
|
assert.equal('UTF-8', mime.charsets.lookup('text/plain'));
|
||||||
|
assert.equal(undefined, mime.charsets.lookup(mime.types.js));
|
||||||
|
assert.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback'));
|
||||||
|
|
||||||
|
console.log('\nAll tests passed');
|
||||||
8
server/node_modules/express/node_modules/send/node_modules/mime/cli.js
generated
vendored
Executable file
8
server/node_modules/express/node_modules/send/node_modules/mime/cli.js
generated
vendored
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
var mime = require('./mime.js');
|
||||||
|
var file = process.argv[2];
|
||||||
|
var type = mime.lookup(file);
|
||||||
|
|
||||||
|
process.stdout.write(type + '\n');
|
||||||
|
|
||||||
1
server/node_modules/express/node_modules/send/node_modules/mime/types.json
generated
vendored
Normal file
1
server/node_modules/express/node_modules/send/node_modules/mime/types.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
20
server/node_modules/express/node_modules/send/node_modules/ms/LICENSE
generated
vendored
Normal file
20
server/node_modules/express/node_modules/send/node_modules/ms/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
(The MIT License)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Guillermo Rauch <rauchg@gmail.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
22
server/node_modules/express/node_modules/type-is/node_modules/media-typer/HISTORY.md
generated
vendored
Normal file
22
server/node_modules/express/node_modules/type-is/node_modules/media-typer/HISTORY.md
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
0.3.0 / 2014-09-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Support Node.js 0.6
|
||||||
|
* Throw error when parameter format invalid on parse
|
||||||
|
|
||||||
|
0.2.0 / 2014-06-18
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Add `typer.format()` to format media types
|
||||||
|
|
||||||
|
0.1.0 / 2014-06-17
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Accept `req` as argument to `parse`
|
||||||
|
* Accept `res` as argument to `parse`
|
||||||
|
* Parse media type with extra LWS between type and first parameter
|
||||||
|
|
||||||
|
0.0.0 / 2014-06-13
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Initial implementation
|
||||||
22
server/node_modules/express/node_modules/type-is/node_modules/media-typer/LICENSE
generated
vendored
Normal file
22
server/node_modules/express/node_modules/type-is/node_modules/media-typer/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
(The MIT License)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Douglas Christopher Wilson
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
'Software'), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
81
server/node_modules/express/node_modules/type-is/node_modules/media-typer/README.md
generated
vendored
Normal file
81
server/node_modules/express/node_modules/type-is/node_modules/media-typer/README.md
generated
vendored
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# media-typer
|
||||||
|
|
||||||
|
[![NPM Version][npm-image]][npm-url]
|
||||||
|
[![NPM Downloads][downloads-image]][downloads-url]
|
||||||
|
[![Node.js Version][node-version-image]][node-version-url]
|
||||||
|
[![Build Status][travis-image]][travis-url]
|
||||||
|
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||||
|
|
||||||
|
Simple RFC 6838 media type parser
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm install media-typer
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
```js
|
||||||
|
var typer = require('media-typer')
|
||||||
|
```
|
||||||
|
|
||||||
|
### typer.parse(string)
|
||||||
|
|
||||||
|
```js
|
||||||
|
var obj = typer.parse('image/svg+xml; charset=utf-8')
|
||||||
|
```
|
||||||
|
|
||||||
|
Parse a media type string. This will return an object with the following
|
||||||
|
properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):
|
||||||
|
|
||||||
|
- `type`: The type of the media type (always lower case). Example: `'image'`
|
||||||
|
|
||||||
|
- `subtype`: The subtype of the media type (always lower case). Example: `'svg'`
|
||||||
|
|
||||||
|
- `suffix`: The suffix of the media type (always lower case). Example: `'xml'`
|
||||||
|
|
||||||
|
- `parameters`: An object of the parameters in the media type (name of parameter always lower case). Example: `{charset: 'utf-8'}`
|
||||||
|
|
||||||
|
### typer.parse(req)
|
||||||
|
|
||||||
|
```js
|
||||||
|
var obj = typer.parse(req)
|
||||||
|
```
|
||||||
|
|
||||||
|
Parse the `content-type` header from the given `req`. Short-cut for
|
||||||
|
`typer.parse(req.headers['content-type'])`.
|
||||||
|
|
||||||
|
### typer.parse(res)
|
||||||
|
|
||||||
|
```js
|
||||||
|
var obj = typer.parse(res)
|
||||||
|
```
|
||||||
|
|
||||||
|
Parse the `content-type` header set on the given `res`. Short-cut for
|
||||||
|
`typer.parse(res.getHeader('content-type'))`.
|
||||||
|
|
||||||
|
### typer.format(obj)
|
||||||
|
|
||||||
|
```js
|
||||||
|
var obj = typer.format({type: 'image', subtype: 'svg', suffix: 'xml'})
|
||||||
|
```
|
||||||
|
|
||||||
|
Format an object into a media type string. This will return a string of the
|
||||||
|
mime type for the given object. For the properties of the object, see the
|
||||||
|
documentation for `typer.parse(string)`.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
||||||
|
|
||||||
|
[npm-image]: https://img.shields.io/npm/v/media-typer.svg?style=flat
|
||||||
|
[npm-url]: https://npmjs.org/package/media-typer
|
||||||
|
[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat
|
||||||
|
[node-version-url]: http://nodejs.org/download/
|
||||||
|
[travis-image]: https://img.shields.io/travis/jshttp/media-typer.svg?style=flat
|
||||||
|
[travis-url]: https://travis-ci.org/jshttp/media-typer
|
||||||
|
[coveralls-image]: https://img.shields.io/coveralls/jshttp/media-typer.svg?style=flat
|
||||||
|
[coveralls-url]: https://coveralls.io/r/jshttp/media-typer
|
||||||
|
[downloads-image]: https://img.shields.io/npm/dm/media-typer.svg?style=flat
|
||||||
|
[downloads-url]: https://npmjs.org/package/media-typer
|
||||||
270
server/node_modules/express/node_modules/type-is/node_modules/media-typer/index.js
generated
vendored
Normal file
270
server/node_modules/express/node_modules/type-is/node_modules/media-typer/index.js
generated
vendored
Normal file
@@ -0,0 +1,270 @@
|
|||||||
|
/*!
|
||||||
|
* media-typer
|
||||||
|
* Copyright(c) 2014 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RegExp to match *( ";" parameter ) in RFC 2616 sec 3.7
|
||||||
|
*
|
||||||
|
* parameter = token "=" ( token | quoted-string )
|
||||||
|
* token = 1*<any CHAR except CTLs or separators>
|
||||||
|
* separators = "(" | ")" | "<" | ">" | "@"
|
||||||
|
* | "," | ";" | ":" | "\" | <">
|
||||||
|
* | "/" | "[" | "]" | "?" | "="
|
||||||
|
* | "{" | "}" | SP | HT
|
||||||
|
* quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
|
||||||
|
* qdtext = <any TEXT except <">>
|
||||||
|
* quoted-pair = "\" CHAR
|
||||||
|
* CHAR = <any US-ASCII character (octets 0 - 127)>
|
||||||
|
* TEXT = <any OCTET except CTLs, but including LWS>
|
||||||
|
* LWS = [CRLF] 1*( SP | HT )
|
||||||
|
* CRLF = CR LF
|
||||||
|
* CR = <US-ASCII CR, carriage return (13)>
|
||||||
|
* LF = <US-ASCII LF, linefeed (10)>
|
||||||
|
* SP = <US-ASCII SP, space (32)>
|
||||||
|
* SHT = <US-ASCII HT, horizontal-tab (9)>
|
||||||
|
* CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>
|
||||||
|
* OCTET = <any 8-bit sequence of data>
|
||||||
|
*/
|
||||||
|
var paramRegExp = /; *([!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) *= *("(?:[ !\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u0020-\u007e])*"|[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) */g;
|
||||||
|
var textRegExp = /^[\u0020-\u007e\u0080-\u00ff]+$/
|
||||||
|
var tokenRegExp = /^[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+$/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RegExp to match quoted-pair in RFC 2616
|
||||||
|
*
|
||||||
|
* quoted-pair = "\" CHAR
|
||||||
|
* CHAR = <any US-ASCII character (octets 0 - 127)>
|
||||||
|
*/
|
||||||
|
var qescRegExp = /\\([\u0000-\u007f])/g;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RegExp to match chars that must be quoted-pair in RFC 2616
|
||||||
|
*/
|
||||||
|
var quoteRegExp = /([\\"])/g;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RegExp to match type in RFC 6838
|
||||||
|
*
|
||||||
|
* type-name = restricted-name
|
||||||
|
* subtype-name = restricted-name
|
||||||
|
* restricted-name = restricted-name-first *126restricted-name-chars
|
||||||
|
* restricted-name-first = ALPHA / DIGIT
|
||||||
|
* restricted-name-chars = ALPHA / DIGIT / "!" / "#" /
|
||||||
|
* "$" / "&" / "-" / "^" / "_"
|
||||||
|
* restricted-name-chars =/ "." ; Characters before first dot always
|
||||||
|
* ; specify a facet name
|
||||||
|
* restricted-name-chars =/ "+" ; Characters after last plus always
|
||||||
|
* ; specify a structured syntax suffix
|
||||||
|
* ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
|
||||||
|
* DIGIT = %x30-39 ; 0-9
|
||||||
|
*/
|
||||||
|
var subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/
|
||||||
|
var typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/
|
||||||
|
var typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports.format = format
|
||||||
|
exports.parse = parse
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format object to media type.
|
||||||
|
*
|
||||||
|
* @param {object} obj
|
||||||
|
* @return {string}
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function format(obj) {
|
||||||
|
if (!obj || typeof obj !== 'object') {
|
||||||
|
throw new TypeError('argument obj is required')
|
||||||
|
}
|
||||||
|
|
||||||
|
var parameters = obj.parameters
|
||||||
|
var subtype = obj.subtype
|
||||||
|
var suffix = obj.suffix
|
||||||
|
var type = obj.type
|
||||||
|
|
||||||
|
if (!type || !typeNameRegExp.test(type)) {
|
||||||
|
throw new TypeError('invalid type')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!subtype || !subtypeNameRegExp.test(subtype)) {
|
||||||
|
throw new TypeError('invalid subtype')
|
||||||
|
}
|
||||||
|
|
||||||
|
// format as type/subtype
|
||||||
|
var string = type + '/' + subtype
|
||||||
|
|
||||||
|
// append +suffix
|
||||||
|
if (suffix) {
|
||||||
|
if (!typeNameRegExp.test(suffix)) {
|
||||||
|
throw new TypeError('invalid suffix')
|
||||||
|
}
|
||||||
|
|
||||||
|
string += '+' + suffix
|
||||||
|
}
|
||||||
|
|
||||||
|
// append parameters
|
||||||
|
if (parameters && typeof parameters === 'object') {
|
||||||
|
var param
|
||||||
|
var params = Object.keys(parameters).sort()
|
||||||
|
|
||||||
|
for (var i = 0; i < params.length; i++) {
|
||||||
|
param = params[i]
|
||||||
|
|
||||||
|
if (!tokenRegExp.test(param)) {
|
||||||
|
throw new TypeError('invalid parameter name')
|
||||||
|
}
|
||||||
|
|
||||||
|
string += '; ' + param + '=' + qstring(parameters[param])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse media type to object.
|
||||||
|
*
|
||||||
|
* @param {string|object} string
|
||||||
|
* @return {Object}
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function parse(string) {
|
||||||
|
if (!string) {
|
||||||
|
throw new TypeError('argument string is required')
|
||||||
|
}
|
||||||
|
|
||||||
|
// support req/res-like objects as argument
|
||||||
|
if (typeof string === 'object') {
|
||||||
|
string = getcontenttype(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof string !== 'string') {
|
||||||
|
throw new TypeError('argument string is required to be a string')
|
||||||
|
}
|
||||||
|
|
||||||
|
var index = string.indexOf(';')
|
||||||
|
var type = index !== -1
|
||||||
|
? string.substr(0, index)
|
||||||
|
: string
|
||||||
|
|
||||||
|
var key
|
||||||
|
var match
|
||||||
|
var obj = splitType(type)
|
||||||
|
var params = {}
|
||||||
|
var value
|
||||||
|
|
||||||
|
paramRegExp.lastIndex = index
|
||||||
|
|
||||||
|
while (match = paramRegExp.exec(string)) {
|
||||||
|
if (match.index !== index) {
|
||||||
|
throw new TypeError('invalid parameter format')
|
||||||
|
}
|
||||||
|
|
||||||
|
index += match[0].length
|
||||||
|
key = match[1].toLowerCase()
|
||||||
|
value = match[2]
|
||||||
|
|
||||||
|
if (value[0] === '"') {
|
||||||
|
// remove quotes and escapes
|
||||||
|
value = value
|
||||||
|
.substr(1, value.length - 2)
|
||||||
|
.replace(qescRegExp, '$1')
|
||||||
|
}
|
||||||
|
|
||||||
|
params[key] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index !== -1 && index !== string.length) {
|
||||||
|
throw new TypeError('invalid parameter format')
|
||||||
|
}
|
||||||
|
|
||||||
|
obj.parameters = params
|
||||||
|
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get content-type from req/res objects.
|
||||||
|
*
|
||||||
|
* @param {object}
|
||||||
|
* @return {Object}
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function getcontenttype(obj) {
|
||||||
|
if (typeof obj.getHeader === 'function') {
|
||||||
|
// res-like
|
||||||
|
return obj.getHeader('content-type')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof obj.headers === 'object') {
|
||||||
|
// req-like
|
||||||
|
return obj.headers && obj.headers['content-type']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Quote a string if necessary.
|
||||||
|
*
|
||||||
|
* @param {string} val
|
||||||
|
* @return {string}
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function qstring(val) {
|
||||||
|
var str = String(val)
|
||||||
|
|
||||||
|
// no need to quote tokens
|
||||||
|
if (tokenRegExp.test(str)) {
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str.length > 0 && !textRegExp.test(str)) {
|
||||||
|
throw new TypeError('invalid parameter value')
|
||||||
|
}
|
||||||
|
|
||||||
|
return '"' + str.replace(quoteRegExp, '\\$1') + '"'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simply "type/subtype+siffx" into parts.
|
||||||
|
*
|
||||||
|
* @param {string} string
|
||||||
|
* @return {Object}
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function splitType(string) {
|
||||||
|
var match = typeRegExp.exec(string.toLowerCase())
|
||||||
|
|
||||||
|
if (!match) {
|
||||||
|
throw new TypeError('invalid media type')
|
||||||
|
}
|
||||||
|
|
||||||
|
var type = match[1]
|
||||||
|
var subtype = match[2]
|
||||||
|
var suffix
|
||||||
|
|
||||||
|
// suffix after last +
|
||||||
|
var index = subtype.lastIndexOf('+')
|
||||||
|
if (index !== -1) {
|
||||||
|
suffix = subtype.substr(index + 1)
|
||||||
|
subtype = subtype.substr(0, index)
|
||||||
|
}
|
||||||
|
|
||||||
|
var obj = {
|
||||||
|
type: type,
|
||||||
|
subtype: subtype,
|
||||||
|
suffix: suffix
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj
|
||||||
|
}
|
||||||
39
server/node_modules/express/node_modules/type-is/node_modules/media-typer/package.json
generated
vendored
Normal file
39
server/node_modules/express/node_modules/type-is/node_modules/media-typer/package.json
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "media-typer",
|
||||||
|
"description": "Simple RFC 6838 media type parser and formatter",
|
||||||
|
"version": "0.3.0",
|
||||||
|
"author": {
|
||||||
|
"name": "Douglas Christopher Wilson",
|
||||||
|
"email": "doug@somethingdoug.com"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/jshttp/media-typer"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"istanbul": "0.3.2",
|
||||||
|
"mocha": "~1.21.4",
|
||||||
|
"should": "~4.0.4"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"LICENSE",
|
||||||
|
"HISTORY.md",
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "mocha --reporter spec --check-leaks --bail test/",
|
||||||
|
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
|
||||||
|
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
|
||||||
|
},
|
||||||
|
"readme": "# media-typer\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nSimple RFC 6838 media type parser\n\n## Installation\n\n```sh\n$ npm install media-typer\n```\n\n## API\n\n```js\nvar typer = require('media-typer')\n```\n\n### typer.parse(string)\n\n```js\nvar obj = typer.parse('image/svg+xml; charset=utf-8')\n```\n\nParse a media type string. This will return an object with the following\nproperties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):\n\n - `type`: The type of the media type (always lower case). Example: `'image'`\n\n - `subtype`: The subtype of the media type (always lower case). Example: `'svg'`\n\n - `suffix`: The suffix of the media type (always lower case). Example: `'xml'`\n\n - `parameters`: An object of the parameters in the media type (name of parameter always lower case). Example: `{charset: 'utf-8'}`\n\n### typer.parse(req)\n\n```js\nvar obj = typer.parse(req)\n```\n\nParse the `content-type` header from the given `req`. Short-cut for\n`typer.parse(req.headers['content-type'])`.\n\n### typer.parse(res)\n\n```js\nvar obj = typer.parse(res)\n```\n\nParse the `content-type` header set on the given `res`. Short-cut for\n`typer.parse(res.getHeader('content-type'))`.\n\n### typer.format(obj)\n\n```js\nvar obj = typer.format({type: 'image', subtype: 'svg', suffix: 'xml'})\n```\n\nFormat an object into a media type string. This will return a string of the\nmime type for the given object. For the properties of the object, see the\ndocumentation for `typer.parse(string)`.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/media-typer.svg?style=flat\n[npm-url]: https://npmjs.org/package/media-typer\n[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/media-typer.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/media-typer\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/media-typer.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/media-typer\n[downloads-image]: https://img.shields.io/npm/dm/media-typer.svg?style=flat\n[downloads-url]: https://npmjs.org/package/media-typer\n",
|
||||||
|
"readmeFilename": "README.md",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/jshttp/media-typer/issues"
|
||||||
|
},
|
||||||
|
"_id": "media-typer@0.3.0",
|
||||||
|
"_from": "media-typer@0.3.0"
|
||||||
|
}
|
||||||
22
server/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/LICENSE
generated
vendored
Normal file
22
server/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
4
static/js/lib/materialize.js
vendored
4
static/js/lib/materialize.js
vendored
@@ -1067,8 +1067,12 @@ $(document).ready(function(){
|
|||||||
$this.append('<div class="indicator"></div>');
|
$this.append('<div class="indicator"></div>');
|
||||||
var $indicator = $this.find('.indicator');
|
var $indicator = $this.find('.indicator');
|
||||||
if ($this.is(":visible")) {
|
if ($this.is(":visible")) {
|
||||||
|
setTimeout(function(){
|
||||||
|
$tabs_width = $this.width();
|
||||||
|
$tab_width = $this.find('li').first().outerWidth();
|
||||||
$indicator.css({"right": $tabs_width - (($index + 1) * $tab_width)});
|
$indicator.css({"right": $tabs_width - (($index + 1) * $tab_width)});
|
||||||
$indicator.css({"left": $index * $tab_width});
|
$indicator.css({"left": $index * $tab_width});
|
||||||
|
},50);
|
||||||
}
|
}
|
||||||
$(window).resize(function () {
|
$(window).resize(function () {
|
||||||
$tabs_width = $this.width();
|
$tabs_width = $this.width();
|
||||||
|
|||||||
Reference in New Issue
Block a user