version 0.0.1 - HTTP & SocketIo services on server
This commit is contained in:
3
node_modules/socket.io/node_modules/debug/.jshintrc
generated
vendored
Normal file
3
node_modules/socket.io/node_modules/debug/.jshintrc
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"laxbreak": true
|
||||
}
|
||||
6
node_modules/socket.io/node_modules/debug/.npmignore
generated
vendored
Normal file
6
node_modules/socket.io/node_modules/debug/.npmignore
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
support
|
||||
test
|
||||
examples
|
||||
example
|
||||
*.sock
|
||||
dist
|
||||
195
node_modules/socket.io/node_modules/debug/History.md
generated
vendored
Normal file
195
node_modules/socket.io/node_modules/debug/History.md
generated
vendored
Normal file
@@ -0,0 +1,195 @@
|
||||
|
||||
2.2.0 / 2015-05-09
|
||||
==================
|
||||
|
||||
* package: update "ms" to v0.7.1 (#202, @dougwilson)
|
||||
* README: add logging to file example (#193, @DanielOchoa)
|
||||
* README: fixed a typo (#191, @amir-s)
|
||||
* browser: expose `storage` (#190, @stephenmathieson)
|
||||
* Makefile: add a `distclean` target (#189, @stephenmathieson)
|
||||
|
||||
2.1.3 / 2015-03-13
|
||||
==================
|
||||
|
||||
* Updated stdout/stderr example (#186)
|
||||
* Updated example/stdout.js to match debug current behaviour
|
||||
* Renamed example/stderr.js to stdout.js
|
||||
* Update Readme.md (#184)
|
||||
* replace high intensity foreground color for bold (#182, #183)
|
||||
|
||||
2.1.2 / 2015-03-01
|
||||
==================
|
||||
|
||||
* dist: recompile
|
||||
* update "ms" to v0.7.0
|
||||
* package: update "browserify" to v9.0.3
|
||||
* component: fix "ms.js" repo location
|
||||
* changed bower package name
|
||||
* updated documentation about using debug in a browser
|
||||
* fix: security error on safari (#167, #168, @yields)
|
||||
|
||||
2.1.1 / 2014-12-29
|
||||
==================
|
||||
|
||||
* browser: use `typeof` to check for `console` existence
|
||||
* browser: check for `console.log` truthiness (fix IE 8/9)
|
||||
* browser: add support for Chrome apps
|
||||
* Readme: added Windows usage remarks
|
||||
* Add `bower.json` to properly support bower install
|
||||
|
||||
2.1.0 / 2014-10-15
|
||||
==================
|
||||
|
||||
* node: implement `DEBUG_FD` env variable support
|
||||
* package: update "browserify" to v6.1.0
|
||||
* package: add "license" field to package.json (#135, @panuhorsmalahti)
|
||||
|
||||
2.0.0 / 2014-09-01
|
||||
==================
|
||||
|
||||
* package: update "browserify" to v5.11.0
|
||||
* node: use stderr rather than stdout for logging (#29, @stephenmathieson)
|
||||
|
||||
1.0.4 / 2014-07-15
|
||||
==================
|
||||
|
||||
* dist: recompile
|
||||
* example: remove `console.info()` log usage
|
||||
* example: add "Content-Type" UTF-8 header to browser example
|
||||
* browser: place %c marker after the space character
|
||||
* browser: reset the "content" color via `color: inherit`
|
||||
* browser: add colors support for Firefox >= v31
|
||||
* debug: prefer an instance `log()` function over the global one (#119)
|
||||
* Readme: update documentation about styled console logs for FF v31 (#116, @wryk)
|
||||
|
||||
1.0.3 / 2014-07-09
|
||||
==================
|
||||
|
||||
* Add support for multiple wildcards in namespaces (#122, @seegno)
|
||||
* browser: fix lint
|
||||
|
||||
1.0.2 / 2014-06-10
|
||||
==================
|
||||
|
||||
* browser: update color palette (#113, @gscottolson)
|
||||
* common: make console logging function configurable (#108, @timoxley)
|
||||
* node: fix %o colors on old node <= 0.8.x
|
||||
* Makefile: find node path using shell/which (#109, @timoxley)
|
||||
|
||||
1.0.1 / 2014-06-06
|
||||
==================
|
||||
|
||||
* browser: use `removeItem()` to clear localStorage
|
||||
* browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777)
|
||||
* package: add "contributors" section
|
||||
* node: fix comment typo
|
||||
* README: list authors
|
||||
|
||||
1.0.0 / 2014-06-04
|
||||
==================
|
||||
|
||||
* make ms diff be global, not be scope
|
||||
* debug: ignore empty strings in enable()
|
||||
* node: make DEBUG_COLORS able to disable coloring
|
||||
* *: export the `colors` array
|
||||
* npmignore: don't publish the `dist` dir
|
||||
* Makefile: refactor to use browserify
|
||||
* package: add "browserify" as a dev dependency
|
||||
* Readme: add Web Inspector Colors section
|
||||
* node: reset terminal color for the debug content
|
||||
* node: map "%o" to `util.inspect()`
|
||||
* browser: map "%j" to `JSON.stringify()`
|
||||
* debug: add custom "formatters"
|
||||
* debug: use "ms" module for humanizing the diff
|
||||
* Readme: add "bash" syntax highlighting
|
||||
* browser: add Firebug color support
|
||||
* browser: add colors for WebKit browsers
|
||||
* node: apply log to `console`
|
||||
* rewrite: abstract common logic for Node & browsers
|
||||
* add .jshintrc file
|
||||
|
||||
0.8.1 / 2014-04-14
|
||||
==================
|
||||
|
||||
* package: re-add the "component" section
|
||||
|
||||
0.8.0 / 2014-03-30
|
||||
==================
|
||||
|
||||
* add `enable()` method for nodejs. Closes #27
|
||||
* change from stderr to stdout
|
||||
* remove unnecessary index.js file
|
||||
|
||||
0.7.4 / 2013-11-13
|
||||
==================
|
||||
|
||||
* remove "browserify" key from package.json (fixes something in browserify)
|
||||
|
||||
0.7.3 / 2013-10-30
|
||||
==================
|
||||
|
||||
* fix: catch localStorage security error when cookies are blocked (Chrome)
|
||||
* add debug(err) support. Closes #46
|
||||
* add .browser prop to package.json. Closes #42
|
||||
|
||||
0.7.2 / 2013-02-06
|
||||
==================
|
||||
|
||||
* fix package.json
|
||||
* fix: Mobile Safari (private mode) is broken with debug
|
||||
* fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript
|
||||
|
||||
0.7.1 / 2013-02-05
|
||||
==================
|
||||
|
||||
* add repository URL to package.json
|
||||
* add DEBUG_COLORED to force colored output
|
||||
* add browserify support
|
||||
* fix component. Closes #24
|
||||
|
||||
0.7.0 / 2012-05-04
|
||||
==================
|
||||
|
||||
* Added .component to package.json
|
||||
* Added debug.component.js build
|
||||
|
||||
0.6.0 / 2012-03-16
|
||||
==================
|
||||
|
||||
* Added support for "-" prefix in DEBUG [Vinay Pulim]
|
||||
* Added `.enabled` flag to the node version [TooTallNate]
|
||||
|
||||
0.5.0 / 2012-02-02
|
||||
==================
|
||||
|
||||
* Added: humanize diffs. Closes #8
|
||||
* Added `debug.disable()` to the CS variant
|
||||
* Removed padding. Closes #10
|
||||
* Fixed: persist client-side variant again. Closes #9
|
||||
|
||||
0.4.0 / 2012-02-01
|
||||
==================
|
||||
|
||||
* Added browser variant support for older browsers [TooTallNate]
|
||||
* Added `debug.enable('project:*')` to browser variant [TooTallNate]
|
||||
* Added padding to diff (moved it to the right)
|
||||
|
||||
0.3.0 / 2012-01-26
|
||||
==================
|
||||
|
||||
* Added millisecond diff when isatty, otherwise UTC string
|
||||
|
||||
0.2.0 / 2012-01-22
|
||||
==================
|
||||
|
||||
* Added wildcard support
|
||||
|
||||
0.1.0 / 2011-12-02
|
||||
==================
|
||||
|
||||
* Added: remove colors unless stderr isatty [TooTallNate]
|
||||
|
||||
0.0.1 / 2010-01-03
|
||||
==================
|
||||
|
||||
* Initial release
|
||||
36
node_modules/socket.io/node_modules/debug/Makefile
generated
vendored
Normal file
36
node_modules/socket.io/node_modules/debug/Makefile
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
|
||||
# get Makefile directory name: http://stackoverflow.com/a/5982798/376773
|
||||
THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
|
||||
THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd)
|
||||
|
||||
# BIN directory
|
||||
BIN := $(THIS_DIR)/node_modules/.bin
|
||||
|
||||
# applications
|
||||
NODE ?= $(shell which node)
|
||||
NPM ?= $(NODE) $(shell which npm)
|
||||
BROWSERIFY ?= $(NODE) $(BIN)/browserify
|
||||
|
||||
all: dist/debug.js
|
||||
|
||||
install: node_modules
|
||||
|
||||
clean:
|
||||
@rm -rf dist
|
||||
|
||||
dist:
|
||||
@mkdir -p $@
|
||||
|
||||
dist/debug.js: node_modules browser.js debug.js dist
|
||||
@$(BROWSERIFY) \
|
||||
--standalone debug \
|
||||
. > $@
|
||||
|
||||
distclean: clean
|
||||
@rm -rf node_modules
|
||||
|
||||
node_modules: package.json
|
||||
@NODE_ENV= $(NPM) install
|
||||
@touch node_modules
|
||||
|
||||
.PHONY: all install clean distclean
|
||||
188
node_modules/socket.io/node_modules/debug/Readme.md
generated
vendored
Normal file
188
node_modules/socket.io/node_modules/debug/Readme.md
generated
vendored
Normal file
@@ -0,0 +1,188 @@
|
||||
# debug
|
||||
|
||||
tiny node.js debugging utility modelled after node core's debugging technique.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
$ npm install debug
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility.
|
||||
|
||||
Example _app.js_:
|
||||
|
||||
```js
|
||||
var debug = require('debug')('http')
|
||||
, http = require('http')
|
||||
, name = 'My App';
|
||||
|
||||
// fake app
|
||||
|
||||
debug('booting %s', name);
|
||||
|
||||
http.createServer(function(req, res){
|
||||
debug(req.method + ' ' + req.url);
|
||||
res.end('hello\n');
|
||||
}).listen(3000, function(){
|
||||
debug('listening');
|
||||
});
|
||||
|
||||
// fake worker of some kind
|
||||
|
||||
require('./worker');
|
||||
```
|
||||
|
||||
Example _worker.js_:
|
||||
|
||||
```js
|
||||
var debug = require('debug')('worker');
|
||||
|
||||
setInterval(function(){
|
||||
debug('doing some work');
|
||||
}, 1000);
|
||||
```
|
||||
|
||||
The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
#### Windows note
|
||||
|
||||
On Windows the environment variable is set using the `set` command.
|
||||
|
||||
```cmd
|
||||
set DEBUG=*,-not_this
|
||||
```
|
||||
|
||||
Then, run the program to be debugged as usual.
|
||||
|
||||
## Millisecond diff
|
||||
|
||||
When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls.
|
||||
|
||||

|
||||
|
||||
When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:
|
||||
|
||||

|
||||
|
||||
## Conventions
|
||||
|
||||
If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser".
|
||||
|
||||
## Wildcards
|
||||
|
||||
The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.
|
||||
|
||||
You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:".
|
||||
|
||||
## Browser support
|
||||
|
||||
Debug works in the browser as well, currently persisted by `localStorage`. Consider the situation shown below where you have `worker:a` and `worker:b`, and wish to debug both. Somewhere in the code on your page, include:
|
||||
|
||||
```js
|
||||
window.myDebug = require("debug");
|
||||
```
|
||||
|
||||
("debug" is a global object in the browser so we give this object a different name.) When your page is open in the browser, type the following in the console:
|
||||
|
||||
```js
|
||||
myDebug.enable("worker:*")
|
||||
```
|
||||
|
||||
Refresh the page. Debug output will continue to be sent to the console until it is disabled by typing `myDebug.disable()` in the console.
|
||||
|
||||
```js
|
||||
a = debug('worker:a');
|
||||
b = debug('worker:b');
|
||||
|
||||
setInterval(function(){
|
||||
a('doing some work');
|
||||
}, 1000);
|
||||
|
||||
setInterval(function(){
|
||||
b('doing some work');
|
||||
}, 1200);
|
||||
```
|
||||
|
||||
#### Web Inspector Colors
|
||||
|
||||
Colors are also enabled on "Web Inspectors" that understand the `%c` formatting
|
||||
option. These are WebKit web inspectors, Firefox ([since version
|
||||
31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))
|
||||
and the Firebug plugin for Firefox (any version).
|
||||
|
||||
Colored output looks something like:
|
||||
|
||||

|
||||
|
||||
### stderr vs stdout
|
||||
|
||||
You can set an alternative logging method per-namespace by overriding the `log` method on a per-namespace or globally:
|
||||
|
||||
Example _stdout.js_:
|
||||
|
||||
```js
|
||||
var debug = require('debug');
|
||||
var error = debug('app:error');
|
||||
|
||||
// by default stderr is used
|
||||
error('goes to stderr!');
|
||||
|
||||
var log = debug('app:log');
|
||||
// set this namespace to log via console.log
|
||||
log.log = console.log.bind(console); // don't forget to bind to console!
|
||||
log('goes to stdout');
|
||||
error('still goes to stderr!');
|
||||
|
||||
// set all output to go via console.info
|
||||
// overrides all per-namespace log settings
|
||||
debug.log = console.info.bind(console);
|
||||
error('now goes to stdout via console.info');
|
||||
log('still goes to stdout, but via console.info now');
|
||||
```
|
||||
|
||||
### Save debug output to a file
|
||||
|
||||
You can save all debug statements to a file by piping them.
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
$ DEBUG_FD=3 node your-app.js 3> whatever.log
|
||||
```
|
||||
|
||||
## Authors
|
||||
|
||||
- TJ Holowaychuk
|
||||
- Nathan Rajlich
|
||||
|
||||
## License
|
||||
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>
|
||||
|
||||
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.
|
||||
28
node_modules/socket.io/node_modules/debug/bower.json
generated
vendored
Normal file
28
node_modules/socket.io/node_modules/debug/bower.json
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "visionmedia-debug",
|
||||
"main": "dist/debug.js",
|
||||
"version": "2.2.0",
|
||||
"homepage": "https://github.com/visionmedia/debug",
|
||||
"authors": [
|
||||
"TJ Holowaychuk <tj@vision-media.ca>"
|
||||
],
|
||||
"description": "visionmedia-debug",
|
||||
"moduleType": [
|
||||
"amd",
|
||||
"es6",
|
||||
"globals",
|
||||
"node"
|
||||
],
|
||||
"keywords": [
|
||||
"visionmedia",
|
||||
"debug"
|
||||
],
|
||||
"license": "MIT",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
]
|
||||
}
|
||||
168
node_modules/socket.io/node_modules/debug/browser.js
generated
vendored
Normal file
168
node_modules/socket.io/node_modules/debug/browser.js
generated
vendored
Normal file
@@ -0,0 +1,168 @@
|
||||
|
||||
/**
|
||||
* This is the web browser implementation of `debug()`.
|
||||
*
|
||||
* Expose `debug()` as the module.
|
||||
*/
|
||||
|
||||
exports = module.exports = require('./debug');
|
||||
exports.log = log;
|
||||
exports.formatArgs = formatArgs;
|
||||
exports.save = save;
|
||||
exports.load = load;
|
||||
exports.useColors = useColors;
|
||||
exports.storage = 'undefined' != typeof chrome
|
||||
&& 'undefined' != typeof chrome.storage
|
||||
? chrome.storage.local
|
||||
: localstorage();
|
||||
|
||||
/**
|
||||
* Colors.
|
||||
*/
|
||||
|
||||
exports.colors = [
|
||||
'lightseagreen',
|
||||
'forestgreen',
|
||||
'goldenrod',
|
||||
'dodgerblue',
|
||||
'darkorchid',
|
||||
'crimson'
|
||||
];
|
||||
|
||||
/**
|
||||
* Currently only WebKit-based Web Inspectors, Firefox >= v31,
|
||||
* and the Firebug extension (any Firefox version) are known
|
||||
* to support "%c" CSS customizations.
|
||||
*
|
||||
* TODO: add a `localStorage` variable to explicitly enable/disable colors
|
||||
*/
|
||||
|
||||
function useColors() {
|
||||
// is webkit? http://stackoverflow.com/a/16459606/376773
|
||||
return ('WebkitAppearance' in document.documentElement.style) ||
|
||||
// is firebug? http://stackoverflow.com/a/398120/376773
|
||||
(window.console && (console.firebug || (console.exception && console.table))) ||
|
||||
// is firefox >= v31?
|
||||
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
|
||||
(navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31);
|
||||
}
|
||||
|
||||
/**
|
||||
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
|
||||
*/
|
||||
|
||||
exports.formatters.j = function(v) {
|
||||
return JSON.stringify(v);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Colorize log arguments if enabled.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function formatArgs() {
|
||||
var args = arguments;
|
||||
var useColors = this.useColors;
|
||||
|
||||
args[0] = (useColors ? '%c' : '')
|
||||
+ this.namespace
|
||||
+ (useColors ? ' %c' : ' ')
|
||||
+ args[0]
|
||||
+ (useColors ? '%c ' : ' ')
|
||||
+ '+' + exports.humanize(this.diff);
|
||||
|
||||
if (!useColors) return args;
|
||||
|
||||
var c = 'color: ' + this.color;
|
||||
args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));
|
||||
|
||||
// the final "%c" is somewhat tricky, because there could be other
|
||||
// arguments passed either before or after the %c, so we need to
|
||||
// figure out the correct index to insert the CSS into
|
||||
var index = 0;
|
||||
var lastC = 0;
|
||||
args[0].replace(/%[a-z%]/g, function(match) {
|
||||
if ('%%' === match) return;
|
||||
index++;
|
||||
if ('%c' === match) {
|
||||
// we only are interested in the *last* %c
|
||||
// (the user may have provided their own)
|
||||
lastC = index;
|
||||
}
|
||||
});
|
||||
|
||||
args.splice(lastC, 0, c);
|
||||
return args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes `console.log()` when available.
|
||||
* No-op when `console.log` is not a "function".
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function log() {
|
||||
// this hackery is required for IE8/9, where
|
||||
// the `console.log` function doesn't have 'apply'
|
||||
return 'object' === typeof console
|
||||
&& console.log
|
||||
&& Function.prototype.apply.call(console.log, console, arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save `namespaces`.
|
||||
*
|
||||
* @param {String} namespaces
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function save(namespaces) {
|
||||
try {
|
||||
if (null == namespaces) {
|
||||
exports.storage.removeItem('debug');
|
||||
} else {
|
||||
exports.storage.debug = namespaces;
|
||||
}
|
||||
} catch(e) {}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load `namespaces`.
|
||||
*
|
||||
* @return {String} returns the previously persisted debug modes
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function load() {
|
||||
var r;
|
||||
try {
|
||||
r = exports.storage.debug;
|
||||
} catch(e) {}
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable namespaces listed in `localStorage.debug` initially.
|
||||
*/
|
||||
|
||||
exports.enable(load());
|
||||
|
||||
/**
|
||||
* Localstorage attempts to return the localstorage.
|
||||
*
|
||||
* This is necessary because safari throws
|
||||
* when a user disables cookies/localstorage
|
||||
* and you attempt to access it.
|
||||
*
|
||||
* @return {LocalStorage}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function localstorage(){
|
||||
try {
|
||||
return window.localStorage;
|
||||
} catch (e) {}
|
||||
}
|
||||
19
node_modules/socket.io/node_modules/debug/component.json
generated
vendored
Normal file
19
node_modules/socket.io/node_modules/debug/component.json
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "debug",
|
||||
"repo": "visionmedia/debug",
|
||||
"description": "small debugging utility",
|
||||
"version": "2.2.0",
|
||||
"keywords": [
|
||||
"debug",
|
||||
"log",
|
||||
"debugger"
|
||||
],
|
||||
"main": "browser.js",
|
||||
"scripts": [
|
||||
"browser.js",
|
||||
"debug.js"
|
||||
],
|
||||
"dependencies": {
|
||||
"rauchg/ms.js": "0.7.1"
|
||||
}
|
||||
}
|
||||
197
node_modules/socket.io/node_modules/debug/debug.js
generated
vendored
Normal file
197
node_modules/socket.io/node_modules/debug/debug.js
generated
vendored
Normal file
@@ -0,0 +1,197 @@
|
||||
|
||||
/**
|
||||
* This is the common logic for both the Node.js and web browser
|
||||
* implementations of `debug()`.
|
||||
*
|
||||
* Expose `debug()` as the module.
|
||||
*/
|
||||
|
||||
exports = module.exports = debug;
|
||||
exports.coerce = coerce;
|
||||
exports.disable = disable;
|
||||
exports.enable = enable;
|
||||
exports.enabled = enabled;
|
||||
exports.humanize = require('ms');
|
||||
|
||||
/**
|
||||
* The currently active debug mode names, and names to skip.
|
||||
*/
|
||||
|
||||
exports.names = [];
|
||||
exports.skips = [];
|
||||
|
||||
/**
|
||||
* Map of special "%n" handling functions, for the debug "format" argument.
|
||||
*
|
||||
* Valid key names are a single, lowercased letter, i.e. "n".
|
||||
*/
|
||||
|
||||
exports.formatters = {};
|
||||
|
||||
/**
|
||||
* Previously assigned color.
|
||||
*/
|
||||
|
||||
var prevColor = 0;
|
||||
|
||||
/**
|
||||
* Previous log timestamp.
|
||||
*/
|
||||
|
||||
var prevTime;
|
||||
|
||||
/**
|
||||
* Select a color.
|
||||
*
|
||||
* @return {Number}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function selectColor() {
|
||||
return exports.colors[prevColor++ % exports.colors.length];
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a debugger with the given `namespace`.
|
||||
*
|
||||
* @param {String} namespace
|
||||
* @return {Function}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function debug(namespace) {
|
||||
|
||||
// define the `disabled` version
|
||||
function disabled() {
|
||||
}
|
||||
disabled.enabled = false;
|
||||
|
||||
// define the `enabled` version
|
||||
function enabled() {
|
||||
|
||||
var self = enabled;
|
||||
|
||||
// set `diff` timestamp
|
||||
var curr = +new Date();
|
||||
var ms = curr - (prevTime || curr);
|
||||
self.diff = ms;
|
||||
self.prev = prevTime;
|
||||
self.curr = curr;
|
||||
prevTime = curr;
|
||||
|
||||
// add the `color` if not set
|
||||
if (null == self.useColors) self.useColors = exports.useColors();
|
||||
if (null == self.color && self.useColors) self.color = selectColor();
|
||||
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
|
||||
args[0] = exports.coerce(args[0]);
|
||||
|
||||
if ('string' !== typeof args[0]) {
|
||||
// anything else let's inspect with %o
|
||||
args = ['%o'].concat(args);
|
||||
}
|
||||
|
||||
// apply any `formatters` transformations
|
||||
var index = 0;
|
||||
args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {
|
||||
// if we encounter an escaped % then don't increase the array index
|
||||
if (match === '%%') return match;
|
||||
index++;
|
||||
var formatter = exports.formatters[format];
|
||||
if ('function' === typeof formatter) {
|
||||
var val = args[index];
|
||||
match = formatter.call(self, val);
|
||||
|
||||
// now we need to remove `args[index]` since it's inlined in the `format`
|
||||
args.splice(index, 1);
|
||||
index--;
|
||||
}
|
||||
return match;
|
||||
});
|
||||
|
||||
if ('function' === typeof exports.formatArgs) {
|
||||
args = exports.formatArgs.apply(self, args);
|
||||
}
|
||||
var logFn = enabled.log || exports.log || console.log.bind(console);
|
||||
logFn.apply(self, args);
|
||||
}
|
||||
enabled.enabled = true;
|
||||
|
||||
var fn = exports.enabled(namespace) ? enabled : disabled;
|
||||
|
||||
fn.namespace = namespace;
|
||||
|
||||
return fn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables a debug mode by namespaces. This can include modes
|
||||
* separated by a colon and wildcards.
|
||||
*
|
||||
* @param {String} namespaces
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function enable(namespaces) {
|
||||
exports.save(namespaces);
|
||||
|
||||
var split = (namespaces || '').split(/[\s,]+/);
|
||||
var len = split.length;
|
||||
|
||||
for (var i = 0; i < len; i++) {
|
||||
if (!split[i]) continue; // ignore empty strings
|
||||
namespaces = split[i].replace(/\*/g, '.*?');
|
||||
if (namespaces[0] === '-') {
|
||||
exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
|
||||
} else {
|
||||
exports.names.push(new RegExp('^' + namespaces + '$'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable debug output.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function disable() {
|
||||
exports.enable('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the given mode name is enabled, false otherwise.
|
||||
*
|
||||
* @param {String} name
|
||||
* @return {Boolean}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function enabled(name) {
|
||||
var i, len;
|
||||
for (i = 0, len = exports.skips.length; i < len; i++) {
|
||||
if (exports.skips[i].test(name)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (i = 0, len = exports.names.length; i < len; i++) {
|
||||
if (exports.names[i].test(name)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Coerce `val`.
|
||||
*
|
||||
* @param {Mixed} val
|
||||
* @return {Mixed}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function coerce(val) {
|
||||
if (val instanceof Error) return val.stack || val.message;
|
||||
return val;
|
||||
}
|
||||
209
node_modules/socket.io/node_modules/debug/node.js
generated
vendored
Normal file
209
node_modules/socket.io/node_modules/debug/node.js
generated
vendored
Normal file
@@ -0,0 +1,209 @@
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var tty = require('tty');
|
||||
var util = require('util');
|
||||
|
||||
/**
|
||||
* This is the Node.js implementation of `debug()`.
|
||||
*
|
||||
* Expose `debug()` as the module.
|
||||
*/
|
||||
|
||||
exports = module.exports = require('./debug');
|
||||
exports.log = log;
|
||||
exports.formatArgs = formatArgs;
|
||||
exports.save = save;
|
||||
exports.load = load;
|
||||
exports.useColors = useColors;
|
||||
|
||||
/**
|
||||
* Colors.
|
||||
*/
|
||||
|
||||
exports.colors = [6, 2, 3, 4, 5, 1];
|
||||
|
||||
/**
|
||||
* The file descriptor to write the `debug()` calls to.
|
||||
* Set the `DEBUG_FD` env variable to override with another value. i.e.:
|
||||
*
|
||||
* $ DEBUG_FD=3 node script.js 3>debug.log
|
||||
*/
|
||||
|
||||
var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
|
||||
var stream = 1 === fd ? process.stdout :
|
||||
2 === fd ? process.stderr :
|
||||
createWritableStdioStream(fd);
|
||||
|
||||
/**
|
||||
* Is stdout a TTY? Colored output is enabled when `true`.
|
||||
*/
|
||||
|
||||
function useColors() {
|
||||
var debugColors = (process.env.DEBUG_COLORS || '').trim().toLowerCase();
|
||||
if (0 === debugColors.length) {
|
||||
return tty.isatty(fd);
|
||||
} else {
|
||||
return '0' !== debugColors
|
||||
&& 'no' !== debugColors
|
||||
&& 'false' !== debugColors
|
||||
&& 'disabled' !== debugColors;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Map %o to `util.inspect()`, since Node doesn't do that out of the box.
|
||||
*/
|
||||
|
||||
var inspect = (4 === util.inspect.length ?
|
||||
// node <= 0.8.x
|
||||
function (v, colors) {
|
||||
return util.inspect(v, void 0, void 0, colors);
|
||||
} :
|
||||
// node > 0.8.x
|
||||
function (v, colors) {
|
||||
return util.inspect(v, { colors: colors });
|
||||
}
|
||||
);
|
||||
|
||||
exports.formatters.o = function(v) {
|
||||
return inspect(v, this.useColors)
|
||||
.replace(/\s*\n\s*/g, ' ');
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds ANSI color escape codes if enabled.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function formatArgs() {
|
||||
var args = arguments;
|
||||
var useColors = this.useColors;
|
||||
var name = this.namespace;
|
||||
|
||||
if (useColors) {
|
||||
var c = this.color;
|
||||
|
||||
args[0] = ' \u001b[3' + c + ';1m' + name + ' '
|
||||
+ '\u001b[0m'
|
||||
+ args[0] + '\u001b[3' + c + 'm'
|
||||
+ ' +' + exports.humanize(this.diff) + '\u001b[0m';
|
||||
} else {
|
||||
args[0] = new Date().toUTCString()
|
||||
+ ' ' + name + ' ' + args[0];
|
||||
}
|
||||
return args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes `console.error()` with the specified arguments.
|
||||
*/
|
||||
|
||||
function log() {
|
||||
return stream.write(util.format.apply(this, arguments) + '\n');
|
||||
}
|
||||
|
||||
/**
|
||||
* Save `namespaces`.
|
||||
*
|
||||
* @param {String} namespaces
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function save(namespaces) {
|
||||
if (null == namespaces) {
|
||||
// If you set a process.env field to null or undefined, it gets cast to the
|
||||
// string 'null' or 'undefined'. Just delete instead.
|
||||
delete process.env.DEBUG;
|
||||
} else {
|
||||
process.env.DEBUG = namespaces;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load `namespaces`.
|
||||
*
|
||||
* @return {String} returns the previously persisted debug modes
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function load() {
|
||||
return process.env.DEBUG;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copied from `node/src/node.js`.
|
||||
*
|
||||
* XXX: It's lame that node doesn't expose this API out-of-the-box. It also
|
||||
* relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.
|
||||
*/
|
||||
|
||||
function createWritableStdioStream (fd) {
|
||||
var stream;
|
||||
var tty_wrap = process.binding('tty_wrap');
|
||||
|
||||
// Note stream._type is used for test-module-load-list.js
|
||||
|
||||
switch (tty_wrap.guessHandleType(fd)) {
|
||||
case 'TTY':
|
||||
stream = new tty.WriteStream(fd);
|
||||
stream._type = 'tty';
|
||||
|
||||
// Hack to have stream not keep the event loop alive.
|
||||
// See https://github.com/joyent/node/issues/1726
|
||||
if (stream._handle && stream._handle.unref) {
|
||||
stream._handle.unref();
|
||||
}
|
||||
break;
|
||||
|
||||
case 'FILE':
|
||||
var fs = require('fs');
|
||||
stream = new fs.SyncWriteStream(fd, { autoClose: false });
|
||||
stream._type = 'fs';
|
||||
break;
|
||||
|
||||
case 'PIPE':
|
||||
case 'TCP':
|
||||
var net = require('net');
|
||||
stream = new net.Socket({
|
||||
fd: fd,
|
||||
readable: false,
|
||||
writable: true
|
||||
});
|
||||
|
||||
// FIXME Should probably have an option in net.Socket to create a
|
||||
// stream from an existing fd which is writable only. But for now
|
||||
// we'll just add this hack and set the `readable` member to false.
|
||||
// Test: ./node test/fixtures/echo.js < /etc/passwd
|
||||
stream.readable = false;
|
||||
stream.read = null;
|
||||
stream._type = 'pipe';
|
||||
|
||||
// FIXME Hack to have stream not keep the event loop alive.
|
||||
// See https://github.com/joyent/node/issues/1726
|
||||
if (stream._handle && stream._handle.unref) {
|
||||
stream._handle.unref();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
// Probably an error on in uv_guess_handle()
|
||||
throw new Error('Implement me. Unknown stream file type!');
|
||||
}
|
||||
|
||||
// For supporting legacy API we put the FD here.
|
||||
stream.fd = fd;
|
||||
|
||||
stream._isStdio = true;
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable namespaces listed in `process.env.DEBUG` initially.
|
||||
*/
|
||||
|
||||
exports.enable(load());
|
||||
5
node_modules/socket.io/node_modules/debug/node_modules/ms/.npmignore
generated
vendored
Normal file
5
node_modules/socket.io/node_modules/debug/node_modules/ms/.npmignore
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
node_modules
|
||||
test
|
||||
History.md
|
||||
Makefile
|
||||
component.json
|
||||
66
node_modules/socket.io/node_modules/debug/node_modules/ms/History.md
generated
vendored
Normal file
66
node_modules/socket.io/node_modules/debug/node_modules/ms/History.md
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
|
||||
0.7.1 / 2015-04-20
|
||||
==================
|
||||
|
||||
* prevent extraordinary long inputs (@evilpacket)
|
||||
* Fixed broken readme link
|
||||
|
||||
0.7.0 / 2014-11-24
|
||||
==================
|
||||
|
||||
* add time abbreviations, updated tests and readme for the new units
|
||||
* fix example in the readme.
|
||||
* add LICENSE file
|
||||
|
||||
0.6.2 / 2013-12-05
|
||||
==================
|
||||
|
||||
* Adding repository section to package.json to suppress warning from NPM.
|
||||
|
||||
0.6.1 / 2013-05-10
|
||||
==================
|
||||
|
||||
* fix singularization [visionmedia]
|
||||
|
||||
0.6.0 / 2013-03-15
|
||||
==================
|
||||
|
||||
* fix minutes
|
||||
|
||||
0.5.1 / 2013-02-24
|
||||
==================
|
||||
|
||||
* add component namespace
|
||||
|
||||
0.5.0 / 2012-11-09
|
||||
==================
|
||||
|
||||
* add short formatting as default and .long option
|
||||
* add .license property to component.json
|
||||
* add version to component.json
|
||||
|
||||
0.4.0 / 2012-10-22
|
||||
==================
|
||||
|
||||
* add rounding to fix crazy decimals
|
||||
|
||||
0.3.0 / 2012-09-07
|
||||
==================
|
||||
|
||||
* fix `ms(<String>)` [visionmedia]
|
||||
|
||||
0.2.0 / 2012-09-03
|
||||
==================
|
||||
|
||||
* add component.json [visionmedia]
|
||||
* add days support [visionmedia]
|
||||
* add hours support [visionmedia]
|
||||
* add minutes support [visionmedia]
|
||||
* add seconds support [visionmedia]
|
||||
* add ms string support [visionmedia]
|
||||
* refactor tests to facilitate ms(number) [visionmedia]
|
||||
|
||||
0.1.0 / 2012-03-07
|
||||
==================
|
||||
|
||||
* Initial release
|
||||
20
node_modules/socket.io/node_modules/debug/node_modules/ms/LICENSE
generated
vendored
Normal file
20
node_modules/socket.io/node_modules/debug/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.
|
||||
35
node_modules/socket.io/node_modules/debug/node_modules/ms/README.md
generated
vendored
Normal file
35
node_modules/socket.io/node_modules/debug/node_modules/ms/README.md
generated
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
# ms.js: miliseconds conversion utility
|
||||
|
||||
```js
|
||||
ms('2 days') // 172800000
|
||||
ms('1d') // 86400000
|
||||
ms('10h') // 36000000
|
||||
ms('2.5 hrs') // 9000000
|
||||
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`](https://www.npmjs.org/package/ms) in [NPM](http://nodejs.org/download).
|
||||
- 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
|
||||
125
node_modules/socket.io/node_modules/debug/node_modules/ms/index.js
generated
vendored
Normal file
125
node_modules/socket.io/node_modules/debug/node_modules/ms/index.js
generated
vendored
Normal file
@@ -0,0 +1,125 @@
|
||||
/**
|
||||
* 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) {
|
||||
str = '' + str;
|
||||
if (str.length > 10000) return;
|
||||
var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|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 'yrs':
|
||||
case 'yr':
|
||||
case 'y':
|
||||
return n * y;
|
||||
case 'days':
|
||||
case 'day':
|
||||
case 'd':
|
||||
return n * d;
|
||||
case 'hours':
|
||||
case 'hour':
|
||||
case 'hrs':
|
||||
case 'hr':
|
||||
case 'h':
|
||||
return n * h;
|
||||
case 'minutes':
|
||||
case 'minute':
|
||||
case 'mins':
|
||||
case 'min':
|
||||
case 'm':
|
||||
return n * m;
|
||||
case 'seconds':
|
||||
case 'second':
|
||||
case 'secs':
|
||||
case 'sec':
|
||||
case 's':
|
||||
return n * s;
|
||||
case 'milliseconds':
|
||||
case 'millisecond':
|
||||
case 'msecs':
|
||||
case 'msec':
|
||||
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';
|
||||
}
|
||||
48
node_modules/socket.io/node_modules/debug/node_modules/ms/package.json
generated
vendored
Normal file
48
node_modules/socket.io/node_modules/debug/node_modules/ms/package.json
generated
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "ms",
|
||||
"version": "0.7.1",
|
||||
"description": "Tiny ms conversion utility",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/guille/ms.js.git"
|
||||
},
|
||||
"main": "./index",
|
||||
"devDependencies": {
|
||||
"mocha": "*",
|
||||
"expect.js": "*",
|
||||
"serve": "*"
|
||||
},
|
||||
"component": {
|
||||
"scripts": {
|
||||
"ms/index.js": "index.js"
|
||||
}
|
||||
},
|
||||
"gitHead": "713dcf26d9e6fd9dbc95affe7eff9783b7f1b909",
|
||||
"bugs": {
|
||||
"url": "https://github.com/guille/ms.js/issues"
|
||||
},
|
||||
"homepage": "https://github.com/guille/ms.js",
|
||||
"_id": "ms@0.7.1",
|
||||
"scripts": {},
|
||||
"_shasum": "9cd13c03adbff25b65effde7ce864ee952017098",
|
||||
"_from": "ms@0.7.1",
|
||||
"_npmVersion": "2.7.5",
|
||||
"_nodeVersion": "0.12.2",
|
||||
"_npmUser": {
|
||||
"name": "rauchg",
|
||||
"email": "rauchg@gmail.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "rauchg",
|
||||
"email": "rauchg@gmail.com"
|
||||
}
|
||||
],
|
||||
"dist": {
|
||||
"shasum": "9cd13c03adbff25b65effde7ce864ee952017098",
|
||||
"tarball": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
|
||||
},
|
||||
"directories": {},
|
||||
"_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
|
||||
"readme": "ERROR: No README data found!"
|
||||
}
|
||||
73
node_modules/socket.io/node_modules/debug/package.json
generated
vendored
Normal file
73
node_modules/socket.io/node_modules/debug/package.json
generated
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"name": "debug",
|
||||
"version": "2.2.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/visionmedia/debug.git"
|
||||
},
|
||||
"description": "small debugging utility",
|
||||
"keywords": [
|
||||
"debug",
|
||||
"log",
|
||||
"debugger"
|
||||
],
|
||||
"author": {
|
||||
"name": "TJ Holowaychuk",
|
||||
"email": "tj@vision-media.ca"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Nathan Rajlich",
|
||||
"email": "nathan@tootallnate.net",
|
||||
"url": "http://n8.io"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ms": "0.7.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"browserify": "9.0.3",
|
||||
"mocha": "*"
|
||||
},
|
||||
"main": "./node.js",
|
||||
"browser": "./browser.js",
|
||||
"component": {
|
||||
"scripts": {
|
||||
"debug/index.js": "browser.js",
|
||||
"debug/debug.js": "debug.js"
|
||||
}
|
||||
},
|
||||
"gitHead": "b38458422b5aa8aa6d286b10dfe427e8a67e2b35",
|
||||
"bugs": {
|
||||
"url": "https://github.com/visionmedia/debug/issues"
|
||||
},
|
||||
"homepage": "https://github.com/visionmedia/debug",
|
||||
"_id": "debug@2.2.0",
|
||||
"scripts": {},
|
||||
"_shasum": "f87057e995b1a1f6ae6a4960664137bc56f039da",
|
||||
"_from": "debug@2.2.0",
|
||||
"_npmVersion": "2.7.4",
|
||||
"_nodeVersion": "0.12.2",
|
||||
"_npmUser": {
|
||||
"name": "tootallnate",
|
||||
"email": "nathan@tootallnate.net"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "tjholowaychuk",
|
||||
"email": "tj@vision-media.ca"
|
||||
},
|
||||
{
|
||||
"name": "tootallnate",
|
||||
"email": "nathan@tootallnate.net"
|
||||
}
|
||||
],
|
||||
"dist": {
|
||||
"shasum": "f87057e995b1a1f6ae6a4960664137bc56f039da",
|
||||
"tarball": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz"
|
||||
},
|
||||
"directories": {},
|
||||
"_resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
|
||||
"readme": "ERROR: No README data found!"
|
||||
}
|
||||
6
node_modules/socket.io/node_modules/engine.io/.npmignore
generated
vendored
Normal file
6
node_modules/socket.io/node_modules/engine.io/.npmignore
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
examples
|
||||
node_modules
|
||||
test
|
||||
npm-debug.log
|
||||
coverage.html
|
||||
.gitignore
|
||||
10
node_modules/socket.io/node_modules/engine.io/.travis.yml
generated
vendored
Normal file
10
node_modules/socket.io/node_modules/engine.io/.travis.yml
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.8"
|
||||
- "0.10"
|
||||
- "0.12"
|
||||
- "4.0.0"
|
||||
|
||||
notifications:
|
||||
irc: "irc.freenode.org#socket.io"
|
||||
485
node_modules/socket.io/node_modules/engine.io/History.md
generated
vendored
Normal file
485
node_modules/socket.io/node_modules/engine.io/History.md
generated
vendored
Normal file
@@ -0,0 +1,485 @@
|
||||
|
||||
1.6.8 / 2016-01-25
|
||||
==================
|
||||
|
||||
* fix graceful close [nkzawa]
|
||||
* polling: don't set the `closeTimeoutTimer` if the transport is upgraded
|
||||
|
||||
1.6.7 / 2016-01-10
|
||||
==================
|
||||
|
||||
* bump version
|
||||
|
||||
1.6.6 / 2016-01-07
|
||||
==================
|
||||
|
||||
* bump version
|
||||
|
||||
1.6.5 / 2016-01-05
|
||||
==================
|
||||
|
||||
* package: upgrade ws for sec advisory
|
||||
* server: catch websocket errors before upgrade
|
||||
|
||||
1.6.4 / 2015-12-04
|
||||
==================
|
||||
|
||||
* package: bump parser for arraybuffer base64 fix
|
||||
|
||||
1.6.3 / 2015-12-01
|
||||
==================
|
||||
|
||||
* restore testing on 0.8
|
||||
* improve X-XSS-Protection header definition [nkzawa]
|
||||
* add threshold for permessage-deflate [nkzawa]
|
||||
|
||||
1.6.2 / 2015-11-30
|
||||
==================
|
||||
|
||||
* don't compress control packets
|
||||
|
||||
1.6.1 / 2015-11-28
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client` for `ws` options fix
|
||||
* fix `latency` example
|
||||
|
||||
1.6.0 / 2015-11-28
|
||||
==================
|
||||
|
||||
* add support for environments that extend `Object.prototype`
|
||||
* remove listeners upon `clearTransport`
|
||||
* support for all versions of node
|
||||
* fix lingering sockets that can stay open when upgrade failed
|
||||
* ensure sockets are closed on error
|
||||
* bump `ws` for several improvements
|
||||
* fix for a rare race condition on some error scenarios
|
||||
* support custom socket id
|
||||
* use container-based infrastructure for faster build
|
||||
* fix package.json wrongly referrering to self
|
||||
* allow overriding the `cookiePath`
|
||||
* fix potential encoding errors under certain conditions
|
||||
* support compression
|
||||
|
||||
1.5.4 / 2015-09-09
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-parser`
|
||||
|
||||
1.5.3 / 2015-09-09
|
||||
==================
|
||||
|
||||
* package: bump `ws` to fix node 4.0.0
|
||||
|
||||
1.5.2 / 2015-07-09
|
||||
==================
|
||||
|
||||
* package: bump `ws` to fix build issues
|
||||
|
||||
1.5.1 / 2015-01-19
|
||||
==================
|
||||
|
||||
* no change on this release
|
||||
* package: bump `engine.io-client`
|
||||
|
||||
1.5.0 / 2015-01-18
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-parser`
|
||||
* polling: correctly abort the ongoing data request when closing [lpinca]
|
||||
* add cert-related client tests [rase-]
|
||||
|
||||
1.4.3 / 2014-11-21
|
||||
==================
|
||||
|
||||
* package: bump `ws` to fix fd leaks
|
||||
* socket: flush the write buffer before closing the socket [lpinca]
|
||||
* polling: close the pending poll request when closing transport [lpinca]
|
||||
|
||||
1.4.2 / 2014-10-08
|
||||
==================
|
||||
|
||||
* add iframe onload handling to jsonp tests [rase-]
|
||||
|
||||
1.4.1 / 2014-10-03
|
||||
==================
|
||||
|
||||
* socket: allow upgrades if the socket is still in closing state
|
||||
* README: fix typo
|
||||
|
||||
1.4.0 / 2014-09-03
|
||||
==================
|
||||
|
||||
* readme: fix formatting for goals numbering
|
||||
* server: ref fix by @nicokaiser
|
||||
* server: fix ws memory leak (fixes #268)
|
||||
* cache remote address in handshake since it might be lost later.
|
||||
* correct git ref
|
||||
* update client to commit with bumped parser
|
||||
* package: bump parser
|
||||
* npmignore: ignore `.gitignore`
|
||||
* package: bump `debug`
|
||||
* package: bump `engine.io-parser` for memleak fix
|
||||
|
||||
1.3.1 / 2014-06-19
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
|
||||
1.3.0 / 2014-06-13
|
||||
==================
|
||||
|
||||
* update example to use v1.2.2
|
||||
* fixed newline parsing in jsonp
|
||||
* make require('engine.io')() return a new Server instance [defunctzombie]
|
||||
* add Server.attach method [defunctzombie]
|
||||
* fix GH-211, set CORS headers when sending error message [mokesmokes]
|
||||
|
||||
1.2.2 / 2014-05-30
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-parser` for binary utf8 fix
|
||||
|
||||
1.2.1 / 2014-05-22
|
||||
==================
|
||||
|
||||
* package: bump engine.io-client
|
||||
|
||||
1.2.0 / 2014-05-18
|
||||
==================
|
||||
|
||||
* removed flashsocket, moving to userland
|
||||
|
||||
1.1.1 / 2014-05-14
|
||||
==================
|
||||
|
||||
* test: reduce packet size
|
||||
* package: bump parser
|
||||
|
||||
1.1.0 / 2014-04-27
|
||||
==================
|
||||
|
||||
* socket: removed unneeded `clearTimeout` (fixes #250)
|
||||
* made the request verification process async
|
||||
* package: bump `engine.io-parser`
|
||||
* use _query instead of query, fixes compat with restify
|
||||
* added a maximum buffer size to received data from polling
|
||||
* fixing looping array via for in to normal loop
|
||||
|
||||
1.0.5 / 2014-03-18
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-parser` and `engine.io-client`
|
||||
|
||||
1.0.4 / 2014-03-14
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
|
||||
1.0.3 / 2014-03-12
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
|
||||
1.0.2 / 2014-03-12
|
||||
==================
|
||||
|
||||
* bump engine.io-client
|
||||
|
||||
1.0.1 / 2014-03-06
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-parser`
|
||||
* transports: fix jshint warnings and style
|
||||
|
||||
1.0.0 / 2014-03-06
|
||||
==================
|
||||
|
||||
* polling-xhr: added `OPTIONS` support, fixes CORS
|
||||
* close() properly when triggered in connection handler
|
||||
* fix DDOS vector by setting up too many intervals
|
||||
* binary support
|
||||
|
||||
0.9.0 / 2014-02-09
|
||||
==================
|
||||
|
||||
* Prevent errors with connections behind proxies without WS support
|
||||
like Squid [nicklagrow, samaanghani, davidhcummings]
|
||||
* Socket#request a simple property [mokesmokes]
|
||||
* Changed `Socket`'s `upgrade` event to happen after upgrade [mokesmokes]
|
||||
* Document `Socket#id` [mokesmokes]
|
||||
|
||||
0.8.2 / 2014-01-18
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
|
||||
0.8.1 / 2014-01-17
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
* package: pin dev deps
|
||||
* examples: fix port output
|
||||
* fix latency example
|
||||
|
||||
0.8.0 / 2014-01-05
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client` to `0.8.0`
|
||||
* test: fix syntax, remove globals
|
||||
|
||||
0.7.14 / 2014-01-01
|
||||
===================
|
||||
|
||||
* package: bump `engine.io-client` to `0.7.14`
|
||||
|
||||
0.7.13 / 2013-12-20
|
||||
===================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
* transports: added support for XSS filters on IE [guille, 3rd-eden]
|
||||
|
||||
0.7.12 / 2013-11-11
|
||||
===================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
|
||||
0.7.11 / 2013-11-06
|
||||
===================
|
||||
|
||||
* package: bump engine.io-client
|
||||
* fix GH-198
|
||||
|
||||
0.7.10 / 2013-10-28
|
||||
===================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
* package: update "ws" to v0.4.31
|
||||
|
||||
0.7.9 / 2013-08-30
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
|
||||
0.7.8 / 2013-08-30
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
* package: bump ws
|
||||
|
||||
0.7.7 / 2013-08-30
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
|
||||
0.7.6 / 2013-08-30
|
||||
==================
|
||||
|
||||
* package: bump engine.io-client
|
||||
|
||||
0.7.5 / 2013-08-30
|
||||
==================
|
||||
|
||||
* package: bump engine.io-client
|
||||
|
||||
0.7.4 / 2013-08-25
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client`
|
||||
|
||||
0.7.3 / 2013-08-23
|
||||
==================
|
||||
|
||||
* package: bump engine.io-client (noop)
|
||||
* package: fix regresison in upgrade cause by ws update
|
||||
|
||||
0.7.2 / 2013-08-23
|
||||
==================
|
||||
|
||||
* package: bump `engine.io-client` for `WebSocket` browser fix
|
||||
|
||||
0.7.1 / 2013-08-23
|
||||
==================
|
||||
|
||||
* package: bump engine.io-client for ws fix
|
||||
|
||||
0.7.0 / 2013-08-23
|
||||
==================
|
||||
|
||||
* package: bump engine.io-client
|
||||
* updated example
|
||||
* inline merge
|
||||
* added support node version 0.10 to .travis.yml
|
||||
* fixed respond to flash policy request test. Closes #184
|
||||
* fixed upgrade with timeout test. Closes #185
|
||||
* engine.io: don't use __proto__, closes #170
|
||||
|
||||
0.6.3 / 2013-06-21
|
||||
==================
|
||||
|
||||
* package: bumped `engine.io-client` to `0.6.3`
|
||||
|
||||
0.6.2 / 2013-06-15
|
||||
==================
|
||||
|
||||
* fix upgrade stalling edge case introduced with #174 fix
|
||||
* remove unneeded client code related to iOS
|
||||
* added test for `engine.io-client` `0.6.1`
|
||||
|
||||
0.6.1 / 2013-06-06
|
||||
==================
|
||||
|
||||
* package: bumped `engine.io-client` to `0.6.1`
|
||||
|
||||
0.6.0 / 2013-05-31
|
||||
==================
|
||||
|
||||
* socket: clear timer after sending one noop packet (fixes #174)
|
||||
* clear all timers on socket close
|
||||
* sending error on transport creation upon a bad request
|
||||
* added test for client-side buffer cleanup
|
||||
* changed flushComplete to flush
|
||||
* ended support for node 0.6
|
||||
|
||||
0.5.0 / 2013-03-16
|
||||
==================
|
||||
|
||||
* polling: implemented new parser
|
||||
* test writeBuffer isn't cleared onError, removed 'closing' check in .flush()
|
||||
* fixed bug89 and added tests: writeBuffer not flushed until nextTick
|
||||
|
||||
0.4.3 / 2013-02-08
|
||||
==================
|
||||
|
||||
* package: bumped `engine.io-client` to `0.4.3`
|
||||
|
||||
0.4.2 / 2013-02-08
|
||||
==================
|
||||
|
||||
* Only end upgrade socket connections if unhandled
|
||||
* Fix websocket dependency
|
||||
* Close socket if upgrade is received and socket.readyState != open
|
||||
|
||||
0.4.1 / 2013-01-18
|
||||
==================
|
||||
|
||||
* package: bumped versions
|
||||
* Fixed bugs in previous send callback fix and updated test cases
|
||||
* Added a test case which makes the code before the send callback fix fail
|
||||
* socket: emit `data` event (synonym with `message`)
|
||||
* socket: added `Socket#write`
|
||||
* engine.io: cleanup
|
||||
* engine.io: deprecated `resource`
|
||||
* `npm docs engine.io` works now
|
||||
|
||||
0.3.10 / 2012-12-03
|
||||
===================
|
||||
|
||||
* package: bumped `engine.io-client` with `close` fixes
|
||||
* add packetCreate event [jxck]
|
||||
* add packet event to socket [jxck]
|
||||
* transport: remove `Connection` headers and let node handle it
|
||||
* server: send validation failure reason to clients
|
||||
* engine: invoking as a function causes attach
|
||||
* socket: reset `writeBuffer` before send
|
||||
|
||||
0.3.9 / 2012-10-23
|
||||
==================
|
||||
|
||||
* package: bumped `engine.io-client`
|
||||
|
||||
0.3.8 / 2012-10-23
|
||||
==================
|
||||
|
||||
* package: bumped engine.io-client
|
||||
* examples: added first example
|
||||
|
||||
0.3.7 / 2012-10-21
|
||||
==================
|
||||
|
||||
* package: bumped `engine.io-client`
|
||||
|
||||
0.3.6 / 2012-10-21
|
||||
==================
|
||||
|
||||
[skipped]
|
||||
|
||||
0.3.5 / 2012-10-14
|
||||
==================
|
||||
|
||||
* package: reverted last commit - we use the parser from the client
|
||||
|
||||
0.3.4 / 2012-10-14
|
||||
==================
|
||||
|
||||
* package: `engine.io-client` moved to `devDependencies`
|
||||
* socket: added missing jsdoc
|
||||
|
||||
0.3.3 / 2012-10-10
|
||||
==================
|
||||
|
||||
* socket: fixed check interval clearing [joewalnes]
|
||||
* transports: improved instrumentation
|
||||
|
||||
0.3.2 / 2012-10-08
|
||||
==================
|
||||
|
||||
* socket: improve check interval for upgrade
|
||||
|
||||
0.3.1 / 2012-10-08
|
||||
==================
|
||||
|
||||
* socket: faster upgrades (we perform a check immediately)
|
||||
* server: don't assume sid is numeric
|
||||
|
||||
0.3.0 / 2012-10-04
|
||||
==================
|
||||
|
||||
* socket: `writeBuffer` now gets sliced, and is recoverable after `close` [afshinm]
|
||||
* server: expect ping from client and send interval with handshake [cadorn]
|
||||
* polling-jsonp: prevent client breakage with utf8 whitespace
|
||||
* socket: fix `flush` and `drain` events
|
||||
* socket: add `send` callback [afshinm]
|
||||
* transport: avoid unhandled error events for stale transports
|
||||
* README: documentation improvements [EugenDueck]
|
||||
|
||||
0.2.2 / 2012-08-26
|
||||
==================
|
||||
|
||||
* server: remove buffering for flash policy requests
|
||||
* transport: avoid unhandled error events for stale transports (fixes #69)
|
||||
* readme: documented `toString` behavior on `send` [EugenDueck]
|
||||
|
||||
0.2.1 / 2012-08-13
|
||||
==================
|
||||
|
||||
* polling-xhr: skip Keep-Alive when it's implied [EugenDueck]
|
||||
* polling-jsonp: skip Keep-Alive when it's implied [EugenDueck]
|
||||
* README: added plugins list with engine.io-conflation
|
||||
* socket: added flush/drain events (fixes #56)
|
||||
* server: avoid passing websocket to non-websocket transports (fixes #24)
|
||||
|
||||
0.2.0 / 2012-08-06
|
||||
==================
|
||||
|
||||
* Bumped client
|
||||
* test: added closing connection test
|
||||
* server: implemented stronger id generator with collision detection
|
||||
|
||||
0.1.2 / 2012-08-02
|
||||
==================
|
||||
|
||||
* Fixed a jsonp bug in Nokia mobile phones and potentially other UAs.
|
||||
|
||||
0.1.1 / 2012-08-01
|
||||
==================
|
||||
|
||||
* Fixed errors when a socket is closed while upgrade probe is happening.
|
||||
* Improved WS error handling
|
||||
* Replaced websocket.io with ws, now that it supports older drafts
|
||||
* README fixes
|
||||
|
||||
0.1.0 / 2012-07-03
|
||||
==================
|
||||
|
||||
* Initial release.
|
||||
19
node_modules/socket.io/node_modules/engine.io/LICENSE
generated
vendored
Normal file
19
node_modules/socket.io/node_modules/engine.io/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014 Guillermo Rauch <guillermo@learnboost.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.
|
||||
|
||||
23
node_modules/socket.io/node_modules/engine.io/Makefile
generated
vendored
Normal file
23
node_modules/socket.io/node_modules/engine.io/Makefile
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
TESTS = test/*.js
|
||||
BENCHMARKS = $(shell find bench -type f ! -name 'runner.js')
|
||||
REPORTER = dot
|
||||
|
||||
test:
|
||||
@./node_modules/.bin/mocha \
|
||||
--reporter $(REPORTER) \
|
||||
--slow 500ms \
|
||||
--bail \
|
||||
--globals ___eio,document \
|
||||
$(TESTS)
|
||||
|
||||
test-cov: lib-cov
|
||||
EIO_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html
|
||||
|
||||
lib-cov:
|
||||
jscoverage --no-highlight lib lib-cov
|
||||
|
||||
bench:
|
||||
@node $(PROFILEFLAGS) bench/runner.js $(BENCHMARKS)
|
||||
|
||||
.PHONY: test test-cov bench
|
||||
534
node_modules/socket.io/node_modules/engine.io/README.md
generated
vendored
Normal file
534
node_modules/socket.io/node_modules/engine.io/README.md
generated
vendored
Normal file
@@ -0,0 +1,534 @@
|
||||
|
||||
# Engine.IO: the realtime engine
|
||||
|
||||
[](http://travis-ci.org/socketio/engine.io)
|
||||
[](http://badge.fury.io/js/engine.io)
|
||||
|
||||
`Engine.IO` is the implementation of transport-based
|
||||
cross-browser/cross-device bi-directional communication layer for
|
||||
[Socket.IO](http://github.com/socketio/socket.io).
|
||||
|
||||
## How to use
|
||||
|
||||
### Server
|
||||
|
||||
#### (A) Listening on a port
|
||||
|
||||
```js
|
||||
var engine = require('engine.io');
|
||||
var server = engine.listen(80);
|
||||
|
||||
server.on('connection', function(socket){
|
||||
socket.send('utf 8 string');
|
||||
socket.send(new Buffer([0, 1, 2, 3, 4, 5])); // binary data
|
||||
});
|
||||
```
|
||||
|
||||
#### (B) Intercepting requests for a http.Server
|
||||
|
||||
```js
|
||||
var engine = require('engine.io');
|
||||
var http = require('http').createServer().listen(3000);
|
||||
var server = engine.attach(http);
|
||||
|
||||
server.on('connection', function (socket) {
|
||||
socket.on('message', function(data){ });
|
||||
socket.on('close', function(){ });
|
||||
});
|
||||
```
|
||||
|
||||
#### (C) Passing in requests
|
||||
|
||||
```js
|
||||
var engine = require('engine.io');
|
||||
var server = new engine.Server();
|
||||
|
||||
server.on('connection', function(socket){
|
||||
socket.send('hi');
|
||||
});
|
||||
|
||||
// …
|
||||
httpServer.on('upgrade', function(req, socket, head){
|
||||
server.handleUpgrade(req, socket, head);
|
||||
});
|
||||
httpServer.on('request', function(req, res){
|
||||
server.handleRequest(req, res);
|
||||
});
|
||||
```
|
||||
|
||||
### Client
|
||||
|
||||
```html
|
||||
<script src="/path/to/engine.io.js"></script>
|
||||
<script>
|
||||
var socket = new eio.Socket('ws://localhost/');
|
||||
socket.on('open', function(){
|
||||
socket.on('message', function(data){});
|
||||
socket.on('close', function(){});
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
For more information on the client refer to the
|
||||
[engine-client](http://github.com/learnboost/engine.io-client) repository.
|
||||
|
||||
## What features does it have?
|
||||
|
||||
- **Maximum reliability**. Connections are established even in the presence of:
|
||||
- proxies and load balancers.
|
||||
- personal firewall and antivirus software.
|
||||
- for more information refer to **Goals** and **Architecture** sections
|
||||
- **Minimal client size** aided by:
|
||||
- lazy loading of flash transports.
|
||||
- lack of redundant transports.
|
||||
- **Scalable**
|
||||
- load balancer friendly
|
||||
- **Future proof**
|
||||
- **100% Node.JS core style**
|
||||
- No API sugar (left for higher level projects)
|
||||
- Written in readable vanilla JavaScript
|
||||
|
||||
## API
|
||||
|
||||
### Server
|
||||
|
||||
<hr><br>
|
||||
|
||||
#### Top-level
|
||||
|
||||
These are exposed by `require('engine.io')`:
|
||||
|
||||
##### Events
|
||||
|
||||
- `flush`
|
||||
- Called when a socket buffer is being flushed.
|
||||
- **Arguments**
|
||||
- `Socket`: socket being flushed
|
||||
- `Array`: write buffer
|
||||
- `drain`
|
||||
- Called when a socket buffer is drained
|
||||
- **Arguments**
|
||||
- `Socket`: socket being flushed
|
||||
|
||||
##### Properties
|
||||
|
||||
- `protocol` _(Number)_: protocol revision number
|
||||
- `Server`: Server class constructor
|
||||
- `Socket`: Socket class constructor
|
||||
- `Transport` _(Function)_: transport constructor
|
||||
- `transports` _(Object)_: map of available transports
|
||||
|
||||
##### Methods
|
||||
|
||||
- `()`
|
||||
- Returns a new `Server` instance. If the first argument is an `http.Server` then the
|
||||
new `Server` instance will be attached to it. Otherwise, the arguments are passed
|
||||
directly to the `Server` constructor.
|
||||
- **Parameters**
|
||||
- `http.Server`: optional, server to attach to.
|
||||
- `Object`: optional, options object (see `Server#constructor` api docs below)
|
||||
|
||||
The following are identical ways to instantiate a server and then attach it.
|
||||
```js
|
||||
var httpServer; // previously created with `http.createServer();` from node.js api.
|
||||
|
||||
// create a server first, and then attach
|
||||
var eioServer = require('engine.io').Server();
|
||||
eioServer.attach(httpServer);
|
||||
|
||||
// or call the module as a function to get `Server`
|
||||
var eioServer = require('engine.io')();
|
||||
eioServer.attach(httpServer);
|
||||
|
||||
// immediately attach
|
||||
var eioServer = require('engine.io')(httpServer);
|
||||
```
|
||||
|
||||
- `listen`
|
||||
- Creates an `http.Server` which listens on the given port and attaches WS
|
||||
to it. It returns `501 Not Implemented` for regular http requests.
|
||||
- **Parameters**
|
||||
- `Number`: port to listen on.
|
||||
- `Object`: optional, options object
|
||||
- `Function`: callback for `listen`.
|
||||
- **Options**
|
||||
- All options from `Server.attach` method, documented below.
|
||||
- **Additionally** See Server `constructor` below for options you can pass for creating the new Server
|
||||
- **Returns** `Server`
|
||||
- `attach`
|
||||
- Captures `upgrade` requests for a `http.Server`. In other words, makes
|
||||
a regular http.Server WebSocket-compatible.
|
||||
- **Parameters**
|
||||
- `http.Server`: server to attach to.
|
||||
- `Object`: optional, options object
|
||||
- **Options**
|
||||
- All options from `Server.attach` method, documented below.
|
||||
- **Additionally** See Server `constructor` below for options you can pass for creating the new Server
|
||||
- **Returns** `Server` a new Server instance.
|
||||
|
||||
<hr><br>
|
||||
|
||||
#### Server
|
||||
|
||||
The main server/manager. _Inherits from EventEmitter_.
|
||||
|
||||
##### Events
|
||||
|
||||
- `connection`
|
||||
- Fired when a new connection is established.
|
||||
- **Arguments**
|
||||
- `Socket`: a Socket object
|
||||
|
||||
##### Properties
|
||||
|
||||
**Important**: if you plan to use Engine.IO in a scalable way, please
|
||||
keep in mind the properties below will only reflect the clients connected
|
||||
to a single process.
|
||||
|
||||
- `clients` _(Object)_: hash of connected clients by id.
|
||||
- `clientsCount` _(Number)_: number of connected clients.
|
||||
|
||||
##### Methods
|
||||
|
||||
- **constructor**
|
||||
- Initializes the server
|
||||
- **Parameters**
|
||||
- `Object`: optional, options object
|
||||
- **Options**
|
||||
- `pingTimeout` (`Number`): how many ms without a pong packet to
|
||||
consider the connection closed (`60000`)
|
||||
- `pingInterval` (`Number`): how many ms before sending a new ping
|
||||
packet (`25000`)
|
||||
- `maxHttpBufferSize` (`Number`): how many bytes or characters a message
|
||||
can be when polling, before closing the session (to avoid DoS). Default
|
||||
value is `10E7`.
|
||||
- `allowRequest` (`Function`): A function that receives a given handshake
|
||||
or upgrade request as its first parameter, and can decide whether to
|
||||
continue or not. The second argument is a function that needs to be
|
||||
called with the decided information: `fn(err, success)`, where
|
||||
`success` is a boolean value where false means that the request is
|
||||
rejected, and err is an error code.
|
||||
- `transports` (`<Array> String`): transports to allow connections
|
||||
to (`['polling', 'websocket']`)
|
||||
- `allowUpgrades` (`Boolean`): whether to allow transport upgrades
|
||||
(`true`)
|
||||
- `perMessageDeflate` (`Object|Boolean`): parameters of the WebSocket permessage-deflate extension
|
||||
(see [ws module](https://github.com/einaros/ws) api docs). Set to `false` to disable. (`true`)
|
||||
- `threshold` (`Number`): data is compressed only if the byte size is above this value (`1024`)
|
||||
- `httpCompression` (`Object|Boolean`): parameters of the http compression for the polling transports
|
||||
(see [zlib](http://nodejs.org/api/zlib.html#zlib_options) api docs). Set to `false` to disable. (`true`)
|
||||
- `threshold` (`Number`): data is compressed only if the byte size is above this value (`1024`)
|
||||
- `cookie` (`String|Boolean`): name of the HTTP cookie that
|
||||
contains the client sid to send as part of handshake response
|
||||
headers. Set to `false` to not send one. (`io`)
|
||||
- `cookiePath` (`String|Boolean`): path of the above `cookie`
|
||||
option. If false, no path will be sent, which means browsers will only send the cookie on the engine.io attached path (`/engine.io`).
|
||||
Set this to `/` to send the io cookie on all requests. (`false`)
|
||||
- `close`
|
||||
- Closes all clients
|
||||
- **Returns** `Server` for chaining
|
||||
- `handleRequest`
|
||||
- Called internally when a `Engine` request is intercepted.
|
||||
- **Parameters**
|
||||
- `http.ServerRequest`: a node request object
|
||||
- `http.ServerResponse`: a node response object
|
||||
- **Returns** `Server` for chaining
|
||||
- `handleUpgrade`
|
||||
- Called internally when a `Engine` ws upgrade is intercepted.
|
||||
- **Parameters** (same as `upgrade` event)
|
||||
- `http.ServerRequest`: a node request object
|
||||
- `net.Stream`: TCP socket for the request
|
||||
- `Buffer`: legacy tail bytes
|
||||
- **Returns** `Server` for chaining
|
||||
- `attach`
|
||||
- Attach this Server instance to an `http.Server`
|
||||
- Captures `upgrade` requests for a `http.Server`. In other words, makes
|
||||
a regular http.Server WebSocket-compatible.
|
||||
- **Parameters**
|
||||
- `http.Server`: server to attach to.
|
||||
- `Object`: optional, options object
|
||||
- **Options**
|
||||
- `path` (`String`): name of the path to capture (`/engine.io`).
|
||||
- `destroyUpgrade` (`Boolean`): destroy unhandled upgrade requests (`true`)
|
||||
- `destroyUpgradeTimeout` (`Number`): milliseconds after which unhandled requests are ended (`1000`)
|
||||
- `generateId`
|
||||
- Generate a socket id.
|
||||
- Overwrite this method to generate your custom socket id.
|
||||
- **Parameters**
|
||||
- `http.ServerRequest`: a node request object
|
||||
- **Returns** A socket id for connected client.
|
||||
|
||||
<hr><br>
|
||||
|
||||
#### Socket
|
||||
|
||||
A representation of a client. _Inherits from EventEmitter_.
|
||||
|
||||
##### Events
|
||||
|
||||
- `close`
|
||||
- Fired when the client is disconnected.
|
||||
- **Arguments**
|
||||
- `String`: reason for closing
|
||||
- `Object`: description object (optional)
|
||||
- `message`
|
||||
- Fired when the client sends a message.
|
||||
- **Arguments**
|
||||
- `String` or `Buffer`: Unicode string or Buffer with binary contents
|
||||
- `error`
|
||||
- Fired when an error occurs.
|
||||
- **Arguments**
|
||||
- `Error`: error object
|
||||
- `flush`
|
||||
- Called when the write buffer is being flushed.
|
||||
- **Arguments**
|
||||
- `Array`: write buffer
|
||||
- `drain`
|
||||
- Called when the write buffer is drained
|
||||
- `packet`
|
||||
- Called when a socket received a packet (`message`, `ping`)
|
||||
- **Arguments**
|
||||
- `type`: packet type
|
||||
- `data`: packet data (if type is message)
|
||||
- `packetCreate`
|
||||
- Called before a socket sends a packet (`message`, `pong`)
|
||||
- **Arguments**
|
||||
- `type`: packet type
|
||||
- `data`: packet data (if type is message)
|
||||
|
||||
##### Properties
|
||||
|
||||
- `id` _(String)_: unique identifier
|
||||
- `server` _(Server)_: engine parent reference
|
||||
- `request` _(http.ServerRequest)_: request that originated the Socket
|
||||
- `upgraded` _(Boolean)_: whether the transport has been upgraded
|
||||
- `readyState` _(String)_: opening|open|closing|closed
|
||||
- `transport` _(Transport)_: transport reference
|
||||
|
||||
##### Methods
|
||||
|
||||
- `send`:
|
||||
- Sends a message, performing `message = toString(arguments[0])` unless
|
||||
sending binary data, which is sent as is.
|
||||
- **Parameters**
|
||||
- `String` | `Buffer` | `ArrayBuffer` | `ArrayBufferView`: a string or any object implementing `toString()`, with outgoing data, or a Buffer or ArrayBuffer with binary data. Also any ArrayBufferView can be sent as is.
|
||||
- `Object`: optional, options object
|
||||
- `Function`: optional, a callback executed when the message gets flushed out by the transport
|
||||
- **Options**
|
||||
- `compress` (`Boolean`): whether to compress sending data. This option might be ignored and forced to be `true` when using polling. (`true`)
|
||||
- **Returns** `Socket` for chaining
|
||||
- `close`
|
||||
- Disconnects the client
|
||||
- **Returns** `Socket` for chaining
|
||||
|
||||
### Client
|
||||
|
||||
<hr><br>
|
||||
|
||||
Exposed in the `eio` global namespace (in the browser), or by
|
||||
`require('engine.io-client')` (in Node.JS).
|
||||
|
||||
For the client API refer to the
|
||||
[engine-client](http://github.com/learnboost/engine.io-client) repository.
|
||||
|
||||
## Debug / logging
|
||||
|
||||
Engine.IO is powered by [debug](http://github.com/visionmedia/debug).
|
||||
In order to see all the debug output, run your app with the environment variable
|
||||
`DEBUG` including the desired scope.
|
||||
|
||||
To see the output from all of Engine.IO's debugging scopes you can use:
|
||||
|
||||
```
|
||||
DEBUG=engine* node myapp
|
||||
```
|
||||
|
||||
## Transports
|
||||
|
||||
- `polling`: XHR / JSONP polling transport.
|
||||
- `websocket`: WebSocket transport.
|
||||
|
||||
## Plugins
|
||||
|
||||
- [engine.io-conflation](https://github.com/EugenDueck/engine.io-conflation): Makes **conflation and aggregation** of messages straightforward.
|
||||
|
||||
## Support
|
||||
|
||||
The support channels for `engine.io` are the same as `socket.io`:
|
||||
- irc.freenode.net **#socket.io**
|
||||
- [Google Groups](http://groups.google.com/group/socket_io)
|
||||
- [Website](http://socket.io)
|
||||
|
||||
## Development
|
||||
|
||||
To contribute patches, run tests or benchmarks, make sure to clone the
|
||||
repository:
|
||||
|
||||
```
|
||||
git clone git://github.com/LearnBoost/engine.io.git
|
||||
```
|
||||
|
||||
Then:
|
||||
|
||||
```
|
||||
cd engine.io
|
||||
npm install
|
||||
```
|
||||
|
||||
## Tests
|
||||
|
||||
Tests run with `make test`. It runs the server tests that are aided by
|
||||
the usage of `engine.io-client`.
|
||||
|
||||
Make sure `npm install` is run first.
|
||||
|
||||
## Goals
|
||||
|
||||
The main goal of `Engine` is ensuring the most reliable realtime communication.
|
||||
Unlike the previous Socket.IO core, it always establishes a long-polling
|
||||
connection first, then tries to upgrade to better transports that are "tested" on
|
||||
the side.
|
||||
|
||||
During the lifetime of the Socket.IO projects, we've found countless drawbacks
|
||||
to relying on `HTML5 WebSocket` or `Flash Socket` as the first connection
|
||||
mechanisms.
|
||||
|
||||
Both are clearly the _right way_ of establishing a bidirectional communication,
|
||||
with HTML5 WebSocket being the way of the future. However, to answer most business
|
||||
needs, alternative traditional HTTP 1.1 mechanisms are just as good as delivering
|
||||
the same solution.
|
||||
|
||||
WebSocket based connections have two fundamental benefits:
|
||||
|
||||
1. **Better server performance**
|
||||
- _A: Load balancers_<br>
|
||||
Load balancing a long polling connection poses a serious architectural nightmare
|
||||
since requests can come from any number of open sockets by the user agent, but
|
||||
they all need to be routed to the process and computer that owns the `Engine`
|
||||
connection. This negatively impacts RAM and CPU usage.
|
||||
- _B: Network traffic_<br>
|
||||
WebSocket is designed around the premise that each message frame has to be
|
||||
surrounded by the least amount of data. In HTTP 1.1 transports, each message
|
||||
frame is surrounded by HTTP headers and chunked encoding frames. If you try to
|
||||
send the message _"Hello world"_ with xhr-polling, the message ultimately
|
||||
becomes larger than if you were to send it with WebSocket.
|
||||
- _C: Lightweight parser_<br>
|
||||
As an effect of **B**, the server has to do a lot more work to parse the network
|
||||
data and figure out the message when traditional HTTP requests are used
|
||||
(as in long polling). This means that another advantage of WebSocket is
|
||||
less server CPU usage.
|
||||
|
||||
2. **Better user experience**
|
||||
|
||||
Due to the reasons stated in point **1**, the most important effect of being able
|
||||
to establish a WebSocket connection is raw data transfer speed, which translates
|
||||
in _some_ cases in better user experience.
|
||||
|
||||
Applications with heavy realtime interaction (such as games) will benefit greatly,
|
||||
whereas applications like realtime chat (Gmail/Facebook), newsfeeds (Facebook) or
|
||||
timelines (Twitter) will have negligible user experience improvements.
|
||||
|
||||
Having said this, attempting to establish a WebSocket connection directly so far has
|
||||
proven problematic:
|
||||
|
||||
1. **Proxies**<br>
|
||||
Many corporate proxies block WebSocket traffic.
|
||||
|
||||
2. **Personal firewall and antivirus software**<br>
|
||||
As a result of our research, we've found that at least 3 personal security
|
||||
applications block WebSocket traffic.
|
||||
|
||||
3. **Cloud application platforms**<br>
|
||||
Platforms like Heroku or No.de have had trouble keeping up with the fast-paced
|
||||
nature of the evolution of the WebSocket protocol. Applications therefore end up
|
||||
inevitably using long polling, but the seamless installation experience of
|
||||
Socket.IO we strive for (_"require() it and it just works"_) disappears.
|
||||
|
||||
Some of these problems have solutions. In the case of proxies and personal programs,
|
||||
however, the solutions many times involve upgrading software. Experience has shown
|
||||
that relying on client software upgrades to deliver a business solution is
|
||||
fruitless: the very existence of this project has to do with a fragmented panorama
|
||||
of user agent distribution, with clients connecting with latest versions of the most
|
||||
modern user agents (Chrome, Firefox and Safari), but others with versions as low as
|
||||
IE 5.5.
|
||||
|
||||
From the user perspective, an unsuccessful WebSocket connection can translate in
|
||||
up to at least 10 seconds of waiting for the realtime application to begin
|
||||
exchanging data. This **perceptively** hurts user experience.
|
||||
|
||||
To summarize, **Engine** focuses on reliability and user experience first, marginal
|
||||
potential UX improvements and increased server performance second. `Engine` is the
|
||||
result of all the lessons learned with WebSocket in the wild.
|
||||
|
||||
## Architecture
|
||||
|
||||
The main premise of `Engine`, and the core of its existence, is the ability to
|
||||
swap transports on the fly. A connection starts as xhr-polling, but it can
|
||||
switch to WebSocket.
|
||||
|
||||
The central problem this poses is: how do we switch transports without losing
|
||||
messages?
|
||||
|
||||
`Engine` only switches from polling to another transport in between polling
|
||||
cycles. Since the server closes the connection after a certain timeout when
|
||||
there's no activity, and the polling transport implementation buffers messages
|
||||
in between connections, this ensures no message loss and optimal performance.
|
||||
|
||||
Another benefit of this design is that we workaround almost all the limitations
|
||||
of **Flash Socket**, such as slow connection times, increased file size (we can
|
||||
safely lazy load it without hurting user experience), etc.
|
||||
|
||||
## FAQ
|
||||
|
||||
### Can I use engine without Socket.IO ?
|
||||
|
||||
Absolutely. Although the recommended framework for building realtime applications
|
||||
is Socket.IO, since it provides fundamental features for real-world applications
|
||||
such as multiplexing, reconnection support, etc.
|
||||
|
||||
`Engine` is to Socket.IO what Connect is to Express. An essential piece for building
|
||||
realtime frameworks, but something you _probably_ won't be using for building
|
||||
actual applications.
|
||||
|
||||
### Does the server serve the client?
|
||||
|
||||
No. The main reason is that `Engine` is meant to be bundled with frameworks.
|
||||
Socket.IO includes `Engine`, therefore serving two clients is not necessary. If
|
||||
you use Socket.IO, including
|
||||
|
||||
```html
|
||||
<script src="/socket.io/socket.io.js">
|
||||
```
|
||||
|
||||
has you covered.
|
||||
|
||||
### Can I implement `Engine` in other languages?
|
||||
|
||||
Absolutely. The [engine.io-protocol](https://github.com/LearnBoost/engine.io-protocol)
|
||||
repository contains the most up to date description of the specification
|
||||
at all times, and the parser implementation in JavaScript.
|
||||
|
||||
## License
|
||||
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014 Guillermo Rauch <guillermo@learnboost.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.
|
||||
4
node_modules/socket.io/node_modules/engine.io/index.js
generated
vendored
Normal file
4
node_modules/socket.io/node_modules/engine.io/index.js
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
module.exports = process.env.EIO_COV
|
||||
? require('./lib-cov/engine.io')
|
||||
: require('./lib/engine.io');
|
||||
126
node_modules/socket.io/node_modules/engine.io/lib/engine.io.js
generated
vendored
Normal file
126
node_modules/socket.io/node_modules/engine.io/lib/engine.io.js
generated
vendored
Normal file
@@ -0,0 +1,126 @@
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var http = require('http');
|
||||
|
||||
/**
|
||||
* Invoking the library as a function delegates to attach if the first argument
|
||||
* is an `http.Server`.
|
||||
*
|
||||
* If there are no arguments or the first argument is an options object, then
|
||||
* a new Server instance is returned.
|
||||
*
|
||||
* @param {http.Server} server (if specified, will be attached to by the new Server instance)
|
||||
* @param {Object} options
|
||||
* @return {Server} engine server
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports = module.exports = function() {
|
||||
// backwards compatible use as `.attach`
|
||||
// if first argument is an http server
|
||||
if (arguments.length && arguments[0] instanceof http.Server) {
|
||||
return attach.apply(this, arguments);
|
||||
}
|
||||
|
||||
// if first argument is not an http server, then just make a regular eio server
|
||||
return exports.Server.apply(null, arguments);
|
||||
};
|
||||
|
||||
/**
|
||||
* Protocol revision number.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.protocol = 1;
|
||||
|
||||
/**
|
||||
* Expose Server constructor.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.Server = require('./server');
|
||||
|
||||
/**
|
||||
* Expose Socket constructor.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.Socket = require('./socket');
|
||||
|
||||
/**
|
||||
* Expose Transport constructor.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.Transport = require('./transport');
|
||||
|
||||
/**
|
||||
* Expose mutable list of available transports.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.transports = require('./transports');
|
||||
|
||||
/**
|
||||
* Exports parser.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.parser = require('engine.io-parser');
|
||||
|
||||
/**
|
||||
* Creates an http.Server exclusively used for WS upgrades.
|
||||
*
|
||||
* @param {Number} port
|
||||
* @param {Function} callback
|
||||
* @param {Object} options
|
||||
* @return {Server} websocket.io server
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.listen = listen;
|
||||
|
||||
function listen(port, options, fn) {
|
||||
if ('function' == typeof options) {
|
||||
fn = options;
|
||||
options = {};
|
||||
}
|
||||
|
||||
var server = http.createServer(function (req, res) {
|
||||
res.writeHead(501);
|
||||
res.end('Not Implemented');
|
||||
});
|
||||
|
||||
server.listen(port, fn);
|
||||
|
||||
// create engine server
|
||||
var engine = exports.attach(server, options);
|
||||
engine.httpServer = server;
|
||||
|
||||
return engine;
|
||||
};
|
||||
|
||||
/**
|
||||
* Captures upgrade requests for a http.Server.
|
||||
*
|
||||
* @param {http.Server} server
|
||||
* @param {Object} options
|
||||
* @return {Server} engine server
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.attach = attach;
|
||||
|
||||
function attach(server, options) {
|
||||
var engine = new exports.Server(options);
|
||||
engine.attach(server, options);
|
||||
return engine;
|
||||
};
|
||||
456
node_modules/socket.io/node_modules/engine.io/lib/server.js
generated
vendored
Normal file
456
node_modules/socket.io/node_modules/engine.io/lib/server.js
generated
vendored
Normal file
@@ -0,0 +1,456 @@
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var qs = require('querystring')
|
||||
, parse = require('url').parse
|
||||
, readFileSync = require('fs').readFileSync
|
||||
, crypto = require('crypto')
|
||||
, base64id = require('base64id')
|
||||
, transports = require('./transports')
|
||||
, EventEmitter = require('events').EventEmitter
|
||||
, Socket = require('./socket')
|
||||
, WebSocketServer = require('ws').Server
|
||||
, debug = require('debug')('engine');
|
||||
|
||||
/**
|
||||
* Module exports.
|
||||
*/
|
||||
|
||||
module.exports = Server;
|
||||
|
||||
/**
|
||||
* Server constructor.
|
||||
*
|
||||
* @param {Object} options
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function Server(opts){
|
||||
if (!(this instanceof Server)) {
|
||||
return new Server(opts);
|
||||
}
|
||||
|
||||
this.clients = {};
|
||||
this.clientsCount = 0;
|
||||
|
||||
opts = opts || {};
|
||||
this.pingTimeout = opts.pingTimeout || 60000;
|
||||
this.pingInterval = opts.pingInterval || 25000;
|
||||
this.upgradeTimeout = opts.upgradeTimeout || 10000;
|
||||
this.maxHttpBufferSize = opts.maxHttpBufferSize || 10E7;
|
||||
this.transports = opts.transports || Object.keys(transports);
|
||||
this.allowUpgrades = false !== opts.allowUpgrades;
|
||||
this.allowRequest = opts.allowRequest;
|
||||
this.cookie = false !== opts.cookie ? (opts.cookie || 'io') : false;
|
||||
this.cookiePath = false !== opts.cookiePath ? (opts.cookiePath || false) : false;
|
||||
this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || true) : false;
|
||||
this.httpCompression = false !== opts.httpCompression ? (opts.httpCompression || {}) : false;
|
||||
|
||||
var self = this;
|
||||
|
||||
// turn off per message deflate for node 0.8
|
||||
// due to it not supporting DeflateRaw#close
|
||||
// and thus not working with ws 0.8.x
|
||||
if (/^v0\.8\./.test(process.version)) {
|
||||
debug('perMessageDeflate not supported by node 0.8');
|
||||
this.perMessageDeflate = false;
|
||||
}
|
||||
|
||||
// initialize compression options
|
||||
['perMessageDeflate', 'httpCompression'].forEach(function(type) {
|
||||
var compression = self[type];
|
||||
if (true === compression) self[type] = compression = {};
|
||||
if (compression && null == compression.threshold) {
|
||||
compression.threshold = 1024;
|
||||
}
|
||||
});
|
||||
|
||||
// initialize websocket server
|
||||
if (~this.transports.indexOf('websocket')) {
|
||||
this.ws = new WebSocketServer({
|
||||
noServer: true,
|
||||
clientTracking: false,
|
||||
perMessageDeflate: this.perMessageDeflate
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Protocol errors mappings.
|
||||
*/
|
||||
|
||||
Server.errors = {
|
||||
UNKNOWN_TRANSPORT: 0,
|
||||
UNKNOWN_SID: 1,
|
||||
BAD_HANDSHAKE_METHOD: 2,
|
||||
BAD_REQUEST: 3
|
||||
};
|
||||
|
||||
Server.errorMessages = {
|
||||
0: 'Transport unknown',
|
||||
1: 'Session ID unknown',
|
||||
2: 'Bad handshake method',
|
||||
3: 'Bad request'
|
||||
};
|
||||
|
||||
/**
|
||||
* Inherits from EventEmitter.
|
||||
*/
|
||||
|
||||
Server.prototype.__proto__ = EventEmitter.prototype;
|
||||
|
||||
/**
|
||||
* Hash of open clients.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Server.prototype.clients;
|
||||
|
||||
/**
|
||||
* Returns a list of available transports for upgrade given a certain transport.
|
||||
*
|
||||
* @return {Array}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Server.prototype.upgrades = function(transport){
|
||||
if (!this.allowUpgrades) return [];
|
||||
return transports[transport].upgradesTo || [];
|
||||
};
|
||||
|
||||
/**
|
||||
* Verifies a request.
|
||||
*
|
||||
* @param {http.ServerRequest}
|
||||
* @return {Boolean} whether the request is valid
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Server.prototype.verify = function(req, upgrade, fn){
|
||||
// transport check
|
||||
var transport = req._query.transport;
|
||||
if (!~this.transports.indexOf(transport)) {
|
||||
debug('unknown transport "%s"', transport);
|
||||
return fn(Server.errors.UNKNOWN_TRANSPORT, false);
|
||||
}
|
||||
|
||||
// sid check
|
||||
var sid = req._query.sid;
|
||||
if (sid) {
|
||||
if (!this.clients.hasOwnProperty(sid))
|
||||
return fn(Server.errors.UNKNOWN_SID, false);
|
||||
if (!upgrade && this.clients[sid].transport.name !== transport) {
|
||||
debug('bad request: unexpected transport without upgrade');
|
||||
return fn(Server.errors.BAD_REQUEST, false);
|
||||
}
|
||||
} else {
|
||||
// handshake is GET only
|
||||
if ('GET' != req.method) return fn(Server.errors.BAD_HANDSHAKE_METHOD, false);
|
||||
if (!this.allowRequest) return fn(null, true);
|
||||
return this.allowRequest(req, fn);
|
||||
}
|
||||
|
||||
fn(null, true);
|
||||
};
|
||||
|
||||
/**
|
||||
* Prepares a request by processing the query string.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Server.prototype.prepare = function(req){
|
||||
// try to leverage pre-existing `req._query` (e.g: from connect)
|
||||
if (!req._query) {
|
||||
req._query = ~req.url.indexOf('?') ? qs.parse(parse(req.url).query) : {};
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Closes all clients.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Server.prototype.close = function(){
|
||||
debug('closing all open clients');
|
||||
for (var i in this.clients) {
|
||||
if (this.clients.hasOwnProperty(i)) {
|
||||
this.clients[i].close(true);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Handles an Engine.IO HTTP request.
|
||||
*
|
||||
* @param {http.ServerRequest} request
|
||||
* @param {http.ServerResponse|http.OutgoingMessage} response
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Server.prototype.handleRequest = function(req, res){
|
||||
debug('handling "%s" http request "%s"', req.method, req.url);
|
||||
this.prepare(req);
|
||||
req.res = res;
|
||||
|
||||
var self = this;
|
||||
this.verify(req, false, function(err, success) {
|
||||
if (!success) {
|
||||
sendErrorMessage(req, res, err);
|
||||
return;
|
||||
}
|
||||
|
||||
if (req._query.sid) {
|
||||
debug('setting new request for existing client');
|
||||
self.clients[req._query.sid].transport.onRequest(req);
|
||||
} else {
|
||||
self.handshake(req._query.transport, req);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Sends an Engine.IO Error Message
|
||||
*
|
||||
* @param {http.ServerResponse} response
|
||||
* @param {code} error code
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function sendErrorMessage(req, res, code) {
|
||||
var headers = { 'Content-Type': 'application/json' };
|
||||
|
||||
if (req.headers.origin) {
|
||||
headers['Access-Control-Allow-Credentials'] = 'true';
|
||||
headers['Access-Control-Allow-Origin'] = req.headers.origin;
|
||||
} else {
|
||||
headers['Access-Control-Allow-Origin'] = '*';
|
||||
}
|
||||
res.writeHead(400, headers);
|
||||
res.end(JSON.stringify({
|
||||
code: code,
|
||||
message: Server.errorMessages[code]
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* generate a socket id.
|
||||
* Overwrite this method to generate your custom socket id
|
||||
*
|
||||
* @param {Object} request object
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Server.prototype.generateId = function(req){
|
||||
return base64id.generateId();
|
||||
};
|
||||
|
||||
/**
|
||||
* Handshakes a new client.
|
||||
*
|
||||
* @param {String} transport name
|
||||
* @param {Object} request object
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Server.prototype.handshake = function(transportName, req){
|
||||
var id = this.generateId(req);
|
||||
|
||||
debug('handshaking client "%s"', id);
|
||||
|
||||
try {
|
||||
var transport = new transports[transportName](req);
|
||||
if ('polling' == transportName) {
|
||||
transport.maxHttpBufferSize = this.maxHttpBufferSize;
|
||||
transport.httpCompression = this.httpCompression;
|
||||
} else if ('websocket' == transportName) {
|
||||
transport.perMessageDeflate = this.perMessageDeflate;
|
||||
}
|
||||
|
||||
if (req._query && req._query.b64) {
|
||||
transport.supportsBinary = false;
|
||||
} else {
|
||||
transport.supportsBinary = true;
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
sendErrorMessage(req, req.res, Server.errors.BAD_REQUEST);
|
||||
return;
|
||||
}
|
||||
var socket = new Socket(id, this, transport, req);
|
||||
var self = this;
|
||||
|
||||
if (false !== this.cookie) {
|
||||
transport.on('headers', function(headers){
|
||||
var cookie = self.cookie + '=' + id;
|
||||
if(false !== self.cookiePath) {
|
||||
cookie += '; path=' + self.cookiePath;
|
||||
}
|
||||
headers['Set-Cookie'] = cookie;
|
||||
});
|
||||
}
|
||||
|
||||
transport.onRequest(req);
|
||||
|
||||
this.clients[id] = socket;
|
||||
this.clientsCount++;
|
||||
|
||||
socket.once('close', function(){
|
||||
delete self.clients[id];
|
||||
self.clientsCount--;
|
||||
});
|
||||
|
||||
this.emit('connection', socket);
|
||||
};
|
||||
|
||||
/**
|
||||
* Handles an Engine.IO HTTP Upgrade.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Server.prototype.handleUpgrade = function(req, socket, upgradeHead){
|
||||
this.prepare(req);
|
||||
|
||||
var self = this;
|
||||
this.verify(req, true, function(err, success) {
|
||||
if (!success) {
|
||||
socket.end();
|
||||
return;
|
||||
}
|
||||
|
||||
var head = new Buffer(upgradeHead.length);
|
||||
upgradeHead.copy(head);
|
||||
upgradeHead = null;
|
||||
|
||||
// delegate to ws
|
||||
self.ws.handleUpgrade(req, socket, head, function(conn){
|
||||
self.onWebSocket(req, conn);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Called upon a ws.io connection.
|
||||
*
|
||||
* @param {ws.Socket} websocket
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Server.prototype.onWebSocket = function(req, socket){
|
||||
socket.on('error', onUpgradeError);
|
||||
|
||||
if (!transports[req._query.transport].prototype.handlesUpgrades) {
|
||||
debug('transport doesnt handle upgraded requests');
|
||||
socket.close();
|
||||
return;
|
||||
}
|
||||
|
||||
// get client id
|
||||
var id = req._query.sid;
|
||||
|
||||
// keep a reference to the ws.Socket
|
||||
req.websocket = socket;
|
||||
|
||||
if (id) {
|
||||
var client = this.clients[id];
|
||||
if (!client) {
|
||||
debug('upgrade attempt for closed client');
|
||||
socket.close();
|
||||
} else if (client.upgrading) {
|
||||
debug('transport has already been trying to upgrade');
|
||||
socket.close();
|
||||
} else if (client.upgraded) {
|
||||
debug('transport had already been upgraded');
|
||||
socket.close();
|
||||
} else {
|
||||
debug('upgrading existing transport');
|
||||
|
||||
// transport error handling takes over
|
||||
socket.removeListener('error', onUpgradeError);
|
||||
|
||||
var transport = new transports[req._query.transport](req);
|
||||
if (req._query && req._query.b64) {
|
||||
transport.supportsBinary = false;
|
||||
} else {
|
||||
transport.supportsBinary = true;
|
||||
}
|
||||
transport.perMessageDeflate = this.perMessageDeflate;
|
||||
client.maybeUpgrade(transport);
|
||||
}
|
||||
} else {
|
||||
// transport error handling takes over
|
||||
socket.removeListener('error', onUpgradeError);
|
||||
|
||||
this.handshake(req._query.transport, req);
|
||||
}
|
||||
|
||||
function onUpgradeError(){
|
||||
debug('websocket error before upgrade');
|
||||
// socket.close() not needed
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Captures upgrade requests for a http.Server.
|
||||
*
|
||||
* @param {http.Server} server
|
||||
* @param {Object} options
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Server.prototype.attach = function(server, options){
|
||||
var self = this;
|
||||
var options = options || {};
|
||||
var path = (options.path || '/engine.io').replace(/\/$/, '');
|
||||
|
||||
var destroyUpgrade = (options.destroyUpgrade !== undefined) ? options.destroyUpgrade : true;
|
||||
var destroyUpgradeTimeout = options.destroyUpgradeTimeout || 1000;
|
||||
|
||||
// normalize path
|
||||
path += '/';
|
||||
|
||||
function check (req) {
|
||||
return path == req.url.substr(0, path.length);
|
||||
}
|
||||
|
||||
// cache and clean up listeners
|
||||
var listeners = server.listeners('request').slice(0);
|
||||
server.removeAllListeners('request');
|
||||
server.on('close', self.close.bind(self));
|
||||
|
||||
// add request handler
|
||||
server.on('request', function(req, res){
|
||||
if (check(req)) {
|
||||
debug('intercepting request for path "%s"', path);
|
||||
self.handleRequest(req, res);
|
||||
} else {
|
||||
for (var i = 0, l = listeners.length; i < l; i++) {
|
||||
listeners[i].call(server, req, res);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if(~self.transports.indexOf('websocket')) {
|
||||
server.on('upgrade', function (req, socket, head) {
|
||||
if (check(req)) {
|
||||
self.handleUpgrade(req, socket, head);
|
||||
} else if (false !== options.destroyUpgrade) {
|
||||
// default node behavior is to disconnect when no handlers
|
||||
// but by adding a handler, we prevent that
|
||||
// and if no eio thing handles the upgrade
|
||||
// then the socket needs to die!
|
||||
setTimeout(function() {
|
||||
if (socket.writable && socket.bytesWritten <= 0) {
|
||||
return socket.end();
|
||||
}
|
||||
}, options.destroyUpgradeTimeout);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
471
node_modules/socket.io/node_modules/engine.io/lib/socket.js
generated
vendored
Normal file
471
node_modules/socket.io/node_modules/engine.io/lib/socket.js
generated
vendored
Normal file
@@ -0,0 +1,471 @@
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var debug = require('debug')('engine:socket');
|
||||
|
||||
/**
|
||||
* Module exports.
|
||||
*/
|
||||
|
||||
module.exports = Socket;
|
||||
|
||||
/**
|
||||
* Client class (abstract).
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function Socket (id, server, transport, req) {
|
||||
this.id = id;
|
||||
this.server = server;
|
||||
this.upgrading = false;
|
||||
this.upgraded = false;
|
||||
this.readyState = 'opening';
|
||||
this.writeBuffer = [];
|
||||
this.packetsFn = [];
|
||||
this.sentCallbackFn = [];
|
||||
this.cleanupFn = [];
|
||||
this.request = req;
|
||||
|
||||
// Cache IP since it might not be in the req later
|
||||
this.remoteAddress = req.connection.remoteAddress;
|
||||
|
||||
this.checkIntervalTimer = null;
|
||||
this.upgradeTimeoutTimer = null;
|
||||
this.pingTimeoutTimer = null;
|
||||
|
||||
this.setTransport(transport);
|
||||
this.onOpen();
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from EventEmitter.
|
||||
*/
|
||||
|
||||
Socket.prototype.__proto__ = EventEmitter.prototype;
|
||||
|
||||
/**
|
||||
* Called upon transport considered open.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.onOpen = function () {
|
||||
this.readyState = 'open';
|
||||
|
||||
// sends an `open` packet
|
||||
this.transport.sid = this.id;
|
||||
this.sendPacket('open', JSON.stringify({
|
||||
sid: this.id
|
||||
, upgrades: this.getAvailableUpgrades()
|
||||
, pingInterval: this.server.pingInterval
|
||||
, pingTimeout: this.server.pingTimeout
|
||||
}));
|
||||
|
||||
this.emit('open');
|
||||
this.setPingTimeout();
|
||||
};
|
||||
|
||||
/**
|
||||
* Called upon transport packet.
|
||||
*
|
||||
* @param {Object} packet
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.onPacket = function (packet) {
|
||||
if ('open' == this.readyState) {
|
||||
// export packet event
|
||||
debug('packet');
|
||||
this.emit('packet', packet);
|
||||
|
||||
// Reset ping timeout on any packet, incoming data is a good sign of
|
||||
// other side's liveness
|
||||
this.setPingTimeout();
|
||||
|
||||
switch (packet.type) {
|
||||
|
||||
case 'ping':
|
||||
debug('got ping');
|
||||
this.sendPacket('pong');
|
||||
this.emit('heartbeat');
|
||||
break;
|
||||
|
||||
case 'error':
|
||||
this.onClose('parse error');
|
||||
break;
|
||||
|
||||
case 'message':
|
||||
this.emit('data', packet.data);
|
||||
this.emit('message', packet.data);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
debug('packet received with closed socket');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Called upon transport error.
|
||||
*
|
||||
* @param {Error} error object
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.onError = function (err) {
|
||||
debug('transport error');
|
||||
this.onClose('transport error', err);
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets and resets ping timeout timer based on client pings.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.setPingTimeout = function () {
|
||||
var self = this;
|
||||
clearTimeout(self.pingTimeoutTimer);
|
||||
self.pingTimeoutTimer = setTimeout(function () {
|
||||
self.onClose('ping timeout');
|
||||
}, self.server.pingInterval + self.server.pingTimeout);
|
||||
};
|
||||
|
||||
/**
|
||||
* Attaches handlers for the given transport.
|
||||
*
|
||||
* @param {Transport} transport
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.setTransport = function (transport) {
|
||||
var onError = this.onError.bind(this);
|
||||
var onPacket = this.onPacket.bind(this);
|
||||
var flush = this.flush.bind(this);
|
||||
var onClose = this.onClose.bind(this, 'transport close');
|
||||
|
||||
this.transport = transport;
|
||||
this.transport.once('error', onError);
|
||||
this.transport.on('packet', onPacket);
|
||||
this.transport.on('drain', flush);
|
||||
this.transport.once('close', onClose);
|
||||
//this function will manage packet events (also message callbacks)
|
||||
this.setupSendCallback();
|
||||
|
||||
this.cleanupFn.push(function() {
|
||||
transport.removeListener('error', onError);
|
||||
transport.removeListener('packet', onPacket);
|
||||
transport.removeListener('drain', flush);
|
||||
transport.removeListener('close', onClose);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Upgrades socket to the given transport
|
||||
*
|
||||
* @param {Transport} transport
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.maybeUpgrade = function (transport) {
|
||||
debug('might upgrade socket transport from "%s" to "%s"'
|
||||
, this.transport.name, transport.name);
|
||||
|
||||
this.upgrading = true;
|
||||
|
||||
var self = this;
|
||||
|
||||
// set transport upgrade timer
|
||||
self.upgradeTimeoutTimer = setTimeout(function () {
|
||||
debug('client did not complete upgrade - closing transport');
|
||||
cleanup();
|
||||
if ('open' == transport.readyState) {
|
||||
transport.close();
|
||||
}
|
||||
}, this.server.upgradeTimeout);
|
||||
|
||||
function onPacket(packet){
|
||||
if ('ping' == packet.type && 'probe' == packet.data) {
|
||||
transport.send([{ type: 'pong', data: 'probe' }]);
|
||||
self.emit('upgrading', transport);
|
||||
clearInterval(self.checkIntervalTimer);
|
||||
self.checkIntervalTimer = setInterval(check, 100);
|
||||
} else if ('upgrade' == packet.type && self.readyState != 'closed') {
|
||||
debug('got upgrade packet - upgrading');
|
||||
cleanup();
|
||||
self.transport.discard();
|
||||
self.upgraded = true;
|
||||
self.clearTransport();
|
||||
self.setTransport(transport);
|
||||
self.emit('upgrade', transport);
|
||||
self.setPingTimeout();
|
||||
self.flush();
|
||||
if (self.readyState == 'closing') {
|
||||
transport.close(function () {
|
||||
self.onClose('forced close');
|
||||
});
|
||||
}
|
||||
} else {
|
||||
cleanup();
|
||||
transport.close();
|
||||
}
|
||||
}
|
||||
|
||||
// we force a polling cycle to ensure a fast upgrade
|
||||
function check(){
|
||||
if ('polling' == self.transport.name && self.transport.writable) {
|
||||
debug('writing a noop packet to polling for fast upgrade');
|
||||
self.transport.send([{ type: 'noop' }]);
|
||||
}
|
||||
}
|
||||
|
||||
function cleanup() {
|
||||
self.upgrading = false;
|
||||
|
||||
clearInterval(self.checkIntervalTimer);
|
||||
self.checkIntervalTimer = null;
|
||||
|
||||
clearTimeout(self.upgradeTimeoutTimer);
|
||||
self.upgradeTimeoutTimer = null;
|
||||
|
||||
transport.removeListener('packet', onPacket);
|
||||
transport.removeListener('close', onTransportClose);
|
||||
transport.removeListener('error', onError);
|
||||
self.removeListener('close', onClose);
|
||||
}
|
||||
|
||||
function onError(err) {
|
||||
debug('client did not complete upgrade - %s', err);
|
||||
cleanup();
|
||||
transport.close();
|
||||
transport = null;
|
||||
}
|
||||
|
||||
function onTransportClose(){
|
||||
onError("transport closed");
|
||||
}
|
||||
|
||||
function onClose() {
|
||||
onError("socket closed");
|
||||
}
|
||||
|
||||
transport.on('packet', onPacket);
|
||||
transport.once('close', onTransportClose);
|
||||
transport.once('error', onError);
|
||||
|
||||
self.once('close', onClose);
|
||||
};
|
||||
|
||||
/**
|
||||
* Clears listeners and timers associated with current transport.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.clearTransport = function () {
|
||||
var cleanup;
|
||||
while (cleanup = this.cleanupFn.shift()) cleanup();
|
||||
|
||||
// silence further transport errors and prevent uncaught exceptions
|
||||
this.transport.on('error', function(){
|
||||
debug('error triggered by discarded transport');
|
||||
});
|
||||
|
||||
// ensure transport won't stay open
|
||||
this.transport.close();
|
||||
|
||||
clearTimeout(this.pingTimeoutTimer);
|
||||
};
|
||||
|
||||
/**
|
||||
* Called upon transport considered closed.
|
||||
* Possible reasons: `ping timeout`, `client error`, `parse error`,
|
||||
* `transport error`, `server close`, `transport close`
|
||||
*/
|
||||
|
||||
Socket.prototype.onClose = function (reason, description) {
|
||||
if ('closed' != this.readyState) {
|
||||
this.readyState = 'closed';
|
||||
clearTimeout(this.pingTimeoutTimer);
|
||||
clearInterval(this.checkIntervalTimer);
|
||||
this.checkIntervalTimer = null;
|
||||
clearTimeout(this.upgradeTimeoutTimer);
|
||||
var self = this;
|
||||
// clean writeBuffer in next tick, so developers can still
|
||||
// grab the writeBuffer on 'close' event
|
||||
process.nextTick(function() {
|
||||
self.writeBuffer = [];
|
||||
});
|
||||
this.packetsFn = [];
|
||||
this.sentCallbackFn = [];
|
||||
this.clearTransport();
|
||||
this.emit('close', reason, description);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Setup and manage send callback
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.setupSendCallback = function () {
|
||||
var self = this;
|
||||
this.transport.on('drain', onDrain);
|
||||
|
||||
this.cleanupFn.push(function() {
|
||||
self.transport.removeListener('drain', onDrain);
|
||||
});
|
||||
|
||||
//the message was sent successfully, execute the callback
|
||||
function onDrain() {
|
||||
if (self.sentCallbackFn.length > 0) {
|
||||
var seqFn = self.sentCallbackFn.splice(0,1)[0];
|
||||
if ('function' == typeof seqFn) {
|
||||
debug('executing send callback');
|
||||
seqFn(self.transport);
|
||||
} else if (Array.isArray(seqFn)) {
|
||||
debug('executing batch send callback');
|
||||
for (var l = seqFn.length, i = 0; i < l; i++) {
|
||||
if ('function' == typeof seqFn[i]) {
|
||||
seqFn[i](self.transport);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sends a message packet.
|
||||
*
|
||||
* @param {String} message
|
||||
* @param {Object} options
|
||||
* @param {Function} callback
|
||||
* @return {Socket} for chaining
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Socket.prototype.send =
|
||||
Socket.prototype.write = function(data, options, callback){
|
||||
this.sendPacket('message', data, options, callback);
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sends a packet.
|
||||
*
|
||||
* @param {String} packet type
|
||||
* @param {String} optional, data
|
||||
* @param {Object} options
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.sendPacket = function (type, data, options, callback) {
|
||||
if ('function' == typeof options) {
|
||||
callback = options;
|
||||
options = null;
|
||||
}
|
||||
|
||||
options = options || {};
|
||||
options.compress = false !== options.compress;
|
||||
|
||||
if ('closing' != this.readyState) {
|
||||
debug('sending packet "%s" (%s)', type, data);
|
||||
|
||||
var packet = {
|
||||
type: type,
|
||||
options: options
|
||||
};
|
||||
if (data) packet.data = data;
|
||||
|
||||
// exports packetCreate event
|
||||
this.emit('packetCreate', packet);
|
||||
|
||||
this.writeBuffer.push(packet);
|
||||
|
||||
//add send callback to object
|
||||
this.packetsFn.push(callback);
|
||||
|
||||
this.flush();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Attempts to flush the packets buffer.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.flush = function () {
|
||||
if ('closed' != this.readyState && this.transport.writable
|
||||
&& this.writeBuffer.length) {
|
||||
debug('flushing buffer to transport');
|
||||
this.emit('flush', this.writeBuffer);
|
||||
this.server.emit('flush', this, this.writeBuffer);
|
||||
var wbuf = this.writeBuffer;
|
||||
this.writeBuffer = [];
|
||||
if (!this.transport.supportsFraming) {
|
||||
this.sentCallbackFn.push(this.packetsFn);
|
||||
} else {
|
||||
this.sentCallbackFn.push.apply(this.sentCallbackFn, this.packetsFn);
|
||||
}
|
||||
this.packetsFn = [];
|
||||
this.transport.send(wbuf);
|
||||
this.emit('drain');
|
||||
this.server.emit('drain', this);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get available upgrades for this socket.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.getAvailableUpgrades = function () {
|
||||
var availableUpgrades = [];
|
||||
var allUpgrades = this.server.upgrades(this.transport.name);
|
||||
for (var i = 0, l = allUpgrades.length; i < l; ++i) {
|
||||
var upg = allUpgrades[i];
|
||||
if (this.server.transports.indexOf(upg) != -1) {
|
||||
availableUpgrades.push(upg);
|
||||
}
|
||||
}
|
||||
return availableUpgrades;
|
||||
};
|
||||
|
||||
/**
|
||||
* Closes the socket and underlying transport.
|
||||
*
|
||||
* @param {Boolean} optional, discard
|
||||
* @return {Socket} for chaining
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Socket.prototype.close = function (discard) {
|
||||
if ('open' != this.readyState) return;
|
||||
|
||||
this.readyState = 'closing';
|
||||
|
||||
if (this.writeBuffer.length) {
|
||||
this.once('drain', this.closeTransport.bind(this, discard));
|
||||
return;
|
||||
}
|
||||
|
||||
this.closeTransport(discard);
|
||||
};
|
||||
|
||||
/**
|
||||
* Closes the underlying transport.
|
||||
*
|
||||
* @param {Boolean} discard
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Socket.prototype.closeTransport = function (discard) {
|
||||
if (discard) this.transport.discard();
|
||||
this.transport.close(this.onClose.bind(this, 'forced close'));
|
||||
};
|
||||
127
node_modules/socket.io/node_modules/engine.io/lib/transport.js
generated
vendored
Normal file
127
node_modules/socket.io/node_modules/engine.io/lib/transport.js
generated
vendored
Normal file
@@ -0,0 +1,127 @@
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var EventEmitter = require('events').EventEmitter
|
||||
, parser = require('engine.io-parser')
|
||||
, debug = require('debug')('engine:transport');
|
||||
|
||||
/**
|
||||
* Expose the constructor.
|
||||
*/
|
||||
|
||||
module.exports = Transport;
|
||||
|
||||
/**
|
||||
* Noop function.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function noop () {}
|
||||
|
||||
/**
|
||||
* Transport constructor.
|
||||
*
|
||||
* @param {http.ServerRequest} request
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function Transport (req) {
|
||||
this.readyState = 'open';
|
||||
this.discarded = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from EventEmitter.
|
||||
*/
|
||||
|
||||
Transport.prototype.__proto__ = EventEmitter.prototype;
|
||||
|
||||
/**
|
||||
* Flags the transport as discarded.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Transport.prototype.discard = function () {
|
||||
this.discarded = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Called with an incoming HTTP request.
|
||||
*
|
||||
* @param {http.ServerRequest} request
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Transport.prototype.onRequest = function (req) {
|
||||
debug('setting request');
|
||||
this.req = req;
|
||||
};
|
||||
|
||||
/**
|
||||
* Closes the transport.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Transport.prototype.close = function (fn) {
|
||||
if ('closed' == this.readyState || 'closing' == this.readyState) return;
|
||||
|
||||
this.readyState = 'closing';
|
||||
this.doClose(fn || noop);
|
||||
};
|
||||
|
||||
/**
|
||||
* Called with a transport error.
|
||||
*
|
||||
* @param {String} message error
|
||||
* @param {Object} error description
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Transport.prototype.onError = function (msg, desc) {
|
||||
if (this.listeners('error').length) {
|
||||
var err = new Error(msg);
|
||||
err.type = 'TransportError';
|
||||
err.description = desc;
|
||||
this.emit('error', err);
|
||||
} else {
|
||||
debug('ignored transport error %s (%s)', msg, desc);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Called with parsed out a packets from the data stream.
|
||||
*
|
||||
* @param {Object} packet
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Transport.prototype.onPacket = function (packet) {
|
||||
this.emit('packet', packet);
|
||||
};
|
||||
|
||||
/**
|
||||
* Called with the encoded packet data.
|
||||
*
|
||||
* @param {String} data
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Transport.prototype.onData = function (data) {
|
||||
this.onPacket(parser.decodePacket(data));
|
||||
};
|
||||
|
||||
/**
|
||||
* Called upon transport close.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Transport.prototype.onClose = function () {
|
||||
this.readyState = 'closed';
|
||||
this.emit('close');
|
||||
};
|
||||
36
node_modules/socket.io/node_modules/engine.io/lib/transports/index.js
generated
vendored
Normal file
36
node_modules/socket.io/node_modules/engine.io/lib/transports/index.js
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var XHR = require('./polling-xhr');
|
||||
var JSONP = require('./polling-jsonp');
|
||||
|
||||
/**
|
||||
* Export transports.
|
||||
*/
|
||||
|
||||
module.exports = exports = {
|
||||
polling: polling,
|
||||
websocket: require('./websocket')
|
||||
};
|
||||
|
||||
/**
|
||||
* Export upgrades map.
|
||||
*/
|
||||
|
||||
exports.polling.upgradesTo = ['websocket'];
|
||||
|
||||
/**
|
||||
* Polling polimorphic constructor.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function polling (req) {
|
||||
if ('string' == typeof req._query.j) {
|
||||
return new JSONP(req);
|
||||
} else {
|
||||
return new XHR(req);
|
||||
}
|
||||
}
|
||||
74
node_modules/socket.io/node_modules/engine.io/lib/transports/polling-jsonp.js
generated
vendored
Normal file
74
node_modules/socket.io/node_modules/engine.io/lib/transports/polling-jsonp.js
generated
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var Polling = require('./polling');
|
||||
var qs = require('querystring');
|
||||
var rDoubleSlashes = /\\\\n/g;
|
||||
var rSlashes = /(\\)?\\n/g;
|
||||
|
||||
/**
|
||||
* Module exports.
|
||||
*/
|
||||
|
||||
module.exports = JSONP;
|
||||
|
||||
/**
|
||||
* JSON-P polling transport.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function JSONP (req) {
|
||||
Polling.call(this, req);
|
||||
|
||||
this.head = '___eio[' + (req._query.j || '').replace(/[^0-9]/g, '') + '](';
|
||||
this.foot = ');';
|
||||
};
|
||||
|
||||
/**
|
||||
* Inherits from Polling.
|
||||
*/
|
||||
|
||||
JSONP.prototype.__proto__ = Polling.prototype;
|
||||
|
||||
/**
|
||||
* Handles incoming data.
|
||||
* Due to a bug in \n handling by browsers, we expect a escaped string.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
JSONP.prototype.onData = function (data) {
|
||||
// we leverage the qs module so that we get built-in DoS protection
|
||||
// and the fast alternative to decodeURIComponent
|
||||
data = qs.parse(data).d;
|
||||
if ('string' == typeof data) {
|
||||
//client will send already escaped newlines as \\\\n and newlines as \\n
|
||||
// \\n must be replaced with \n and \\\\n with \\n
|
||||
data = data.replace(rSlashes, function(match, slashes) {
|
||||
return slashes ? match : '\n';
|
||||
});
|
||||
Polling.prototype.onData.call(this, data.replace(rDoubleSlashes, '\\n'));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Performs the write.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
JSONP.prototype.doWrite = function (data, options, callback) {
|
||||
// we must output valid javascript, not valid json
|
||||
// see: http://timelessrepo.com/json-isnt-a-javascript-subset
|
||||
var js = JSON.stringify(data)
|
||||
.replace(/\u2028/g, '\\u2028')
|
||||
.replace(/\u2029/g, '\\u2029');
|
||||
|
||||
// prepare response
|
||||
data = this.head + js + this.foot;
|
||||
|
||||
Polling.prototype.doWrite.call(this, data, options, callback);
|
||||
};
|
||||
70
node_modules/socket.io/node_modules/engine.io/lib/transports/polling-xhr.js
generated
vendored
Normal file
70
node_modules/socket.io/node_modules/engine.io/lib/transports/polling-xhr.js
generated
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var Polling = require('./polling');
|
||||
var Transport = require('../transport');
|
||||
var debug = require('debug')('engine:polling-xhr');
|
||||
|
||||
/**
|
||||
* Module exports.
|
||||
*/
|
||||
|
||||
module.exports = XHR;
|
||||
|
||||
/**
|
||||
* Ajax polling transport.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function XHR(req){
|
||||
Polling.call(this, req);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from Polling.
|
||||
*/
|
||||
|
||||
XHR.prototype.__proto__ = Polling.prototype;
|
||||
|
||||
/**
|
||||
* Overrides `onRequest` to handle `OPTIONS`..
|
||||
*
|
||||
* @param {http.ServerRequest}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
XHR.prototype.onRequest = function (req) {
|
||||
if ('OPTIONS' == req.method) {
|
||||
var res = req.res;
|
||||
var headers = this.headers(req);
|
||||
headers['Access-Control-Allow-Headers'] = 'Content-Type';
|
||||
res.writeHead(200, headers);
|
||||
res.end();
|
||||
} else {
|
||||
Polling.prototype.onRequest.call(this, req);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns headers for a response.
|
||||
*
|
||||
* @param {http.ServerRequest} request
|
||||
* @param {Object} extra headers
|
||||
* @api private
|
||||
*/
|
||||
|
||||
XHR.prototype.headers = function(req, headers){
|
||||
headers = headers || {};
|
||||
|
||||
if (req.headers.origin) {
|
||||
headers['Access-Control-Allow-Credentials'] = 'true';
|
||||
headers['Access-Control-Allow-Origin'] = req.headers.origin;
|
||||
} else {
|
||||
headers['Access-Control-Allow-Origin'] = '*';
|
||||
}
|
||||
|
||||
return Polling.prototype.headers.call(this, req, headers);
|
||||
};
|
||||
407
node_modules/socket.io/node_modules/engine.io/lib/transports/polling.js
generated
vendored
Normal file
407
node_modules/socket.io/node_modules/engine.io/lib/transports/polling.js
generated
vendored
Normal file
@@ -0,0 +1,407 @@
|
||||
|
||||
/**
|
||||
* Module requirements.
|
||||
*/
|
||||
|
||||
var Transport = require('../transport')
|
||||
, parser = require('engine.io-parser')
|
||||
, zlib = require('zlib')
|
||||
, accepts = require('accepts')
|
||||
, debug = require('debug')('engine:polling');
|
||||
|
||||
var compressionMethods = {
|
||||
gzip: zlib.createGzip,
|
||||
deflate: zlib.createDeflate
|
||||
};
|
||||
|
||||
/**
|
||||
* Exports the constructor.
|
||||
*/
|
||||
|
||||
module.exports = Polling;
|
||||
|
||||
/**
|
||||
* HTTP polling constructor.
|
||||
*
|
||||
* @api public.
|
||||
*/
|
||||
|
||||
function Polling (req) {
|
||||
Transport.call(this, req);
|
||||
|
||||
this.closeTimeout = 30 * 1000;
|
||||
this.maxHttpBufferSize = null;
|
||||
this.httpCompression = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inherits from Transport.
|
||||
*
|
||||
* @api public.
|
||||
*/
|
||||
|
||||
Polling.prototype.__proto__ = Transport.prototype;
|
||||
|
||||
/**
|
||||
* Transport name
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Polling.prototype.name = 'polling';
|
||||
|
||||
/**
|
||||
* Overrides onRequest.
|
||||
*
|
||||
* @param {http.ServerRequest}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Polling.prototype.onRequest = function (req) {
|
||||
var res = req.res;
|
||||
|
||||
if ('GET' == req.method) {
|
||||
this.onPollRequest(req, res);
|
||||
} else if ('POST' == req.method) {
|
||||
this.onDataRequest(req, res);
|
||||
} else {
|
||||
res.writeHead(500);
|
||||
res.end();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* The client sends a request awaiting for us to send data.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Polling.prototype.onPollRequest = function (req, res) {
|
||||
if (this.req) {
|
||||
debug('request overlap');
|
||||
// assert: this.res, '.req and .res should be (un)set together'
|
||||
this.onError('overlap from client');
|
||||
res.writeHead(500);
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
debug('setting request');
|
||||
|
||||
this.req = req;
|
||||
this.res = res;
|
||||
|
||||
var self = this;
|
||||
|
||||
function onClose () {
|
||||
self.onError('poll connection closed prematurely');
|
||||
}
|
||||
|
||||
function cleanup () {
|
||||
req.removeListener('close', onClose);
|
||||
self.req = self.res = null;
|
||||
}
|
||||
|
||||
req.cleanup = cleanup;
|
||||
req.on('close', onClose);
|
||||
|
||||
this.writable = true;
|
||||
this.emit('drain');
|
||||
|
||||
// if we're still writable but had a pending close, trigger an empty send
|
||||
if (this.writable && this.shouldClose) {
|
||||
debug('triggering empty send to append close packet');
|
||||
this.send([{ type: 'noop' }]);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* The client sends a request with data.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Polling.prototype.onDataRequest = function (req, res) {
|
||||
if (this.dataReq) {
|
||||
// assert: this.dataRes, '.dataReq and .dataRes should be (un)set together'
|
||||
this.onError('data request overlap from client');
|
||||
res.writeHead(500);
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
var isBinary = 'application/octet-stream' == req.headers['content-type'];
|
||||
|
||||
this.dataReq = req;
|
||||
this.dataRes = res;
|
||||
|
||||
var chunks = isBinary ? new Buffer(0) : '';
|
||||
var self = this;
|
||||
|
||||
function cleanup () {
|
||||
chunks = isBinary ? new Buffer(0) : '';
|
||||
req.removeListener('data', onData);
|
||||
req.removeListener('end', onEnd);
|
||||
req.removeListener('close', onClose);
|
||||
self.dataReq = self.dataRes = null;
|
||||
}
|
||||
|
||||
function onClose () {
|
||||
cleanup();
|
||||
self.onError('data request connection closed prematurely');
|
||||
}
|
||||
|
||||
function onData (data) {
|
||||
var contentLength;
|
||||
if (typeof data == 'string') {
|
||||
chunks += data;
|
||||
contentLength = Buffer.byteLength(chunks);
|
||||
} else {
|
||||
chunks = Buffer.concat([chunks, data]);
|
||||
contentLength = chunks.length;
|
||||
}
|
||||
|
||||
if (contentLength > self.maxHttpBufferSize) {
|
||||
chunks = '';
|
||||
req.connection.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
function onEnd () {
|
||||
self.onData(chunks);
|
||||
|
||||
var headers = {
|
||||
// text/html is required instead of text/plain to avoid an
|
||||
// unwanted download dialog on certain user-agents (GH-43)
|
||||
'Content-Type': 'text/html',
|
||||
'Content-Length': 2
|
||||
};
|
||||
|
||||
res.writeHead(200, self.headers(req, headers));
|
||||
res.end('ok');
|
||||
cleanup();
|
||||
}
|
||||
|
||||
req.on('close', onClose);
|
||||
if (!isBinary) req.setEncoding('utf8');
|
||||
req.on('data', onData);
|
||||
req.on('end', onEnd);
|
||||
};
|
||||
|
||||
/**
|
||||
* Processes the incoming data payload.
|
||||
*
|
||||
* @param {String} encoded payload
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Polling.prototype.onData = function (data) {
|
||||
debug('received "%s"', data);
|
||||
var self = this;
|
||||
var callback = function(packet) {
|
||||
if ('close' == packet.type) {
|
||||
debug('got xhr close packet');
|
||||
self.onClose();
|
||||
return false;
|
||||
}
|
||||
|
||||
self.onPacket(packet);
|
||||
};
|
||||
|
||||
parser.decodePayload(data, callback);
|
||||
};
|
||||
|
||||
/**
|
||||
* Overrides onClose.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Polling.prototype.onClose = function () {
|
||||
if (this.writable) {
|
||||
// close pending poll request
|
||||
this.send([{ type: 'noop' }]);
|
||||
}
|
||||
Transport.prototype.onClose.call(this);
|
||||
};
|
||||
|
||||
/**
|
||||
* Writes a packet payload.
|
||||
*
|
||||
* @param {Object} packet
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Polling.prototype.send = function (packets) {
|
||||
this.writable = false;
|
||||
|
||||
if (this.shouldClose) {
|
||||
debug('appending close packet to payload');
|
||||
packets.push({ type: 'close' });
|
||||
this.shouldClose();
|
||||
this.shouldClose = null;
|
||||
}
|
||||
|
||||
var self = this;
|
||||
parser.encodePayload(packets, this.supportsBinary, function(data) {
|
||||
var compress = packets.some(function(packet) {
|
||||
return packet.options && packet.options.compress;
|
||||
});
|
||||
self.write(data, { compress: compress });
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Writes data as response to poll request.
|
||||
*
|
||||
* @param {String} data
|
||||
* @param {Object} options
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Polling.prototype.write = function (data, options) {
|
||||
debug('writing "%s"', data);
|
||||
var self = this;
|
||||
this.doWrite(data, options, function() {
|
||||
self.req.cleanup();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Performs the write.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Polling.prototype.doWrite = function (data, options, callback) {
|
||||
var self = this;
|
||||
|
||||
// explicit UTF-8 is required for pages not served under utf
|
||||
var isString = typeof data == 'string';
|
||||
var contentType = isString
|
||||
? 'text/plain; charset=UTF-8'
|
||||
: 'application/octet-stream';
|
||||
|
||||
var headers = {
|
||||
'Content-Type': contentType
|
||||
};
|
||||
|
||||
if (!this.httpCompression || !options.compress) {
|
||||
respond(data);
|
||||
return;
|
||||
}
|
||||
|
||||
var len = isString ? Buffer.byteLength(data) : data.length;
|
||||
if (len < this.httpCompression.threshold) {
|
||||
respond(data);
|
||||
return;
|
||||
}
|
||||
|
||||
var encoding = accepts(this.req).encodings(['gzip', 'deflate']);
|
||||
if (!encoding) {
|
||||
respond(data);
|
||||
return;
|
||||
}
|
||||
|
||||
this.compress(data, encoding, function(err, data) {
|
||||
if (err) {
|
||||
self.res.writeHead(500);
|
||||
self.res.end();
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
headers['Content-Encoding'] = encoding;
|
||||
respond(data);
|
||||
});
|
||||
|
||||
function respond(data) {
|
||||
headers['Content-Length'] = 'string' == typeof data ? Buffer.byteLength(data) : data.length;
|
||||
self.res.writeHead(200, self.headers(self.req, headers));
|
||||
self.res.end(data);
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Comparesses data.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Polling.prototype.compress = function (data, encoding, callback) {
|
||||
debug('compressing');
|
||||
|
||||
var buffers = [];
|
||||
var nread = 0;
|
||||
|
||||
compressionMethods[encoding](this.httpCompression)
|
||||
.on('error', callback)
|
||||
.on('data', function(chunk) {
|
||||
buffers.push(chunk);
|
||||
nread += chunk.length;
|
||||
})
|
||||
.on('end', function() {
|
||||
callback(null, Buffer.concat(buffers, nread));
|
||||
})
|
||||
.end(data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Closes the transport.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Polling.prototype.doClose = function (fn) {
|
||||
debug('closing');
|
||||
|
||||
var self = this;
|
||||
var closeTimeoutTimer;
|
||||
|
||||
if (this.dataReq) {
|
||||
debug('aborting ongoing data request');
|
||||
this.dataReq.destroy();
|
||||
}
|
||||
|
||||
if (this.writable) {
|
||||
debug('transport writable - closing right away');
|
||||
this.send([{ type: 'close' }]);
|
||||
onClose();
|
||||
} else if (this.discarded) {
|
||||
debug('transport discarded - closing right away');
|
||||
onClose();
|
||||
} else {
|
||||
debug('transport not writable - buffering orderly close');
|
||||
this.shouldClose = onClose;
|
||||
closeTimeoutTimer = setTimeout(onClose, this.closeTimeout);
|
||||
}
|
||||
|
||||
function onClose() {
|
||||
clearTimeout(closeTimeoutTimer);
|
||||
fn();
|
||||
self.onClose();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns headers for a response.
|
||||
*
|
||||
* @param {http.ServerRequest} request
|
||||
* @param {Object} extra headers
|
||||
* @api private
|
||||
*/
|
||||
|
||||
Polling.prototype.headers = function (req, headers) {
|
||||
headers = headers || {};
|
||||
|
||||
// prevent XSS warnings on IE
|
||||
// https://github.com/LearnBoost/socket.io/pull/1333
|
||||
var ua = req.headers['user-agent'];
|
||||
if (ua && (~ua.indexOf(';MSIE') || ~ua.indexOf('Trident/'))) {
|
||||
headers['X-XSS-Protection'] = '0';
|
||||
}
|
||||
|
||||
this.emit('headers', headers);
|
||||
return headers;
|
||||
};
|
||||
125
node_modules/socket.io/node_modules/engine.io/lib/transports/websocket.js
generated
vendored
Normal file
125
node_modules/socket.io/node_modules/engine.io/lib/transports/websocket.js
generated
vendored
Normal file
@@ -0,0 +1,125 @@
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var Transport = require('../transport')
|
||||
, parser = require('engine.io-parser')
|
||||
, debug = require('debug')('engine:ws')
|
||||
|
||||
/**
|
||||
* Export the constructor.
|
||||
*/
|
||||
|
||||
module.exports = WebSocket;
|
||||
|
||||
/**
|
||||
* WebSocket transport
|
||||
*
|
||||
* @param {http.ServerRequest}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function WebSocket (req) {
|
||||
Transport.call(this, req);
|
||||
var self = this;
|
||||
this.socket = req.websocket;
|
||||
this.socket.on('message', this.onData.bind(this));
|
||||
this.socket.once('close', this.onClose.bind(this));
|
||||
this.socket.on('error', this.onError.bind(this));
|
||||
this.socket.on('headers', function (headers) {
|
||||
self.emit('headers', headers);
|
||||
});
|
||||
this.writable = true;
|
||||
this.perMessageDeflate = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Inherits from Transport.
|
||||
*/
|
||||
|
||||
WebSocket.prototype.__proto__ = Transport.prototype;
|
||||
|
||||
/**
|
||||
* Transport name
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
WebSocket.prototype.name = 'websocket';
|
||||
|
||||
/**
|
||||
* Advertise upgrade support.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
WebSocket.prototype.handlesUpgrades = true;
|
||||
|
||||
/**
|
||||
* Advertise framing support.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
WebSocket.prototype.supportsFraming = true;
|
||||
|
||||
/**
|
||||
* Processes the incoming data.
|
||||
*
|
||||
* @param {String} encoded packet
|
||||
* @api private
|
||||
*/
|
||||
|
||||
WebSocket.prototype.onData = function (data) {
|
||||
debug('received "%s"', data);
|
||||
Transport.prototype.onData.call(this, data);
|
||||
};
|
||||
|
||||
/**
|
||||
* Writes a packet payload.
|
||||
*
|
||||
* @param {Array} packets
|
||||
* @api private
|
||||
*/
|
||||
|
||||
WebSocket.prototype.send = function (packets) {
|
||||
var self = this;
|
||||
packets.forEach(function(packet) {
|
||||
parser.encodePacket(packet, self.supportsBinary, function(data) {
|
||||
debug('writing "%s"', data);
|
||||
|
||||
// always creates a new object since ws modifies it
|
||||
var opts = {};
|
||||
if (packet.options) {
|
||||
opts.compress = packet.options.compress;
|
||||
}
|
||||
|
||||
if (self.perMessageDeflate) {
|
||||
var len = 'string' == typeof data ? Buffer.byteLength(data) : data.length;
|
||||
if (len < self.perMessageDeflate.threshold) {
|
||||
opts.compress = false;
|
||||
}
|
||||
}
|
||||
|
||||
self.writable = false;
|
||||
self.socket.send(data, opts, function (err){
|
||||
if (err) return self.onError('write error', err.stack);
|
||||
self.writable = true;
|
||||
self.emit('drain');
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Closes the transport.
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
WebSocket.prototype.doClose = function (fn) {
|
||||
debug('closing');
|
||||
this.socket.close();
|
||||
fn && fn();
|
||||
};
|
||||
74
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/HISTORY.md
generated
vendored
Normal file
74
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/HISTORY.md
generated
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
1.1.4 / 2014-12-10
|
||||
==================
|
||||
|
||||
* deps: mime-types@~2.0.4
|
||||
- deps: mime-db@~1.3.0
|
||||
|
||||
1.1.3 / 2014-11-09
|
||||
==================
|
||||
|
||||
* deps: mime-types@~2.0.3
|
||||
- deps: mime-db@~1.2.0
|
||||
|
||||
1.1.2 / 2014-10-14
|
||||
==================
|
||||
|
||||
* deps: negotiator@0.4.9
|
||||
- Fix error when media type has invalid parameter
|
||||
|
||||
1.1.1 / 2014-09-28
|
||||
==================
|
||||
|
||||
* deps: mime-types@~2.0.2
|
||||
- deps: mime-db@~1.1.0
|
||||
* deps: negotiator@0.4.8
|
||||
- Fix all negotiations to be case-insensitive
|
||||
- Stable sort preferences of same quality according to client order
|
||||
|
||||
1.1.0 / 2014-09-02
|
||||
==================
|
||||
|
||||
* update `mime-types`
|
||||
|
||||
1.0.7 / 2014-07-04
|
||||
==================
|
||||
|
||||
* Fix wrong type returned from `type` when match after unknown extension
|
||||
|
||||
1.0.6 / 2014-06-24
|
||||
==================
|
||||
|
||||
* deps: negotiator@0.4.7
|
||||
|
||||
1.0.5 / 2014-06-20
|
||||
==================
|
||||
|
||||
* fix crash when unknown extension given
|
||||
|
||||
1.0.4 / 2014-06-19
|
||||
==================
|
||||
|
||||
* use `mime-types`
|
||||
|
||||
1.0.3 / 2014-06-11
|
||||
==================
|
||||
|
||||
* deps: negotiator@0.4.6
|
||||
- Order by specificity when quality is the same
|
||||
|
||||
1.0.2 / 2014-05-29
|
||||
==================
|
||||
|
||||
* Fix interpretation when header not in request
|
||||
* deps: pin negotiator@0.4.5
|
||||
|
||||
1.0.1 / 2014-01-18
|
||||
==================
|
||||
|
||||
* Identity encoding isn't always acceptable
|
||||
* deps: negotiator@~0.4.0
|
||||
|
||||
1.0.0 / 2013-12-27
|
||||
==================
|
||||
|
||||
* Genesis
|
||||
22
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/LICENSE
generated
vendored
Normal file
22
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014 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.
|
||||
94
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/README.md
generated
vendored
Normal file
94
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/README.md
generated
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
# accepts
|
||||
|
||||
[![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]
|
||||
|
||||
Higher level content negotation based on [negotiator](https://github.com/federomero/negotiator). Extracted from [koa](https://github.com/koajs/koa) for general use.
|
||||
|
||||
In addition to negotatior, it allows:
|
||||
|
||||
- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` as well as `('text/html', 'application/json')`.
|
||||
- Allows type shorthands such as `json`.
|
||||
- Returns `false` when no types match
|
||||
- Treats non-existent headers as `*`
|
||||
|
||||
## API
|
||||
|
||||
### var accept = new Accepts(req)
|
||||
|
||||
```js
|
||||
var accepts = require('accepts')
|
||||
|
||||
http.createServer(function (req, res) {
|
||||
var accept = accepts(req)
|
||||
})
|
||||
```
|
||||
|
||||
### accept\[property\]\(\)
|
||||
|
||||
Returns all the explicitly accepted content property as an array in descending priority.
|
||||
|
||||
- `accept.types()`
|
||||
- `accept.encodings()`
|
||||
- `accept.charsets()`
|
||||
- `accept.languages()`
|
||||
|
||||
They are also aliased in singular form such as `accept.type()`. `accept.languages()` is also aliased as `accept.langs()`, etc.
|
||||
|
||||
Note: you should almost never do this in a real app as it defeats the purpose of content negotiation.
|
||||
|
||||
Example:
|
||||
|
||||
```js
|
||||
// in Google Chrome
|
||||
var encodings = accept.encodings() // -> ['sdch', 'gzip', 'deflate']
|
||||
```
|
||||
|
||||
Since you probably don't support `sdch`, you should just supply the encodings you support:
|
||||
|
||||
```js
|
||||
var encoding = accept.encodings('gzip', 'deflate') // -> 'gzip', probably
|
||||
```
|
||||
|
||||
### accept\[property\]\(values, ...\)
|
||||
|
||||
You can either have `values` be an array or have an argument list of values.
|
||||
|
||||
If the client does not accept any `values`, `false` will be returned.
|
||||
If the client accepts any `values`, the preferred `value` will be return.
|
||||
|
||||
For `accept.types()`, shorthand mime types are allowed.
|
||||
|
||||
Example:
|
||||
|
||||
```js
|
||||
// req.headers.accept = 'application/json'
|
||||
|
||||
accept.types('json') // -> 'json'
|
||||
accept.types('html', 'json') // -> 'json'
|
||||
accept.types('html') // -> false
|
||||
|
||||
// req.headers.accept = ''
|
||||
// which is equivalent to `*`
|
||||
|
||||
accept.types() // -> [], no explicit types
|
||||
accept.types('text/html', 'text/json') // -> 'text/html', since it was first
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
|
||||
[npm-image]: https://img.shields.io/npm/v/accepts.svg?style=flat
|
||||
[npm-url]: https://npmjs.org/package/accepts
|
||||
[node-version-image]: https://img.shields.io/node/v/accepts.svg?style=flat
|
||||
[node-version-url]: http://nodejs.org/download/
|
||||
[travis-image]: https://img.shields.io/travis/jshttp/accepts.svg?style=flat
|
||||
[travis-url]: https://travis-ci.org/jshttp/accepts
|
||||
[coveralls-image]: https://img.shields.io/coveralls/jshttp/accepts.svg?style=flat
|
||||
[coveralls-url]: https://coveralls.io/r/jshttp/accepts
|
||||
[downloads-image]: https://img.shields.io/npm/dm/accepts.svg?style=flat
|
||||
[downloads-url]: https://npmjs.org/package/accepts
|
||||
160
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/index.js
generated
vendored
Normal file
160
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/index.js
generated
vendored
Normal file
@@ -0,0 +1,160 @@
|
||||
var Negotiator = require('negotiator')
|
||||
var mime = require('mime-types')
|
||||
|
||||
var slice = [].slice
|
||||
|
||||
module.exports = Accepts
|
||||
|
||||
function Accepts(req) {
|
||||
if (!(this instanceof Accepts))
|
||||
return new Accepts(req)
|
||||
|
||||
this.headers = req.headers
|
||||
this.negotiator = Negotiator(req)
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the given `type(s)` is acceptable, returning
|
||||
* the best match when true, otherwise `undefined`, in which
|
||||
* case you should respond with 406 "Not Acceptable".
|
||||
*
|
||||
* The `type` value may be a single mime type string
|
||||
* such as "application/json", the extension name
|
||||
* such as "json" or an array `["json", "html", "text/plain"]`. When a list
|
||||
* or array is given the _best_ match, if any is returned.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* // Accept: text/html
|
||||
* this.types('html');
|
||||
* // => "html"
|
||||
*
|
||||
* // Accept: text/*, application/json
|
||||
* this.types('html');
|
||||
* // => "html"
|
||||
* this.types('text/html');
|
||||
* // => "text/html"
|
||||
* this.types('json', 'text');
|
||||
* // => "json"
|
||||
* this.types('application/json');
|
||||
* // => "application/json"
|
||||
*
|
||||
* // Accept: text/*, application/json
|
||||
* this.types('image/png');
|
||||
* this.types('png');
|
||||
* // => undefined
|
||||
*
|
||||
* // Accept: text/*;q=.5, application/json
|
||||
* this.types(['html', 'json']);
|
||||
* this.types('html', 'json');
|
||||
* // => "json"
|
||||
*
|
||||
* @param {String|Array} type(s)...
|
||||
* @return {String|Array|Boolean}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Accepts.prototype.type =
|
||||
Accepts.prototype.types = function (types) {
|
||||
if (!Array.isArray(types)) types = slice.call(arguments);
|
||||
var n = this.negotiator;
|
||||
if (!types.length) return n.mediaTypes();
|
||||
if (!this.headers.accept) return types[0];
|
||||
var mimes = types.map(extToMime);
|
||||
var accepts = n.mediaTypes(mimes.filter(validMime));
|
||||
var first = accepts[0];
|
||||
if (!first) return false;
|
||||
return types[mimes.indexOf(first)];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return accepted encodings or best fit based on `encodings`.
|
||||
*
|
||||
* Given `Accept-Encoding: gzip, deflate`
|
||||
* an array sorted by quality is returned:
|
||||
*
|
||||
* ['gzip', 'deflate']
|
||||
*
|
||||
* @param {String|Array} encoding(s)...
|
||||
* @return {String|Array}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Accepts.prototype.encoding =
|
||||
Accepts.prototype.encodings = function (encodings) {
|
||||
if (!Array.isArray(encodings)) encodings = slice.call(arguments);
|
||||
var n = this.negotiator;
|
||||
if (!encodings.length) return n.encodings();
|
||||
return n.encodings(encodings)[0] || false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return accepted charsets or best fit based on `charsets`.
|
||||
*
|
||||
* Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
|
||||
* an array sorted by quality is returned:
|
||||
*
|
||||
* ['utf-8', 'utf-7', 'iso-8859-1']
|
||||
*
|
||||
* @param {String|Array} charset(s)...
|
||||
* @return {String|Array}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Accepts.prototype.charset =
|
||||
Accepts.prototype.charsets = function (charsets) {
|
||||
if (!Array.isArray(charsets)) charsets = [].slice.call(arguments);
|
||||
var n = this.negotiator;
|
||||
if (!charsets.length) return n.charsets();
|
||||
if (!this.headers['accept-charset']) return charsets[0];
|
||||
return n.charsets(charsets)[0] || false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return accepted languages or best fit based on `langs`.
|
||||
*
|
||||
* Given `Accept-Language: en;q=0.8, es, pt`
|
||||
* an array sorted by quality is returned:
|
||||
*
|
||||
* ['es', 'pt', 'en']
|
||||
*
|
||||
* @param {String|Array} lang(s)...
|
||||
* @return {Array|String}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
Accepts.prototype.lang =
|
||||
Accepts.prototype.langs =
|
||||
Accepts.prototype.language =
|
||||
Accepts.prototype.languages = function (langs) {
|
||||
if (!Array.isArray(langs)) langs = slice.call(arguments);
|
||||
var n = this.negotiator;
|
||||
if (!langs.length) return n.languages();
|
||||
if (!this.headers['accept-language']) return langs[0];
|
||||
return n.languages(langs)[0] || false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert extnames to mime.
|
||||
*
|
||||
* @param {String} type
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function extToMime(type) {
|
||||
if (~type.indexOf('/')) return type;
|
||||
return mime.lookup(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if mime is valid.
|
||||
*
|
||||
* @param {String} type
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function validMime(type) {
|
||||
return typeof type === 'string';
|
||||
}
|
||||
115
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/HISTORY.md
generated
vendored
Normal file
115
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/HISTORY.md
generated
vendored
Normal file
@@ -0,0 +1,115 @@
|
||||
2.0.14 / 2015-06-06
|
||||
===================
|
||||
|
||||
* deps: mime-db@~1.12.0
|
||||
- Add new mime types
|
||||
|
||||
2.0.13 / 2015-05-31
|
||||
===================
|
||||
|
||||
* deps: mime-db@~1.11.0
|
||||
- Add new mime types
|
||||
|
||||
2.0.12 / 2015-05-19
|
||||
===================
|
||||
|
||||
* deps: mime-db@~1.10.0
|
||||
- Add new mime types
|
||||
|
||||
2.0.11 / 2015-05-05
|
||||
===================
|
||||
|
||||
* deps: mime-db@~1.9.1
|
||||
- Add new mime types
|
||||
|
||||
2.0.10 / 2015-03-13
|
||||
===================
|
||||
|
||||
* deps: mime-db@~1.8.0
|
||||
- Add new mime types
|
||||
|
||||
2.0.9 / 2015-02-09
|
||||
==================
|
||||
|
||||
* deps: mime-db@~1.7.0
|
||||
- Add new mime types
|
||||
- Community extensions ownership transferred from `node-mime`
|
||||
|
||||
2.0.8 / 2015-01-29
|
||||
==================
|
||||
|
||||
* deps: mime-db@~1.6.0
|
||||
- Add new mime types
|
||||
|
||||
2.0.7 / 2014-12-30
|
||||
==================
|
||||
|
||||
* deps: mime-db@~1.5.0
|
||||
- Add new mime types
|
||||
- Fix various invalid MIME type entries
|
||||
|
||||
2.0.6 / 2014-12-30
|
||||
==================
|
||||
|
||||
* deps: mime-db@~1.4.0
|
||||
- Add new mime types
|
||||
- Fix various invalid MIME type entries
|
||||
- Remove example template MIME types
|
||||
|
||||
2.0.5 / 2014-12-29
|
||||
==================
|
||||
|
||||
* deps: mime-db@~1.3.1
|
||||
- Fix missing extensions
|
||||
|
||||
2.0.4 / 2014-12-10
|
||||
==================
|
||||
|
||||
* deps: mime-db@~1.3.0
|
||||
- Add new mime types
|
||||
|
||||
2.0.3 / 2014-11-09
|
||||
==================
|
||||
|
||||
* deps: mime-db@~1.2.0
|
||||
- Add new mime types
|
||||
|
||||
2.0.2 / 2014-09-28
|
||||
==================
|
||||
|
||||
* deps: mime-db@~1.1.0
|
||||
- Add new mime types
|
||||
- Add additional compressible
|
||||
- Update charsets
|
||||
|
||||
2.0.1 / 2014-09-07
|
||||
==================
|
||||
|
||||
* Support Node.js 0.6
|
||||
|
||||
2.0.0 / 2014-09-02
|
||||
==================
|
||||
|
||||
* Use `mime-db`
|
||||
* Remove `.define()`
|
||||
|
||||
1.0.2 / 2014-08-04
|
||||
==================
|
||||
|
||||
* Set charset=utf-8 for `text/javascript`
|
||||
|
||||
1.0.1 / 2014-06-24
|
||||
==================
|
||||
|
||||
* Add `text/jsx` type
|
||||
|
||||
1.0.0 / 2014-05-12
|
||||
==================
|
||||
|
||||
* Return `false` for unknown types
|
||||
* Set charset=utf-8 for `application/json`
|
||||
|
||||
0.1.0 / 2014-05-02
|
||||
==================
|
||||
|
||||
* Initial release
|
||||
22
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/LICENSE
generated
vendored
Normal file
22
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 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.
|
||||
102
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/README.md
generated
vendored
Normal file
102
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/README.md
generated
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
# mime-types
|
||||
|
||||
[![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]
|
||||
|
||||
The ultimate javascript content-type utility.
|
||||
|
||||
Similar to [node-mime](https://github.com/broofa/node-mime), except:
|
||||
|
||||
- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`,
|
||||
so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.
|
||||
- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.
|
||||
- Additional mime types are added such as jade and stylus via [mime-db](https://github.com/jshttp/mime-db)
|
||||
- No `.define()` functionality
|
||||
|
||||
Otherwise, the API is compatible.
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
$ npm install mime-types
|
||||
```
|
||||
|
||||
## Adding Types
|
||||
|
||||
All mime types are based on [mime-db](https://github.com/jshttp/mime-db),
|
||||
so open a PR there if you'd like to add mime types.
|
||||
|
||||
## API
|
||||
|
||||
```js
|
||||
var mime = require('mime-types')
|
||||
```
|
||||
|
||||
All functions return `false` if input is invalid or not found.
|
||||
|
||||
### mime.lookup(path)
|
||||
|
||||
Lookup the content-type associated with a file.
|
||||
|
||||
```js
|
||||
mime.lookup('json') // 'application/json'
|
||||
mime.lookup('.md') // 'text/x-markdown'
|
||||
mime.lookup('file.html') // 'text/html'
|
||||
mime.lookup('folder/file.js') // 'application/javascript'
|
||||
|
||||
mime.lookup('cats') // false
|
||||
```
|
||||
|
||||
### mime.contentType(type)
|
||||
|
||||
Create a full content-type header given a content-type or extension.
|
||||
|
||||
```js
|
||||
mime.contentType('markdown') // 'text/x-markdown; charset=utf-8'
|
||||
mime.contentType('file.json') // 'application/json; charset=utf-8'
|
||||
|
||||
// from a full path
|
||||
mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8'
|
||||
```
|
||||
|
||||
### mime.extension(type)
|
||||
|
||||
Get the default extension for a content-type.
|
||||
|
||||
```js
|
||||
mime.extension('application/octet-stream') // 'bin'
|
||||
```
|
||||
|
||||
### mime.charset(type)
|
||||
|
||||
Lookup the implied default charset of a content-type.
|
||||
|
||||
```js
|
||||
mime.charset('text/x-markdown') // 'UTF-8'
|
||||
```
|
||||
|
||||
### var type = mime.types[extension]
|
||||
|
||||
A map of content-types by extension.
|
||||
|
||||
### [extensions...] = mime.extensions[type]
|
||||
|
||||
A map of extensions by content-type.
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
|
||||
[npm-image]: https://img.shields.io/npm/v/mime-types.svg
|
||||
[npm-url]: https://npmjs.org/package/mime-types
|
||||
[node-version-image]: https://img.shields.io/node/v/mime-types.svg
|
||||
[node-version-url]: http://nodejs.org/download/
|
||||
[travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg
|
||||
[travis-url]: https://travis-ci.org/jshttp/mime-types
|
||||
[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg
|
||||
[coveralls-url]: https://coveralls.io/r/jshttp/mime-types
|
||||
[downloads-image]: https://img.shields.io/npm/dm/mime-types.svg
|
||||
[downloads-url]: https://npmjs.org/package/mime-types
|
||||
63
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/index.js
generated
vendored
Normal file
63
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/index.js
generated
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
|
||||
var db = require('mime-db')
|
||||
|
||||
// types[extension] = type
|
||||
exports.types = Object.create(null)
|
||||
// extensions[type] = [extensions]
|
||||
exports.extensions = Object.create(null)
|
||||
|
||||
Object.keys(db).forEach(function (name) {
|
||||
var mime = db[name]
|
||||
var exts = mime.extensions
|
||||
if (!exts || !exts.length) return
|
||||
exports.extensions[name] = exts
|
||||
exts.forEach(function (ext) {
|
||||
exports.types[ext] = name
|
||||
})
|
||||
})
|
||||
|
||||
exports.lookup = function (string) {
|
||||
if (!string || typeof string !== "string") return false
|
||||
// remove any leading paths, though we should just use path.basename
|
||||
string = string.replace(/.*[\.\/\\]/, '').toLowerCase()
|
||||
if (!string) return false
|
||||
return exports.types[string] || false
|
||||
}
|
||||
|
||||
exports.extension = function (type) {
|
||||
if (!type || typeof type !== "string") return false
|
||||
// to do: use media-typer
|
||||
type = type.match(/^\s*([^;\s]*)(?:;|\s|$)/)
|
||||
if (!type) return false
|
||||
var exts = exports.extensions[type[1].toLowerCase()]
|
||||
if (!exts || !exts.length) return false
|
||||
return exts[0]
|
||||
}
|
||||
|
||||
// type has to be an exact mime type
|
||||
exports.charset = function (type) {
|
||||
var mime = db[type]
|
||||
if (mime && mime.charset) return mime.charset
|
||||
|
||||
// default text/* to utf-8
|
||||
if (/^text\//.test(type)) return 'UTF-8'
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// backwards compatibility
|
||||
exports.charsets = {
|
||||
lookup: exports.charset
|
||||
}
|
||||
|
||||
// to do: maybe use set-type module or something
|
||||
exports.contentType = function (type) {
|
||||
if (!type || typeof type !== "string") return false
|
||||
if (!~type.indexOf('/')) type = exports.lookup(type)
|
||||
if (!type) return false
|
||||
if (!~type.indexOf('charset')) {
|
||||
var charset = exports.charset(type)
|
||||
if (charset) type += '; charset=' + charset.toLowerCase()
|
||||
}
|
||||
return type
|
||||
}
|
||||
212
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md
generated
vendored
Normal file
212
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md
generated
vendored
Normal file
@@ -0,0 +1,212 @@
|
||||
1.12.0 / 2015-06-05
|
||||
===================
|
||||
|
||||
* Add `application/bdoc`
|
||||
* Add `application/vnd.hyperdrive+json`
|
||||
* Add `application/x-bdoc`
|
||||
* Add extension `.rtf` to `text/rtf`
|
||||
|
||||
1.11.0 / 2015-05-31
|
||||
===================
|
||||
|
||||
* Add `audio/wav`
|
||||
* Add `audio/wave`
|
||||
* Add extension `.litcoffee` to `text/coffeescript`
|
||||
* Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data`
|
||||
* Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install`
|
||||
|
||||
1.10.0 / 2015-05-19
|
||||
===================
|
||||
|
||||
* Add `application/vnd.balsamiq.bmpr`
|
||||
* Add `application/vnd.microsoft.portable-executable`
|
||||
* Add `application/x-ns-proxy-autoconfig`
|
||||
|
||||
1.9.1 / 2015-04-19
|
||||
==================
|
||||
|
||||
* Remove `.json` extension from `application/manifest+json`
|
||||
- This is causing bugs downstream
|
||||
|
||||
1.9.0 / 2015-04-19
|
||||
==================
|
||||
|
||||
* Add `application/manifest+json`
|
||||
* Add `application/vnd.micro+json`
|
||||
* Add `image/vnd.zbrush.pcx`
|
||||
* Add `image/x-ms-bmp`
|
||||
|
||||
1.8.0 / 2015-03-13
|
||||
==================
|
||||
|
||||
* Add `application/vnd.citationstyles.style+xml`
|
||||
* Add `application/vnd.fastcopy-disk-image`
|
||||
* Add `application/vnd.gov.sk.xmldatacontainer+xml`
|
||||
* Add extension `.jsonld` to `application/ld+json`
|
||||
|
||||
1.7.0 / 2015-02-08
|
||||
==================
|
||||
|
||||
* Add `application/vnd.gerber`
|
||||
* Add `application/vnd.msa-disk-image`
|
||||
|
||||
1.6.1 / 2015-02-05
|
||||
==================
|
||||
|
||||
* Community extensions ownership transferred from `node-mime`
|
||||
|
||||
1.6.0 / 2015-01-29
|
||||
==================
|
||||
|
||||
* Add `application/jose`
|
||||
* Add `application/jose+json`
|
||||
* Add `application/json-seq`
|
||||
* Add `application/jwk+json`
|
||||
* Add `application/jwk-set+json`
|
||||
* Add `application/jwt`
|
||||
* Add `application/rdap+json`
|
||||
* Add `application/vnd.gov.sk.e-form+xml`
|
||||
* Add `application/vnd.ims.imsccv1p3`
|
||||
|
||||
1.5.0 / 2014-12-30
|
||||
==================
|
||||
|
||||
* Add `application/vnd.oracle.resource+json`
|
||||
* Fix various invalid MIME type entries
|
||||
- `application/mbox+xml`
|
||||
- `application/oscp-response`
|
||||
- `application/vwg-multiplexed`
|
||||
- `audio/g721`
|
||||
|
||||
1.4.0 / 2014-12-21
|
||||
==================
|
||||
|
||||
* Add `application/vnd.ims.imsccv1p2`
|
||||
* Fix various invalid MIME type entries
|
||||
- `application/vnd-acucobol`
|
||||
- `application/vnd-curl`
|
||||
- `application/vnd-dart`
|
||||
- `application/vnd-dxr`
|
||||
- `application/vnd-fdf`
|
||||
- `application/vnd-mif`
|
||||
- `application/vnd-sema`
|
||||
- `application/vnd-wap-wmlc`
|
||||
- `application/vnd.adobe.flash-movie`
|
||||
- `application/vnd.dece-zip`
|
||||
- `application/vnd.dvb_service`
|
||||
- `application/vnd.micrografx-igx`
|
||||
- `application/vnd.sealed-doc`
|
||||
- `application/vnd.sealed-eml`
|
||||
- `application/vnd.sealed-mht`
|
||||
- `application/vnd.sealed-ppt`
|
||||
- `application/vnd.sealed-tiff`
|
||||
- `application/vnd.sealed-xls`
|
||||
- `application/vnd.sealedmedia.softseal-html`
|
||||
- `application/vnd.sealedmedia.softseal-pdf`
|
||||
- `application/vnd.wap-slc`
|
||||
- `application/vnd.wap-wbxml`
|
||||
- `audio/vnd.sealedmedia.softseal-mpeg`
|
||||
- `image/vnd-djvu`
|
||||
- `image/vnd-svf`
|
||||
- `image/vnd-wap-wbmp`
|
||||
- `image/vnd.sealed-png`
|
||||
- `image/vnd.sealedmedia.softseal-gif`
|
||||
- `image/vnd.sealedmedia.softseal-jpg`
|
||||
- `model/vnd-dwf`
|
||||
- `model/vnd.parasolid.transmit-binary`
|
||||
- `model/vnd.parasolid.transmit-text`
|
||||
- `text/vnd-a`
|
||||
- `text/vnd-curl`
|
||||
- `text/vnd.wap-wml`
|
||||
* Remove example template MIME types
|
||||
- `application/example`
|
||||
- `audio/example`
|
||||
- `image/example`
|
||||
- `message/example`
|
||||
- `model/example`
|
||||
- `multipart/example`
|
||||
- `text/example`
|
||||
- `video/example`
|
||||
|
||||
1.3.1 / 2014-12-16
|
||||
==================
|
||||
|
||||
* Fix missing extensions
|
||||
- `application/json5`
|
||||
- `text/hjson`
|
||||
|
||||
1.3.0 / 2014-12-07
|
||||
==================
|
||||
|
||||
* Add `application/a2l`
|
||||
* Add `application/aml`
|
||||
* Add `application/atfx`
|
||||
* Add `application/atxml`
|
||||
* Add `application/cdfx+xml`
|
||||
* Add `application/dii`
|
||||
* Add `application/json5`
|
||||
* Add `application/lxf`
|
||||
* Add `application/mf4`
|
||||
* Add `application/vnd.apache.thrift.compact`
|
||||
* Add `application/vnd.apache.thrift.json`
|
||||
* Add `application/vnd.coffeescript`
|
||||
* Add `application/vnd.enphase.envoy`
|
||||
* Add `application/vnd.ims.imsccv1p1`
|
||||
* Add `text/csv-schema`
|
||||
* Add `text/hjson`
|
||||
* Add `text/markdown`
|
||||
* Add `text/yaml`
|
||||
|
||||
1.2.0 / 2014-11-09
|
||||
==================
|
||||
|
||||
* Add `application/cea`
|
||||
* Add `application/dit`
|
||||
* Add `application/vnd.gov.sk.e-form+zip`
|
||||
* Add `application/vnd.tmd.mediaflex.api+xml`
|
||||
* Type `application/epub+zip` is now IANA-registered
|
||||
|
||||
1.1.2 / 2014-10-23
|
||||
==================
|
||||
|
||||
* Rebuild database for `application/x-www-form-urlencoded` change
|
||||
|
||||
1.1.1 / 2014-10-20
|
||||
==================
|
||||
|
||||
* Mark `application/x-www-form-urlencoded` as compressible.
|
||||
|
||||
1.1.0 / 2014-09-28
|
||||
==================
|
||||
|
||||
* Add `application/font-woff2`
|
||||
|
||||
1.0.3 / 2014-09-25
|
||||
==================
|
||||
|
||||
* Fix engine requirement in package
|
||||
|
||||
1.0.2 / 2014-09-25
|
||||
==================
|
||||
|
||||
* Add `application/coap-group+json`
|
||||
* Add `application/dcd`
|
||||
* Add `application/vnd.apache.thrift.binary`
|
||||
* Add `image/vnd.tencent.tap`
|
||||
* Mark all JSON-derived types as compressible
|
||||
* Update `text/vtt` data
|
||||
|
||||
1.0.1 / 2014-08-30
|
||||
==================
|
||||
|
||||
* Fix extension ordering
|
||||
|
||||
1.0.0 / 2014-08-30
|
||||
==================
|
||||
|
||||
* Add `application/atf`
|
||||
* Add `application/merge-patch+json`
|
||||
* Add `multipart/x-mixed-replace`
|
||||
* Add `source: 'apache'` metadata
|
||||
* Add `source: 'iana'` metadata
|
||||
* Remove badly-assumed charset data
|
||||
22
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/LICENSE
generated
vendored
Normal file
22
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 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.
|
||||
76
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md
generated
vendored
Normal file
76
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md
generated
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
# mime-db
|
||||
|
||||
[![NPM Version][npm-version-image]][npm-url]
|
||||
[![NPM Downloads][npm-downloads-image]][npm-url]
|
||||
[![Node.js Version][node-image]][node-url]
|
||||
[![Build Status][travis-image]][travis-url]
|
||||
[![Coverage Status][coveralls-image]][coveralls-url]
|
||||
|
||||
This is a database of all mime types.
|
||||
It consists of a single, public JSON file and does not include any logic,
|
||||
allowing it to remain as un-opinionated as possible with an API.
|
||||
It aggregates data from the following sources:
|
||||
|
||||
- http://www.iana.org/assignments/media-types/media-types.xhtml
|
||||
- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install mime-db
|
||||
```
|
||||
|
||||
If you're crazy enough to use this in the browser,
|
||||
you can just grab the JSON file:
|
||||
|
||||
```
|
||||
https://cdn.rawgit.com/jshttp/mime-db/master/db.json
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
var db = require('mime-db');
|
||||
|
||||
// grab data on .js files
|
||||
var data = db['application/javascript'];
|
||||
```
|
||||
|
||||
## Data Structure
|
||||
|
||||
The JSON file is a map lookup for lowercased mime types.
|
||||
Each mime type has the following properties:
|
||||
|
||||
- `.source` - where the mime type is defined.
|
||||
If not set, it's probably a custom media type.
|
||||
- `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)
|
||||
- `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)
|
||||
- `.extensions[]` - known extensions associated with this mime type.
|
||||
- `.compressible` - whether a file of this type is can be gzipped.
|
||||
- `.charset` - the default charset associated with this type, if any.
|
||||
|
||||
If unknown, every property could be `undefined`.
|
||||
|
||||
## Contributing
|
||||
|
||||
To edit the database, only make PRs against `src/custom.json` or
|
||||
`src/custom-suffix.json`.
|
||||
|
||||
To update the build, run `npm run update`.
|
||||
|
||||
## Adding Custom Media Types
|
||||
|
||||
The best way to get new media types included in this library is to register
|
||||
them with the IANA. The community registration procedure is outlined in
|
||||
[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types
|
||||
registered with the IANA are automatically pulled into this library.
|
||||
|
||||
[npm-version-image]: https://img.shields.io/npm/v/mime-db.svg
|
||||
[npm-downloads-image]: https://img.shields.io/npm/dm/mime-db.svg
|
||||
[npm-url]: https://npmjs.org/package/mime-db
|
||||
[travis-image]: https://img.shields.io/travis/jshttp/mime-db/master.svg
|
||||
[travis-url]: https://travis-ci.org/jshttp/mime-db
|
||||
[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-db/master.svg
|
||||
[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master
|
||||
[node-image]: https://img.shields.io/node/v/mime-db.svg
|
||||
[node-url]: http://nodejs.org/download/
|
||||
6359
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json
generated
vendored
Normal file
6359
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
11
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/index.js
generated
vendored
Normal file
11
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/index.js
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
/*!
|
||||
* mime-db
|
||||
* Copyright(c) 2014 Jonathan Ong
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/**
|
||||
* Module exports.
|
||||
*/
|
||||
|
||||
module.exports = require('./db.json')
|
||||
93
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json
generated
vendored
Normal file
93
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json
generated
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"name": "mime-db",
|
||||
"description": "Media Type Database",
|
||||
"version": "1.12.0",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Douglas Christopher Wilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
},
|
||||
{
|
||||
"name": "Jonathan Ong",
|
||||
"email": "me@jongleberry.com",
|
||||
"url": "http://jongleberry.com"
|
||||
},
|
||||
{
|
||||
"name": "Robert Kieffer",
|
||||
"email": "robert@broofa.com",
|
||||
"url": "http://github.com/broofa"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"mime",
|
||||
"db",
|
||||
"type",
|
||||
"types",
|
||||
"database",
|
||||
"charset",
|
||||
"charsets"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jshttp/mime-db"
|
||||
},
|
||||
"devDependencies": {
|
||||
"bluebird": "2.9.27",
|
||||
"co": "4.5.4",
|
||||
"cogent": "1.0.1",
|
||||
"csv-parse": "0.1.2",
|
||||
"gnode": "0.1.1",
|
||||
"istanbul": "0.3.9",
|
||||
"mocha": "1.21.5",
|
||||
"raw-body": "2.1.0",
|
||||
"stream-to-array": "2"
|
||||
},
|
||||
"files": [
|
||||
"HISTORY.md",
|
||||
"LICENSE",
|
||||
"README.md",
|
||||
"db.json",
|
||||
"index.js"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node scripts/build",
|
||||
"fetch": "gnode scripts/extensions && gnode scripts/types",
|
||||
"test": "mocha --reporter spec --bail --check-leaks 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/",
|
||||
"update": "npm run fetch && npm run build"
|
||||
},
|
||||
"gitHead": "cf35cbba6b22f4a3b3eef9a32129ea5b7f0f91ee",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jshttp/mime-db/issues"
|
||||
},
|
||||
"homepage": "https://github.com/jshttp/mime-db",
|
||||
"_id": "mime-db@1.12.0",
|
||||
"_shasum": "3d0c63180f458eb10d325aaa37d7c58ae312e9d7",
|
||||
"_from": "mime-db@~1.12.0",
|
||||
"_npmVersion": "1.4.28",
|
||||
"_npmUser": {
|
||||
"name": "dougwilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "jongleberry",
|
||||
"email": "jonathanrichardong@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "dougwilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
}
|
||||
],
|
||||
"dist": {
|
||||
"shasum": "3d0c63180f458eb10d325aaa37d7c58ae312e9d7",
|
||||
"tarball": "http://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz"
|
||||
},
|
||||
"directories": {},
|
||||
"_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz"
|
||||
}
|
||||
83
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/package.json
generated
vendored
Normal file
83
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/mime-types/package.json
generated
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"name": "mime-types",
|
||||
"description": "The ultimate javascript content-type utility.",
|
||||
"version": "2.0.14",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Douglas Christopher Wilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
},
|
||||
{
|
||||
"name": "Jeremiah Senkpiel",
|
||||
"email": "fishrock123@rocketmail.com",
|
||||
"url": "https://searchbeam.jit.su"
|
||||
},
|
||||
{
|
||||
"name": "Jonathan Ong",
|
||||
"email": "me@jongleberry.com",
|
||||
"url": "http://jongleberry.com"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"mime",
|
||||
"types"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jshttp/mime-types"
|
||||
},
|
||||
"dependencies": {
|
||||
"mime-db": "~1.12.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"istanbul": "0.3.9",
|
||||
"mocha": "~1.21.5"
|
||||
},
|
||||
"files": [
|
||||
"HISTORY.md",
|
||||
"LICENSE",
|
||||
"index.js"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha --reporter spec test/test.js",
|
||||
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/test.js",
|
||||
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot test/test.js"
|
||||
},
|
||||
"gitHead": "7d53a3351581eb3d7ae1e846ea860037bce6fe3f",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jshttp/mime-types/issues"
|
||||
},
|
||||
"homepage": "https://github.com/jshttp/mime-types",
|
||||
"_id": "mime-types@2.0.14",
|
||||
"_shasum": "310e159db23e077f8bb22b748dabfa4957140aa6",
|
||||
"_from": "mime-types@~2.0.4",
|
||||
"_npmVersion": "1.4.28",
|
||||
"_npmUser": {
|
||||
"name": "dougwilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "jongleberry",
|
||||
"email": "jonathanrichardong@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "fishrock123",
|
||||
"email": "fishrock123@rocketmail.com"
|
||||
},
|
||||
{
|
||||
"name": "dougwilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
}
|
||||
],
|
||||
"dist": {
|
||||
"shasum": "310e159db23e077f8bb22b748dabfa4957140aa6",
|
||||
"tarball": "http://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz"
|
||||
},
|
||||
"directories": {},
|
||||
"_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz"
|
||||
}
|
||||
23
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/LICENSE
generated
vendored
Normal file
23
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2012 Federico Romero
|
||||
Copyright (c) 2012-2014 Isaac Z. Schlueter
|
||||
|
||||
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.
|
||||
161
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/README.md
generated
vendored
Normal file
161
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/README.md
generated
vendored
Normal file
@@ -0,0 +1,161 @@
|
||||
# negotiator
|
||||
|
||||
[![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]
|
||||
|
||||
An HTTP content negotiator for Node.js
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
$ npm install negotiator
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
```js
|
||||
var Negotiator = require('negotiator')
|
||||
```
|
||||
|
||||
### Accept Negotiation
|
||||
|
||||
```js
|
||||
availableMediaTypes = ['text/html', 'text/plain', 'application/json']
|
||||
|
||||
// The negotiator constructor receives a request object
|
||||
negotiator = new Negotiator(request)
|
||||
|
||||
// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'
|
||||
|
||||
negotiator.mediaTypes()
|
||||
// -> ['text/html', 'image/jpeg', 'application/*']
|
||||
|
||||
negotiator.mediaTypes(availableMediaTypes)
|
||||
// -> ['text/html', 'application/json']
|
||||
|
||||
negotiator.mediaType(availableMediaTypes)
|
||||
// -> 'text/html'
|
||||
```
|
||||
|
||||
You can check a working example at `examples/accept.js`.
|
||||
|
||||
#### Methods
|
||||
|
||||
##### mediaTypes(availableMediaTypes):
|
||||
|
||||
Returns an array of preferred media types ordered by priority from a list of available media types.
|
||||
|
||||
##### mediaType(availableMediaType):
|
||||
|
||||
Returns the top preferred media type from a list of available media types.
|
||||
|
||||
### Accept-Language Negotiation
|
||||
|
||||
```js
|
||||
negotiator = new Negotiator(request)
|
||||
|
||||
availableLanguages = 'en', 'es', 'fr'
|
||||
|
||||
// Let's say Accept-Language header is 'en;q=0.8, es, pt'
|
||||
|
||||
negotiator.languages()
|
||||
// -> ['es', 'pt', 'en']
|
||||
|
||||
negotiator.languages(availableLanguages)
|
||||
// -> ['es', 'en']
|
||||
|
||||
language = negotiator.language(availableLanguages)
|
||||
// -> 'es'
|
||||
```
|
||||
|
||||
You can check a working example at `examples/language.js`.
|
||||
|
||||
#### Methods
|
||||
|
||||
##### languages(availableLanguages):
|
||||
|
||||
Returns an array of preferred languages ordered by priority from a list of available languages.
|
||||
|
||||
##### language(availableLanguages):
|
||||
|
||||
Returns the top preferred language from a list of available languages.
|
||||
|
||||
### Accept-Charset Negotiation
|
||||
|
||||
```js
|
||||
availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']
|
||||
|
||||
negotiator = new Negotiator(request)
|
||||
|
||||
// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'
|
||||
|
||||
negotiator.charsets()
|
||||
// -> ['utf-8', 'iso-8859-1', 'utf-7']
|
||||
|
||||
negotiator.charsets(availableCharsets)
|
||||
// -> ['utf-8', 'iso-8859-1']
|
||||
|
||||
negotiator.charset(availableCharsets)
|
||||
// -> 'utf-8'
|
||||
```
|
||||
|
||||
You can check a working example at `examples/charset.js`.
|
||||
|
||||
#### Methods
|
||||
|
||||
##### charsets(availableCharsets):
|
||||
|
||||
Returns an array of preferred charsets ordered by priority from a list of available charsets.
|
||||
|
||||
##### charset(availableCharsets):
|
||||
|
||||
Returns the top preferred charset from a list of available charsets.
|
||||
|
||||
### Accept-Encoding Negotiation
|
||||
|
||||
```js
|
||||
availableEncodings = ['identity', 'gzip']
|
||||
|
||||
negotiator = new Negotiator(request)
|
||||
|
||||
// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'
|
||||
|
||||
negotiator.encodings()
|
||||
// -> ['gzip', 'identity', 'compress']
|
||||
|
||||
negotiator.encodings(availableEncodings)
|
||||
// -> ['gzip', 'identity']
|
||||
|
||||
negotiator.encoding(availableEncodings)
|
||||
// -> 'gzip'
|
||||
```
|
||||
|
||||
You can check a working example at `examples/encoding.js`.
|
||||
|
||||
#### Methods
|
||||
|
||||
##### encodings(availableEncodings):
|
||||
|
||||
Returns an array of preferred encodings ordered by priority from a list of available encodings.
|
||||
|
||||
##### encoding(availableEncodings):
|
||||
|
||||
Returns the top preferred encoding from a list of available encodings.
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
|
||||
[npm-image]: https://img.shields.io/npm/v/negotiator.svg?style=flat
|
||||
[npm-url]: https://npmjs.org/package/negotiator
|
||||
[node-version-image]: https://img.shields.io/node/v/negotiator.svg?style=flat
|
||||
[node-version-url]: http://nodejs.org/download/
|
||||
[travis-image]: https://img.shields.io/travis/jshttp/negotiator.svg?style=flat
|
||||
[travis-url]: https://travis-ci.org/jshttp/negotiator
|
||||
[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator.svg?style=flat
|
||||
[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master
|
||||
[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg?style=flat
|
||||
[downloads-url]: https://npmjs.org/package/negotiator
|
||||
87
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/lib/charset.js
generated
vendored
Normal file
87
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/lib/charset.js
generated
vendored
Normal file
@@ -0,0 +1,87 @@
|
||||
module.exports = preferredCharsets;
|
||||
preferredCharsets.preferredCharsets = preferredCharsets;
|
||||
|
||||
function parseAcceptCharset(accept) {
|
||||
return accept.split(',').map(function(e, i) {
|
||||
return parseCharset(e.trim(), i);
|
||||
}).filter(function(e) {
|
||||
return e;
|
||||
});
|
||||
}
|
||||
|
||||
function parseCharset(s, i) {
|
||||
var match = s.match(/^\s*(\S+?)\s*(?:;(.*))?$/);
|
||||
if (!match) return null;
|
||||
|
||||
var charset = match[1];
|
||||
var q = 1;
|
||||
if (match[2]) {
|
||||
var params = match[2].split(';')
|
||||
for (var i = 0; i < params.length; i ++) {
|
||||
var p = params[i].trim().split('=');
|
||||
if (p[0] === 'q') {
|
||||
q = parseFloat(p[1]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
charset: charset,
|
||||
q: q,
|
||||
i: i
|
||||
};
|
||||
}
|
||||
|
||||
function getCharsetPriority(charset, accepted) {
|
||||
return (accepted.map(function(a) {
|
||||
return specify(charset, a);
|
||||
}).filter(Boolean).sort(function (a, b) {
|
||||
if(a.s == b.s) {
|
||||
return a.q > b.q ? -1 : 1;
|
||||
} else {
|
||||
return a.s > b.s ? -1 : 1;
|
||||
}
|
||||
})[0] || {s: 0, q:0});
|
||||
}
|
||||
|
||||
function specify(charset, spec) {
|
||||
var s = 0;
|
||||
if(spec.charset.toLowerCase() === charset.toLowerCase()){
|
||||
s |= 1;
|
||||
} else if (spec.charset !== '*' ) {
|
||||
return null
|
||||
}
|
||||
|
||||
return {
|
||||
s: s,
|
||||
q: spec.q,
|
||||
}
|
||||
}
|
||||
|
||||
function preferredCharsets(accept, provided) {
|
||||
// RFC 2616 sec 14.2: no header = *
|
||||
accept = parseAcceptCharset(accept === undefined ? '*' : accept || '');
|
||||
if (provided) {
|
||||
return provided.map(function(type) {
|
||||
return [type, getCharsetPriority(type, accept)];
|
||||
}).filter(function(pair) {
|
||||
return pair[1].q > 0;
|
||||
}).sort(function(a, b) {
|
||||
var pa = a[1];
|
||||
var pb = b[1];
|
||||
return (pb.q - pa.q) || (pb.s - pa.s) || (pa.i - pb.i);
|
||||
}).map(function(pair) {
|
||||
return pair[0];
|
||||
});
|
||||
} else {
|
||||
return accept.sort(function (a, b) {
|
||||
// revsort
|
||||
return (b.q - a.q) || (a.i - b.i);
|
||||
}).filter(function(type) {
|
||||
return type.q > 0;
|
||||
}).map(function(type) {
|
||||
return type.charset;
|
||||
});
|
||||
}
|
||||
}
|
||||
117
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/lib/encoding.js
generated
vendored
Normal file
117
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/lib/encoding.js
generated
vendored
Normal file
@@ -0,0 +1,117 @@
|
||||
module.exports = preferredEncodings;
|
||||
preferredEncodings.preferredEncodings = preferredEncodings;
|
||||
|
||||
function parseAcceptEncoding(accept) {
|
||||
var acceptableEncodings;
|
||||
|
||||
if (accept) {
|
||||
acceptableEncodings = accept.split(',').map(function(e, i) {
|
||||
return parseEncoding(e.trim(), i);
|
||||
});
|
||||
} else {
|
||||
acceptableEncodings = [];
|
||||
}
|
||||
|
||||
if (!acceptableEncodings.some(function(e) {
|
||||
return e && specify('identity', e);
|
||||
})) {
|
||||
/*
|
||||
* If identity doesn't explicitly appear in the accept-encoding header,
|
||||
* it's added to the list of acceptable encoding with the lowest q
|
||||
*
|
||||
*/
|
||||
var lowestQ = 1;
|
||||
|
||||
for(var i = 0; i < acceptableEncodings.length; i++){
|
||||
var e = acceptableEncodings[i];
|
||||
if(e && e.q < lowestQ){
|
||||
lowestQ = e.q;
|
||||
}
|
||||
}
|
||||
acceptableEncodings.push({
|
||||
encoding: 'identity',
|
||||
q: lowestQ / 2,
|
||||
});
|
||||
}
|
||||
|
||||
return acceptableEncodings.filter(function(e) {
|
||||
return e;
|
||||
});
|
||||
}
|
||||
|
||||
function parseEncoding(s, i) {
|
||||
var match = s.match(/^\s*(\S+?)\s*(?:;(.*))?$/);
|
||||
|
||||
if (!match) return null;
|
||||
|
||||
var encoding = match[1];
|
||||
var q = 1;
|
||||
if (match[2]) {
|
||||
var params = match[2].split(';');
|
||||
for (var i = 0; i < params.length; i ++) {
|
||||
var p = params[i].trim().split('=');
|
||||
if (p[0] === 'q') {
|
||||
q = parseFloat(p[1]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
encoding: encoding,
|
||||
q: q,
|
||||
i: i
|
||||
};
|
||||
}
|
||||
|
||||
function getEncodingPriority(encoding, accepted) {
|
||||
return (accepted.map(function(a) {
|
||||
return specify(encoding, a);
|
||||
}).filter(Boolean).sort(function (a, b) {
|
||||
if(a.s == b.s) {
|
||||
return a.q > b.q ? -1 : 1;
|
||||
} else {
|
||||
return a.s > b.s ? -1 : 1;
|
||||
}
|
||||
})[0] || {s: 0, q: 0});
|
||||
}
|
||||
|
||||
function specify(encoding, spec) {
|
||||
var s = 0;
|
||||
if(spec.encoding.toLowerCase() === encoding.toLowerCase()){
|
||||
s |= 1;
|
||||
} else if (spec.encoding !== '*' ) {
|
||||
return null
|
||||
}
|
||||
|
||||
return {
|
||||
s: s,
|
||||
q: spec.q,
|
||||
}
|
||||
};
|
||||
|
||||
function preferredEncodings(accept, provided) {
|
||||
accept = parseAcceptEncoding(accept || '');
|
||||
if (provided) {
|
||||
return provided.map(function(type) {
|
||||
return [type, getEncodingPriority(type, accept)];
|
||||
}).filter(function(pair) {
|
||||
return pair[1].q > 0;
|
||||
}).sort(function(a, b) {
|
||||
var pa = a[1];
|
||||
var pb = b[1];
|
||||
return (pb.q - pa.q) || (pb.s - pa.s) || (pa.i - pb.i);
|
||||
}).map(function(pair) {
|
||||
return pair[0];
|
||||
});
|
||||
} else {
|
||||
return accept.sort(function (a, b) {
|
||||
// revsort
|
||||
return (b.q - a.q) || (a.i - b.i);
|
||||
}).filter(function(type){
|
||||
return type.q > 0;
|
||||
}).map(function(type) {
|
||||
return type.encoding;
|
||||
});
|
||||
}
|
||||
}
|
||||
100
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/lib/language.js
generated
vendored
Normal file
100
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/lib/language.js
generated
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
module.exports = preferredLanguages;
|
||||
preferredLanguages.preferredLanguages = preferredLanguages;
|
||||
|
||||
function parseAcceptLanguage(accept) {
|
||||
return accept.split(',').map(function(e, i) {
|
||||
return parseLanguage(e.trim(), i);
|
||||
}).filter(function(e) {
|
||||
return e;
|
||||
});
|
||||
}
|
||||
|
||||
function parseLanguage(s, i) {
|
||||
var match = s.match(/^\s*(\S+?)(?:-(\S+?))?\s*(?:;(.*))?$/);
|
||||
if (!match) return null;
|
||||
|
||||
var prefix = match[1],
|
||||
suffix = match[2],
|
||||
full = prefix;
|
||||
|
||||
if (suffix) full += "-" + suffix;
|
||||
|
||||
var q = 1;
|
||||
if (match[3]) {
|
||||
var params = match[3].split(';')
|
||||
for (var i = 0; i < params.length; i ++) {
|
||||
var p = params[i].split('=');
|
||||
if (p[0] === 'q') q = parseFloat(p[1]);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
prefix: prefix,
|
||||
suffix: suffix,
|
||||
q: q,
|
||||
i: i,
|
||||
full: full
|
||||
};
|
||||
}
|
||||
|
||||
function getLanguagePriority(language, accepted) {
|
||||
return (accepted.map(function(a){
|
||||
return specify(language, a);
|
||||
}).filter(Boolean).sort(function (a, b) {
|
||||
if(a.s == b.s) {
|
||||
return a.q > b.q ? -1 : 1;
|
||||
} else {
|
||||
return a.s > b.s ? -1 : 1;
|
||||
}
|
||||
})[0] || {s: 0, q: 0});
|
||||
}
|
||||
|
||||
function specify(language, spec) {
|
||||
var p = parseLanguage(language)
|
||||
if (!p) return null;
|
||||
var s = 0;
|
||||
if(spec.full.toLowerCase() === p.full.toLowerCase()){
|
||||
s |= 4;
|
||||
} else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {
|
||||
s |= 2;
|
||||
} else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {
|
||||
s |= 1;
|
||||
} else if (spec.full !== '*' ) {
|
||||
return null
|
||||
}
|
||||
|
||||
return {
|
||||
s: s,
|
||||
q: spec.q,
|
||||
}
|
||||
};
|
||||
|
||||
function preferredLanguages(accept, provided) {
|
||||
// RFC 2616 sec 14.4: no header = *
|
||||
accept = parseAcceptLanguage(accept === undefined ? '*' : accept || '');
|
||||
if (provided) {
|
||||
|
||||
var ret = provided.map(function(type) {
|
||||
return [type, getLanguagePriority(type, accept)];
|
||||
}).filter(function(pair) {
|
||||
return pair[1].q > 0;
|
||||
}).sort(function(a, b) {
|
||||
var pa = a[1];
|
||||
var pb = b[1];
|
||||
return (pb.q - pa.q) || (pb.s - pa.s) || (pa.i - pb.i);
|
||||
}).map(function(pair) {
|
||||
return pair[0];
|
||||
});
|
||||
return ret;
|
||||
|
||||
} else {
|
||||
return accept.sort(function (a, b) {
|
||||
// revsort
|
||||
return (b.q - a.q) || (a.i - b.i);
|
||||
}).filter(function(type) {
|
||||
return type.q > 0;
|
||||
}).map(function(type) {
|
||||
return type.full;
|
||||
});
|
||||
}
|
||||
}
|
||||
122
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/lib/mediaType.js
generated
vendored
Normal file
122
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/lib/mediaType.js
generated
vendored
Normal file
@@ -0,0 +1,122 @@
|
||||
module.exports = preferredMediaTypes;
|
||||
preferredMediaTypes.preferredMediaTypes = preferredMediaTypes;
|
||||
|
||||
function parseAccept(accept) {
|
||||
return accept.split(',').map(function(e, i) {
|
||||
return parseMediaType(e.trim(), i);
|
||||
}).filter(function(e) {
|
||||
return e;
|
||||
});
|
||||
};
|
||||
|
||||
function parseMediaType(s, i) {
|
||||
var match = s.match(/\s*(\S+?)\/([^;\s]+)\s*(?:;(.*))?/);
|
||||
if (!match) return null;
|
||||
|
||||
var type = match[1],
|
||||
subtype = match[2],
|
||||
full = "" + type + "/" + subtype,
|
||||
params = {},
|
||||
q = 1;
|
||||
|
||||
if (match[3]) {
|
||||
params = match[3].split(';').map(function(s) {
|
||||
return s.trim().split('=');
|
||||
}).reduce(function (set, p) {
|
||||
set[p[0]] = p[1];
|
||||
return set
|
||||
}, params);
|
||||
|
||||
if (params.q != null) {
|
||||
q = parseFloat(params.q);
|
||||
delete params.q;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
type: type,
|
||||
subtype: subtype,
|
||||
params: params,
|
||||
q: q,
|
||||
i: i,
|
||||
full: full
|
||||
};
|
||||
}
|
||||
|
||||
function getMediaTypePriority(type, accepted) {
|
||||
return (accepted.map(function(a) {
|
||||
return specify(type, a);
|
||||
}).filter(Boolean).sort(function (a, b) {
|
||||
if(a.s == b.s) {
|
||||
return a.q > b.q ? -1 : 1;
|
||||
} else {
|
||||
return a.s > b.s ? -1 : 1;
|
||||
}
|
||||
})[0] || {s: 0, q: 0});
|
||||
}
|
||||
|
||||
function specify(type, spec) {
|
||||
var p = parseMediaType(type);
|
||||
var s = 0;
|
||||
|
||||
if (!p) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if(spec.type.toLowerCase() == p.type.toLowerCase()) {
|
||||
s |= 4
|
||||
} else if(spec.type != '*') {
|
||||
return null;
|
||||
}
|
||||
|
||||
if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {
|
||||
s |= 2
|
||||
} else if(spec.subtype != '*') {
|
||||
return null;
|
||||
}
|
||||
|
||||
var keys = Object.keys(spec.params);
|
||||
if (keys.length > 0) {
|
||||
if (keys.every(function (k) {
|
||||
return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();
|
||||
})) {
|
||||
s |= 1
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
q: spec.q,
|
||||
s: s,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function preferredMediaTypes(accept, provided) {
|
||||
// RFC 2616 sec 14.2: no header = */*
|
||||
accept = parseAccept(accept === undefined ? '*/*' : accept || '');
|
||||
if (provided) {
|
||||
return provided.map(function(type) {
|
||||
return [type, getMediaTypePriority(type, accept)];
|
||||
}).filter(function(pair) {
|
||||
return pair[1].q > 0;
|
||||
}).sort(function(a, b) {
|
||||
var pa = a[1];
|
||||
var pb = b[1];
|
||||
return (pb.q - pa.q) || (pb.s - pa.s) || (pa.i - pb.i);
|
||||
}).map(function(pair) {
|
||||
return pair[0];
|
||||
});
|
||||
|
||||
} else {
|
||||
return accept.sort(function (a, b) {
|
||||
// revsort
|
||||
return (b.q - a.q) || (a.i - b.i);
|
||||
}).filter(function(type) {
|
||||
return type.q > 0;
|
||||
}).map(function(type) {
|
||||
return type.full;
|
||||
});
|
||||
}
|
||||
}
|
||||
37
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/lib/negotiator.js
generated
vendored
Normal file
37
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/lib/negotiator.js
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
module.exports = Negotiator;
|
||||
Negotiator.Negotiator = Negotiator;
|
||||
|
||||
function Negotiator(request) {
|
||||
if (!(this instanceof Negotiator)) return new Negotiator(request);
|
||||
this.request = request;
|
||||
}
|
||||
|
||||
var set = { charset: 'accept-charset',
|
||||
encoding: 'accept-encoding',
|
||||
language: 'accept-language',
|
||||
mediaType: 'accept' };
|
||||
|
||||
|
||||
function capitalize(string){
|
||||
return string.charAt(0).toUpperCase() + string.slice(1);
|
||||
}
|
||||
|
||||
Object.keys(set).forEach(function (k) {
|
||||
var header = set[k],
|
||||
method = require('./'+k+'.js'),
|
||||
singular = k,
|
||||
plural = k + 's';
|
||||
|
||||
Negotiator.prototype[plural] = function (available) {
|
||||
return method(this.request.headers[header], available);
|
||||
};
|
||||
|
||||
Negotiator.prototype[singular] = function(available) {
|
||||
var set = this[plural](available);
|
||||
if (set) return set[0];
|
||||
};
|
||||
|
||||
// Keep preferred* methods for legacy compatibility
|
||||
Negotiator.prototype['preferred'+capitalize(plural)] = Negotiator.prototype[plural];
|
||||
Negotiator.prototype['preferred'+capitalize(singular)] = Negotiator.prototype[singular];
|
||||
})
|
||||
78
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/package.json
generated
vendored
Normal file
78
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/node_modules/negotiator/package.json
generated
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"name": "negotiator",
|
||||
"description": "HTTP content negotiation",
|
||||
"version": "0.4.9",
|
||||
"author": {
|
||||
"name": "Federico Romero",
|
||||
"email": "federico.romero@outboxlabs.com"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Isaac Z. Schlueter",
|
||||
"email": "i@izs.me",
|
||||
"url": "http://blog.izs.me/"
|
||||
}
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jshttp/negotiator"
|
||||
},
|
||||
"keywords": [
|
||||
"http",
|
||||
"content negotiation",
|
||||
"accept",
|
||||
"accept-language",
|
||||
"accept-encoding",
|
||||
"accept-charset"
|
||||
],
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"istanbul": "~0.3.2",
|
||||
"nodeunit": "0.8.x"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "nodeunit test",
|
||||
"test-cov": "istanbul cover ./node_modules/nodeunit/bin/nodeunit test"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
},
|
||||
"main": "lib/negotiator.js",
|
||||
"files": [
|
||||
"lib",
|
||||
"LICENSE"
|
||||
],
|
||||
"gitHead": "1e90abd710b662db80f1ea244e647cce3bd74504",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jshttp/negotiator/issues"
|
||||
},
|
||||
"homepage": "https://github.com/jshttp/negotiator",
|
||||
"_id": "negotiator@0.4.9",
|
||||
"_shasum": "92e46b6db53c7e421ed64a2bc94f08be7630df3f",
|
||||
"_from": "negotiator@0.4.9",
|
||||
"_npmVersion": "1.4.21",
|
||||
"_npmUser": {
|
||||
"name": "dougwilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "federomero",
|
||||
"email": "federomero@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "dougwilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
},
|
||||
{
|
||||
"name": "jongleberry",
|
||||
"email": "jonathanrichardong@gmail.com"
|
||||
}
|
||||
],
|
||||
"dist": {
|
||||
"shasum": "92e46b6db53c7e421ed64a2bc94f08be7630df3f",
|
||||
"tarball": "http://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz"
|
||||
},
|
||||
"directories": {},
|
||||
"_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz"
|
||||
}
|
||||
91
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/package.json
generated
vendored
Normal file
91
node_modules/socket.io/node_modules/engine.io/node_modules/accepts/package.json
generated
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
{
|
||||
"name": "accepts",
|
||||
"description": "Higher-level content negotiation",
|
||||
"version": "1.1.4",
|
||||
"author": {
|
||||
"name": "Jonathan Ong",
|
||||
"email": "me@jongleberry.com",
|
||||
"url": "http://jongleberry.com"
|
||||
},
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jshttp/accepts"
|
||||
},
|
||||
"dependencies": {
|
||||
"mime-types": "~2.0.4",
|
||||
"negotiator": "0.4.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
"istanbul": "~0.3.4",
|
||||
"mocha": "~2.0.1"
|
||||
},
|
||||
"files": [
|
||||
"LICENSE",
|
||||
"HISTORY.md",
|
||||
"index.js"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
},
|
||||
"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/"
|
||||
},
|
||||
"keywords": [
|
||||
"content",
|
||||
"negotiation",
|
||||
"accept",
|
||||
"accepts"
|
||||
],
|
||||
"gitHead": "df66414d80f096627b28f137127fce0a851d7900",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jshttp/accepts/issues"
|
||||
},
|
||||
"homepage": "https://github.com/jshttp/accepts",
|
||||
"_id": "accepts@1.1.4",
|
||||
"_shasum": "d71c96f7d41d0feda2c38cd14e8a27c04158df4a",
|
||||
"_from": "accepts@1.1.4",
|
||||
"_npmVersion": "1.4.21",
|
||||
"_npmUser": {
|
||||
"name": "dougwilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "jongleberry",
|
||||
"email": "jonathanrichardong@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "federomero",
|
||||
"email": "federomero@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "dougwilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
},
|
||||
{
|
||||
"name": "tjholowaychuk",
|
||||
"email": "tj@vision-media.ca"
|
||||
},
|
||||
{
|
||||
"name": "shtylman",
|
||||
"email": "shtylman@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "mscdex",
|
||||
"email": "mscdex@mscdex.net"
|
||||
},
|
||||
{
|
||||
"name": "fishrock123",
|
||||
"email": "fishrock123@rocketmail.com"
|
||||
}
|
||||
],
|
||||
"dist": {
|
||||
"shasum": "d71c96f7d41d0feda2c38cd14e8a27c04158df4a",
|
||||
"tarball": "http://registry.npmjs.org/accepts/-/accepts-1.1.4.tgz"
|
||||
},
|
||||
"directories": {},
|
||||
"_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.1.4.tgz"
|
||||
}
|
||||
3
node_modules/socket.io/node_modules/engine.io/node_modules/base64id/.npmignore
generated
vendored
Normal file
3
node_modules/socket.io/node_modules/engine.io/node_modules/base64id/.npmignore
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
support
|
||||
test
|
||||
examples
|
||||
18
node_modules/socket.io/node_modules/engine.io/node_modules/base64id/README.md
generated
vendored
Normal file
18
node_modules/socket.io/node_modules/engine.io/node_modules/base64id/README.md
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
base64id
|
||||
========
|
||||
|
||||
Node.js module that generates a base64 id.
|
||||
|
||||
Uses crypto.randomBytes when available, falls back to unsafe methods for node.js <= 0.4.
|
||||
|
||||
To increase performance, random bytes are buffered to minimize the number of synchronous calls to crypto.randomBytes.
|
||||
|
||||
## Installation
|
||||
|
||||
$ npm install mongoose
|
||||
|
||||
## Usage
|
||||
|
||||
var base64id = require('base64id');
|
||||
|
||||
var id = base64id.generateId();
|
||||
103
node_modules/socket.io/node_modules/engine.io/node_modules/base64id/lib/base64id.js
generated
vendored
Normal file
103
node_modules/socket.io/node_modules/engine.io/node_modules/base64id/lib/base64id.js
generated
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
/*!
|
||||
* base64id v0.1.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* Module dependencies
|
||||
*/
|
||||
|
||||
var crypto = require('crypto');
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
|
||||
var Base64Id = function() { };
|
||||
|
||||
/**
|
||||
* Get random bytes
|
||||
*
|
||||
* Uses a buffer if available, falls back to crypto.randomBytes
|
||||
*/
|
||||
|
||||
Base64Id.prototype.getRandomBytes = function(bytes) {
|
||||
|
||||
var BUFFER_SIZE = 4096
|
||||
var self = this;
|
||||
|
||||
bytes = bytes || 12;
|
||||
|
||||
if (bytes > BUFFER_SIZE) {
|
||||
return crypto.randomBytes(bytes);
|
||||
}
|
||||
|
||||
var bytesInBuffer = parseInt(BUFFER_SIZE/bytes);
|
||||
var threshold = parseInt(bytesInBuffer*0.85);
|
||||
|
||||
if (!threshold) {
|
||||
return crypto.randomBytes(bytes);
|
||||
}
|
||||
|
||||
if (this.bytesBufferIndex == null) {
|
||||
this.bytesBufferIndex = -1;
|
||||
}
|
||||
|
||||
if (this.bytesBufferIndex == bytesInBuffer) {
|
||||
this.bytesBuffer = null;
|
||||
this.bytesBufferIndex = -1;
|
||||
}
|
||||
|
||||
// No buffered bytes available or index above threshold
|
||||
if (this.bytesBufferIndex == -1 || this.bytesBufferIndex > threshold) {
|
||||
|
||||
if (!this.isGeneratingBytes) {
|
||||
this.isGeneratingBytes = true;
|
||||
crypto.randomBytes(BUFFER_SIZE, function(err, bytes) {
|
||||
self.bytesBuffer = bytes;
|
||||
self.bytesBufferIndex = 0;
|
||||
self.isGeneratingBytes = false;
|
||||
});
|
||||
}
|
||||
|
||||
// Fall back to sync call when no buffered bytes are available
|
||||
if (this.bytesBufferIndex == -1) {
|
||||
return crypto.randomBytes(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
var result = this.bytesBuffer.slice(bytes*this.bytesBufferIndex, bytes*(this.bytesBufferIndex+1));
|
||||
this.bytesBufferIndex++;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a base64 id
|
||||
*
|
||||
* (Original version from socket.io <http://socket.io>)
|
||||
*/
|
||||
|
||||
Base64Id.prototype.generateId = function () {
|
||||
var rand = new Buffer(15); // multiple of 3 for base64
|
||||
if (!rand.writeInt32BE) {
|
||||
return Math.abs(Math.random() * Math.random() * Date.now() | 0).toString()
|
||||
+ Math.abs(Math.random() * Math.random() * Date.now() | 0).toString();
|
||||
}
|
||||
this.sequenceNumber = (this.sequenceNumber + 1) | 0;
|
||||
rand.writeInt32BE(this.sequenceNumber, 11);
|
||||
if (crypto.randomBytes) {
|
||||
this.getRandomBytes(12).copy(rand);
|
||||
} else {
|
||||
// not secure for node 0.4
|
||||
[0, 4, 8].forEach(function(i) {
|
||||
rand.writeInt32BE(Math.random() * Math.pow(2, 32) | 0, i);
|
||||
});
|
||||
}
|
||||
return rand.toString('base64').replace(/\//g, '_').replace(/\+/g, '-');
|
||||
};
|
||||
|
||||
/**
|
||||
* Export
|
||||
*/
|
||||
|
||||
exports = module.exports = new Base64Id();
|
||||
43
node_modules/socket.io/node_modules/engine.io/node_modules/base64id/package.json
generated
vendored
Normal file
43
node_modules/socket.io/node_modules/engine.io/node_modules/base64id/package.json
generated
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"name": "base64id",
|
||||
"version": "0.1.0",
|
||||
"description": "Generates a base64 id",
|
||||
"author": {
|
||||
"name": "Kristian Faeldt",
|
||||
"email": "faeldt_kristian@cyberagent.co.jp"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/faeldt/base64id.git"
|
||||
},
|
||||
"main": "./lib/base64id.js",
|
||||
"engines": {
|
||||
"node": ">= 0.4.0"
|
||||
},
|
||||
"_npmUser": {
|
||||
"name": "faeldt_kristian",
|
||||
"email": "faeldt_kristian@cyberagent.co.jp"
|
||||
},
|
||||
"_id": "base64id@0.1.0",
|
||||
"dependencies": {},
|
||||
"devDependencies": {},
|
||||
"optionalDependencies": {},
|
||||
"_engineSupported": true,
|
||||
"_npmVersion": "1.1.16",
|
||||
"_nodeVersion": "v0.6.15",
|
||||
"_defaultsLoaded": true,
|
||||
"dist": {
|
||||
"shasum": "02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f",
|
||||
"tarball": "http://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "faeldt_kristian",
|
||||
"email": "faeldt_kristian@cyberagent.co.jp"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f",
|
||||
"_from": "base64id@0.1.0",
|
||||
"_resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz"
|
||||
}
|
||||
17
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.npmignore
generated
vendored
Normal file
17
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.npmignore
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
lib-cov
|
||||
*.seed
|
||||
*.log
|
||||
*.csv
|
||||
*.dat
|
||||
*.out
|
||||
*.pid
|
||||
*.gz
|
||||
|
||||
pids
|
||||
logs
|
||||
results
|
||||
|
||||
npm-debug.log
|
||||
node_modules/*
|
||||
|
||||
test
|
||||
43
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.travis.yml
generated
vendored
Normal file
43
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.travis.yml
generated
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
language: node_js
|
||||
sudo: false
|
||||
node_js:
|
||||
- 0.10
|
||||
- 0.12
|
||||
- 4.0
|
||||
sudo: false
|
||||
notifications:
|
||||
irc: irc.freenode.org##socket.io
|
||||
matrix:
|
||||
include:
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=chrome BROWSER_VERSION=latest
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=safari BROWSER_VERSION=latest
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=ie BROWSER_VERSION=6
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=ie BROWSER_VERSION=7
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=ie BROWSER_VERSION=8
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=ie BROWSER_VERSION=9
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=ie BROWSER_VERSION=10 BROWSER_PLATFORM="Windows 2012"
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=ie BROWSER_VERSION=latest BROWSER_PLATFORM="Windows 2012"
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=iphone BROWSER_VERSION=5.1
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=iphone BROWSER_VERSION=6.1
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=iphone BROWSER_VERSION=7.1
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=android BROWSER_VERSION=4.0
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=android BROWSER_VERSION=4.1
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=android BROWSER_VERSION=4.2
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=android BROWSER_VERSION=4.3
|
||||
- node_js: '0.12'
|
||||
env: BROWSER_NAME=android BROWSER_VERSION=4.4
|
||||
5
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.zuul.yml
generated
vendored
Normal file
5
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.zuul.yml
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
ui: mocha-bdd
|
||||
tunnel:
|
||||
type: ngrok
|
||||
authtoken: 6Aw8vTgcG5EvXdQywVvbh_3fMxvd4Q7dcL2caAHAFjV
|
||||
proto: tcp
|
||||
115
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/History.md
generated
vendored
Normal file
115
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/History.md
generated
vendored
Normal file
@@ -0,0 +1,115 @@
|
||||
|
||||
1.2.4 / 2015-12-04
|
||||
==================
|
||||
|
||||
* fix `ArrayBuffer` encoding in base64 string
|
||||
|
||||
1.2.3 / 2015-11-28
|
||||
==================
|
||||
|
||||
* fix encoding blob as base64
|
||||
|
||||
1.2.2 / 2015-09-09
|
||||
==================
|
||||
|
||||
* fixes for iojs/node
|
||||
|
||||
1.2.1 / 2015-01-17
|
||||
==================
|
||||
|
||||
* pass has-binary result to encodePacket [rase-]
|
||||
* Fix parse error [rase-]
|
||||
|
||||
1.2.0 / 2015-01-11
|
||||
==================
|
||||
|
||||
* fix return type for decodePacket
|
||||
* README fixes
|
||||
* use travis matrix for better test runs
|
||||
* encode into binary only if needed
|
||||
* add test cases for base64 object encoding.
|
||||
* add encodeBase64Object to encoder for browser
|
||||
* avoid sending Blobs on PhantomJS (as on Android)
|
||||
* test that utf8 encoding is not on by default but can be switched on manually
|
||||
|
||||
1.1.0 / 2014-07-16
|
||||
==================
|
||||
|
||||
* make utf8 encoding/decoding optional
|
||||
|
||||
1.0.8 / 2014-07-16
|
||||
==================
|
||||
|
||||
* adjust protocol revision
|
||||
* handle invalid utf8 errors gracefully
|
||||
* fix memory leak on browser
|
||||
|
||||
1.0.7 / 2014-06-24
|
||||
==================
|
||||
|
||||
* fix decodePayloadAsBinary memory leak [christophwitzko]
|
||||
* README improvements
|
||||
|
||||
1.0.6 / 2014-05-30
|
||||
==================
|
||||
|
||||
* utf8 fixes when using binary encoding [nkzawa]
|
||||
|
||||
1.0.5 / 2014-05-06
|
||||
==================
|
||||
|
||||
* fix range error
|
||||
|
||||
1.0.4 / 2014-04-13
|
||||
==================
|
||||
|
||||
* fix `encodePayloadAsBinary` method encodes packets to base64
|
||||
|
||||
1.0.3 / 2014-04-10
|
||||
==================
|
||||
|
||||
* Fix length calculation when encoding as binary [binlain]
|
||||
|
||||
1.0.2 / 2014-03-16
|
||||
==================
|
||||
|
||||
* fix binary for android due to a bug in Blob XHR2 implementation [Rase-]
|
||||
|
||||
1.0.1 / 2014-03-06
|
||||
==================
|
||||
|
||||
* implement `blob` module to simplify code
|
||||
* bump `arraybuffer.slice`
|
||||
* style fixes
|
||||
|
||||
1.0.0 / 2014-02-18
|
||||
==================
|
||||
|
||||
* parser: added binary encoding [Rase-]
|
||||
* parser: switched to an async interface [Rase-]
|
||||
|
||||
0.3.0 / 2013-03-16
|
||||
==================
|
||||
|
||||
* parser: if callback returns `false` ignore rest of payload
|
||||
* test: fixed all broken tests
|
||||
|
||||
0.2.1 / 2013-03-16
|
||||
==================
|
||||
|
||||
* added protocol version to index.js [albertyfwu]
|
||||
|
||||
0.2.0 / 2013-02-26
|
||||
==================
|
||||
|
||||
* Changed `decodePayload` to use a callback instead of returning an array [sweetieSong, albertyfwu]
|
||||
|
||||
0.1.1 / 2013-01-26
|
||||
==================
|
||||
|
||||
* package.json fixes
|
||||
|
||||
0.1.0 / 2013-01-19
|
||||
==================
|
||||
|
||||
* Initial release
|
||||
22
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/LICENSE
generated
vendored
Normal file
22
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014 Automattic <dev@cloudup.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.
|
||||
26
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/Makefile
generated
vendored
Normal file
26
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/Makefile
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
|
||||
REPORTER = dot
|
||||
|
||||
test:
|
||||
@if [ "x$(BROWSER_NAME)" = "x" ]; then make test-node; else make test-zuul; fi
|
||||
|
||||
test-node:
|
||||
@./node_modules/.bin/mocha \
|
||||
--reporter $(REPORTER) \
|
||||
test/index.js
|
||||
|
||||
test-zuul:
|
||||
@if [ "x$(BROWSER_PLATFORM)" = "x" ]; then \
|
||||
./node_modules/zuul/bin/zuul \
|
||||
--browser-name $(BROWSER_NAME) \
|
||||
--browser-version $(BROWSER_VERSION) \
|
||||
test/index.js; \
|
||||
else \
|
||||
./node_modules/zuul/bin/zuul \
|
||||
--browser-name $(BROWSER_NAME) \
|
||||
--browser-version $(BROWSER_VERSION) \
|
||||
--browser-platform "$(BROWSER_PLATFORM)" \
|
||||
test/index.js; \
|
||||
fi
|
||||
|
||||
.PHONY: test
|
||||
202
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/Readme.md
generated
vendored
Normal file
202
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/Readme.md
generated
vendored
Normal file
@@ -0,0 +1,202 @@
|
||||
|
||||
# engine.io-parser
|
||||
|
||||
[](http://travis-ci.org/socketio/engine.io-parser)
|
||||
[](http://badge.fury.io/js/engine.io-parser)
|
||||
|
||||
This is the JavaScript parser for the engine.io protocol encoding,
|
||||
shared by both
|
||||
[engine.io-client](https://github.com/socketio/engine.io-client) and
|
||||
[engine.io](https://github.com/socketio/engine.io).
|
||||
|
||||
## How to use
|
||||
|
||||
### Standalone
|
||||
|
||||
The parser can encode/decode packets, payloads, and payloads as binary
|
||||
with the following methods: `encodePacket`, `decodePacket`, `encodePayload`,
|
||||
`decodePayload`, `encodePayloadAsBinary`, `decodePayloadAsBinary`.
|
||||
|
||||
The browser-side parser also includes `encodePayloadAsArrayBuffer` and `encodePayloadAsBlob`.
|
||||
|
||||
Example:
|
||||
|
||||
```js
|
||||
var parser = require('engine.io-parser');
|
||||
|
||||
var data = new Buffer(5);
|
||||
for (var i = 0; i < data.length; i++) { data[i] = i; }
|
||||
|
||||
parser.encodePacket({ type: 'message', data: data }, function(encoded) {
|
||||
var decodedData = parser.decodePacket(encoded); // { type: 'message', data: data }
|
||||
});
|
||||
```
|
||||
|
||||
### With browserify
|
||||
|
||||
Engine.IO Parser is a commonjs module, which means you can include it by using
|
||||
`require` on the browser and package using [browserify](http://browserify.org/):
|
||||
|
||||
1. install the parser package
|
||||
|
||||
```shell
|
||||
npm install engine.io-parser
|
||||
```
|
||||
|
||||
1. write your app code
|
||||
|
||||
```js
|
||||
var parser = require('engine.io-parser');
|
||||
|
||||
var testBuffer = new Int8Array(10);
|
||||
for (var i = 0; i < testBuffer.length; i++) testBuffer[i] = i;
|
||||
|
||||
var packets = [{ type: 'message', data: testBuffer.buffer }, { type: 'message', data: 'hello' }];
|
||||
|
||||
parser.encodePayload(packets, function(encoded) {
|
||||
parser.decodePayload(encoded,
|
||||
function(packet, index, total) {
|
||||
var isLast = index + 1 == total;
|
||||
if (!isLast) {
|
||||
var buffer = new Int8Array(packet.data); // testBuffer
|
||||
} else {
|
||||
var message = packet.data; // 'hello'
|
||||
}
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
1. build your app bundle
|
||||
|
||||
```bash
|
||||
$ browserify app.js > bundle.js
|
||||
```
|
||||
|
||||
1. include on your page
|
||||
|
||||
```html
|
||||
<script src="/path/to/bundle.js"></script>
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
- Runs on browser and node.js seamlessly
|
||||
- Runs inside HTML5 WebWorker
|
||||
- Can encode and decode packets
|
||||
- Encodes from/to ArrayBuffer or Blob when in browser, and Buffer or ArrayBuffer in Node
|
||||
|
||||
## API
|
||||
|
||||
Note: `cb(type)` means the type is a callback function that contains a parameter of type `type` when called.
|
||||
|
||||
### Node
|
||||
|
||||
- `encodePacket`
|
||||
- Encodes a packet.
|
||||
- **Parameters**
|
||||
- `Object`: the packet to encode, has `type` and `data`.
|
||||
- `data`: can be a `String`, `Number`, `Buffer`, `ArrayBuffer`
|
||||
- `Boolean`: optional, binary support
|
||||
- `Function`: callback, returns the encoded packet (`cb(String)`)
|
||||
- `decodePacket`
|
||||
- Decodes a packet. Data also available as an ArrayBuffer if requested.
|
||||
- Returns data as `String` or (`Blob` on browser, `ArrayBuffer` on Node)
|
||||
- **Parameters**
|
||||
- `String` | `ArrayBuffer`: the packet to decode, has `type` and `data`
|
||||
- `String`: optional, the binary type
|
||||
|
||||
- `encodeBase64Packet`
|
||||
- Encodes a packet with binary data in a base64 string (`String`)
|
||||
- **Parameters**
|
||||
- `Object`: the packet to encode, has `type` and `data`
|
||||
- `Function`: callback, returns the base64 encoded message (`cb(String)`)
|
||||
- `decodeBase64Packet`
|
||||
- Decodes a packet encoded in a base64 string.
|
||||
- **Parameters**
|
||||
- `String`: the base64 encoded message
|
||||
- `String`: optional, the binary type
|
||||
|
||||
- `encodePayload`
|
||||
- Encodes multiple messages (payload).
|
||||
- If any contents are binary, they will be encoded as base64 strings. Base64
|
||||
encoded strings are marked with a b before the length specifier
|
||||
- **Parameters**
|
||||
- `Array`: an array of packets
|
||||
- `Boolean`: optional, binary support
|
||||
- `Function`: callback, returns the encoded payload (`cb(String)`)
|
||||
- `decodePayload`
|
||||
- Decodes data when a payload is maybe expected. Possible binary contents are
|
||||
decoded from their base64 representation.
|
||||
- **Parameters**
|
||||
- `String`: the payload
|
||||
- `String`: optional, the binary type
|
||||
- `Function`: callback, returns (cb(`Object`: packet, `Number`:packet index, `Number`:packet total))
|
||||
|
||||
- `encodePayloadAsBinary`
|
||||
- Encodes multiple messages (payload) as binary.
|
||||
- **Parameters**
|
||||
- `Array`: an array of packets
|
||||
- `Function`: callback, returns the encoded payload (`cb(Buffer)`)
|
||||
- `decodePayloadAsBinary`
|
||||
- Decodes data when a payload is maybe expected. Strings are decoded by
|
||||
interpreting each byte as a key code for entries marked to start with 0. See
|
||||
description of encodePayloadAsBinary.
|
||||
- **Parameters**
|
||||
- `Buffer`: the buffer
|
||||
- `String`: optional, the binary type
|
||||
- `Function`: callback, returns the decoded packet (`cb(Object)`)
|
||||
|
||||
### Browser
|
||||
|
||||
- `encodePayloadAsArrayBuffer`
|
||||
- Encodes multiple messages (payload) as binary.
|
||||
- **Parameters**
|
||||
- `Array`: an array of packets
|
||||
- `Function`: callback, returns the encoded payload (`cb(ArrayBuffer)`)
|
||||
- `encodePayloadAsBlob`
|
||||
- Encodes multiple messages (payload) as blob.
|
||||
- **Parameters**
|
||||
- `Array`: an array of packets
|
||||
- `Function`: callback, returns the encoded payload (`cb(Blob)`)
|
||||
|
||||
## Tests
|
||||
|
||||
Standalone tests can be run with `make test` which will run both node.js and browser tests.
|
||||
|
||||
Browser tests are run using [zuul](https://github.com/defunctzombie/zuul).
|
||||
(You must have zuul setup with a saucelabs account.)
|
||||
|
||||
You can run the tests locally using the following command:
|
||||
|
||||
```
|
||||
./node_modules/.bin/zuul --local 8080 -- test/index.js
|
||||
```
|
||||
|
||||
## Support
|
||||
|
||||
The support channels for `engine.io-parser` are the same as `socket.io`:
|
||||
- irc.freenode.net **#socket.io**
|
||||
- [Google Groups](http://groups.google.com/group/socket_io)
|
||||
- [Website](http://socket.io)
|
||||
|
||||
## Development
|
||||
|
||||
To contribute patches, run tests or benchmarks, make sure to clone the
|
||||
repository:
|
||||
|
||||
```bash
|
||||
git clone git://github.com/LearnBoost/engine.io-parser.git
|
||||
```
|
||||
|
||||
Then:
|
||||
|
||||
```bash
|
||||
cd engine.io-parser
|
||||
npm install
|
||||
```
|
||||
|
||||
See the `Tests` section above for how to run tests before submitting any patches.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
2
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/index.js
generated
vendored
Normal file
2
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/index.js
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
module.exports = require('./lib/');
|
||||
594
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/browser.js
generated
vendored
Normal file
594
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/browser.js
generated
vendored
Normal file
@@ -0,0 +1,594 @@
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var keys = require('./keys');
|
||||
var hasBinary = require('has-binary');
|
||||
var sliceBuffer = require('arraybuffer.slice');
|
||||
var base64encoder = require('base64-arraybuffer');
|
||||
var after = require('after');
|
||||
var utf8 = require('utf8');
|
||||
|
||||
/**
|
||||
* Check if we are running an android browser. That requires us to use
|
||||
* ArrayBuffer with polling transports...
|
||||
*
|
||||
* http://ghinda.net/jpeg-blob-ajax-android/
|
||||
*/
|
||||
|
||||
var isAndroid = navigator.userAgent.match(/Android/i);
|
||||
|
||||
/**
|
||||
* Check if we are running in PhantomJS.
|
||||
* Uploading a Blob with PhantomJS does not work correctly, as reported here:
|
||||
* https://github.com/ariya/phantomjs/issues/11395
|
||||
* @type boolean
|
||||
*/
|
||||
var isPhantomJS = /PhantomJS/i.test(navigator.userAgent);
|
||||
|
||||
/**
|
||||
* When true, avoids using Blobs to encode payloads.
|
||||
* @type boolean
|
||||
*/
|
||||
var dontSendBlobs = isAndroid || isPhantomJS;
|
||||
|
||||
/**
|
||||
* Current protocol version.
|
||||
*/
|
||||
|
||||
exports.protocol = 3;
|
||||
|
||||
/**
|
||||
* Packet types.
|
||||
*/
|
||||
|
||||
var packets = exports.packets = {
|
||||
open: 0 // non-ws
|
||||
, close: 1 // non-ws
|
||||
, ping: 2
|
||||
, pong: 3
|
||||
, message: 4
|
||||
, upgrade: 5
|
||||
, noop: 6
|
||||
};
|
||||
|
||||
var packetslist = keys(packets);
|
||||
|
||||
/**
|
||||
* Premade error packet.
|
||||
*/
|
||||
|
||||
var err = { type: 'error', data: 'parser error' };
|
||||
|
||||
/**
|
||||
* Create a blob api even for blob builder when vendor prefixes exist
|
||||
*/
|
||||
|
||||
var Blob = require('blob');
|
||||
|
||||
/**
|
||||
* Encodes a packet.
|
||||
*
|
||||
* <packet type id> [ <data> ]
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* 5hello world
|
||||
* 3
|
||||
* 4
|
||||
*
|
||||
* Binary is encoded in an identical principle
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
|
||||
if ('function' == typeof supportsBinary) {
|
||||
callback = supportsBinary;
|
||||
supportsBinary = false;
|
||||
}
|
||||
|
||||
if ('function' == typeof utf8encode) {
|
||||
callback = utf8encode;
|
||||
utf8encode = null;
|
||||
}
|
||||
|
||||
var data = (packet.data === undefined)
|
||||
? undefined
|
||||
: packet.data.buffer || packet.data;
|
||||
|
||||
if (global.ArrayBuffer && data instanceof ArrayBuffer) {
|
||||
return encodeArrayBuffer(packet, supportsBinary, callback);
|
||||
} else if (Blob && data instanceof global.Blob) {
|
||||
return encodeBlob(packet, supportsBinary, callback);
|
||||
}
|
||||
|
||||
// might be an object with { base64: true, data: dataAsBase64String }
|
||||
if (data && data.base64) {
|
||||
return encodeBase64Object(packet, callback);
|
||||
}
|
||||
|
||||
// Sending data as a utf-8 string
|
||||
var encoded = packets[packet.type];
|
||||
|
||||
// data fragment is optional
|
||||
if (undefined !== packet.data) {
|
||||
encoded += utf8encode ? utf8.encode(String(packet.data)) : String(packet.data);
|
||||
}
|
||||
|
||||
return callback('' + encoded);
|
||||
|
||||
};
|
||||
|
||||
function encodeBase64Object(packet, callback) {
|
||||
// packet data is an object { base64: true, data: dataAsBase64String }
|
||||
var message = 'b' + exports.packets[packet.type] + packet.data.data;
|
||||
return callback(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode packet helpers for binary types
|
||||
*/
|
||||
|
||||
function encodeArrayBuffer(packet, supportsBinary, callback) {
|
||||
if (!supportsBinary) {
|
||||
return exports.encodeBase64Packet(packet, callback);
|
||||
}
|
||||
|
||||
var data = packet.data;
|
||||
var contentArray = new Uint8Array(data);
|
||||
var resultBuffer = new Uint8Array(1 + data.byteLength);
|
||||
|
||||
resultBuffer[0] = packets[packet.type];
|
||||
for (var i = 0; i < contentArray.length; i++) {
|
||||
resultBuffer[i+1] = contentArray[i];
|
||||
}
|
||||
|
||||
return callback(resultBuffer.buffer);
|
||||
}
|
||||
|
||||
function encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {
|
||||
if (!supportsBinary) {
|
||||
return exports.encodeBase64Packet(packet, callback);
|
||||
}
|
||||
|
||||
var fr = new FileReader();
|
||||
fr.onload = function() {
|
||||
packet.data = fr.result;
|
||||
exports.encodePacket(packet, supportsBinary, true, callback);
|
||||
};
|
||||
return fr.readAsArrayBuffer(packet.data);
|
||||
}
|
||||
|
||||
function encodeBlob(packet, supportsBinary, callback) {
|
||||
if (!supportsBinary) {
|
||||
return exports.encodeBase64Packet(packet, callback);
|
||||
}
|
||||
|
||||
if (dontSendBlobs) {
|
||||
return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);
|
||||
}
|
||||
|
||||
var length = new Uint8Array(1);
|
||||
length[0] = packets[packet.type];
|
||||
var blob = new Blob([length.buffer, packet.data]);
|
||||
|
||||
return callback(blob);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encodes a packet with binary data in a base64 string
|
||||
*
|
||||
* @param {Object} packet, has `type` and `data`
|
||||
* @return {String} base64 encoded message
|
||||
*/
|
||||
|
||||
exports.encodeBase64Packet = function(packet, callback) {
|
||||
var message = 'b' + exports.packets[packet.type];
|
||||
if (Blob && packet.data instanceof global.Blob) {
|
||||
var fr = new FileReader();
|
||||
fr.onload = function() {
|
||||
var b64 = fr.result.split(',')[1];
|
||||
callback(message + b64);
|
||||
};
|
||||
return fr.readAsDataURL(packet.data);
|
||||
}
|
||||
|
||||
var b64data;
|
||||
try {
|
||||
b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));
|
||||
} catch (e) {
|
||||
// iPhone Safari doesn't let you apply with typed arrays
|
||||
var typed = new Uint8Array(packet.data);
|
||||
var basic = new Array(typed.length);
|
||||
for (var i = 0; i < typed.length; i++) {
|
||||
basic[i] = typed[i];
|
||||
}
|
||||
b64data = String.fromCharCode.apply(null, basic);
|
||||
}
|
||||
message += global.btoa(b64data);
|
||||
return callback(message);
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a packet. Changes format to Blob if requested.
|
||||
*
|
||||
* @return {Object} with `type` and `data` (if any)
|
||||
* @api private
|
||||
*/
|
||||
|
||||
exports.decodePacket = function (data, binaryType, utf8decode) {
|
||||
// String data
|
||||
if (typeof data == 'string' || data === undefined) {
|
||||
if (data.charAt(0) == 'b') {
|
||||
return exports.decodeBase64Packet(data.substr(1), binaryType);
|
||||
}
|
||||
|
||||
if (utf8decode) {
|
||||
try {
|
||||
data = utf8.decode(data);
|
||||
} catch (e) {
|
||||
return err;
|
||||
}
|
||||
}
|
||||
var type = data.charAt(0);
|
||||
|
||||
if (Number(type) != type || !packetslist[type]) {
|
||||
return err;
|
||||
}
|
||||
|
||||
if (data.length > 1) {
|
||||
return { type: packetslist[type], data: data.substring(1) };
|
||||
} else {
|
||||
return { type: packetslist[type] };
|
||||
}
|
||||
}
|
||||
|
||||
var asArray = new Uint8Array(data);
|
||||
var type = asArray[0];
|
||||
var rest = sliceBuffer(data, 1);
|
||||
if (Blob && binaryType === 'blob') {
|
||||
rest = new Blob([rest]);
|
||||
}
|
||||
return { type: packetslist[type], data: rest };
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a packet encoded in a base64 string
|
||||
*
|
||||
* @param {String} base64 encoded message
|
||||
* @return {Object} with `type` and `data` (if any)
|
||||
*/
|
||||
|
||||
exports.decodeBase64Packet = function(msg, binaryType) {
|
||||
var type = packetslist[msg.charAt(0)];
|
||||
if (!global.ArrayBuffer) {
|
||||
return { type: type, data: { base64: true, data: msg.substr(1) } };
|
||||
}
|
||||
|
||||
var data = base64encoder.decode(msg.substr(1));
|
||||
|
||||
if (binaryType === 'blob' && Blob) {
|
||||
data = new Blob([data]);
|
||||
}
|
||||
|
||||
return { type: type, data: data };
|
||||
};
|
||||
|
||||
/**
|
||||
* Encodes multiple messages (payload).
|
||||
*
|
||||
* <length>:data
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* 11:hello world2:hi
|
||||
*
|
||||
* If any contents are binary, they will be encoded as base64 strings. Base64
|
||||
* encoded strings are marked with a b before the length specifier
|
||||
*
|
||||
* @param {Array} packets
|
||||
* @api private
|
||||
*/
|
||||
|
||||
exports.encodePayload = function (packets, supportsBinary, callback) {
|
||||
if (typeof supportsBinary == 'function') {
|
||||
callback = supportsBinary;
|
||||
supportsBinary = null;
|
||||
}
|
||||
|
||||
var isBinary = hasBinary(packets);
|
||||
|
||||
if (supportsBinary && isBinary) {
|
||||
if (Blob && !dontSendBlobs) {
|
||||
return exports.encodePayloadAsBlob(packets, callback);
|
||||
}
|
||||
|
||||
return exports.encodePayloadAsArrayBuffer(packets, callback);
|
||||
}
|
||||
|
||||
if (!packets.length) {
|
||||
return callback('0:');
|
||||
}
|
||||
|
||||
function setLengthHeader(message) {
|
||||
return message.length + ':' + message;
|
||||
}
|
||||
|
||||
function encodeOne(packet, doneCallback) {
|
||||
exports.encodePacket(packet, !isBinary ? false : supportsBinary, true, function(message) {
|
||||
doneCallback(null, setLengthHeader(message));
|
||||
});
|
||||
}
|
||||
|
||||
map(packets, encodeOne, function(err, results) {
|
||||
return callback(results.join(''));
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Async array map using after
|
||||
*/
|
||||
|
||||
function map(ary, each, done) {
|
||||
var result = new Array(ary.length);
|
||||
var next = after(ary.length, done);
|
||||
|
||||
var eachWithIndex = function(i, el, cb) {
|
||||
each(el, function(error, msg) {
|
||||
result[i] = msg;
|
||||
cb(error, result);
|
||||
});
|
||||
};
|
||||
|
||||
for (var i = 0; i < ary.length; i++) {
|
||||
eachWithIndex(i, ary[i], next);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Decodes data when a payload is maybe expected. Possible binary contents are
|
||||
* decoded from their base64 representation
|
||||
*
|
||||
* @param {String} data, callback method
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.decodePayload = function (data, binaryType, callback) {
|
||||
if (typeof data != 'string') {
|
||||
return exports.decodePayloadAsBinary(data, binaryType, callback);
|
||||
}
|
||||
|
||||
if (typeof binaryType === 'function') {
|
||||
callback = binaryType;
|
||||
binaryType = null;
|
||||
}
|
||||
|
||||
var packet;
|
||||
if (data == '') {
|
||||
// parser error - ignoring payload
|
||||
return callback(err, 0, 1);
|
||||
}
|
||||
|
||||
var length = ''
|
||||
, n, msg;
|
||||
|
||||
for (var i = 0, l = data.length; i < l; i++) {
|
||||
var chr = data.charAt(i);
|
||||
|
||||
if (':' != chr) {
|
||||
length += chr;
|
||||
} else {
|
||||
if ('' == length || (length != (n = Number(length)))) {
|
||||
// parser error - ignoring payload
|
||||
return callback(err, 0, 1);
|
||||
}
|
||||
|
||||
msg = data.substr(i + 1, n);
|
||||
|
||||
if (length != msg.length) {
|
||||
// parser error - ignoring payload
|
||||
return callback(err, 0, 1);
|
||||
}
|
||||
|
||||
if (msg.length) {
|
||||
packet = exports.decodePacket(msg, binaryType, true);
|
||||
|
||||
if (err.type == packet.type && err.data == packet.data) {
|
||||
// parser error in individual packet - ignoring payload
|
||||
return callback(err, 0, 1);
|
||||
}
|
||||
|
||||
var ret = callback(packet, i + n, l);
|
||||
if (false === ret) return;
|
||||
}
|
||||
|
||||
// advance cursor
|
||||
i += n;
|
||||
length = '';
|
||||
}
|
||||
}
|
||||
|
||||
if (length != '') {
|
||||
// parser error - ignoring payload
|
||||
return callback(err, 0, 1);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Encodes multiple messages (payload) as binary.
|
||||
*
|
||||
* <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number
|
||||
* 255><data>
|
||||
*
|
||||
* Example:
|
||||
* 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers
|
||||
*
|
||||
* @param {Array} packets
|
||||
* @return {ArrayBuffer} encoded payload
|
||||
* @api private
|
||||
*/
|
||||
|
||||
exports.encodePayloadAsArrayBuffer = function(packets, callback) {
|
||||
if (!packets.length) {
|
||||
return callback(new ArrayBuffer(0));
|
||||
}
|
||||
|
||||
function encodeOne(packet, doneCallback) {
|
||||
exports.encodePacket(packet, true, true, function(data) {
|
||||
return doneCallback(null, data);
|
||||
});
|
||||
}
|
||||
|
||||
map(packets, encodeOne, function(err, encodedPackets) {
|
||||
var totalLength = encodedPackets.reduce(function(acc, p) {
|
||||
var len;
|
||||
if (typeof p === 'string'){
|
||||
len = p.length;
|
||||
} else {
|
||||
len = p.byteLength;
|
||||
}
|
||||
return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2
|
||||
}, 0);
|
||||
|
||||
var resultArray = new Uint8Array(totalLength);
|
||||
|
||||
var bufferIndex = 0;
|
||||
encodedPackets.forEach(function(p) {
|
||||
var isString = typeof p === 'string';
|
||||
var ab = p;
|
||||
if (isString) {
|
||||
var view = new Uint8Array(p.length);
|
||||
for (var i = 0; i < p.length; i++) {
|
||||
view[i] = p.charCodeAt(i);
|
||||
}
|
||||
ab = view.buffer;
|
||||
}
|
||||
|
||||
if (isString) { // not true binary
|
||||
resultArray[bufferIndex++] = 0;
|
||||
} else { // true binary
|
||||
resultArray[bufferIndex++] = 1;
|
||||
}
|
||||
|
||||
var lenStr = ab.byteLength.toString();
|
||||
for (var i = 0; i < lenStr.length; i++) {
|
||||
resultArray[bufferIndex++] = parseInt(lenStr[i]);
|
||||
}
|
||||
resultArray[bufferIndex++] = 255;
|
||||
|
||||
var view = new Uint8Array(ab);
|
||||
for (var i = 0; i < view.length; i++) {
|
||||
resultArray[bufferIndex++] = view[i];
|
||||
}
|
||||
});
|
||||
|
||||
return callback(resultArray.buffer);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Encode as Blob
|
||||
*/
|
||||
|
||||
exports.encodePayloadAsBlob = function(packets, callback) {
|
||||
function encodeOne(packet, doneCallback) {
|
||||
exports.encodePacket(packet, true, true, function(encoded) {
|
||||
var binaryIdentifier = new Uint8Array(1);
|
||||
binaryIdentifier[0] = 1;
|
||||
if (typeof encoded === 'string') {
|
||||
var view = new Uint8Array(encoded.length);
|
||||
for (var i = 0; i < encoded.length; i++) {
|
||||
view[i] = encoded.charCodeAt(i);
|
||||
}
|
||||
encoded = view.buffer;
|
||||
binaryIdentifier[0] = 0;
|
||||
}
|
||||
|
||||
var len = (encoded instanceof ArrayBuffer)
|
||||
? encoded.byteLength
|
||||
: encoded.size;
|
||||
|
||||
var lenStr = len.toString();
|
||||
var lengthAry = new Uint8Array(lenStr.length + 1);
|
||||
for (var i = 0; i < lenStr.length; i++) {
|
||||
lengthAry[i] = parseInt(lenStr[i]);
|
||||
}
|
||||
lengthAry[lenStr.length] = 255;
|
||||
|
||||
if (Blob) {
|
||||
var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);
|
||||
doneCallback(null, blob);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
map(packets, encodeOne, function(err, results) {
|
||||
return callback(new Blob(results));
|
||||
});
|
||||
};
|
||||
|
||||
/*
|
||||
* Decodes data when a payload is maybe expected. Strings are decoded by
|
||||
* interpreting each byte as a key code for entries marked to start with 0. See
|
||||
* description of encodePayloadAsBinary
|
||||
*
|
||||
* @param {ArrayBuffer} data, callback method
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.decodePayloadAsBinary = function (data, binaryType, callback) {
|
||||
if (typeof binaryType === 'function') {
|
||||
callback = binaryType;
|
||||
binaryType = null;
|
||||
}
|
||||
|
||||
var bufferTail = data;
|
||||
var buffers = [];
|
||||
|
||||
var numberTooLong = false;
|
||||
while (bufferTail.byteLength > 0) {
|
||||
var tailArray = new Uint8Array(bufferTail);
|
||||
var isString = tailArray[0] === 0;
|
||||
var msgLength = '';
|
||||
|
||||
for (var i = 1; ; i++) {
|
||||
if (tailArray[i] == 255) break;
|
||||
|
||||
if (msgLength.length > 310) {
|
||||
numberTooLong = true;
|
||||
break;
|
||||
}
|
||||
|
||||
msgLength += tailArray[i];
|
||||
}
|
||||
|
||||
if(numberTooLong) return callback(err, 0, 1);
|
||||
|
||||
bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);
|
||||
msgLength = parseInt(msgLength);
|
||||
|
||||
var msg = sliceBuffer(bufferTail, 0, msgLength);
|
||||
if (isString) {
|
||||
try {
|
||||
msg = String.fromCharCode.apply(null, new Uint8Array(msg));
|
||||
} catch (e) {
|
||||
// iPhone Safari doesn't let you apply to typed arrays
|
||||
var typed = new Uint8Array(msg);
|
||||
msg = '';
|
||||
for (var i = 0; i < typed.length; i++) {
|
||||
msg += String.fromCharCode(typed[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buffers.push(msg);
|
||||
bufferTail = sliceBuffer(bufferTail, msgLength);
|
||||
}
|
||||
|
||||
var total = buffers.length;
|
||||
buffers.forEach(function(buffer, i) {
|
||||
callback(exports.decodePacket(buffer, binaryType, true), i, total);
|
||||
});
|
||||
};
|
||||
460
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js
generated
vendored
Normal file
460
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js
generated
vendored
Normal file
@@ -0,0 +1,460 @@
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var utf8 = require('utf8');
|
||||
var after = require('after');
|
||||
var keys = require('./keys');
|
||||
|
||||
/**
|
||||
* Current protocol version.
|
||||
*/
|
||||
exports.protocol = 3;
|
||||
|
||||
/**
|
||||
* Packet types.
|
||||
*/
|
||||
|
||||
var packets = exports.packets = {
|
||||
open: 0 // non-ws
|
||||
, close: 1 // non-ws
|
||||
, ping: 2
|
||||
, pong: 3
|
||||
, message: 4
|
||||
, upgrade: 5
|
||||
, noop: 6
|
||||
};
|
||||
|
||||
var packetslist = keys(packets);
|
||||
|
||||
/**
|
||||
* Premade error packet.
|
||||
*/
|
||||
|
||||
var err = { type: 'error', data: 'parser error' };
|
||||
|
||||
/**
|
||||
* Encodes a packet.
|
||||
*
|
||||
* <packet type id> [ <data> ]
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* 5hello world
|
||||
* 3
|
||||
* 4
|
||||
*
|
||||
* Binary is encoded in an identical principle
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
|
||||
if ('function' == typeof supportsBinary) {
|
||||
callback = supportsBinary;
|
||||
supportsBinary = null;
|
||||
}
|
||||
|
||||
if ('function' == typeof utf8encode ) {
|
||||
callback = utf8encode;
|
||||
utf8encode = null;
|
||||
}
|
||||
|
||||
if (Buffer.isBuffer(packet.data)) {
|
||||
return encodeBuffer(packet, supportsBinary, callback);
|
||||
} else if (packet.data && (packet.data.buffer || packet.data) instanceof ArrayBuffer) {
|
||||
packet.data = arrayBufferToBuffer(packet.data);
|
||||
return encodeBuffer(packet, supportsBinary, callback);
|
||||
}
|
||||
|
||||
// Sending data as a utf-8 string
|
||||
var encoded = packets[packet.type];
|
||||
|
||||
// data fragment is optional
|
||||
if (undefined !== packet.data) {
|
||||
encoded += utf8encode ? utf8.encode(String(packet.data)) : String(packet.data);
|
||||
}
|
||||
|
||||
return callback('' + encoded);
|
||||
};
|
||||
|
||||
/**
|
||||
* Encode Buffer data
|
||||
*/
|
||||
|
||||
function encodeBuffer(packet, supportsBinary, callback) {
|
||||
var data = packet.data;
|
||||
if (!supportsBinary) {
|
||||
return exports.encodeBase64Packet(packet, callback);
|
||||
}
|
||||
|
||||
var typeBuffer = new Buffer(1);
|
||||
typeBuffer[0] = packets[packet.type];
|
||||
return callback(Buffer.concat([typeBuffer, data]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Encodes a packet with binary data in a base64 string
|
||||
*
|
||||
* @param {Object} packet, has `type` and `data`
|
||||
* @return {String} base64 encoded message
|
||||
*/
|
||||
|
||||
exports.encodeBase64Packet = function(packet, callback){
|
||||
if (!Buffer.isBuffer(packet.data)) {
|
||||
packet.data = arrayBufferToBuffer(packet.data);
|
||||
}
|
||||
|
||||
var message = 'b' + packets[packet.type];
|
||||
message += packet.data.toString('base64');
|
||||
return callback(message);
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a packet. Data also available as an ArrayBuffer if requested.
|
||||
*
|
||||
* @return {Object} with `type` and `data` (if any)
|
||||
* @api private
|
||||
*/
|
||||
|
||||
exports.decodePacket = function (data, binaryType, utf8decode) {
|
||||
// String data
|
||||
if (typeof data == 'string' || data === undefined) {
|
||||
if (data.charAt(0) == 'b') {
|
||||
return exports.decodeBase64Packet(data.substr(1), binaryType);
|
||||
}
|
||||
|
||||
var type = data.charAt(0);
|
||||
if (utf8decode) {
|
||||
try {
|
||||
data = utf8.decode(data);
|
||||
} catch (e) {
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
if (Number(type) != type || !packetslist[type]) {
|
||||
return err;
|
||||
}
|
||||
|
||||
if (data.length > 1) {
|
||||
return { type: packetslist[type], data: data.substring(1) };
|
||||
} else {
|
||||
return { type: packetslist[type] };
|
||||
}
|
||||
}
|
||||
|
||||
// Binary data
|
||||
if (binaryType === 'arraybuffer') {
|
||||
var type = data[0];
|
||||
var intArray = new Uint8Array(data.length - 1);
|
||||
for (var i = 1; i < data.length; i++) {
|
||||
intArray[i - 1] = data[i];
|
||||
}
|
||||
return { type: packetslist[type], data: intArray.buffer };
|
||||
}
|
||||
var type = data[0];
|
||||
return { type: packetslist[type], data: data.slice(1) };
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes a packet encoded in a base64 string.
|
||||
*
|
||||
* @param {String} base64 encoded message
|
||||
* @return {Object} with `type` and `data` (if any)
|
||||
*/
|
||||
|
||||
exports.decodeBase64Packet = function(msg, binaryType) {
|
||||
var type = packetslist[msg.charAt(0)];
|
||||
var data = new Buffer(msg.substr(1), 'base64');
|
||||
if (binaryType === 'arraybuffer') {
|
||||
var abv = new Uint8Array(data.length);
|
||||
for (var i = 0; i < abv.length; i++){
|
||||
abv[i] = data[i];
|
||||
}
|
||||
data = abv.buffer;
|
||||
}
|
||||
return { type: type, data: data };
|
||||
};
|
||||
|
||||
/**
|
||||
* Encodes multiple messages (payload).
|
||||
*
|
||||
* <length>:data
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* 11:hello world2:hi
|
||||
*
|
||||
* If any contents are binary, they will be encoded as base64 strings. Base64
|
||||
* encoded strings are marked with a b before the length specifier
|
||||
*
|
||||
* @param {Array} packets
|
||||
* @api private
|
||||
*/
|
||||
|
||||
exports.encodePayload = function (packets, supportsBinary, callback) {
|
||||
if (typeof supportsBinary == 'function') {
|
||||
callback = supportsBinary;
|
||||
supportsBinary = null;
|
||||
}
|
||||
|
||||
if (supportsBinary) {
|
||||
return exports.encodePayloadAsBinary(packets, callback);
|
||||
}
|
||||
|
||||
if (!packets.length) {
|
||||
return callback('0:');
|
||||
}
|
||||
|
||||
function setLengthHeader(message) {
|
||||
return message.length + ':' + message;
|
||||
}
|
||||
|
||||
function encodeOne(packet, doneCallback) {
|
||||
exports.encodePacket(packet, supportsBinary, true, function(message) {
|
||||
doneCallback(null, setLengthHeader(message));
|
||||
});
|
||||
}
|
||||
|
||||
map(packets, encodeOne, function(err, results) {
|
||||
return callback(results.join(''));
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Async array map using after
|
||||
*/
|
||||
|
||||
function map(ary, each, done) {
|
||||
var result = new Array(ary.length);
|
||||
var next = after(ary.length, done);
|
||||
|
||||
var eachWithIndex = function(i, el, cb) {
|
||||
each(el, function(error, msg) {
|
||||
result[i] = msg;
|
||||
cb(error, result);
|
||||
});
|
||||
};
|
||||
|
||||
for (var i = 0; i < ary.length; i++) {
|
||||
eachWithIndex(i, ary[i], next);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Decodes data when a payload is maybe expected. Possible binary contents are
|
||||
* decoded from their base64 representation
|
||||
*
|
||||
* @param {String} data, callback method
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.decodePayload = function (data, binaryType, callback) {
|
||||
if ('string' != typeof data) {
|
||||
return exports.decodePayloadAsBinary(data, binaryType, callback);
|
||||
}
|
||||
|
||||
if (typeof binaryType === 'function') {
|
||||
callback = binaryType;
|
||||
binaryType = null;
|
||||
}
|
||||
|
||||
var packet;
|
||||
if (data == '') {
|
||||
// parser error - ignoring payload
|
||||
return callback(err, 0, 1);
|
||||
}
|
||||
|
||||
var length = ''
|
||||
, n, msg;
|
||||
|
||||
for (var i = 0, l = data.length; i < l; i++) {
|
||||
var chr = data.charAt(i);
|
||||
|
||||
if (':' != chr) {
|
||||
length += chr;
|
||||
} else {
|
||||
if ('' == length || (length != (n = Number(length)))) {
|
||||
// parser error - ignoring payload
|
||||
return callback(err, 0, 1);
|
||||
}
|
||||
|
||||
msg = data.substr(i + 1, n);
|
||||
|
||||
if (length != msg.length) {
|
||||
// parser error - ignoring payload
|
||||
return callback(err, 0, 1);
|
||||
}
|
||||
|
||||
if (msg.length) {
|
||||
packet = exports.decodePacket(msg, binaryType, true);
|
||||
|
||||
if (err.type == packet.type && err.data == packet.data) {
|
||||
// parser error in individual packet - ignoring payload
|
||||
return callback(err, 0, 1);
|
||||
}
|
||||
|
||||
var ret = callback(packet, i + n, l);
|
||||
if (false === ret) return;
|
||||
}
|
||||
|
||||
// advance cursor
|
||||
i += n;
|
||||
length = '';
|
||||
}
|
||||
}
|
||||
|
||||
if (length != '') {
|
||||
// parser error - ignoring payload
|
||||
return callback(err, 0, 1);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* Converts a buffer to a utf8.js encoded string
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function bufferToString(buffer) {
|
||||
var str = '';
|
||||
for (var i = 0; i < buffer.length; i++) {
|
||||
str += String.fromCharCode(buffer[i]);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Converts a utf8.js encoded string to a buffer
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function stringToBuffer(string) {
|
||||
var buf = new Buffer(string.length);
|
||||
for (var i = 0; i < string.length; i++) {
|
||||
buf.writeUInt8(string.charCodeAt(i), i);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Converts an ArrayBuffer to a Buffer
|
||||
*
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function arrayBufferToBuffer(data) {
|
||||
// data is either an ArrayBuffer or ArrayBufferView.
|
||||
var array = new Uint8Array(data.buffer || data);
|
||||
var length = data.byteLength || data.length;
|
||||
var offset = data.byteOffset || 0;
|
||||
var buffer = new Buffer(length);
|
||||
|
||||
for (var i = 0; i < length; i++) {
|
||||
buffer[i] = array[offset + i];
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Encodes multiple messages (payload) as binary.
|
||||
*
|
||||
* <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number
|
||||
* 255><data>
|
||||
*
|
||||
* Example:
|
||||
* 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers
|
||||
*
|
||||
* @param {Array} packets
|
||||
* @return {Buffer} encoded payload
|
||||
* @api private
|
||||
*/
|
||||
|
||||
exports.encodePayloadAsBinary = function (packets, callback) {
|
||||
if (!packets.length) {
|
||||
return callback(new Buffer(0));
|
||||
}
|
||||
|
||||
function encodeOne(p, doneCallback) {
|
||||
exports.encodePacket(p, true, true, function(packet) {
|
||||
|
||||
if (typeof packet === 'string') {
|
||||
var encodingLength = '' + packet.length;
|
||||
var sizeBuffer = new Buffer(encodingLength.length + 2);
|
||||
sizeBuffer[0] = 0; // is a string (not true binary = 0)
|
||||
for (var i = 0; i < encodingLength.length; i++) {
|
||||
sizeBuffer[i + 1] = parseInt(encodingLength[i], 10);
|
||||
}
|
||||
sizeBuffer[sizeBuffer.length - 1] = 255;
|
||||
return doneCallback(null, Buffer.concat([sizeBuffer, stringToBuffer(packet)]));
|
||||
}
|
||||
|
||||
var encodingLength = '' + packet.length;
|
||||
var sizeBuffer = new Buffer(encodingLength.length + 2);
|
||||
sizeBuffer[0] = 1; // is binary (true binary = 1)
|
||||
for (var i = 0; i < encodingLength.length; i++) {
|
||||
sizeBuffer[i + 1] = parseInt(encodingLength[i], 10);
|
||||
}
|
||||
sizeBuffer[sizeBuffer.length - 1] = 255;
|
||||
doneCallback(null, Buffer.concat([sizeBuffer, packet]));
|
||||
});
|
||||
}
|
||||
|
||||
map(packets, encodeOne, function(err, results) {
|
||||
return callback(Buffer.concat(results));
|
||||
});
|
||||
};
|
||||
|
||||
/*
|
||||
* Decodes data when a payload is maybe expected. Strings are decoded by
|
||||
* interpreting each byte as a key code for entries marked to start with 0. See
|
||||
* description of encodePayloadAsBinary
|
||||
|
||||
* @param {Buffer} data, callback method
|
||||
* @api public
|
||||
*/
|
||||
|
||||
exports.decodePayloadAsBinary = function (data, binaryType, callback) {
|
||||
if (typeof binaryType === 'function') {
|
||||
callback = binaryType;
|
||||
binaryType = null;
|
||||
}
|
||||
|
||||
var bufferTail = data;
|
||||
var buffers = [];
|
||||
|
||||
while (bufferTail.length > 0) {
|
||||
var strLen = '';
|
||||
var isString = bufferTail[0] === 0;
|
||||
var numberTooLong = false;
|
||||
for (var i = 1; ; i++) {
|
||||
if (bufferTail[i] == 255) break;
|
||||
// 310 = char length of Number.MAX_VALUE
|
||||
if (strLen.length > 310) {
|
||||
numberTooLong = true;
|
||||
break;
|
||||
}
|
||||
strLen += '' + bufferTail[i];
|
||||
}
|
||||
if(numberTooLong) return callback(err, 0, 1);
|
||||
bufferTail = bufferTail.slice(strLen.length + 1);
|
||||
|
||||
var msgLength = parseInt(strLen, 10);
|
||||
|
||||
var msg = bufferTail.slice(1, msgLength + 1);
|
||||
if (isString) msg = bufferToString(msg);
|
||||
buffers.push(msg);
|
||||
bufferTail = bufferTail.slice(msgLength + 1);
|
||||
}
|
||||
|
||||
var total = buffers.length;
|
||||
buffers.forEach(function(buffer, i) {
|
||||
callback(exports.decodePacket(buffer, binaryType, true), i, total);
|
||||
});
|
||||
};
|
||||
19
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/keys.js
generated
vendored
Normal file
19
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/keys.js
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
|
||||
/**
|
||||
* Gets the keys for an object.
|
||||
*
|
||||
* @return {Array} keys
|
||||
* @api private
|
||||
*/
|
||||
|
||||
module.exports = Object.keys || function keys (obj){
|
||||
var arr = [];
|
||||
var has = Object.prototype.hasOwnProperty;
|
||||
|
||||
for (var i in obj) {
|
||||
if (has.call(obj, i)) {
|
||||
arr.push(i);
|
||||
}
|
||||
}
|
||||
return arr;
|
||||
};
|
||||
2
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/.npmignore
generated
vendored
Normal file
2
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/.npmignore
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
.monitor
|
||||
5
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/.travis.yml
generated
vendored
Normal file
5
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/.travis.yml
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- 0.6
|
||||
- 0.8
|
||||
- 0.9
|
||||
19
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/LICENCE
generated
vendored
Normal file
19
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/LICENCE
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
Copyright (c) 2011 Raynos.
|
||||
|
||||
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.
|
||||
75
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/README.md
generated
vendored
Normal file
75
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/README.md
generated
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
# After [![Build Status][1]][2]
|
||||
|
||||
Invoke callback after n calls
|
||||
|
||||
## Status: production ready
|
||||
|
||||
## Example
|
||||
|
||||
var after = require("after")
|
||||
, next = after(3, logItWorks)
|
||||
|
||||
next()
|
||||
next()
|
||||
next() // it works
|
||||
|
||||
function logItWorks() {
|
||||
console.log("it works!")
|
||||
}
|
||||
|
||||
## Example with error handling
|
||||
|
||||
var after = require("after")
|
||||
, next = after(3, logError)
|
||||
|
||||
next()
|
||||
next(new Error("oops")) // logs oops
|
||||
next() // does nothing
|
||||
|
||||
function logError(err) {
|
||||
console.log(err)
|
||||
}
|
||||
|
||||
## After < 0.6.0
|
||||
|
||||
Older versions of after had iterators and flows in them.
|
||||
|
||||
These have been replaced with seperate modules
|
||||
|
||||
- [iterators][8]
|
||||
- [composite][9]
|
||||
|
||||
## Installation
|
||||
|
||||
`npm install after`
|
||||
|
||||
## Tests
|
||||
|
||||
`npm test`
|
||||
|
||||
## Blog post
|
||||
|
||||
- [Flow control in node.js][3]
|
||||
|
||||
## Examples :
|
||||
|
||||
- [Determining the end of asynchronous operations][4]
|
||||
- [In javascript what are best practices for executing multiple asynchronous functions][5]
|
||||
- [JavaScript performance long running tasks][6]
|
||||
- [Synchronous database queries with node.js][7]
|
||||
|
||||
## Contributors
|
||||
|
||||
- Raynos
|
||||
|
||||
## MIT Licenced
|
||||
|
||||
[1]: https://secure.travis-ci.org/Raynos/after.png
|
||||
[2]: http://travis-ci.org/Raynos/after
|
||||
[3]: http://raynos.org/blog/2/Flow-control-in-node.js
|
||||
[4]: http://stackoverflow.com/questions/6852059/determining-the-end-of-asynchronous-operations-javascript/6852307#6852307
|
||||
[5]: http://stackoverflow.com/questions/6869872/in-javascript-what-are-best-practices-for-executing-multiple-asynchronous-functi/6870031#6870031
|
||||
[6]: http://stackoverflow.com/questions/6864397/javascript-performance-long-running-tasks/6889419#6889419
|
||||
[7]: http://stackoverflow.com/questions/6597493/synchronous-database-queries-with-node-js/6620091#6620091
|
||||
[8]: http://github.com/Raynos/iterators
|
||||
[9]: http://github.com/Raynos/composite
|
||||
28
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/index.js
generated
vendored
Normal file
28
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/index.js
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
module.exports = after
|
||||
|
||||
function after(count, callback, err_cb) {
|
||||
var bail = false
|
||||
err_cb = err_cb || noop
|
||||
proxy.count = count
|
||||
|
||||
return (count === 0) ? callback() : proxy
|
||||
|
||||
function proxy(err, result) {
|
||||
if (proxy.count <= 0) {
|
||||
throw new Error('after called too many times')
|
||||
}
|
||||
--proxy.count
|
||||
|
||||
// after first error, rest are passed to err_cb
|
||||
if (err) {
|
||||
bail = true
|
||||
callback(err)
|
||||
// future error callbacks will go to error handler
|
||||
callback = err_cb
|
||||
} else if (proxy.count === 0 && !bail) {
|
||||
callback(null, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function noop() {}
|
||||
62
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/package.json
generated
vendored
Normal file
62
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/package.json
generated
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"name": "after",
|
||||
"description": "after - tiny flow control",
|
||||
"version": "0.8.1",
|
||||
"author": {
|
||||
"name": "Raynos",
|
||||
"email": "raynos2@gmail.com"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Raynos",
|
||||
"email": "raynos2@gmail.com",
|
||||
"url": "http://raynos.org"
|
||||
}
|
||||
],
|
||||
"scripts": {
|
||||
"test": "mocha --ui tdd --reporter spec test/*.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"mocha": "~1.8.1"
|
||||
},
|
||||
"keywords": [
|
||||
"flowcontrol",
|
||||
"after",
|
||||
"flow",
|
||||
"control",
|
||||
"arch"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/Raynos/after.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/Raynos/after/issues"
|
||||
},
|
||||
"_id": "after@0.8.1",
|
||||
"dist": {
|
||||
"shasum": "ab5d4fb883f596816d3515f8f791c0af486dd627",
|
||||
"tarball": "http://registry.npmjs.org/after/-/after-0.8.1.tgz"
|
||||
},
|
||||
"_from": "after@0.8.1",
|
||||
"_npmVersion": "1.2.25",
|
||||
"_npmUser": {
|
||||
"name": "raynos",
|
||||
"email": "raynos2@gmail.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "raynos",
|
||||
"email": "raynos2@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "shtylman",
|
||||
"email": "shtylman@gmail.com"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "ab5d4fb883f596816d3515f8f791c0af486dd627",
|
||||
"_resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz",
|
||||
"readme": "ERROR: No README data found!",
|
||||
"homepage": "https://github.com/Raynos/after"
|
||||
}
|
||||
120
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/test/after-test.js
generated
vendored
Normal file
120
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/test/after-test.js
generated
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
/*global suite, test*/
|
||||
|
||||
var assert = require("assert")
|
||||
, after = require("../")
|
||||
|
||||
test("exists", function () {
|
||||
assert(typeof after === "function", "after is not a function")
|
||||
})
|
||||
|
||||
test("after when called with 0 invokes", function (done) {
|
||||
after(0, done)
|
||||
});
|
||||
|
||||
test("after 1", function (done) {
|
||||
var next = after(1, done)
|
||||
next()
|
||||
})
|
||||
|
||||
test("after 5", function (done) {
|
||||
var next = after(5, done)
|
||||
, i = 5
|
||||
|
||||
while (i--) {
|
||||
next()
|
||||
}
|
||||
})
|
||||
|
||||
test("manipulate count", function (done) {
|
||||
var next = after(1, done)
|
||||
, i = 5
|
||||
|
||||
next.count = i
|
||||
while (i--) {
|
||||
next()
|
||||
}
|
||||
})
|
||||
|
||||
test("after terminates on error", function (done) {
|
||||
var next = after(2, function(err) {
|
||||
assert.equal(err.message, 'test');
|
||||
done();
|
||||
})
|
||||
next(new Error('test'))
|
||||
next(new Error('test2'))
|
||||
})
|
||||
|
||||
test('gee', function(done) {
|
||||
done = after(2, done)
|
||||
|
||||
function cb(err) {
|
||||
assert.equal(err.message, 1);
|
||||
done()
|
||||
}
|
||||
|
||||
var next = after(3, cb, function(err) {
|
||||
assert.equal(err.message, 2)
|
||||
done()
|
||||
});
|
||||
|
||||
next()
|
||||
next(new Error(1))
|
||||
next(new Error(2))
|
||||
})
|
||||
|
||||
test('eee', function(done) {
|
||||
done = after(3, done)
|
||||
|
||||
function cb(err) {
|
||||
assert.equal(err.message, 1);
|
||||
done()
|
||||
}
|
||||
|
||||
var next = after(3, cb, function(err) {
|
||||
assert.equal(err.message, 2)
|
||||
done()
|
||||
});
|
||||
|
||||
next(new Error(1))
|
||||
next(new Error(2))
|
||||
next(new Error(2))
|
||||
})
|
||||
|
||||
test('gge', function(done) {
|
||||
function cb(err) {
|
||||
assert.equal(err.message, 1);
|
||||
done()
|
||||
}
|
||||
|
||||
var next = after(3, cb, function(err) {
|
||||
// should not happen
|
||||
assert.ok(false);
|
||||
});
|
||||
|
||||
next()
|
||||
next()
|
||||
next(new Error(1))
|
||||
})
|
||||
|
||||
test('egg', function(done) {
|
||||
function cb(err) {
|
||||
assert.equal(err.message, 1);
|
||||
done()
|
||||
}
|
||||
|
||||
var next = after(3, cb, function(err) {
|
||||
// should not happen
|
||||
assert.ok(false);
|
||||
});
|
||||
|
||||
next(new Error(1))
|
||||
next()
|
||||
next()
|
||||
})
|
||||
|
||||
test('throws on too many calls', function(done) {
|
||||
var next = after(1, done);
|
||||
next()
|
||||
assert.throws(next, /after called too many times/);
|
||||
});
|
||||
|
||||
17
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/.npmignore
generated
vendored
Normal file
17
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/.npmignore
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
lib-cov
|
||||
lcov.info
|
||||
*.seed
|
||||
*.log
|
||||
*.csv
|
||||
*.dat
|
||||
*.out
|
||||
*.pid
|
||||
*.gz
|
||||
|
||||
pids
|
||||
logs
|
||||
results
|
||||
build
|
||||
.grunt
|
||||
|
||||
node_modules
|
||||
8
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/Makefile
generated
vendored
Normal file
8
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/Makefile
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
REPORTER = dot
|
||||
|
||||
test:
|
||||
@./node_modules/.bin/mocha \
|
||||
--reporter $(REPORTER)
|
||||
|
||||
.PHONY: test
|
||||
17
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/README.md
generated
vendored
Normal file
17
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/README.md
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# How to
|
||||
```javascript
|
||||
var sliceBuffer = require('arraybuffer.slice');
|
||||
var ab = (new Int8Array(5)).buffer;
|
||||
var sliced = sliceBuffer(ab, 1, 3);
|
||||
sliced = sliceBuffer(ab, 1);
|
||||
```
|
||||
|
||||
# Licence (MIT)
|
||||
Copyright (C) 2013 Rase-
|
||||
|
||||
|
||||
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.
|
||||
29
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/index.js
generated
vendored
Normal file
29
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/index.js
generated
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* An abstraction for slicing an arraybuffer even when
|
||||
* ArrayBuffer.prototype.slice is not supported
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
module.exports = function(arraybuffer, start, end) {
|
||||
var bytes = arraybuffer.byteLength;
|
||||
start = start || 0;
|
||||
end = end || bytes;
|
||||
|
||||
if (arraybuffer.slice) { return arraybuffer.slice(start, end); }
|
||||
|
||||
if (start < 0) { start += bytes; }
|
||||
if (end < 0) { end += bytes; }
|
||||
if (end > bytes) { end = bytes; }
|
||||
|
||||
if (start >= bytes || start >= end || bytes === 0) {
|
||||
return new ArrayBuffer(0);
|
||||
}
|
||||
|
||||
var abv = new Uint8Array(arraybuffer);
|
||||
var result = new Uint8Array(end - start);
|
||||
for (var i = start, ii = 0; i < end; i++, ii++) {
|
||||
result[ii] = abv[i];
|
||||
}
|
||||
return result.buffer;
|
||||
};
|
||||
39
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/package.json
generated
vendored
Normal file
39
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/package.json
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"name": "arraybuffer.slice",
|
||||
"description": "Exports a function for slicing ArrayBuffers (no polyfilling)",
|
||||
"version": "0.0.6",
|
||||
"homepage": "https://github.com/rase-/arraybuffer.slice",
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"mocha": "1.17.1",
|
||||
"expect.js": "0.2.0"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git@github.com:rase-/arraybuffer.slice.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/rase-/arraybuffer.slice/issues"
|
||||
},
|
||||
"_id": "arraybuffer.slice@0.0.6",
|
||||
"dist": {
|
||||
"shasum": "f33b2159f0532a3f3107a272c0ccfbd1ad2979ca",
|
||||
"tarball": "http://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz"
|
||||
},
|
||||
"_from": "arraybuffer.slice@0.0.6",
|
||||
"_npmVersion": "1.3.5",
|
||||
"_npmUser": {
|
||||
"name": "rase-",
|
||||
"email": "tonykovanen@hotmail.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "rase-",
|
||||
"email": "tonykovanen@hotmail.com"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "f33b2159f0532a3f3107a272c0ccfbd1ad2979ca",
|
||||
"_resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
|
||||
"readme": "ERROR: No README data found!"
|
||||
}
|
||||
227
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/test/slice-buffer.js
generated
vendored
Normal file
227
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/test/slice-buffer.js
generated
vendored
Normal file
@@ -0,0 +1,227 @@
|
||||
/*
|
||||
* Test dependencies
|
||||
*/
|
||||
|
||||
var sliceBuffer = require('../index.js');
|
||||
var expect = require('expect.js');
|
||||
|
||||
/**
|
||||
* Tests
|
||||
*/
|
||||
|
||||
describe('sliceBuffer', function() {
|
||||
describe('using standard slice', function() {
|
||||
it('should slice correctly with only start provided', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
|
||||
var sliced = sliceBuffer(abv.buffer, 3);
|
||||
var sabv = new Uint8Array(sliced);
|
||||
for (var i = 3, ii = 0; i < abv.length; i++, ii++) {
|
||||
expect(abv[i]).to.equal(sabv[ii]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should slice correctly with start and end provided', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
|
||||
var sliced = sliceBuffer(abv.buffer, 3, 8);
|
||||
var sabv = new Uint8Array(sliced);
|
||||
for (var i = 3, ii = 0; i < 8; i++, ii++) {
|
||||
expect(abv[i]).to.equal(sabv[ii]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should slice correctly with negative start', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
|
||||
var sliced = sliceBuffer(abv.buffer, -3);
|
||||
var sabv = new Uint8Array(sliced);
|
||||
for (var i = abv.length - 3, ii = 0; i < abv.length; i++, ii++) {
|
||||
expect(abv[i]).to.equal(sabv[ii]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should slice correctly with negative end', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
|
||||
var sliced = sliceBuffer(abv.buffer, 0, -3);
|
||||
var sabv = new Uint8Array(sliced);
|
||||
for (var i = 0, ii = 0; i < abv.length - 3; i++, ii++) {
|
||||
expect(abv[i]).to.equal(sabv[ii]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should slice correctly with negative start and end', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
|
||||
var sliced = sliceBuffer(abv.buffer, -6, -3);
|
||||
var sabv = new Uint8Array(sliced);
|
||||
for (var i = abv.length - 6, ii = 0; i < abv.length - 3; i++, ii++) {
|
||||
expect(abv[i]).to.equal(sabv[ii]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should slice correctly with equal start and end', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
|
||||
var sliced = sliceBuffer(abv.buffer, 1, 1);
|
||||
expect(sliced.byteLength).to.equal(0);
|
||||
});
|
||||
|
||||
it('should slice correctly when end larger than buffer', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
|
||||
var sliced = sliceBuffer(abv.buffer, 0, 100);
|
||||
expect(new Uint8Array(sliced)).to.eql(abv);
|
||||
});
|
||||
|
||||
it('shoud slice correctly when start larger than end', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
|
||||
var sliced = sliceBuffer(abv.buffer, 6, 5);
|
||||
expect(sliced.byteLength).to.equal(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('using fallback', function() {
|
||||
it('should slice correctly with only start provided', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
var ab = abv.buffer;
|
||||
ab.slice = undefined;
|
||||
|
||||
var sliced = sliceBuffer(ab, 3);
|
||||
var sabv = new Uint8Array(sliced);
|
||||
for (var i = 3, ii = 0; i < abv.length; i++, ii++) {
|
||||
expect(abv[i]).to.equal(sabv[ii]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should slice correctly with start and end provided', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
var ab = abv.buffer;
|
||||
ab.slice = undefined;
|
||||
|
||||
|
||||
var sliced = sliceBuffer(ab, 3, 8);
|
||||
var sabv = new Uint8Array(sliced);
|
||||
for (var i = 3, ii = 0; i < 8; i++, ii++) {
|
||||
expect(abv[i]).to.equal(sabv[ii]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should slice correctly with negative start', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
var ab = abv.buffer;
|
||||
ab.slice = undefined;
|
||||
|
||||
|
||||
var sliced = sliceBuffer(ab, -3);
|
||||
var sabv = new Uint8Array(sliced);
|
||||
for (var i = abv.length - 3, ii = 0; i < abv.length; i++, ii++) {
|
||||
expect(abv[i]).to.equal(sabv[ii]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should slice correctly with negative end', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
var ab = abv.buffer;
|
||||
ab.slice = undefined;
|
||||
|
||||
var sliced = sliceBuffer(ab, 0, -3);
|
||||
var sabv = new Uint8Array(sliced);
|
||||
for (var i = 0, ii = 0; i < abv.length - 3; i++, ii++) {
|
||||
expect(abv[i]).to.equal(sabv[ii]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should slice correctly with negative start and end', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
var ab = abv.buffer;
|
||||
ab.slice = undefined;
|
||||
|
||||
var sliced = sliceBuffer(ab, -6, -3);
|
||||
var sabv = new Uint8Array(sliced);
|
||||
for (var i = abv.length - 6, ii = 0; i < abv.length - 3; i++, ii++) {
|
||||
expect(abv[i]).to.equal(sabv[ii]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should slice correctly with equal start and end', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
var ab = abv.buffer;
|
||||
ab.slice = undefined;
|
||||
|
||||
var sliced = sliceBuffer(ab, 1, 1);
|
||||
expect(sliced.byteLength).to.equal(0);
|
||||
});
|
||||
|
||||
it('should slice correctly when end larger than buffer', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
var ab = abv.buffer;
|
||||
ab.slice = undefined;
|
||||
|
||||
var sliced = sliceBuffer(ab, 0, 100);
|
||||
var sabv = new Uint8Array(sliced);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
expect(abv[i]).to.equal(sabv[i]);
|
||||
}
|
||||
});
|
||||
|
||||
it('shoud slice correctly when start larger than end', function() {
|
||||
var abv = new Uint8Array(10);
|
||||
for (var i = 0; i < abv.length; i++) {
|
||||
abv[i] = i;
|
||||
}
|
||||
var ab = abv.buffer;
|
||||
ab.slice = undefined;
|
||||
|
||||
var sliced = sliceBuffer(ab, 6, 5);
|
||||
expect(sliced.byteLength).to.equal(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
1
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.npmignore
generated
vendored
Normal file
1
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.npmignore
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/node_modules/
|
||||
6
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.travis.yml
generated
vendored
Normal file
6
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.travis.yml
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
language: node_js
|
||||
node_js:
|
||||
- '0.10'
|
||||
before_script:
|
||||
- npm install
|
||||
22
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/LICENSE-MIT
generated
vendored
Normal file
22
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/LICENSE-MIT
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
Copyright (c) 2012 Niklas von Hertzen
|
||||
|
||||
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.
|
||||
23
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/README.md
generated
vendored
Normal file
23
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/README.md
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
# base64-arraybuffer
|
||||
|
||||
[](https://travis-ci.org/niklasvh/base64-arraybuffer)
|
||||
|
||||
Encode/decode base64 data into ArrayBuffers
|
||||
|
||||
## Getting Started
|
||||
Install the module with: `npm install base64-arraybuffer`
|
||||
|
||||
## API
|
||||
The library encodes and decodes base64 to and from ArrayBuffers
|
||||
|
||||
- __encode(buffer)__ - Encodes `ArrayBuffer` into base64 string
|
||||
- __decode(str)__ - Decodes base64 string to `ArrayBuffer`
|
||||
|
||||
## Release History
|
||||
|
||||
- 0.1.2 - Fix old format of typed arrays
|
||||
- 0.1.0 - Initial version, basic decode/encode base64 to and from ArrayBuffer
|
||||
|
||||
## License
|
||||
Copyright (c) 2012 Niklas von Hertzen
|
||||
Licensed under the MIT license.
|
||||
23
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/README.md~
generated
vendored
Normal file
23
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/README.md~
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
# base64-arraybuffer
|
||||
|
||||
[](https://travis-ci.org/niklasvh/base64-arraybuffer)
|
||||
|
||||
Encode/decode base64 data into ArrayBuffers
|
||||
|
||||
## Getting Started
|
||||
Install the module with: `npm install base64-arraybuffer`
|
||||
|
||||
## API
|
||||
The library encodes and decodes base64 to and from ArrayBuffers
|
||||
|
||||
- __encode(buffer)__ - Encodes `ArrayBuffer` into base64 string
|
||||
- __decode(str)__ - Decodes base64 string to `ArrayBuffer`
|
||||
|
||||
## Release History
|
||||
|
||||
- 0.1.2 - Fix old format of typed arrays
|
||||
- 0.1.0 - Initial version, basic decode/encode base64 to and from ArrayBuffer
|
||||
|
||||
## License
|
||||
Copyright (c) 2012 Niklas von Hertzen
|
||||
Licensed under the MIT license.
|
||||
39
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/grunt.js
generated
vendored
Normal file
39
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/grunt.js
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
module.exports = function(grunt) {
|
||||
"use strict";
|
||||
// Project configuration.
|
||||
grunt.initConfig({
|
||||
pkg: '<json:package.json>',
|
||||
test: {
|
||||
files: ['test/**/*.js']
|
||||
},
|
||||
lint: {
|
||||
files: ['grunt.js', 'lib/**/*.js', 'test/**/*.js']
|
||||
},
|
||||
watch: {
|
||||
files: '<config:lint.files>',
|
||||
tasks: 'default'
|
||||
},
|
||||
jshint: {
|
||||
options: {
|
||||
curly: true,
|
||||
eqeqeq: true,
|
||||
immed: true,
|
||||
latedef: true,
|
||||
newcap: true,
|
||||
noarg: true,
|
||||
sub: true,
|
||||
undef: true,
|
||||
boss: true,
|
||||
eqnull: true,
|
||||
node: true
|
||||
},
|
||||
globals: {
|
||||
exports: true
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Default task.
|
||||
grunt.registerTask('default', 'test');
|
||||
|
||||
};
|
||||
59
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js
generated
vendored
Normal file
59
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js
generated
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* base64-arraybuffer
|
||||
* https://github.com/niklasvh/base64-arraybuffer
|
||||
*
|
||||
* Copyright (c) 2012 Niklas von Hertzen
|
||||
* Licensed under the MIT license.
|
||||
*/
|
||||
(function(chars){
|
||||
"use strict";
|
||||
|
||||
exports.encode = function(arraybuffer) {
|
||||
var bytes = new Uint8Array(arraybuffer),
|
||||
i, len = bytes.length, base64 = "";
|
||||
|
||||
for (i = 0; i < len; i+=3) {
|
||||
base64 += chars[bytes[i] >> 2];
|
||||
base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
|
||||
base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
|
||||
base64 += chars[bytes[i + 2] & 63];
|
||||
}
|
||||
|
||||
if ((len % 3) === 2) {
|
||||
base64 = base64.substring(0, base64.length - 1) + "=";
|
||||
} else if (len % 3 === 1) {
|
||||
base64 = base64.substring(0, base64.length - 2) + "==";
|
||||
}
|
||||
|
||||
return base64;
|
||||
};
|
||||
|
||||
exports.decode = function(base64) {
|
||||
var bufferLength = base64.length * 0.75,
|
||||
len = base64.length, i, p = 0,
|
||||
encoded1, encoded2, encoded3, encoded4;
|
||||
|
||||
if (base64[base64.length - 1] === "=") {
|
||||
bufferLength--;
|
||||
if (base64[base64.length - 2] === "=") {
|
||||
bufferLength--;
|
||||
}
|
||||
}
|
||||
|
||||
var arraybuffer = new ArrayBuffer(bufferLength),
|
||||
bytes = new Uint8Array(arraybuffer);
|
||||
|
||||
for (i = 0; i < len; i+=4) {
|
||||
encoded1 = chars.indexOf(base64[i]);
|
||||
encoded2 = chars.indexOf(base64[i+1]);
|
||||
encoded3 = chars.indexOf(base64[i+2]);
|
||||
encoded4 = chars.indexOf(base64[i+3]);
|
||||
|
||||
bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
|
||||
bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
|
||||
bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
|
||||
}
|
||||
|
||||
return arraybuffer;
|
||||
};
|
||||
})("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
|
||||
56
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/package.json
generated
vendored
Normal file
56
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/package.json
generated
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"name": "base64-arraybuffer",
|
||||
"description": "Encode/decode base64 data into ArrayBuffers",
|
||||
"version": "0.1.2",
|
||||
"homepage": "https://github.com/niklasvh/base64-arraybuffer",
|
||||
"author": {
|
||||
"name": "Niklas von Hertzen",
|
||||
"email": "niklasvh@gmail.com",
|
||||
"url": "http://hertzen.com"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/niklasvh/base64-arraybuffer"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/niklasvh/base64-arraybuffer/issues"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "https://github.com/niklasvh/base64-arraybuffer/blob/master/LICENSE-MIT"
|
||||
}
|
||||
],
|
||||
"main": "lib/base64-arraybuffer",
|
||||
"engines": {
|
||||
"node": ">= 0.6.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "grunt test"
|
||||
},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.3.17"
|
||||
},
|
||||
"keywords": [],
|
||||
"_id": "base64-arraybuffer@0.1.2",
|
||||
"dist": {
|
||||
"shasum": "474df4a9f2da24e05df3158c3b1db3c3cd46a154",
|
||||
"tarball": "http://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz"
|
||||
},
|
||||
"_from": "base64-arraybuffer@0.1.2",
|
||||
"_npmVersion": "1.3.21",
|
||||
"_npmUser": {
|
||||
"name": "niklasvh",
|
||||
"email": "niklasvh@gmail.com"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "niklasvh",
|
||||
"email": "niklasvh@gmail.com"
|
||||
}
|
||||
],
|
||||
"directories": {},
|
||||
"_shasum": "474df4a9f2da24e05df3158c3b1db3c3cd46a154",
|
||||
"_resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz",
|
||||
"readme": "ERROR: No README data found!"
|
||||
}
|
||||
35
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/package.json~
generated
vendored
Normal file
35
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/package.json~
generated
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "base64-arraybuffer",
|
||||
"description": "Encode/decode base64 data into ArrayBuffers",
|
||||
"version": "0.1.1",
|
||||
"homepage": "https://github.com/niklasvh/base64-arraybuffer",
|
||||
"author": {
|
||||
"name": "Niklas von Hertzen",
|
||||
"email": "niklasvh@gmail.com",
|
||||
"url": "http://hertzen.com"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/niklasvh/base64-arraybuffer"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/niklasvh/base64-arraybuffer/issues"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "https://github.com/niklasvh/base64-arraybuffer/blob/master/LICENSE-MIT"
|
||||
}
|
||||
],
|
||||
"main": "lib/base64-arraybuffer",
|
||||
"engines": {
|
||||
"node": ">= 0.6.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "grunt test"
|
||||
},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.3.17"
|
||||
},
|
||||
"keywords": []
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
(function(){
|
||||
"use strict";
|
||||
var base64_arraybuffer = require('../lib/base64-arraybuffer.js');
|
||||
|
||||
/*
|
||||
======== A Handy Little Nodeunit Reference ========
|
||||
https://github.com/caolan/nodeunit
|
||||
|
||||
Test methods:
|
||||
test.expect(numAssertions)
|
||||
test.done()
|
||||
Test assertions:
|
||||
test.ok(value, [message])
|
||||
test.equal(actual, expected, [message])
|
||||
test.notEqual(actual, expected, [message])
|
||||
test.deepEqual(actual, expected, [message])
|
||||
test.notDeepEqual(actual, expected, [message])
|
||||
test.strictEqual(actual, expected, [message])
|
||||
test.notStrictEqual(actual, expected, [message])
|
||||
test.throws(block, [error], [message])
|
||||
test.doesNotThrow(block, [error], [message])
|
||||
test.ifError(value)
|
||||
*/
|
||||
|
||||
|
||||
function stringArrayBuffer(str) {
|
||||
var buffer = new ArrayBuffer(str.length);
|
||||
var bytes = new Uint8Array(buffer);
|
||||
|
||||
str.split('').forEach(function(str, i) {
|
||||
bytes[i] = str.charCodeAt(0);
|
||||
});
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
function testArrayBuffers(buffer1, buffer2) {
|
||||
var len1 = buffer1.byteLength,
|
||||
len2 = buffer2.byteLength;
|
||||
if (len1 !== len2) {
|
||||
console.log(buffer1, buffer2);
|
||||
return false;
|
||||
}
|
||||
|
||||
for (var i = 0; i < len1; i++) {
|
||||
if (buffer1[i] !== buffer1[i]) {
|
||||
console.log(i, buffer1, buffer2);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
exports['base64tests'] = {
|
||||
'encode': function(test) {
|
||||
test.expect(4);
|
||||
|
||||
test.equal(base64_arraybuffer.encode(stringArrayBuffer("Hello world")), "SGVsbG8gd29ybGQ=", 'encode "Hello world"');
|
||||
test.equal(base64_arraybuffer.encode(stringArrayBuffer("Man")), 'TWFu', 'encode "Man"');
|
||||
test.equal(base64_arraybuffer.encode(stringArrayBuffer("Ma")), "TWE=", 'encode "Ma"');
|
||||
test.equal(base64_arraybuffer.encode(stringArrayBuffer("Hello worlds!")), "SGVsbG8gd29ybGRzIQ==", 'encode "Hello worlds!"');
|
||||
test.done();
|
||||
},
|
||||
'decode': function(test) {
|
||||
test.expect(3);
|
||||
test.ok(testArrayBuffers(base64_arraybuffer.decode("TWFu"), stringArrayBuffer("Man")), 'decode "Man"');
|
||||
test.ok(testArrayBuffers(base64_arraybuffer.decode("SGVsbG8gd29ybGQ="), stringArrayBuffer("Hello world")), 'decode "Hello world"');
|
||||
test.ok(testArrayBuffers(base64_arraybuffer.decode("SGVsbG8gd29ybGRzIQ=="), stringArrayBuffer("Hello worlds!")), 'decode "Hello worlds!"');
|
||||
test.done();
|
||||
}
|
||||
};
|
||||
})();
|
||||
2
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/.npmignore
generated
vendored
Normal file
2
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/.npmignore
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
blob.js
|
||||
14
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/.zuul.yml
generated
vendored
Normal file
14
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/.zuul.yml
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
ui: mocha-bdd
|
||||
browsers:
|
||||
- name: chrome
|
||||
version: 8..latest
|
||||
- name: firefox
|
||||
version: 7..latest
|
||||
- name: safari
|
||||
version: 6..latest
|
||||
- name: opera
|
||||
version: 12.1..latest
|
||||
- name: ie
|
||||
version: 10..latest
|
||||
- name: android
|
||||
version: latest
|
||||
14
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/Makefile
generated
vendored
Normal file
14
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/Makefile
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
REPORTER = dot
|
||||
|
||||
build: blob.js
|
||||
|
||||
blob.js:
|
||||
@./node_modules/.bin/browserify --standalone blob index.js > blob.js
|
||||
|
||||
test:
|
||||
@./node_modules/.bin/zuul -- test/index.js
|
||||
|
||||
clean:
|
||||
rm blob.js
|
||||
|
||||
.PHONY: test blob.js
|
||||
14
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/README.md
generated
vendored
Normal file
14
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/README.md
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
Blob
|
||||
====
|
||||
|
||||
A module that exports a constructor that uses window.Blob when available, and a BlobBuilder with any vendor prefix in other cases. If neither is available, it exports undefined.
|
||||
|
||||
Usage:
|
||||
|
||||
```javascript
|
||||
var Blob = require('blob');
|
||||
var b = new Blob(['hi', 'constructing', 'a', 'blob']);
|
||||
```
|
||||
|
||||
## Licence
|
||||
MIT
|
||||
96
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/index.js
generated
vendored
Normal file
96
node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/index.js
generated
vendored
Normal file
@@ -0,0 +1,96 @@
|
||||
/**
|
||||
* Create a blob builder even when vendor prefixes exist
|
||||
*/
|
||||
|
||||
var BlobBuilder = global.BlobBuilder
|
||||
|| global.WebKitBlobBuilder
|
||||
|| global.MSBlobBuilder
|
||||
|| global.MozBlobBuilder;
|
||||
|
||||
/**
|
||||
* Check if Blob constructor is supported
|
||||
*/
|
||||
|
||||
var blobSupported = (function() {
|
||||
try {
|
||||
var a = new Blob(['hi']);
|
||||
return a.size === 2;
|
||||
} catch(e) {
|
||||
return false;
|
||||
}
|
||||
})();
|
||||
|
||||
/**
|
||||
* Check if Blob constructor supports ArrayBufferViews
|
||||
* Fails in Safari 6, so we need to map to ArrayBuffers there.
|
||||
*/
|
||||
|
||||
var blobSupportsArrayBufferView = blobSupported && (function() {
|
||||
try {
|
||||
var b = new Blob([new Uint8Array([1,2])]);
|
||||
return b.size === 2;
|
||||
} catch(e) {
|
||||
return false;
|
||||
}
|
||||
})();
|
||||
|
||||
/**
|
||||
* Check if BlobBuilder is supported
|
||||
*/
|
||||
|
||||
var blobBuilderSupported = BlobBuilder
|
||||
&& BlobBuilder.prototype.append
|
||||
&& BlobBuilder.prototype.getBlob;
|
||||
|
||||
/**
|
||||
* Helper function that maps ArrayBufferViews to ArrayBuffers
|
||||
* Used by BlobBuilder constructor and old browsers that didn't
|
||||
* support it in the Blob constructor.
|
||||
*/
|
||||
|
||||
function mapArrayBufferViews(ary) {
|
||||
for (var i = 0; i < ary.length; i++) {
|
||||
var chunk = ary[i];
|
||||
if (chunk.buffer instanceof ArrayBuffer) {
|
||||
var buf = chunk.buffer;
|
||||
|
||||
// if this is a subarray, make a copy so we only
|
||||
// include the subarray region from the underlying buffer
|
||||
if (chunk.byteLength !== buf.byteLength) {
|
||||
var copy = new Uint8Array(chunk.byteLength);
|
||||
copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));
|
||||
buf = copy.buffer;
|
||||
}
|
||||
|
||||
ary[i] = buf;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function BlobBuilderConstructor(ary, options) {
|
||||
options = options || {};
|
||||
|
||||
var bb = new BlobBuilder();
|
||||
mapArrayBufferViews(ary);
|
||||
|
||||
for (var i = 0; i < ary.length; i++) {
|
||||
bb.append(ary[i]);
|
||||
}
|
||||
|
||||
return (options.type) ? bb.getBlob(options.type) : bb.getBlob();
|
||||
};
|
||||
|
||||
function BlobConstructor(ary, options) {
|
||||
mapArrayBufferViews(ary);
|
||||
return new Blob(ary, options || {});
|
||||
};
|
||||
|
||||
module.exports = (function() {
|
||||
if (blobSupported) {
|
||||
return blobSupportsArrayBufferView ? global.Blob : BlobConstructor;
|
||||
} else if (blobBuilderSupported) {
|
||||
return BlobBuilderConstructor;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
})();
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user