mirror of
https://github.com/arnaucube/socketioMEANseed.git
synced 2026-02-07 11:46:48 +01:00
init
This commit is contained in:
221
server/node_modules/send/History.md
generated
vendored
Normal file
221
server/node_modules/send/History.md
generated
vendored
Normal file
@@ -0,0 +1,221 @@
|
||||
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
|
||||
23
server/node_modules/send/LICENSE
generated
vendored
Normal file
23
server/node_modules/send/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2012 TJ Holowaychuk
|
||||
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.
|
||||
182
server/node_modules/send/Readme.md
generated
vendored
Normal file
182
server/node_modules/send/Readme.md
generated
vendored
Normal file
@@ -0,0 +1,182 @@
|
||||
# send
|
||||
|
||||
[![NPM Version][npm-image]][npm-url]
|
||||
[![NPM Downloads][downloads-image]][downloads-url]
|
||||
[![Build Status][travis-image]][travis-url]
|
||||
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||
[![Gittip][gittip-image]][gittip-url]
|
||||
|
||||
Send is Connect's `static()` extracted for generalized use, a streaming static file
|
||||
server 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.
|
||||
|
||||
## 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").
|
||||
|
||||
The default value is `'ignore'`.
|
||||
|
||||
- `'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.
|
||||
|
||||
##### 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:
|
||||
|
||||
```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?style=flat
|
||||
[npm-url]: https://npmjs.org/package/send
|
||||
[travis-image]: https://img.shields.io/travis/tj/send.svg?style=flat
|
||||
[travis-url]: https://travis-ci.org/tj/send
|
||||
[coveralls-image]: https://img.shields.io/coveralls/tj/send.svg?style=flat
|
||||
[coveralls-url]: https://coveralls.io/r/tj/send?branch=master
|
||||
[downloads-image]: https://img.shields.io/npm/dm/send.svg?style=flat
|
||||
[downloads-url]: https://npmjs.org/package/send
|
||||
[gittip-image]: https://img.shields.io/gittip/dougwilson.svg?style=flat
|
||||
[gittip-url]: https://www.gittip.com/dougwilson/
|
||||
773
server/node_modules/send/index.js
generated
vendored
Normal file
773
server/node_modules/send/index.js
generated
vendored
Normal file
@@ -0,0 +1,773 @@
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var debug = require('debug')('send')
|
||||
var deprecate = require('depd')('send')
|
||||
var destroy = require('destroy')
|
||||
var escapeHtml = require('escape-html')
|
||||
, parseRange = require('range-parser')
|
||||
, Stream = require('stream')
|
||||
, mime = require('mime')
|
||||
, fresh = require('fresh')
|
||||
, path = require('path')
|
||||
, http = require('http')
|
||||
, fs = require('fs')
|
||||
, normalize = path.normalize
|
||||
, join = path.join
|
||||
var etag = require('etag')
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var ms = require('ms');
|
||||
var onFinished = require('on-finished')
|
||||
|
||||
/**
|
||||
* Variables.
|
||||
*/
|
||||
var extname = path.extname
|
||||
var maxMaxAge = 60 * 60 * 24 * 365 * 1000; // 1 year
|
||||
var resolve = path.resolve
|
||||
var sep = path.sep
|
||||
var toString = Object.prototype.toString
|
||||
var upPathRegexp = /(?:^|[\\\/])\.\.(?:[\\\/]|$)/
|
||||
|
||||
/**
|
||||
* Expose `send`.
|
||||
*/
|
||||
|
||||
exports = module.exports = send;
|
||||
|
||||
/**
|
||||
* Expose mime module.
|
||||
*/
|
||||
|
||||
exports.mime = mime;
|
||||
|
||||
/**
|
||||
* Shim EventEmitter.listenerCount for node.js < 0.10
|
||||
*/
|
||||
|
||||
/* istanbul ignore next */
|
||||
var listenerCount = EventEmitter.listenerCount
|
||||
|| function(emitter, type){ return emitter.listeners(type).length; };
|
||||
|
||||
/**
|
||||
* Return a `SendStream` for `req` and `path`.
|
||||
*
|
||||
* @param {Request} req
|
||||
* @param {String} path
|
||||
* @param {Object} options
|
||||
* @return {SendStream}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function send(req, path, options) {
|
||||
return new SendStream(req, path, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize a `SendStream` with the given `path`.
|
||||
*
|
||||
* @param {Request} req
|
||||
* @param {String} path
|
||||
* @param {Object} options
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function SendStream(req, path, options) {
|
||||
var self = this;
|
||||
options = options || {};
|
||||
this.req = req;
|
||||
this.path = path;
|
||||
this.options = options;
|
||||
|
||||
this._etag = options.etag !== undefined
|
||||
? Boolean(options.etag)
|
||||
: true
|
||||
|
||||
this._dotfiles = options.dotfiles !== undefined
|
||||
? options.dotfiles
|
||||
: 'ignore'
|
||||
|
||||
if (['allow', 'deny', 'ignore'].indexOf(this._dotfiles) === -1) {
|
||||
throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"')
|
||||
}
|
||||
|
||||
this._hidden = Boolean(options.hidden)
|
||||
|
||||
if ('hidden' in options) {
|
||||
deprecate('hidden: use dotfiles: \'' + (this._hidden ? 'allow' : 'ignore') + '\' instead')
|
||||
}
|
||||
|
||||
// legacy support
|
||||
if (!('dotfiles' in options)) {
|
||||
this._dotfiles = undefined
|
||||
}
|
||||
|
||||
this._extensions = options.extensions !== undefined
|
||||
? normalizeList(options.extensions)
|
||||
: []
|
||||
|
||||
this._index = options.index !== undefined
|
||||
? normalizeList(options.index)
|
||||
: ['index.html']
|
||||
|
||||
this._lastModified = options.lastModified !== undefined
|
||||
? Boolean(options.lastModified)
|
||||
: true
|
||||
|
||||
this._maxage = options.maxAge || options.maxage
|
||||
this._maxage = typeof this._maxage === 'string'
|
||||
? ms(this._maxage)
|
||||
: Number(this._maxage)
|
||||
this._maxage = !isNaN(this._maxage)
|
||||
? Math.min(Math.max(0, this._maxage), maxMaxAge)
|
||||
: 0
|
||||
|
||||
this._root = options.root
|
||||
? resolve(options.root)
|
||||
: null
|
||||
|
||||
if (!this._root && options.from) {
|
||||
this.from(options.from);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from `Stream.prototype`.
|
||||
*/
|
||||
|
||||
SendStream.prototype.__proto__ = Stream.prototype;
|
||||
|
||||
/**
|
||||
* Enable or disable etag generation.
|
||||
*
|
||||
* @param {Boolean} val
|
||||
* @return {SendStream}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
SendStream.prototype.etag = deprecate.function(function etag(val) {
|
||||
val = Boolean(val);
|
||||
debug('etag %s', val);
|
||||
this._etag = val;
|
||||
return this;
|
||||
}, 'send.etag: pass etag as option');
|
||||
|
||||
/**
|
||||
* Enable or disable "hidden" (dot) files.
|
||||
*
|
||||
* @param {Boolean} path
|
||||
* @return {SendStream}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
SendStream.prototype.hidden = deprecate.function(function hidden(val) {
|
||||
val = Boolean(val);
|
||||
debug('hidden %s', val);
|
||||
this._hidden = val;
|
||||
this._dotfiles = undefined
|
||||
return this;
|
||||
}, 'send.hidden: use dotfiles option');
|
||||
|
||||
/**
|
||||
* Set index `paths`, set to a falsy
|
||||
* value to disable index support.
|
||||
*
|
||||
* @param {String|Boolean|Array} paths
|
||||
* @return {SendStream}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
SendStream.prototype.index = deprecate.function(function index(paths) {
|
||||
var index = !paths ? [] : normalizeList(paths);
|
||||
debug('index %o', paths);
|
||||
this._index = index;
|
||||
return this;
|
||||
}, 'send.index: pass index as option');
|
||||
|
||||
/**
|
||||
* Set root `path`.
|
||||
*
|
||||
* @param {String} path
|
||||
* @return {SendStream}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
SendStream.prototype.root = function(path){
|
||||
path = String(path);
|
||||
this._root = resolve(path)
|
||||
return this;
|
||||
};
|
||||
|
||||
SendStream.prototype.from = deprecate.function(SendStream.prototype.root,
|
||||
'send.from: pass root as option');
|
||||
|
||||
SendStream.prototype.root = deprecate.function(SendStream.prototype.root,
|
||||
'send.root: pass root as option');
|
||||
|
||||
/**
|
||||
* Set max-age to `maxAge`.
|
||||
*
|
||||
* @param {Number} maxAge
|
||||
* @return {SendStream}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
SendStream.prototype.maxage = deprecate.function(function maxage(maxAge) {
|
||||
maxAge = typeof maxAge === 'string'
|
||||
? ms(maxAge)
|
||||
: Number(maxAge);
|
||||
if (isNaN(maxAge)) maxAge = 0;
|
||||
if (Infinity == maxAge) maxAge = 60 * 60 * 24 * 365 * 1000;
|
||||
debug('max-age %d', maxAge);
|
||||
this._maxage = maxAge;
|
||||
return this;
|
||||
}, 'send.maxage: pass maxAge as option');
|
||||
|
||||
/**
|
||||
* Emit error with `status`.
|
||||
*
|
||||
* @param {Number} status
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.error = function(status, err){
|
||||
var res = this.res;
|
||||
var msg = http.STATUS_CODES[status];
|
||||
|
||||
err = err || new Error(msg);
|
||||
err.status = status;
|
||||
|
||||
// emit if listeners instead of responding
|
||||
if (listenerCount(this, 'error') !== 0) {
|
||||
return this.emit('error', err);
|
||||
}
|
||||
|
||||
// wipe all existing headers
|
||||
res._headers = undefined;
|
||||
|
||||
res.statusCode = err.status;
|
||||
res.end(msg);
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if the pathname ends with "/".
|
||||
*
|
||||
* @return {Boolean}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.hasTrailingSlash = function(){
|
||||
return '/' == this.path[this.path.length - 1];
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if this is a conditional GET request.
|
||||
*
|
||||
* @return {Boolean}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.isConditionalGET = function(){
|
||||
return this.req.headers['if-none-match']
|
||||
|| this.req.headers['if-modified-since'];
|
||||
};
|
||||
|
||||
/**
|
||||
* Strip content-* header fields.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.removeContentHeaderFields = function(){
|
||||
var res = this.res;
|
||||
Object.keys(res._headers).forEach(function(field){
|
||||
if (0 == field.indexOf('content')) {
|
||||
res.removeHeader(field);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Respond with 304 not modified.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.notModified = function(){
|
||||
var res = this.res;
|
||||
debug('not modified');
|
||||
this.removeContentHeaderFields();
|
||||
res.statusCode = 304;
|
||||
res.end();
|
||||
};
|
||||
|
||||
/**
|
||||
* Raise error that headers already sent.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.headersAlreadySent = function headersAlreadySent(){
|
||||
var err = new Error('Can\'t set headers after they are sent.');
|
||||
debug('headers already sent');
|
||||
this.error(500, err);
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if the request is cacheable, aka
|
||||
* responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).
|
||||
*
|
||||
* @return {Boolean}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.isCachable = function(){
|
||||
var res = this.res;
|
||||
return (res.statusCode >= 200 && res.statusCode < 300) || 304 == res.statusCode;
|
||||
};
|
||||
|
||||
/**
|
||||
* Handle stat() error.
|
||||
*
|
||||
* @param {Error} err
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.onStatError = function(err){
|
||||
var notfound = ['ENOENT', 'ENAMETOOLONG', 'ENOTDIR'];
|
||||
if (~notfound.indexOf(err.code)) return this.error(404, err);
|
||||
this.error(500, err);
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if the cache is fresh.
|
||||
*
|
||||
* @return {Boolean}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.isFresh = function(){
|
||||
return fresh(this.req.headers, this.res._headers);
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if the range is fresh.
|
||||
*
|
||||
* @return {Boolean}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.isRangeFresh = function isRangeFresh(){
|
||||
var ifRange = this.req.headers['if-range'];
|
||||
|
||||
if (!ifRange) return true;
|
||||
|
||||
return ~ifRange.indexOf('"')
|
||||
? ~ifRange.indexOf(this.res._headers['etag'])
|
||||
: Date.parse(this.res._headers['last-modified']) <= Date.parse(ifRange);
|
||||
};
|
||||
|
||||
/**
|
||||
* Redirect to `path`.
|
||||
*
|
||||
* @param {String} path
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.redirect = function(path){
|
||||
if (listenerCount(this, 'directory') !== 0) {
|
||||
return this.emit('directory');
|
||||
}
|
||||
|
||||
if (this.hasTrailingSlash()) return this.error(403);
|
||||
var res = this.res;
|
||||
path += '/';
|
||||
res.statusCode = 301;
|
||||
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
||||
res.setHeader('Location', path);
|
||||
res.end('Redirecting to <a href="' + escapeHtml(path) + '">' + escapeHtml(path) + '</a>\n');
|
||||
};
|
||||
|
||||
/**
|
||||
* Pipe to `res.
|
||||
*
|
||||
* @param {Stream} res
|
||||
* @return {Stream} res
|
||||
* @api public
|
||||
*/
|
||||
|
||||
SendStream.prototype.pipe = function(res){
|
||||
var self = this
|
||||
, args = arguments
|
||||
, root = this._root;
|
||||
|
||||
// references
|
||||
this.res = res;
|
||||
|
||||
// decode the path
|
||||
var path = decode(this.path)
|
||||
if (path === -1) return this.error(400)
|
||||
|
||||
// null byte(s)
|
||||
if (~path.indexOf('\0')) return this.error(400);
|
||||
|
||||
var parts
|
||||
if (root !== null) {
|
||||
// join / normalize from optional root dir
|
||||
path = normalize(join(root, path))
|
||||
root = normalize(root + sep)
|
||||
|
||||
// malicious path
|
||||
if ((path + sep).substr(0, root.length) !== root) {
|
||||
debug('malicious path "%s"', path)
|
||||
return this.error(403)
|
||||
}
|
||||
|
||||
// explode path parts
|
||||
parts = path.substr(root.length).split(sep)
|
||||
} else {
|
||||
// ".." is malicious without "root"
|
||||
if (upPathRegexp.test(path)) {
|
||||
debug('malicious path "%s"', path)
|
||||
return this.error(403)
|
||||
}
|
||||
|
||||
// explode path parts
|
||||
parts = normalize(path).split(sep)
|
||||
|
||||
// resolve the path
|
||||
path = resolve(path)
|
||||
}
|
||||
|
||||
// dotfile handling
|
||||
if (containsDotFile(parts)) {
|
||||
var access = this._dotfiles
|
||||
|
||||
// legacy support
|
||||
if (access === undefined) {
|
||||
access = parts[parts.length - 1][0] === '.'
|
||||
? (this._hidden ? 'allow' : 'ignore')
|
||||
: 'allow'
|
||||
}
|
||||
|
||||
debug('%s dotfile "%s"', access, path)
|
||||
switch (access) {
|
||||
case 'allow':
|
||||
break
|
||||
case 'deny':
|
||||
return this.error(403)
|
||||
case 'ignore':
|
||||
default:
|
||||
return this.error(404)
|
||||
}
|
||||
}
|
||||
|
||||
// index file support
|
||||
if (this._index.length && this.path[this.path.length - 1] === '/') {
|
||||
this.sendIndex(path);
|
||||
return res;
|
||||
}
|
||||
|
||||
this.sendFile(path);
|
||||
return res;
|
||||
};
|
||||
|
||||
/**
|
||||
* Transfer `path`.
|
||||
*
|
||||
* @param {String} path
|
||||
* @api public
|
||||
*/
|
||||
|
||||
SendStream.prototype.send = function(path, stat){
|
||||
var options = this.options;
|
||||
var len = stat.size;
|
||||
var res = this.res;
|
||||
var req = this.req;
|
||||
var ranges = req.headers.range;
|
||||
var offset = options.start || 0;
|
||||
|
||||
if (res._header) {
|
||||
// impossible to send now
|
||||
return this.headersAlreadySent();
|
||||
}
|
||||
|
||||
debug('pipe "%s"', path)
|
||||
|
||||
// set header fields
|
||||
this.setHeader(path, stat);
|
||||
|
||||
// set content-type
|
||||
this.type(path);
|
||||
|
||||
// conditional GET support
|
||||
if (this.isConditionalGET()
|
||||
&& this.isCachable()
|
||||
&& this.isFresh()) {
|
||||
return this.notModified();
|
||||
}
|
||||
|
||||
// adjust len to start/end options
|
||||
len = Math.max(0, len - offset);
|
||||
if (options.end !== undefined) {
|
||||
var bytes = options.end - offset + 1;
|
||||
if (len > bytes) len = bytes;
|
||||
}
|
||||
|
||||
// Range support
|
||||
if (ranges) {
|
||||
ranges = parseRange(len, ranges);
|
||||
|
||||
// If-Range support
|
||||
if (!this.isRangeFresh()) {
|
||||
debug('range stale');
|
||||
ranges = -2;
|
||||
}
|
||||
|
||||
// unsatisfiable
|
||||
if (-1 == ranges) {
|
||||
debug('range unsatisfiable');
|
||||
res.setHeader('Content-Range', 'bytes */' + stat.size);
|
||||
return this.error(416);
|
||||
}
|
||||
|
||||
// valid (syntactically invalid/multiple ranges are treated as a regular response)
|
||||
if (-2 != ranges && ranges.length === 1) {
|
||||
debug('range %j', ranges);
|
||||
|
||||
options.start = offset + ranges[0].start;
|
||||
options.end = offset + ranges[0].end;
|
||||
|
||||
// Content-Range
|
||||
res.statusCode = 206;
|
||||
res.setHeader('Content-Range', 'bytes '
|
||||
+ ranges[0].start
|
||||
+ '-'
|
||||
+ ranges[0].end
|
||||
+ '/'
|
||||
+ len);
|
||||
len = options.end - options.start + 1;
|
||||
}
|
||||
}
|
||||
|
||||
// content-length
|
||||
res.setHeader('Content-Length', len);
|
||||
|
||||
// HEAD support
|
||||
if ('HEAD' == req.method) return res.end();
|
||||
|
||||
this.stream(path, options);
|
||||
};
|
||||
|
||||
/**
|
||||
* Transfer file for `path`.
|
||||
*
|
||||
* @param {String} path
|
||||
* @api private
|
||||
*/
|
||||
SendStream.prototype.sendFile = function sendFile(path) {
|
||||
var i = 0
|
||||
var self = this
|
||||
|
||||
debug('stat "%s"', path);
|
||||
fs.stat(path, function onstat(err, stat) {
|
||||
if (err && err.code === 'ENOENT'
|
||||
&& !extname(path)
|
||||
&& path[path.length - 1] !== sep) {
|
||||
// not found, check extensions
|
||||
return next(err)
|
||||
}
|
||||
if (err) return self.onStatError(err)
|
||||
if (stat.isDirectory()) return self.redirect(self.path)
|
||||
self.emit('file', path, stat)
|
||||
self.send(path, stat)
|
||||
})
|
||||
|
||||
function next(err) {
|
||||
if (self._extensions.length <= i) {
|
||||
return err
|
||||
? self.onStatError(err)
|
||||
: self.error(404)
|
||||
}
|
||||
|
||||
var p = path + '.' + self._extensions[i++]
|
||||
|
||||
debug('stat "%s"', p)
|
||||
fs.stat(p, function (err, stat) {
|
||||
if (err) return next(err)
|
||||
if (stat.isDirectory()) return next()
|
||||
self.emit('file', p, stat)
|
||||
self.send(p, stat)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Transfer index for `path`.
|
||||
*
|
||||
* @param {String} path
|
||||
* @api private
|
||||
*/
|
||||
SendStream.prototype.sendIndex = function sendIndex(path){
|
||||
var i = -1;
|
||||
var self = this;
|
||||
|
||||
function next(err){
|
||||
if (++i >= self._index.length) {
|
||||
if (err) return self.onStatError(err);
|
||||
return self.error(404);
|
||||
}
|
||||
|
||||
var p = join(path, self._index[i]);
|
||||
|
||||
debug('stat "%s"', p);
|
||||
fs.stat(p, function(err, stat){
|
||||
if (err) return next(err);
|
||||
if (stat.isDirectory()) return next();
|
||||
self.emit('file', p, stat);
|
||||
self.send(p, stat);
|
||||
});
|
||||
}
|
||||
|
||||
next();
|
||||
};
|
||||
|
||||
/**
|
||||
* Stream `path` to the response.
|
||||
*
|
||||
* @param {String} path
|
||||
* @param {Object} options
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.stream = function(path, options){
|
||||
// TODO: this is all lame, refactor meeee
|
||||
var finished = false;
|
||||
var self = this;
|
||||
var res = this.res;
|
||||
var req = this.req;
|
||||
|
||||
// pipe
|
||||
var stream = fs.createReadStream(path, options);
|
||||
this.emit('stream', stream);
|
||||
stream.pipe(res);
|
||||
|
||||
// response finished, done with the fd
|
||||
onFinished(res, function onfinished(){
|
||||
finished = true;
|
||||
destroy(stream);
|
||||
});
|
||||
|
||||
// error handling code-smell
|
||||
stream.on('error', function onerror(err){
|
||||
// request already finished
|
||||
if (finished) return;
|
||||
|
||||
// clean up stream
|
||||
finished = true;
|
||||
destroy(stream);
|
||||
|
||||
// error
|
||||
self.onStatError(err);
|
||||
});
|
||||
|
||||
// end
|
||||
stream.on('end', function onend(){
|
||||
self.emit('end');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Set content-type based on `path`
|
||||
* if it hasn't been explicitly set.
|
||||
*
|
||||
* @param {String} path
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.type = function(path){
|
||||
var res = this.res;
|
||||
if (res.getHeader('Content-Type')) return;
|
||||
var type = mime.lookup(path);
|
||||
var charset = mime.charsets.lookup(type);
|
||||
debug('content-type %s', type);
|
||||
res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''));
|
||||
};
|
||||
|
||||
/**
|
||||
* Set response header fields, most
|
||||
* fields may be pre-defined.
|
||||
*
|
||||
* @param {String} path
|
||||
* @param {Object} stat
|
||||
* @api private
|
||||
*/
|
||||
|
||||
SendStream.prototype.setHeader = function setHeader(path, stat){
|
||||
var res = this.res;
|
||||
|
||||
this.emit('headers', res, path, stat);
|
||||
|
||||
if (!res.getHeader('Accept-Ranges')) res.setHeader('Accept-Ranges', 'bytes');
|
||||
if (!res.getHeader('Date')) res.setHeader('Date', new Date().toUTCString());
|
||||
if (!res.getHeader('Cache-Control')) res.setHeader('Cache-Control', 'public, max-age=' + Math.floor(this._maxage / 1000));
|
||||
|
||||
if (this._lastModified && !res.getHeader('Last-Modified')) {
|
||||
var modified = stat.mtime.toUTCString()
|
||||
debug('modified %s', modified)
|
||||
res.setHeader('Last-Modified', modified)
|
||||
}
|
||||
|
||||
if (this._etag && !res.getHeader('ETag')) {
|
||||
var val = etag(stat)
|
||||
debug('etag %s', val)
|
||||
res.setHeader('ETag', val)
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Determine if path parts contain a dotfile.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function containsDotFile(parts) {
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
if (parts[i][0] === '.') {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
/**
|
||||
* decodeURIComponent.
|
||||
*
|
||||
* Allows V8 to only deoptimize this fn instead of all
|
||||
* of send().
|
||||
*
|
||||
* @param {String} path
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function decode(path) {
|
||||
try {
|
||||
return decodeURIComponent(path)
|
||||
} catch (err) {
|
||||
return -1
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize the index option into an array.
|
||||
*
|
||||
* @param {boolean|string|array} val
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function normalizeList(val){
|
||||
return [].concat(val || [])
|
||||
}
|
||||
5
server/node_modules/send/node_modules/ms/.npmignore
generated
vendored
Normal file
5
server/node_modules/send/node_modules/ms/.npmignore
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
node_modules
|
||||
test
|
||||
History.md
|
||||
Makefile
|
||||
component.json
|
||||
33
server/node_modules/send/node_modules/ms/README.md
generated
vendored
Normal file
33
server/node_modules/send/node_modules/ms/README.md
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
# ms.js: miliseconds conversion utility
|
||||
|
||||
```js
|
||||
ms('1d') // 86400000
|
||||
ms('10h') // 36000000
|
||||
ms('2h') // 7200000
|
||||
ms('1m') // 60000
|
||||
ms('5s') // 5000
|
||||
ms('100') // 100
|
||||
```
|
||||
|
||||
```js
|
||||
ms(60000) // "1m"
|
||||
ms(2 * 60000) // "2m"
|
||||
ms(ms('10 hours')) // "10h"
|
||||
```
|
||||
|
||||
```js
|
||||
ms(60000, { long: true }) // "1 minute"
|
||||
ms(2 * 60000, { long: true }) // "2 minutes"
|
||||
ms(ms('10 hours', { long: true })) // "10 hours"
|
||||
```
|
||||
|
||||
- Node/Browser compatible. Published as `ms` in NPM.
|
||||
- If a number is supplied to `ms`, a string with a unit is returned.
|
||||
- If a string that contains the number is supplied, it returns it as
|
||||
a number (e.g: it returns `100` for `'100'`).
|
||||
- If you pass a string with a number and a valid unit, the number of
|
||||
equivalent ms is returned.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
111
server/node_modules/send/node_modules/ms/index.js
generated
vendored
Normal file
111
server/node_modules/send/node_modules/ms/index.js
generated
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
/**
|
||||
* Helpers.
|
||||
*/
|
||||
|
||||
var s = 1000;
|
||||
var m = s * 60;
|
||||
var h = m * 60;
|
||||
var d = h * 24;
|
||||
var y = d * 365.25;
|
||||
|
||||
/**
|
||||
* Parse or format the given `val`.
|
||||
*
|
||||
* Options:
|
||||
*
|
||||
* - `long` verbose formatting [false]
|
||||
*
|
||||
* @param {String|Number} val
|
||||
* @param {Object} options
|
||||
* @return {String|Number}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
module.exports = function(val, options){
|
||||
options = options || {};
|
||||
if ('string' == typeof val) return parse(val);
|
||||
return options.long
|
||||
? long(val)
|
||||
: short(val);
|
||||
};
|
||||
|
||||
/**
|
||||
* Parse the given `str` and return milliseconds.
|
||||
*
|
||||
* @param {String} str
|
||||
* @return {Number}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function parse(str) {
|
||||
var match = /^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(str);
|
||||
if (!match) return;
|
||||
var n = parseFloat(match[1]);
|
||||
var type = (match[2] || 'ms').toLowerCase();
|
||||
switch (type) {
|
||||
case 'years':
|
||||
case 'year':
|
||||
case 'y':
|
||||
return n * y;
|
||||
case 'days':
|
||||
case 'day':
|
||||
case 'd':
|
||||
return n * d;
|
||||
case 'hours':
|
||||
case 'hour':
|
||||
case 'h':
|
||||
return n * h;
|
||||
case 'minutes':
|
||||
case 'minute':
|
||||
case 'm':
|
||||
return n * m;
|
||||
case 'seconds':
|
||||
case 'second':
|
||||
case 's':
|
||||
return n * s;
|
||||
case 'ms':
|
||||
return n;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Short format for `ms`.
|
||||
*
|
||||
* @param {Number} ms
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function short(ms) {
|
||||
if (ms >= d) return Math.round(ms / d) + 'd';
|
||||
if (ms >= h) return Math.round(ms / h) + 'h';
|
||||
if (ms >= m) return Math.round(ms / m) + 'm';
|
||||
if (ms >= s) return Math.round(ms / s) + 's';
|
||||
return ms + 'ms';
|
||||
}
|
||||
|
||||
/**
|
||||
* Long format for `ms`.
|
||||
*
|
||||
* @param {Number} ms
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function long(ms) {
|
||||
return plural(ms, d, 'day')
|
||||
|| plural(ms, h, 'hour')
|
||||
|| plural(ms, m, 'minute')
|
||||
|| plural(ms, s, 'second')
|
||||
|| ms + ' ms';
|
||||
}
|
||||
|
||||
/**
|
||||
* Pluralization helper.
|
||||
*/
|
||||
|
||||
function plural(ms, n, name) {
|
||||
if (ms < n) return;
|
||||
if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;
|
||||
return Math.ceil(ms / n) + ' ' + name + 's';
|
||||
}
|
||||
79
server/node_modules/send/node_modules/ms/package.json
generated
vendored
Normal file
79
server/node_modules/send/node_modules/ms/package.json
generated
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
{
|
||||
"raw": "ms@0.6.2",
|
||||
"scope": null,
|
||||
"escapedName": "ms",
|
||||
"name": "ms",
|
||||
"rawSpec": "0.6.2",
|
||||
"spec": "0.6.2",
|
||||
"type": "version"
|
||||
},
|
||||
"/home/nau/MEGA/CODI/githubRepos/colspace/node_modules/send"
|
||||
]
|
||||
],
|
||||
"_from": "ms@0.6.2",
|
||||
"_id": "ms@0.6.2",
|
||||
"_inCache": true,
|
||||
"_location": "/send/ms",
|
||||
"_npmUser": {
|
||||
"name": "rauchg",
|
||||
"email": "rauchg@gmail.com"
|
||||
},
|
||||
"_npmVersion": "1.2.30",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"raw": "ms@0.6.2",
|
||||
"scope": null,
|
||||
"escapedName": "ms",
|
||||
"name": "ms",
|
||||
"rawSpec": "0.6.2",
|
||||
"spec": "0.6.2",
|
||||
"type": "version"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/send"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz",
|
||||
"_shasum": "d89c2124c6fdc1353d65a8b77bf1aac4b193708c",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "ms@0.6.2",
|
||||
"_where": "/home/nau/MEGA/CODI/githubRepos/colspace/node_modules/send",
|
||||
"bugs": {
|
||||
"url": "https://github.com/guille/ms.js/issues"
|
||||
},
|
||||
"component": {
|
||||
"scripts": {
|
||||
"ms/index.js": "index.js"
|
||||
}
|
||||
},
|
||||
"dependencies": {},
|
||||
"description": "Tiny ms conversion utility",
|
||||
"devDependencies": {
|
||||
"expect.js": "*",
|
||||
"mocha": "*",
|
||||
"serve": "*"
|
||||
},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "d89c2124c6fdc1353d65a8b77bf1aac4b193708c",
|
||||
"tarball": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz"
|
||||
},
|
||||
"homepage": "https://github.com/guille/ms.js#readme",
|
||||
"main": "./index",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "rauchg",
|
||||
"email": "rauchg@gmail.com"
|
||||
}
|
||||
],
|
||||
"name": "ms",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/guille/ms.js.git"
|
||||
},
|
||||
"version": "0.6.2"
|
||||
}
|
||||
120
server/node_modules/send/package.json
generated
vendored
Normal file
120
server/node_modules/send/package.json
generated
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
{
|
||||
"raw": "send@0.10.1",
|
||||
"scope": null,
|
||||
"escapedName": "send",
|
||||
"name": "send",
|
||||
"rawSpec": "0.10.1",
|
||||
"spec": "0.10.1",
|
||||
"type": "version"
|
||||
},
|
||||
"/home/nau/MEGA/CODI/githubRepos/colspace/node_modules/express"
|
||||
]
|
||||
],
|
||||
"_from": "send@0.10.1",
|
||||
"_id": "send@0.10.1",
|
||||
"_inCache": true,
|
||||
"_location": "/send",
|
||||
"_npmUser": {
|
||||
"name": "dougwilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
},
|
||||
"_npmVersion": "1.4.21",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"raw": "send@0.10.1",
|
||||
"scope": null,
|
||||
"escapedName": "send",
|
||||
"name": "send",
|
||||
"rawSpec": "0.10.1",
|
||||
"spec": "0.10.1",
|
||||
"type": "version"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/express",
|
||||
"/serve-static"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/send/-/send-0.10.1.tgz",
|
||||
"_shasum": "7745c50ec72f115115980e8fb179aec01900e08a",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "send@0.10.1",
|
||||
"_where": "/home/nau/MEGA/CODI/githubRepos/colspace/node_modules/express",
|
||||
"author": {
|
||||
"name": "TJ Holowaychuk",
|
||||
"email": "tj@vision-media.ca"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/tj/send/issues"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Douglas Christopher Wilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"debug": "~2.1.0",
|
||||
"depd": "~1.0.0",
|
||||
"destroy": "1.0.3",
|
||||
"escape-html": "1.0.1",
|
||||
"etag": "~1.5.0",
|
||||
"fresh": "0.2.4",
|
||||
"mime": "1.2.11",
|
||||
"ms": "0.6.2",
|
||||
"on-finished": "~2.1.1",
|
||||
"range-parser": "~1.0.2"
|
||||
},
|
||||
"description": "Better streaming static file server with Range and conditional-GET support",
|
||||
"devDependencies": {
|
||||
"istanbul": "0.3.2",
|
||||
"mocha": "~2.0.0",
|
||||
"should": "~4.1.0",
|
||||
"supertest": "~0.14.0"
|
||||
},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "7745c50ec72f115115980e8fb179aec01900e08a",
|
||||
"tarball": "https://registry.npmjs.org/send/-/send-0.10.1.tgz"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8.0"
|
||||
},
|
||||
"files": [
|
||||
"History.md",
|
||||
"LICENSE",
|
||||
"index.js"
|
||||
],
|
||||
"gitHead": "a5e6237f3e812a99d079e2100f6294251ef5f465",
|
||||
"homepage": "https://github.com/tj/send",
|
||||
"keywords": [
|
||||
"static",
|
||||
"file",
|
||||
"server"
|
||||
],
|
||||
"license": "MIT",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "tjholowaychuk",
|
||||
"email": "tj@vision-media.ca"
|
||||
},
|
||||
{
|
||||
"name": "dougwilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
}
|
||||
],
|
||||
"name": "send",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/tj/send.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha --check-leaks --reporter spec --bail",
|
||||
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot",
|
||||
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec"
|
||||
},
|
||||
"version": "0.10.1"
|
||||
}
|
||||
Reference in New Issue
Block a user